sdk_generate/internal/prompts/generate.go

146 lines
4.1 KiB
Go
Raw Permalink 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.

package prompts
import "github.com/sashabaranov/go-openai"
func SDKGeneratorPrompt(prompt string) openai.ChatCompletionRequest {
return openai.ChatCompletionRequest{
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleSystem,
Content: "你是一个资深的 Go 语言工程师,擅长生成高质量、可直接编译的 SDK 代码。",
},
{
Role: openai.ChatMessageRoleUser,
Content: prompt,
},
},
Temperature: 0.1, // 更低,保证确定性输出
TopP: 0.9, // 核采样,平衡多样性和质量
MaxTokens: 65536, // 加大到 64k确保足够
FrequencyPenalty: 0.0, // 代码生成不需要
PresencePenalty: 0.0, // 代码生成不需要
Stop: nil, // 不设置,让模型完整输出
}
}
const GenSDKPrompt = `你是一个资深的 Go 语言工程师,擅长生成高质量的 SDK 代码。
## 任务
根据用户提供的 API 接口文档Markdown 格式),生成一个完整的 Go SDK 代码工程。
## ⚠️ 重要:输出格式要求(必须严格遵守)
每个文件必须以以下格式输出:
// File: {{sdk_name}}/文件名.go
` + "```go" + `
package {{sdk_name}}
// ... 代码内容 ...
` + "```" + `
## ⚠️ 重要:导入路径规范(必须遵守)
生成的 SDK 代码中,**示例代码example_test.go必须使用本地导入路径**,而不是远程 GitHub 路径:
✅ 正确示例:
` + "```go" + `
package {{sdk_name}}
import (
"context"
"fmt"
"time"
"net/http"
)
` + "```" + `
❌ 错误示例(禁止使用):
` + "```go" + `
import sdk "github.com/bluebrothers/marketing-sdk-go" // 禁止!这会拉取远程包
` + "```" + `
## 文件结构
{{sdk_name}}/
├── go.mod # 模块名为 generated-sdk
├── client.go
├── types.go
├── crypto.go
├── errors.go
├── api_key.go
└── example_test.go # 使用本地导入路径
## 代码规范
1. 遵循 Effective Go 规范
2. 所有导出类型/方法必须有 godoc 注释
3. context.Context 作为方法的第一个参数
4. 错误处理统一返回 error
## 客户端设计
1. 提供 NewClient 构造函数,支持 Option 模式
2. 支持 WithBaseURL、WithTimeout、WithHTTPClient 等配置
3. 根据文档中描述的认证方式实现认证逻辑
## ⚠️ 加密/签名实现规范(必须遵守)
**核心原则:使用成熟的第三方库,不要自己实现加解密算法。**
### 推荐使用的第三方库
**AES 加密:**
` + "```go" + `
import "crypto/aes" // Go 标准库
import "crypto/cipher" // Go 标准库
// 或使用更高级的封装
import "github.com/tink-crypto/tink-go/v2/aead"
` + "```" + `
**RSA 加密/签名:**
` + "```go" + `
import "crypto/rsa" // Go 标准库
import "crypto/rand" // Go 标准库
` + "```" + `
**HMAC 签名:**
` + "```go" + `
import "crypto/hmac"
import "crypto/sha256"
` + "```" + `
**SM2/SM3/SM4国密**
` + "```go" + `
import "github.com/tjfoc/gmsm/sm2"
import "github.com/tjfoc/gmsm/sm3"
import "github.com/tjfoc/gmsm/sm4"
` + "```" + `
**JWT**
` + "```go" + `
import "github.com/golang-jwt/jwt/v5"
` + "```" + `
### 禁止的行为
❌ **不要自己实现**
- 不要自己写 AES 加密函数(除非调用标准库)
- 不要自己写 RSA 签名函数(除非调用标准库)
- 不要自己实现 PKCS7 填充(使用标准库或成熟库)
- 不要自己实现任何加解密算法
✅ **正确做法**
- 调用 Go 标准库 "crypto/*" 包
- 使用成熟的开源库(如 gmsm、jwt 等)
- 如果文档要求特殊算法,先查找是否有现成的 Go 实现
- 只在标准库和成熟库都不支持时才考虑自己实现
## ⚠️ 单元测试规范(必须严格遵守)
1. 所有单元测试必须写在 example_test.go 文件中
2. 必须使用标准库 testing 包
3. **每个 API 接口必须对应一个独立的单元测试函数,格式必须为:**
## 关键要求
1. 生成的代码必须可直接编译运行
2. go的版本为1.21
3. **go.mod 的 module 名使用 {{sdk_name}}**
4. 不要引用任何不存在的远程 GitHub 仓库
## 接口文档
%s`