152 lines
4.3 KiB
Go
152 lines
4.3 KiB
Go
// internal/prompts/validate_prompt.go
|
||
package prompts
|
||
|
||
import (
|
||
"github.com/sashabaranov/go-openai"
|
||
)
|
||
|
||
// GetValidatePrompt 步骤1:只检查,输出缺失列表
|
||
func GetValidatePrompt(refineDoc, sdkName, codeContent string) openai.ChatCompletionRequest {
|
||
return openai.ChatCompletionRequest{
|
||
Messages: []openai.ChatCompletionMessage{
|
||
{
|
||
Role: openai.ChatMessageRoleSystem,
|
||
Content: "你是代码审查专家。检查 SDK 代码是否完整实现了文档中的所有内容。只输出检查结论,不要生成代码。",
|
||
},
|
||
{
|
||
Role: openai.ChatMessageRoleUser,
|
||
Content: ValidateOnlyPrompt(refineDoc, sdkName, codeContent),
|
||
},
|
||
},
|
||
//ToolChoice: nil,
|
||
Temperature: 0.1,
|
||
TopP: 0.9,
|
||
MaxTokens: 4096, // 稍微大一点,因为缺失列表可能不止几行
|
||
FrequencyPenalty: 0.0,
|
||
PresencePenalty: 0.0,
|
||
Stop: nil,
|
||
}
|
||
}
|
||
|
||
// GetFixByIssuesPrompt 步骤2:根据缺失列表修复代码
|
||
func GetFixByIssuesPrompt(refineDoc, sdkName, codeContent, issues string) openai.ChatCompletionRequest {
|
||
return openai.ChatCompletionRequest{
|
||
Messages: []openai.ChatCompletionMessage{
|
||
{
|
||
Role: openai.ChatMessageRoleSystem,
|
||
Content: "你是代码生成专家。根据问题列表修复代码,输出全量代码。",
|
||
},
|
||
{
|
||
Role: openai.ChatMessageRoleUser,
|
||
Content: FixByIssuesPrompt(refineDoc, sdkName, codeContent, issues),
|
||
},
|
||
},
|
||
//ToolChoice: nil,
|
||
Temperature: 0.1,
|
||
TopP: 0.9,
|
||
MaxTokens: 65536,
|
||
FrequencyPenalty: 0.0,
|
||
PresencePenalty: 0.0,
|
||
Stop: nil,
|
||
}
|
||
}
|
||
|
||
// ========== 通用 Prompt ==========
|
||
|
||
func ValidateOnlyPrompt(refineDoc, sdkName, codeContent string) string {
|
||
return `你是代码审查专家。检查 SDK 代码是否完整实现了文档中的所有内容。
|
||
|
||
## 精炼文档(接口定义)
|
||
` + refineDoc + `
|
||
|
||
## 当前代码
|
||
` + codeContent + `
|
||
|
||
## 检查项(根据文档内容自动适配)
|
||
|
||
请根据文档中的接口定义,逐项检查以下内容:
|
||
|
||
1. **接口/方法完整性**
|
||
- 文档中定义的所有 API 接口/方法,代码中是否都有对应的实现?
|
||
- 方法名、参数、返回值是否与文档一致?
|
||
|
||
2. **数据结构完整性**
|
||
- 文档中定义的所有请求/响应结构体,代码中是否都已定义?
|
||
- 结构体字段名、类型、必填/可选是否与文档一致?
|
||
- 枚举值、常量是否正确定义?
|
||
|
||
3. **认证与安全**
|
||
- 文档中的认证方式(签名、加密、token等)是否已实现?
|
||
- 签名算法、加密算法是否正确?
|
||
|
||
4. **错误处理**
|
||
- 文档中的错误码是否已定义?
|
||
- 错误类型、错误信息是否完整?
|
||
|
||
5. **客户端初始化**
|
||
- 是否有 NewClient 方法?
|
||
- 是否支持配置(超时、重试等)?
|
||
|
||
6. **其他文档要求**
|
||
- 文档中提到的其他功能(日志、监控、中间件等)是否已实现?
|
||
|
||
## ⚠️ 输出规则(必须严格遵守)
|
||
|
||
**情况一:审查通过,没有任何问题**
|
||
只输出:OK
|
||
|
||
**情况二:存在问题**
|
||
输出缺失项列表,按以下格式:
|
||
|
||
### 缺失接口
|
||
- InterfaceName: 文档定义了但代码中没有实现
|
||
|
||
### 缺失字段
|
||
- StructName.FieldName: 文档定义了但结构体中缺少
|
||
|
||
### 缺失认证/加密
|
||
- 具体描述缺失的认证或加密逻辑
|
||
|
||
### 其他缺失
|
||
- 其他文档要求但代码中缺失的内容
|
||
|
||
❌ 绝对不要输出修复后的代码!
|
||
❌ 绝对不要输出完整的文件内容!
|
||
✅ 只输出 OK 或上述格式的缺失列表!
|
||
`
|
||
}
|
||
|
||
func FixByIssuesPrompt(refineDoc, sdkName, codeContent, issues string) string {
|
||
return `根据问题列表修复 SDK 代码。
|
||
|
||
## 精炼文档(供参考)
|
||
` + refineDoc + `
|
||
|
||
## 当前代码
|
||
` + codeContent + `
|
||
|
||
## 需要修复的问题
|
||
` + issues + `
|
||
|
||
## 修复要求
|
||
1. 根据问题列表,逐项修复代码
|
||
2. 补充缺失的接口、方法、结构体、字段
|
||
3. 补充缺失的认证、加密、签名逻辑
|
||
4. 补充缺失的错误码定义
|
||
5. 保持原有代码风格不变
|
||
6. 不要删除现有代码(除非是重复定义)
|
||
|
||
## 输出规则
|
||
输出修复后的**完整代码**,每个文件用以下格式:
|
||
|
||
// File: ` + sdkName + `/文件名.go
|
||
` + "```go" + `
|
||
package ` + sdkName + `
|
||
// ... 代码内容 ...
|
||
` + "```" + `
|
||
|
||
❌ 不要只输出修改的部分!
|
||
✅ 必须输出所有文件的完整代码!
|
||
`
|
||
}
|