146 lines
4.1 KiB
Go
146 lines
4.1 KiB
Go
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`
|