zhaoyingbo 92fa30ef3d
All checks were successful
CI Monitor MIflow / build-image (push) Successful in 2m42s
feat: 支持初步的CR
2024-08-12 12:24:45 +00:00

207 lines
5.7 KiB
TypeScript
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.

import { type Inputs } from "./inputs"
export class Prompts {
// 总结单文件修改内容
summarizeFileDiff = `
$system_message
## Gitlab 合并请求 标题
\`\`\`
$title
\`\`\`
## 描述
\`\`\`
$description
\`\`\`
## 差异
\`\`\`diff
$file_diff
\`\`\`
## 说明
我希望你能简洁地总结这个差异不超过100个字。
如果适用,你的总结应包括对导出函数、全局数据结构和变量签名的更改的说明,以及任何可能影响代码外部接口或行为的更改。
不要返回任何标题,直接回复差异总结。
`
// 文件是否需要Review
triageFileDiff = `在总结下方,我还希望你根据以下标准将差异分类为\`NEEDS_REVIEW\`\`APPROVED\`
- 如果差异涉及任何逻辑或功能的修改,即使它们看起来很小,也将其分类为\`NEEDS_REVIEW\`。这包括对控制结构、函数调用或变量赋值的更改,这些更改可能会影响代码的行为。
- 如果差异仅包含不影响代码逻辑的非常小的更改,例如修正拼写错误、格式或为了清晰起见重命名变量、修改引入顺序,将其分类为\`APPROVED\`
请彻底评估差异,并考虑更改行数、对整个系统的潜在影响以及引入新错误或安全漏洞的可能性。
在有疑问时,总是倾向于谨慎并将差异分类为\`NEEDS_REVIEW\`
你必须严格按照以下格式对差异进行分类:
[TRIAGE]: <NEEDS_REVIEW or APPROVED>
重要提示:
- 返回值不要包含\`\`\`
- 在你的总结中不要提到文件需要彻底审核或警告潜在问题。
- 不要提供任何将差异分类为\`NEEDS_REVIEW\`\`APPROVED\`的理由。
- 在总结中不要提到这些更改会影响代码的逻辑或功能。你只能使用上述分类格式来指示。
`
// 总结前缀
summarizePrefix = `以下是你为文件生成的更改摘要:
\`\`\`
$raw_summary
\`\`\`
`
// 总结
summarize = `你的任务是提供一个简明的合并请求的更改摘要。此摘要将在代码审查时用作提示必须非常清晰以便AI机器人理解。
说明:
- 返回值不要包含\`\`\`
- 仅关注总结合并请求中的更改,并坚持事实。
- 不要向机器人提供任何关于如何执行审查的说明。
- 不要提到文件需要彻底审核或警告潜在问题。
- 不要提到这些更改会影响代码的逻辑或功能。
- 不要提到任何单独的文件名,在代码审查中这部分会另外提供。
- 返回纯文本内容叙述整体的修改不得超过500字。
`
// 审查文件差异
reviewFileDiff = `# Gitlab 合并请求
## 标题
\`$title\`
## 描述
\`\`\`
$description
\`\`\`
## 更改摘要
\`\`\`
$short_summary
\`\`\`
## 重要说明
你是一个出类拔萃的CodeReviewer现在是时候展示你的技能了
输入带有行号的新hunks和旧hunks替换的代码。hunks代表不完整的代码片段。
附加上下文:合并请求的标题、描述、摘要和评论链。
任务使用提供的上下文审查新hunks中的实质性问题并在必要时回复评论。
输出在markdown中使用确切的行号范围进行审查评论。单行评论的起始和结束行号必须相同。必须使用以下示例响应格式
使用带有相关语言标识符的围栏代码块fenced code blocks
不要用行号注释代码片段。
正确格式化和缩进代码。
不要使用\`suggestion\`代码块。
对于问题修复:
- 使用\`diff\`代码块,用\`+\`\`-\`标记更改。带有修复片段的评论的行号范围必须与新hunk中要替换的范围完全匹配。
- 不要提供一般反馈、更改摘要、变更解释或对良好代码的赞扬。
- 更多的关注于逻辑错误、边界情况和性能问题。
- 忽略代码风格问题、引入顺序问题及输出打印等不影响代码功能的问题,除非它们导致错误。
- 仅专注于根据给定的上下文提供具体、客观的见解,避免对系统潜在影响的广泛评论或质疑更改意图。
- 如果一个区块反应了多个问题,请一起回复。
如果在行范围内没有发现问题,只在审查部分回复纯文本 \`LGTM!\`
且如果返回\`LGTM!\`的行号连续,则可以合并为一个区块。
## 示例
### 示例更改
---new_hunk---
\`\`\`
z = x / y
return z
20: def add(x, y):
21: z = x + y
22: retrn z
23:
24: def multiply(x, y):
25: return x * y
def subtract(x, y):
z = x - y
\`\`\`
---old_hunk---
\`\`\`
z = x / y
return z
def add(x, y):
return x + y
def subtract(x, y):
z = x - y
\`\`\`
---comment_chains---
\`\`\`
请审查此更改。
\`\`\`
---end_change_section---
### 示例响应
22-22:
add函数中有一个语法错误。
\`\`\`diff
- retrn z
+ return z
\`\`\`
---
24-25:
LGTM!
---
## 你要审查的\`$filename\`的更改
$patches
## 审查结果
`
constructor() {}
/**
* 文件差异摘要。
* @param {Inputs} inputs - 输入对象。
* @param {boolean} needReview - 是否需要审查。
* @returns {string} 渲染后的字符串。
*/
renderSummarizeFileDiff(inputs: Inputs, needReview: boolean): string {
let prompt = this.summarizeFileDiff
if (needReview) {
prompt += this.triageFileDiff
}
return inputs.render(prompt)
}
/**
* 摘要。
* @param {Inputs} inputs - 输入对象。
* @returns {string} 渲染后的字符串。
*/
renderSummarize(inputs: Inputs): string {
const prompt = this.summarizePrefix + this.summarize
return inputs.render(prompt)
}
/**
* 文件差异审查。
* @param {Inputs} inputs - 输入对象。
* @returns {string} 渲染后的字符串。
*/
renderReviewFileDiff(inputs: Inputs): string {
return inputs.render(this.reviewFileDiff)
}
}