From 269375fde6d8ba6871dd5ccccd2adb9d4165de2e Mon Sep 17 00:00:00 2001 From: ILoveBingLu Date: Thu, 2 Apr 2026 04:45:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E4=BB=A5=E6=94=AF=E6=8C=81=20AI=20?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=8F=91=E5=B8=83=E8=AF=B4=E6=98=8E=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 9 +++++---- README.md | 9 ++++++++- scripts/README.md | 13 ++++++++++--- scripts/generate-release-body.js | 14 ++++++++------ 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index edf0e1c..7a679c5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,8 @@ jobs: environment: 软件发布 env: GH_TOKEN: ${{ secrets.GH_TOKEN }} + AI_API_URL: ${{ vars.AI_API_URL }} + AI_MODEL: ${{ vars.AI_MODEL }} FORCE_UPDATE_MIN_VERSION: ${{ vars.FORCE_UPDATE_MIN_VERSION }} FORCE_UPDATE_BLOCKED_VERSIONS: ${{ vars.FORCE_UPDATE_BLOCKED_VERSIONS }} FORCE_UPDATE_TITLE: ${{ vars.FORCE_UPDATE_TITLE }} @@ -77,9 +79,6 @@ jobs: runs-on: windows-latest environment: 软件发布 needs: prepare-meta - outputs: - version: ${{ needs.prepare-meta.outputs.version }} - tag: ${{ needs.prepare-meta.outputs.tag }} steps: - name: Checkout uses: actions/checkout@v5 @@ -129,7 +128,9 @@ jobs: needs: prepare-meta env: GH_TOKEN: ${{ secrets.GH_TOKEN }} - GLM_KEY: ${{ secrets.GLM_KEY }} + AI_API_KEY: ${{ secrets.AI_API_KEY }} + AI_API_URL: ${{ vars.AI_API_URL }} + AI_MODEL: ${{ vars.AI_MODEL }} FORCE_UPDATE_MIN_VERSION: ${{ vars.FORCE_UPDATE_MIN_VERSION }} FORCE_UPDATE_BLOCKED_VERSIONS: ${{ vars.FORCE_UPDATE_BLOCKED_VERSIONS }} FORCE_UPDATE_TITLE: ${{ vars.FORCE_UPDATE_TITLE }} diff --git a/README.md b/README.md index 24043ec..ba24758 100644 --- a/README.md +++ b/README.md @@ -280,10 +280,17 @@ git push origin v2.2.14 AI 生成说明的密钥来源: - GitHub Environment `软件发布` -- Secret 名称:`GLM_KEY` +- Secret 名称:`AI_API_KEY` +- 可选 Variable:`AI_API_URL` +- 可选 Variable:`AI_MODEL` 若 AI 不可用,工作流会自动回退为模板化 Release body,不影响正式发布。 +默认情况下,发布说明生成会使用: + +- `AI_API_URL`: `https://api.openai.com/v1/chat/completions` +- `AI_MODEL`: `gpt-5.4` + 如配置 Telegram Bot,发布成功后还会自动发送: - AI 摘要版发布通知 diff --git a/scripts/README.md b/scripts/README.md index 02f32c5..7c51494 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -112,19 +112,26 @@ npm run build:force-update-manifest 不配置时,`force-update.json` 仍会生成,但只包含当前版本信息,不会强制用户升级。 -### AI Release Body Secret +### AI Release Body 配置 发布工作流会自动生成标准化 Release body。 需要在 GitHub Environment `软件发布` 中配置: -- `GLM_KEY` +- `AI_API_KEY` +- `AI_API_URL`(可选) +- `AI_MODEL`(可选) 用途: -- 调用智谱 `glm-4.7-flash` +- 默认会调用当前配置的 AI 模型生成中文 Release 说明 - 自动生成中文 Release 说明 - 若 AI 不可用,会自动降级为模板正文,不影响发版 +默认值: + +- `AI_API_URL`: `https://api.openai.com/v1/chat/completions` +- `AI_MODEL`: `gpt-5.4` + ### Telegram 通知配置 如果需要自动发 Telegram 通知,请在 GitHub Environment `软件发布` 中配置: diff --git a/scripts/generate-release-body.js b/scripts/generate-release-body.js index cf821a1..2f8f91f 100644 --- a/scripts/generate-release-body.js +++ b/scripts/generate-release-body.js @@ -5,7 +5,9 @@ const rootDir = path.resolve(__dirname, '..') const releaseDir = path.join(rootDir, 'release') const contextPath = path.join(releaseDir, 'release-context.json') const outputPath = path.join(releaseDir, 'release-body.md') -const glmKey = process.env.GLM_KEY || '' +const aiApiKey = process.env.AI_API_KEY || '' +const aiApiUrl = process.env.AI_API_URL || 'https://api.openai.com/v1/chat/completions' +const aiModel = process.env.AI_MODEL || 'gpt-5.4' const PRIMARY_AUTHOR_LOGINS = new Set(['ILoveBingLu']) const PRIMARY_AUTHOR_NAMES = new Set(['ILoveBingLu', 'BingLu', 'ILoveBinglu']) @@ -108,8 +110,8 @@ function isValidAiBody(body) { } async function generateAiBody(context) { - if (!glmKey) { - throw new Error('GLM_KEY 未配置') + if (!aiApiKey) { + throw new Error('AI_API_KEY 未配置') } const systemPrompt = [ @@ -132,14 +134,14 @@ async function generateAiBody(context) { const userPrompt = `请根据以下发布上下文为 ${context.tag} 生成标准化发布说明:\n\n${JSON.stringify(context, null, 2)}` - const response = await fetch('https://open.bigmodel.cn/api/paas/v4/chat/completions', { + const response = await fetch(aiApiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', - Authorization: `Bearer ${glmKey}` + Authorization: `Bearer ${aiApiKey}` }, body: JSON.stringify({ - model: 'glm-4.7-flash', + model: aiModel, temperature: 0.2, messages: [ { role: 'system', content: systemPrompt },