Skip to content

自定义 Prompt

gcop-rs 允许你自定义发送给 AI 的 prompt,包括提交信息生成和代码审查。

为什么要自定义 Prompt?

  • 语言: 生成中文或其他语言的提交信息
  • 风格: 匹配团队的提交信息格式
  • 侧重点: 强调特定的审查标准(安全性、性能等)
  • 上下文: 添加项目特定的指导方针

自动补全

gcop-rs 会自动补全自定义 prompt 中缺失的必要部分,你只需要专注于编写指令,无需担心占位符。

Commit Prompt

如果你的自定义 prompt 不包含 {diff},gcop-rs 会自动追加:

  • 包含 {diff} 占位符的 Git diff 部分
  • 包含 {files_changed}{insertions}{deletions} 的上下文部分

示例 - 简化的自定义 prompt:

toml
[commit]
custom_prompt = "用中文生成 commit message,要求简洁"

会被自动扩展为:

用中文生成 commit message,要求简洁

## Git Diff:

<实际的 diff 内容>


## Context:
- Files: src/main.rs, src/lib.rs
- Changes: +45 -12

Review Prompt

对于 review prompt,gcop-rs 会:

  1. 如果缺少 {diff},追加 diff 部分
  2. 始终追加 JSON 输出格式说明

示例 - 简化的自定义 prompt:

toml
[review]
custom_prompt = "审查这段代码的安全漏洞,重点关注 SQL 注入和 XSS"

会被自动扩展,包含 diff 和 JSON 格式说明。

模板变量

Commit Message Prompts

可用占位符:

  • {diff} - 完整的 git diff 内容
  • {files_changed} - 逗号分隔的修改文件列表
  • {insertions} - 新增行数
  • {deletions} - 删除行数
  • {branch_name} - 当前分支名(如果有)
  • {branch_info} - 格式化的分支信息("- Branch: xxx" 或空字符串)

Code Review Prompts

可用占位符:

  • {diff} - 代码 diff 内容

示例

中文提交信息

toml
[commit]
custom_prompt = """
你是一个专业的软件工程师,正在审查 git diff 以生成简洁的中文提交信息。

## Git Diff:
{diff}

## 上下文:
- 修改的文件: {files_changed}
- 新增行数: {insertions}
- 删除行数: {deletions}
- 分支名称: {branch_name}

## 要求:
1. 使用中文生成提交信息
2. 第一行:类型(范围): 简要描述(不超过50字)
3. 空一行
4. 正文:说明改动的原因和影响

常见类型:feat(新功能)、fix(修复)、docs(文档)、refactor(重构)

只输出提交信息,不要解释。
"""

简洁提交信息

toml
[commit]
custom_prompt = """
为以下变更生成一行提交信息:

{diff}

文件: {files_changed} (+{insertions} -{deletions})

格式: <类型>: <描述>
不超过 72 字符。
"""

安全性重点审查

toml
[review]
custom_prompt = """
你是安全专家。审查以下代码的安全漏洞:

{diff}

重点关注:
1. SQL 注入
2. XSS(跨站脚本)
3. CSRF
4. 认证/授权缺陷
5. 不安全的数据处理

以 JSON 格式输出:
{{
  "summary": "安全评估",
  "issues": [
    {{
      "severity": "critical" | "warning" | "info",
      "description": "问题描述",
      "file": "文件名",
      "line": 行号
    }}
  ],
  "suggestions": ["安全建议"]
}}
"""

性能重点审查

toml
[review]
custom_prompt = """
审查以下代码的性能问题:

{diff}

检查:
- 低效算法
- 内存泄漏
- 不必要的内存分配
- N+1 查询
- 阻塞操作

返回 JSON 格式的发现。
"""

最佳实践

1. 保持 Prompt 专注

简短、专注的 prompt 通常比很长的 prompt 效果更好。

2. 指定输出格式

对于代码审查,始终要求 JSON 格式以确保正确解析。

3. 使用详细模式测试

使用 gcop-rs -v commit 查看实际发送给 AI 的 prompt。

4. 迭代优化

尝试不同的 prompt 并比较结果,找到最适合的。

默认 Prompt

如果不指定 custom_prompt,gcop-rs 使用内置的默认模板:

  • Commit: 生成英文的 conventional commit messages
  • Review: 英文的全面代码审查,JSON 输出

详见源代码中的 src/llm/prompt.rs

故障排除

问题: LLM 返回错误格式

如果 AI 不遵循你的 prompt 格式:

  1. 更明确地说明所需格式
  2. 在 prompt 中添加示例
  3. 使用 --verbose 调试
  4. 尝试不同的模型或调整 temperature

问题: 非中文输出

某些模型可能忽略语言指令。尝试:

  • 更明确:「你必须使用中文回复」
  • 添加示例
  • 使用不同的模型

参考