All checks were successful
CI Monitor MIflow / build-image (push) Successful in 2m42s
207 lines
5.7 KiB
TypeScript
207 lines
5.7 KiB
TypeScript
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)
|
||
}
|
||
}
|