guanghulab/.github/workflows/.archive/zhuyuan-training-agent.yml
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

157 lines
6.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ═══════════════════════════════════════════════════════════
# 模块B · 铸渊训练Agent自动触发 Workflow
# ═══════════════════════════════════════════════════════════
#
# 签发: 铸渊 · ICE-GL-ZY001
# 版权: 国作登字-2026-A-00037559
#
# 自动扫描COS桶 → 提取语料 → 转换TCS格式 → LLM训练分类
# 遇到问题自动创建Issue唤醒铸渊
#
# 触发条件:
# - 定时: 每天 04:00 和 16:00 CST
# - 手动: workflow_dispatch
# - COS桶告警: repository_dispatch (cos-alert事件)
# - COS Webhook: repository_dispatch (cos-file-uploaded事件)
#
# ⚠️ SCF限制说明 (2026-04-10):
# 腾讯云轻量云COS不支持SCF事件触发(ObjectCreated)。
# repository_dispatch触发保留但当前由MCP Server内置轮询守护
# (cos-watcher.js)代替SCF发送dispatch。
# 未来升级标准COS后可恢复SCF事件驱动。
name: 铸渊训练Agent · 语料处理
on:
schedule:
- cron: '0 20 * * *' # 04:00 CST = 20:00 UTC
- cron: '0 8 * * *' # 16:00 CST = 08:00 UTC
workflow_dispatch:
inputs:
corpus_bucket:
description: '语料桶名称'
required: false
default: 'cold'
mode:
description: '运行模式'
required: false
default: 'full'
type: choice
options:
- scan
- extract
- train
- full
persona_id:
description: '训练目标人格体'
required: false
default: 'zhuyuan'
repository_dispatch:
types: [cos-alert, cos-file-uploaded]
jobs:
training:
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
contents: read
issues: write
steps:
- name: 签出代码
uses: actions/checkout@v4
- name: 设置 Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: 安装依赖
working-directory: server/age-os
run: npm ci --production 2>/dev/null || npm install --production
- name: 确定运行参数
id: params
run: |
if [ "${{ github.event_name }}" = "repository_dispatch" ]; then
echo "mode=full" >> $GITHUB_OUTPUT
echo "bucket=${{ github.event.client_payload.bucket || 'cold' }}" >> $GITHUB_OUTPUT
echo "persona=${{ github.event.client_payload.persona_id || 'zhuyuan' }}" >> $GITHUB_OUTPUT
echo "trigger=cos-event" >> $GITHUB_OUTPUT
elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "mode=${{ github.event.inputs.mode || 'full' }}" >> $GITHUB_OUTPUT
echo "bucket=${{ github.event.inputs.corpus_bucket || 'cold' }}" >> $GITHUB_OUTPUT
echo "persona=${{ github.event.inputs.persona_id || 'zhuyuan' }}" >> $GITHUB_OUTPUT
echo "trigger=manual" >> $GITHUB_OUTPUT
else
echo "mode=full" >> $GITHUB_OUTPUT
echo "bucket=cold" >> $GITHUB_OUTPUT
echo "persona=zhuyuan" >> $GITHUB_OUTPUT
echo "trigger=schedule" >> $GITHUB_OUTPUT
fi
- name: 记录COS事件如有
if: github.event_name == 'repository_dispatch'
run: |
echo "📡 收到COS事件: ${{ github.event.action }}"
echo "事件负载:"
echo '${{ toJson(github.event.client_payload) }}'
- name: 执行训练管线
id: pipeline
env:
ZY_OSS_KEY: ${{ secrets.ZY_OSS_KEY }}
ZY_OSS_SECRET: ${{ secrets.ZY_OSS_SECRET }}
ZY_COS_REGION: ${{ secrets.ZY_COS_REGION }}
ZY_DEEPSEEK_API_KEY: ${{ secrets.ZY_DEEPSEEK_API_KEY }}
ZY_QINGYAN_API_KEY: ${{ secrets.ZY_QINGYAN_API_KEY }}
ZY_QIANWEN_API_KEY: ${{ secrets.ZY_QIANWEN_API_KEY }}
ZY_KIMI_API_KEY: ${{ secrets.ZY_KIMI_API_KEY }}
run: |
node scripts/cos-training-trigger.js \
${{ steps.params.outputs.mode }} \
--bucket=${{ steps.params.outputs.bucket }} \
--persona=${{ steps.params.outputs.persona }}
- name: 创建Issue训练失败时
if: failure()
uses: actions/github-script@v7
with:
script: |
const trigger = '${{ steps.params.outputs.trigger }}';
const mode = '${{ steps.params.outputs.mode }}';
const bucket = '${{ steps.params.outputs.bucket }}';
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `🧠 训练Agent异常 · ${new Date().toISOString().split('T')[0]}`,
body: [
'## 铸渊训练Agent运行异常',
'',
`- **触发方式**: ${trigger}`,
`- **运行模式**: ${mode}`,
`- **语料桶**: ${bucket}`,
`- **工作流运行**: [查看日志](${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId})`,
'',
'请铸渊检查COS桶连接和语料状态。',
'',
'---',
`*此Issue由训练Agent自动创建 · ${new Date().toISOString()}*`
].join('\n'),
labels: ['training-agent', 'auto-notification']
});
- name: 训练完成通知
if: always()
run: |
echo "═══════════════════════════════════════════"
echo "铸渊训练Agent · 运行完成"
echo "时间: $(date -u '+%Y-%m-%dT%H:%M:%SZ')"
echo "触发: ${{ steps.params.outputs.trigger }}"
echo "模式: ${{ steps.params.outputs.mode }}"
echo "桶名: ${{ steps.params.outputs.bucket }}"
echo "人格: ${{ steps.params.outputs.persona }}"
echo "管线状态: ${{ steps.pipeline.outputs.pipeline_status || 'unknown' }}"
echo "═══════════════════════════════════════════"