Files
1818web-hoduan/AI_API_KEY_INTEGRATION_GUIDE.md
2025-11-14 17:41:15 +08:00

354 lines
8.0 KiB
Markdown
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.

# AI任务API集成指南
## 📋 概述
本系统现已支持通过**API Key**调用AI生成服务无需JWT Token认证。所有用户会员和非会员都可以
1. ✅ 生成个人专属的API Key
2. ✅ 使用API Key + 积分调用AI服务
3. ✅ 支持文生图、文生视频、图生视频三种模式
---
## 🔑 获取API Key
### 方式一通过Web界面生成需要登录
```http
POST /user/v1/api-key/generate
Authorization: Bearer {JWT_TOKEN}
```
**响应示例:**
```json
{
"code": 200,
"message": "success",
"data": {
"keyValue": "ak_1234567890abcdef1234567890abcdef",
"isActive": true,
"createTime": "2025-10-20T10:00:00",
"userRole": 0
}
}
```
### 方式二查看现有API Key
```http
GET /user/v1/api-key/info
Authorization: Bearer {JWT_TOKEN}
```
---
## 🚀 使用API Key调用AI服务
### 认证方式
所有AI任务接口都支持以下两种认证方式
| 方式 | 适用场景 | Header格式 |
|------|----------|-----------|
| **JWT Token** | Web端用户 | `Authorization: Bearer {jwt_token}` |
| **API Key** | 开发者/第三方集成 | `Authorization: Bearer {api_key}` |
> 💡 **提示**系统会自动识别Token类型JWT或API Key无需额外配置。
---
## 📝 API接口说明
### 1. 提交AI任务
#### 文生图Text to Image
```http
POST /user/ai/tasks/submit
Authorization: Bearer ak_your_api_key_here
Content-Type: application/json
{
"modelName": "sora_image",
"prompt": "一只可爱的猫咪在花园里玩耍"
}
```
#### 文生视频Text to Video
```http
POST /user/ai/tasks/submit
Authorization: Bearer ak_your_api_key_here
Content-Type: application/json
{
"modelName": "sora_video2",
"prompt": "一只猫咪在夕阳下奔跑,镜头缓缓推进"
}
```
#### 图生视频Image to Video
**方式1使用图片URL**
```http
POST /user/ai/tasks/submit
Authorization: Bearer ak_your_api_key_here
Content-Type: application/json
{
"modelName": "sora_video2",
"prompt": "让这个场景动起来,添加生动的细节",
"imageUrl": "https://example.com/image.jpg"
}
```
**方式2使用Base64编码**
```http
POST /user/ai/tasks/submit
Authorization: Bearer ak_your_api_key_here
Content-Type: application/json
{
"modelName": "sora_video2",
"prompt": "让这个场景动起来,添加生动的细节",
"imageBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
}
```
**响应示例:**
```json
{
"code": 200,
"message": "任务提交成功",
"data": {
"taskNo": "TASK20251020143022ABC123",
"status": "queued",
"queuePosition": 3,
"estimatedWaitTime": 90,
"message": "任务创建成功,请通过任务编号查询进度"
}
}
```
### 2. 查询任务详情
```http
GET /user/ai/tasks/{taskNo}
Authorization: Bearer ak_your_api_key_here
```
**响应示例:**
```json
{
"code": 200,
"message": "success",
"data": {
"taskNo": "TASK20251020143022ABC123",
"modelName": "sora_image",
"status": "completed",
"progress": 100,
"promptSnippet": "一只可爱的猫咪在花园里玩耍",
"resultUrl": "https://example.com/result.jpg",
"createTime": "2025-10-20T14:30:22",
"completeTime": "2025-10-20T14:31:00"
}
}
```
### 3. 查询任务列表
```http
GET /user/ai/tasks/list?page=1&size=10&status=completed
Authorization: Bearer ak_your_api_key_here
```
---
## 💰 积分消费规则
| 模型名称 | 描述 | 积分消耗 | 对应价格 |
|---------|------|---------|---------|
| `sora_image` | Sora高质量图片生成 | 11积分 | ¥0.015 |
| `gpt-4o-image` | GPT-4o图片生成 | 11积分 | ¥0.015 |
| `sora_video2` | Sora视频生成竖屏10秒 | 160积分 | ¥0.225 |
| `sora_video2-landscape` | Sora视频生成横屏10秒 | 160积分 | ¥0.225 |
| `sora_video2-15s` | Sora视频生成竖屏15秒 | 260积分 | ¥0.375 |
| `sora_video2-landscape-15s` | Sora视频生成横屏15秒 | 260积分 | ¥0.375 |
| `sora-2-pro-all` | Sora Pro高清视频 | 420积分 | ¥0.60 |
> 💡 **说明**1人民币 = 1000积分系统在第三方API价格基础上加价50%
---
## ⚠️ 错误码说明
| 状态码 | 说明 | 解决方案 |
|--------|------|----------|
| `200` | 成功 | - |
| `400` | 参数错误 | 检查请求参数是否正确 |
| `401` | 未认证 | 检查API Key是否有效 |
| `402` | 积分不足 | 充值积分后重试 |
| `404` | 任务不存在 | 检查任务编号是否正确 |
| `500` | 服务器错误 | 联系技术支持 |
---
## 🔒 安全建议
1. **保护API Key**不要在客户端代码或公开仓库中硬编码API Key
2. **使用环境变量**将API Key存储在环境变量中
3. **定期刷新**定期刷新API Key以提高安全性
4. **监控使用**定期检查API Key的使用情况
---
## 💻 代码示例
### Python示例
```python
import requests
API_KEY = "ak_your_api_key_here"
BASE_URL = "https://your-domain.com"
def submit_task(model_name, prompt, image_url=None):
"""提交AI任务"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"modelName": model_name,
"prompt": prompt
}
if image_url:
payload["imageUrl"] = image_url
response = requests.post(
f"{BASE_URL}/user/ai/tasks/submit",
headers=headers,
json=payload
)
return response.json()
def get_task_status(task_no):
"""查询任务状态"""
headers = {
"Authorization": f"Bearer {API_KEY}"
}
response = requests.get(
f"{BASE_URL}/user/ai/tasks/{task_no}",
headers=headers
)
return response.json()
# 使用示例
result = submit_task("sora_image", "一只可爱的猫咪")
print(f"任务编号: {result['data']['taskNo']}")
status = get_task_status(result['data']['taskNo'])
print(f"任务状态: {status['data']['status']}")
```
### Node.js示例
```javascript
const axios = require('axios');
const API_KEY = 'ak_your_api_key_here';
const BASE_URL = 'https://your-domain.com';
async function submitTask(modelName, prompt, imageUrl = null) {
const headers = {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
};
const payload = {
modelName,
prompt
};
if (imageUrl) {
payload.imageUrl = imageUrl;
}
const response = await axios.post(
`${BASE_URL}/user/ai/tasks/submit`,
payload,
{ headers }
);
return response.data;
}
async function getTaskStatus(taskNo) {
const headers = {
'Authorization': `Bearer ${API_KEY}`
};
const response = await axios.get(
`${BASE_URL}/user/ai/tasks/${taskNo}`,
{ headers }
);
return response.data;
}
// 使用示例
(async () => {
const result = await submitTask('sora_image', '一只可爱的猫咪');
console.log(`任务编号: ${result.data.taskNo}`);
const status = await getTaskStatus(result.data.taskNo);
console.log(`任务状态: ${status.data.status}`);
})();
```
### cURL示例
```bash
# 提交任务
curl -X POST "https://your-domain.com/user/ai/tasks/submit" \
-H "Authorization: Bearer ak_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"modelName": "sora_image",
"prompt": "一只可爱的猫咪在花园里玩耍"
}'
# 查询任务状态
curl -X GET "https://your-domain.com/user/ai/tasks/TASK20251020143022ABC123" \
-H "Authorization: Bearer ak_your_api_key_here"
```
---
## 🎯 最佳实践
1. **轮询查询**任务提交后建议每5-10秒轮询一次任务状态
2. **超时处理**设置合理的超时时间建议5-10分钟
3. **错误重试**:遇到网络错误时实现指数退避重试
4. **并发控制**单用户最多同时运行3个任务
5. **结果缓存**completed状态的任务结果可以缓存避免重复查询
---
## 📞 技术支持
如有问题,请联系:
- 📧 Email: support@1818ai.com
- 💬 技术文档: https://docs.1818ai.com
- 🐛 问题反馈: https://github.com/1818ai/issues
---
**最后更新时间2025-10-20**