✏️ fix(vscode): 改动说明 prompt 改问「为什么改+不改的后果」并垫入 PR 描述

This commit is contained in:
2026-06-29 15:37:51 +08:00
parent 8c5cc90eda
commit bd8ba714b3
+15 -7
View File
@@ -231,16 +231,24 @@ export async function handleSetPrReviewConfirmed(
}
}
/** 生成说明的 prompt:首次带审查上下文设定,续会话只发新文件,让 deepseek 复用已有 PR 理解、省 token。 */
function buildSummaryPrompt(prNumber: number, filePath: string, patch: string, isFirst: boolean): string {
/**
* 生成说明的 prompt:只问「为什么改 + 不改的后果」,明令禁止复述代码做了什么——
* 文件干了什么用户看代码即知,价值在意图与代价。首条垫入 PR 描述当背景并立下问法,
* 续会话只发新文件,复用已有 PR 理解、省 token。
*/
function buildSummaryPrompt(prNumber: number, prBody: string, filePath: string, patch: string, isFirst: boolean): string {
if (isFirst) {
return `我在逐个审查 PR #${prNumber} 的改动。请用一句简短中文说明下面这个文件本次改动的目的,只输出这一句,不要解释、不要代码块。\n\n文件: ${filePath}\n\n\`\`\`diff\n${patch}\n\`\`\``
const body = prBody.trim()
const prContext = body
? `我在逐个审查 PR #${prNumber} 的改动,本 PR 的说明如下:\n${body}\n\n`
: `我在逐个审查 PR #${prNumber} 的改动。`
return `${prContext}针对下面这个文件的改动,用一两句简短中文回答两点:① 为什么要做这个改动——它要解决什么问题、达成什么目的;② 不做这个改动会缺什么、有什么后果。不要复述代码做了什么、不要罗列函数或结构(这些我看代码就知道)。只输出这一两句结论。\n\n文件: ${filePath}\n\n\`\`\`diff\n${patch}\n\`\`\``
}
return `下一个文件,同样用一句简短中文说明其改动目的,只输出这一句:\n文件: ${filePath}\n\`\`\`diff\n${patch}\n\`\`\``
return `下一个文件,同样只回答两点:① 为什么改、要解决什么问题或达成什么目的;② 不做的后果。不要复述代码做了什么。\n文件: ${filePath}\n\`\`\`diff\n${patch}\n\`\`\``
}
/**
* 用 deepseek 给单个文件生成「一句话改动目的」。增量复用同一会话:首个文件开新会话并把
* 用 deepseek 给单个文件生成「为什么改 + 不改的后果」的改动说明。增量复用同一会话:首个文件开新会话并把
* sessionId 记到 `.spx/pr-file-summaries.json`,后续文件 `--resume` 接上去,省去每次重新理解
* PR 的开销。说明也落盘,重载后仍显示。
*
@@ -294,7 +302,7 @@ export async function handleGeneratePrFileSummary(
let result
try {
result = await spawnClaude({
prompt: buildSummaryPrompt(index, filePath, patch, !prevSession),
prompt: buildSummaryPrompt(index, pr.body, filePath, patch, !prevSession),
cwd: workspaceRoot,
profilePath: deepseek.path,
resumeSessionId: prevSession,
@@ -307,7 +315,7 @@ export async function handleGeneratePrFileSummary(
throw err
await writeSummarySession(workspaceRoot, issueNumber, undefined)
result = await spawnClaude({
prompt: buildSummaryPrompt(index, filePath, patch, true),
prompt: buildSummaryPrompt(index, pr.body, filePath, patch, true),
cwd: workspaceRoot,
profilePath: deepseek.path,
timeoutMs: 120_000,