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\`或\`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) } }