86 lines
2.6 KiB
YAML
86 lines
2.6 KiB
YAML
name: AI Issue Helper
|
|
|
|
on:
|
|
issue_comment:
|
|
types: [created]
|
|
|
|
permissions:
|
|
issues: write
|
|
contents: read
|
|
models: read
|
|
|
|
jobs:
|
|
ai-helper:
|
|
runs-on: ubuntu-latest
|
|
# 只在真实用户提到 @ai-helper 时触发,忽略机器人评论
|
|
if: |
|
|
contains(github.event.comment.body, '@ai-helper') &&
|
|
github.event.comment.user.type != 'Bot'
|
|
steps:
|
|
- name: Checkout Repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Get Issue Details
|
|
id: issue
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const issue = await github.rest.issues.get({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: context.issue.number
|
|
});
|
|
|
|
// 限制长度,避免超过 token 限制
|
|
const maxLength = 1000;
|
|
const truncate = (str, max) => {
|
|
if (!str) return '';
|
|
return str.length > max ? str.substring(0, max) + '...[内容过长已截断]' : str;
|
|
};
|
|
|
|
core.exportVariable('ISSUE_TITLE', truncate(issue.data.title || '', 200));
|
|
core.exportVariable('ISSUE_BODY', truncate(issue.data.body || '', maxLength));
|
|
core.exportVariable('COMMENT_BODY', truncate(context.payload.comment.body || '', 500));
|
|
core.exportVariable('ISSUE_NUMBER', context.issue.number);
|
|
|
|
- name: Create Prompt
|
|
id: prompt
|
|
run: |
|
|
cat > prompt.txt << 'PROMPT_EOF'
|
|
Issue #${{ env.ISSUE_NUMBER }}
|
|
|
|
标题: ${{ env.ISSUE_TITLE }}
|
|
|
|
内容: ${{ env.ISSUE_BODY }}
|
|
|
|
评论: ${{ env.COMMENT_BODY }}
|
|
|
|
请搜索项目代码并提供解决方案。
|
|
PROMPT_EOF
|
|
|
|
- name: AI Analysis
|
|
uses: actions/ai-inference@v1
|
|
id: ai
|
|
with:
|
|
model: 'gpt-4o-mini'
|
|
enable-github-mcp: true
|
|
max-tokens: 1000
|
|
system-prompt: |
|
|
你是 ECS Framework (TypeScript ECS 框架) 的 AI 助手。
|
|
主要代码在 packages/core/src。
|
|
搜索相关代码后,用中文简洁回答问题,包含问题分析、解决方案和代码引用。
|
|
prompt-file: prompt.txt
|
|
|
|
- name: Post AI Response
|
|
env:
|
|
AI_RESPONSE: ${{ steps.ai.outputs.response }}
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
await github.rest.issues.createComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: context.issue.number,
|
|
body: process.env.AI_RESPONSE
|
|
});
|