This commit is contained in:
parent
ac78e24c83
commit
0164e63c6c
286
Dockerfile
286
Dockerfile
|
|
@ -1,58 +1,266 @@
|
||||||
# ============================================================
|
好的,根据你现在的项目,我来写一个完整的 README:
|
||||||
# 阶段1: 构建
|
|
||||||
# ============================================================
|
|
||||||
FROM golang:1.26-alpine AS builder
|
|
||||||
|
|
||||||
WORKDIR /app
|
---
|
||||||
|
|
||||||
# ✅ 设置 Go 代理(解决网络问题)
|
## README.md
|
||||||
ENV GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct
|
|
||||||
ENV GOSUMDB=off
|
|
||||||
ENV GO111MODULE=on
|
|
||||||
|
|
||||||
RUN apk add --no-cache git make
|
```markdown
|
||||||
|
# SDK Generator - AI 驱动的 SDK 代码生成器
|
||||||
|
|
||||||
COPY go.mod go.sum ./
|
一款基于 AI 大模型的 SDK 代码生成工具,通过上传 API 文档自动生成 Go 语言的 SDK 客户端或服务端骨架代码。
|
||||||
|
|
||||||
# ✅ 先尝试下载依赖,如果失败则重试
|
## ✨ 核心功能
|
||||||
RUN go mod download || go mod download
|
|
||||||
|
|
||||||
COPY . .
|
- 📄 **文档精炼**:上传 API 文档(支持 .md / .txt / .doc / .docx / .pdf),自动提取接口信息
|
||||||
|
- 🚀 **代码生成**:支持两种生成模式
|
||||||
|
- **客户端 SDK**:根据接口文档生成 Go SDK 客户端代码
|
||||||
|
- **服务端骨架**:根据对接文档生成 Go HTTP 服务端骨架(Fiber 框架)
|
||||||
|
- 🔐 **加密算法**:集成常用加密算法(SM2/SM3/SM4、RSA、AES 等)
|
||||||
|
- 📋 **任务管理**:异步任务队列,实时查看生成进度和状态
|
||||||
|
- 📊 **用量统计**:记录每次生成的 Token 用量,支持按步骤查看详情
|
||||||
|
- 🔗 **代码仓库**:生成完成后自动推送到 Git 仓库(Gitea 等)
|
||||||
|
|
||||||
# 🔧 修改这里:指向 cmd/server 目录
|
## 🏗️ 技术架构
|
||||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
|
|
||||||
-ldflags="-s -w" \
|
|
||||||
-o /app/sdk-generator \
|
|
||||||
./cmd/server
|
|
||||||
|
|
||||||
# ============================================================
|
### 后端
|
||||||
# 阶段2: 运行
|
- **语言**:Go 1.26
|
||||||
# ============================================================
|
- **Web 框架**:Fiber v2
|
||||||
FROM alpine:latest
|
- **AI 集成**:OpenAI 兼容 API(支持豆包、DeepSeek 等)
|
||||||
|
- **数据库**:SQLite(可扩展)
|
||||||
|
- **文件存储**:本地文件系统
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates tzdata git go
|
### 前端
|
||||||
|
- **技术栈**:原生 HTML + CSS + JavaScript
|
||||||
|
- **交互**:Modal 弹窗、实时进度轮询、Markdown 渲染
|
||||||
|
|
||||||
ENV TZ=Asia/Shanghai
|
## 📁 项目结构
|
||||||
ENV GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct
|
|
||||||
ENV GOSUMDB=off
|
|
||||||
|
|
||||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
```
|
||||||
|
sdk-generator/
|
||||||
|
├── cmd/
|
||||||
|
│ └── server/
|
||||||
|
│ └── main.go # 服务启动入口
|
||||||
|
├── internal/
|
||||||
|
│ ├── call/
|
||||||
|
│ │ └── call.go # LLM 调用封装
|
||||||
|
│ ├── config/
|
||||||
|
│ │ └── config.go # 配置管理
|
||||||
|
│ ├── extractor/
|
||||||
|
│ │ └── extractor.go # 代码块提取
|
||||||
|
│ ├── handler/
|
||||||
|
│ │ ├── api_handler.go # API 路由处理
|
||||||
|
│ │ └── page_handler.go # 页面渲染
|
||||||
|
│ ├── models/
|
||||||
|
│ │ └── task.go # 数据模型
|
||||||
|
│ ├── postprocess/
|
||||||
|
│ │ └── postprocess.go # 代码后处理(格式化、编译检查)
|
||||||
|
│ ├── prompts/
|
||||||
|
│ │ ├── generate.go # 生成 Prompt 模板
|
||||||
|
│ │ └── validate.go # 验证 Prompt 模板
|
||||||
|
│ ├── refiner/
|
||||||
|
│ │ └── refiner.go # 文档精炼
|
||||||
|
│ ├── service/
|
||||||
|
│ │ └── generator.go # 核心业务逻辑
|
||||||
|
│ └── validator/
|
||||||
|
│ └── validator.go # 代码验证
|
||||||
|
├── web/
|
||||||
|
│ ├── static/
|
||||||
|
│ │ ├── css/
|
||||||
|
│ │ │ └── style.css # 样式文件
|
||||||
|
│ │ └── js/
|
||||||
|
│ │ └── app.js # 前端逻辑
|
||||||
|
│ └── templates/
|
||||||
|
│ └── index.html # 主页面
|
||||||
|
├── outputs/ # 生成的 SDK 输出目录
|
||||||
|
├── uploads/ # 临时上传目录
|
||||||
|
├── Dockerfile
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── go.mod
|
||||||
|
├── go.sum
|
||||||
|
└── README.md
|
||||||
|
```
|
||||||
|
|
||||||
RUN adduser -D -g '' appuser
|
## 🚀 快速开始
|
||||||
|
|
||||||
WORKDIR /app
|
### 前置依赖
|
||||||
|
|
||||||
COPY --from=builder /app/sdk-generator /app/sdk-generator
|
- Go 1.26+
|
||||||
COPY --chown=appuser:appuser ./web /app/web
|
- Docker(可选)
|
||||||
|
- 大模型 API Key(豆包/DeepSeek/OpenAI 等)
|
||||||
|
|
||||||
RUN mkdir -p /app/outputs /app/uploads && \
|
### 本地运行
|
||||||
chown -R appuser:appuser /app
|
|
||||||
|
|
||||||
USER appuser
|
```bash
|
||||||
|
# 1. 克隆项目
|
||||||
|
git clone <your-repo-url>
|
||||||
|
cd sdk-generator
|
||||||
|
|
||||||
EXPOSE 8080
|
# 2. 下载依赖
|
||||||
|
go mod download
|
||||||
|
|
||||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
# 3. 配置环境变量
|
||||||
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1
|
export DOUBAO_API_KEY=your_api_key
|
||||||
|
export DOUBAO_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
|
||||||
|
export DOUBAO_MODEL=doubao-seed-evolving
|
||||||
|
|
||||||
ENTRYPOINT ["/app/sdk-generator"]
|
# 4. 启动服务
|
||||||
|
go run cmd/server/main.go
|
||||||
|
|
||||||
|
# 5. 访问
|
||||||
|
# 浏览器打开 http://localhost:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker 运行
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 构建镜像
|
||||||
|
docker build -t sdk-generator .
|
||||||
|
|
||||||
|
# 2. 运行容器
|
||||||
|
docker run -d \
|
||||||
|
-p 8080:8080 \
|
||||||
|
-e DOUBAO_API_KEY=your_api_key \
|
||||||
|
-e DOUBAO_BASE_URL=https://ark.cn-beijing.volces.com/api/v3 \
|
||||||
|
-e DOUBAO_MODEL=doubao-seed-evolving \
|
||||||
|
-v $(pwd)/outputs:/app/outputs \
|
||||||
|
--name sdk-generator \
|
||||||
|
sdk-generator
|
||||||
|
|
||||||
|
# 或使用 docker-compose
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📖 使用指南
|
||||||
|
|
||||||
|
### 1. 添加文档实例
|
||||||
|
|
||||||
|
1. 点击「添加文档实例」
|
||||||
|
2. 上传 API 文档(支持 .md / .txt / .doc / .docx / .pdf)
|
||||||
|
3. 填写 API Key、Base URL、大模型名称
|
||||||
|
4. 点击「精炼并保存」,系统会自动提取接口信息
|
||||||
|
|
||||||
|
### 2. 生成代码
|
||||||
|
|
||||||
|
1. 在文档列表中找到目标文档
|
||||||
|
2. 点击「生成」按钮
|
||||||
|
3. 选择需要实现的接口(可多选)
|
||||||
|
4. 填写:
|
||||||
|
- 仓库名称(如 `marketing-sdk`)
|
||||||
|
- 生成类型(客户端 SDK / 服务端骨架)
|
||||||
|
- API Key、Base URL、大模型名称
|
||||||
|
5. 点击「生成代码」提交任务
|
||||||
|
|
||||||
|
### 3. 查看进度
|
||||||
|
|
||||||
|
- 页面会实时显示生成进度(百分比 + 状态文字)
|
||||||
|
- 日志区域显示详细的执行步骤
|
||||||
|
- 生成完成后可通过「下载 SDK」或「查看代码仓库」获取结果
|
||||||
|
|
||||||
|
### 4. 历史任务
|
||||||
|
|
||||||
|
- 点击文档的「历史」按钮查看所有生成任务
|
||||||
|
- 点击任务可查看详情(接口列表、Token 用量等)
|
||||||
|
|
||||||
|
## 🔌 API 接口
|
||||||
|
|
||||||
|
| 接口 | 方法 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| `/api/v1/refine` | POST | 精炼文档(上传 + AI 提取) |
|
||||||
|
| `/api/v1/refine/list` | POST | 获取文档实例列表 |
|
||||||
|
| `/api/v1/refine/update` | POST | 更新文档内容 |
|
||||||
|
| `/api/v1/generate` | POST | 提交代码生成任务 |
|
||||||
|
| `/api/v1/tasks/{task_id}` | GET | 查询任务状态和进度 |
|
||||||
|
| `/api/v1/tasks/{task_id}/download` | GET | 下载生成的代码包 |
|
||||||
|
| `/api/v1/tasks/list` | POST | 获取历史任务列表 |
|
||||||
|
| `/api/v1/tasks/{task_id}/detail` | GET | 获取任务详情 |
|
||||||
|
|
||||||
|
### 生成任务请求示例
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST /api/v1/generate \
|
||||||
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
||||||
|
-d "instance_id=xxx" \
|
||||||
|
-d "llm_api_key=xxx" \
|
||||||
|
-d "llm_base_url=https://ark.cn-beijing.volces.com/api/v3" \
|
||||||
|
-d "llm_model=doubao-seed-evolving" \
|
||||||
|
-d "desc=my-sdk" \
|
||||||
|
-d "code_type=go" \
|
||||||
|
-d "generate_type=1" \
|
||||||
|
-d "interfaces=[{\"method\":\"POST\",\"summary\":\"创建订单\"}]"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 查询任务状态响应示例
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"Task": {
|
||||||
|
"task_id": "xxx",
|
||||||
|
"task_status": "generateCode",
|
||||||
|
"desc": "my-sdk",
|
||||||
|
"repo_url": "https://gitea.example.com/ai_sdk/my-sdk"
|
||||||
|
},
|
||||||
|
"percent": 60,
|
||||||
|
"status_desc": "生成代码中..."
|
||||||
|
},
|
||||||
|
"message": "成功"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔐 支持的加密算法
|
||||||
|
|
||||||
|
| 算法 | 类型 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| **SM2** | 非对称加密 | 国密签名/加密 |
|
||||||
|
| **SM3** | 哈希算法 | 国密摘要计算 |
|
||||||
|
| **SM4** | 对称加密 | 国密 CBC/ECB 模式 |
|
||||||
|
| **RSA** | 非对称加密 | 签名/PKCS1/PKCS8 |
|
||||||
|
| **AES** | 对称加密 | CBC/ECB 模式 |
|
||||||
|
| **HMAC-SHA256** | 哈希算法 | 签名验证 |
|
||||||
|
|
||||||
|
## 🛠️ 配置说明
|
||||||
|
|
||||||
|
### 环境变量
|
||||||
|
|
||||||
|
| 变量 | 说明 | 默认值 |
|
||||||
|
|------|------|--------|
|
||||||
|
| `PORT` | 服务端口 | `8080` |
|
||||||
|
| `DOUBAO_API_KEY` | 大模型 API Key | - |
|
||||||
|
| `DOUBAO_BASE_URL` | API 地址 | `https://ark.cn-beijing.volces.com/api/v3` |
|
||||||
|
| `DOUBAO_MODEL` | 模型名称 | `doubao-seed-evolving` |
|
||||||
|
| `OUTPUT_DIR` | 输出目录 | `./outputs` |
|
||||||
|
| `UPLOAD_DIR` | 上传目录 | `./uploads` |
|
||||||
|
| `MAX_TOKENS` | 最大输出 Token | `65536` |
|
||||||
|
|
||||||
|
## 📦 依赖库
|
||||||
|
|
||||||
|
| 库 | 用途 |
|
||||||
|
|----|------|
|
||||||
|
| `github.com/gofiber/fiber/v2` | Web 框架 |
|
||||||
|
| `github.com/sashabaranov/go-openai` | OpenAI API 客户端 |
|
||||||
|
| `github.com/gofiber/template/html/v2` | HTML 模板引擎 |
|
||||||
|
| `github.com/google/uuid` | UUID 生成 |
|
||||||
|
| `github.com/yuin/goldmark` | Markdown 解析 |
|
||||||
|
| `github.com/tjfoc/gmsm` | 国密算法(SM2/SM3/SM4) |
|
||||||
|
|
||||||
|
## 🤝 贡献指南
|
||||||
|
|
||||||
|
1. Fork 本仓库
|
||||||
|
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
|
||||||
|
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
|
||||||
|
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
||||||
|
5. 创建 Pull Request
|
||||||
|
|
||||||
|
## 📝 License
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
## 📧 联系方式
|
||||||
|
|
||||||
|
如有问题,请提交 Issue 或联系项目维护者。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Made with ❤️ by AI SDK Generator Team**
|
||||||
|
```
|
||||||
Loading…
Reference in New Issue