sdk_generate/internal/prompts/valid.go

152 lines
4.3 KiB
Go
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.

// 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 + `
// ... 代码内容 ...
` + "```" + `
❌ 不要只输出修改的部分!
✅ 必须输出所有文件的完整代码!
`
}