176 lines
4.8 KiB
Markdown
176 lines
4.8 KiB
Markdown
# API v2 Usage Example
|
||
|
||
## Overview
|
||
API v2 提供了简化的聊天完成接口,与 v1 接口共享核心逻辑,确保功能一致性和代码维护性。
|
||
|
||
## Endpoint
|
||
`POST /api/v2/chat/completions`
|
||
|
||
## Description
|
||
This is a simplified version of the chat completions API that only requires essential parameters. All other configuration parameters are automatically fetched from the backend bot configuration API.
|
||
|
||
## Code Architecture (重构后的代码结构)
|
||
|
||
### 1. 公共函数提取
|
||
- **`process_messages()`**: 处理消息列表,包括[ANSWER]分割和语言指令添加
|
||
- **`create_agent_and_generate_response()`**: 创建agent并生成响应的公共逻辑
|
||
- **`create_project_directory()`**: 创建项目目录的公共逻辑
|
||
- **`extract_api_key_from_auth()`**: 从Authorization header中提取API key
|
||
|
||
### 2. 不同的鉴权方式
|
||
- **v1接口**: Authorization header中的API key直接用作模型API密钥
|
||
```bash
|
||
Authorization: Bearer your-model-api-key
|
||
```
|
||
|
||
- **v2接口**: 需要有效的MD5哈希令牌进行认证
|
||
```bash
|
||
# 生成鉴权token
|
||
token=$(echo -n "master:your-bot-id" | md5sum | cut -d' ' -f1)
|
||
Authorization: Bearer ${token}
|
||
```
|
||
|
||
### 3. 接口设计
|
||
- **`/api/v1/chat/completions`**: 处理 `ChatRequest`,直接使用请求中的所有参数
|
||
- **`/api/v2/chat/completions`**: 处理 `ChatRequestV2`,从后端获取配置参数
|
||
|
||
### 4. 设计优势
|
||
- ✅ 最大化代码复用,减少重复逻辑
|
||
- ✅ 保持不同的鉴权方式,满足不同需求
|
||
- ✅ 清晰的函数分离,易于维护和测试
|
||
- ✅ 统一的错误处理和响应格式
|
||
- ✅ 异步HTTP请求,提高并发性能
|
||
- ✅ 使用aiohttp替代requests,避免阻塞
|
||
|
||
## Request Format
|
||
|
||
### Required Parameters
|
||
- `bot_id`: string - The target robot ID
|
||
- `messages`: array of message objects - Conversation messages
|
||
|
||
### Optional Parameters
|
||
- `stream`: boolean - Whether to stream responses (default: false)
|
||
- `tool_response`: boolean - Whether to include tool responses (default: false)
|
||
- `language`: string - Response language (default: "ja")
|
||
|
||
### Message Object Format
|
||
```json
|
||
{
|
||
"role": "user" | "assistant" | "system",
|
||
"content": "string"
|
||
}
|
||
```
|
||
|
||
## Example Request
|
||
|
||
### Basic Request
|
||
```bash
|
||
curl -X POST "http://localhost:8001/api/v2/chat/completions" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer your-api-key" \
|
||
-d '{
|
||
"bot_id": "1624be71-5432-40bf-9758-f4aecffd4e9c",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "Hello, how are you?"
|
||
}
|
||
],
|
||
"language": "en",
|
||
"stream": false
|
||
}'
|
||
```
|
||
|
||
### Streaming Request
|
||
```bash
|
||
curl -X POST "http://localhost:8001/api/v2/chat/completions" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer your-api-key" \
|
||
-d '{
|
||
"bot_id": "1624be71-5432-40bf-9758-f4aecffd4e9c",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "Tell me about yourself"
|
||
}
|
||
],
|
||
"language": "ja",
|
||
"stream": true
|
||
}'
|
||
```
|
||
|
||
## Backend Configuration
|
||
|
||
The endpoint automatically fetches the following configuration from `{BACKEND_HOST}/v1/agent_bot_config/{bot_id}`:
|
||
|
||
- `model`: Model name (e.g., "qwen/qwen3-next-80b-a3b-instruct")
|
||
- `model_server`: Model server URL
|
||
- `dataset_ids`: Array of dataset IDs for knowledge base
|
||
- `system_prompt`: System prompt for the agent
|
||
- `mcp_settings`: MCP configuration settings
|
||
- `api_key`: API key for model server access
|
||
|
||
## Authentication
|
||
|
||
### v2 API Authentication (Required)
|
||
|
||
The v2 endpoint requires a specific authentication token format:
|
||
|
||
**Token Generation:**
|
||
```bash
|
||
# Method 1: Using environment variables (recommended)
|
||
export MASTERKEY="your-master-key"
|
||
export BOT_ID="1624be71-5432-40bf-9758-f4aecffd4e9c"
|
||
token=$(echo -n "${MASTERKEY}:${BOT_ID}" | md5sum | cut -d' ' -f1)
|
||
|
||
# Method 2: Direct calculation
|
||
token=$(echo -n "master:1624be71-5432-40bf-9758-f4aecffd4e9c" | md5sum | cut -d' ' -f1)
|
||
```
|
||
|
||
**Usage:**
|
||
```bash
|
||
curl -X POST "http://localhost:8001/api/v2/chat/completions" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer ${token}" \
|
||
-d '{
|
||
"bot_id": "1624be71-5432-40bf-9758-f4aecffd4e9c",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "Hello"
|
||
}
|
||
]
|
||
}'
|
||
```
|
||
|
||
**Authentication Errors:**
|
||
- `401 Unauthorized`: Missing Authorization header
|
||
- `403 Forbidden`: Invalid authentication token
|
||
|
||
## Response Format
|
||
|
||
Returns the same response format as `/api/v1/chat/completions`:
|
||
|
||
### Non-Streaming Response
|
||
```json
|
||
{
|
||
"choices": [
|
||
{
|
||
"index": 0,
|
||
"message": {
|
||
"role": "assistant",
|
||
"content": "Response content here"
|
||
},
|
||
"finish_reason": "stop"
|
||
}
|
||
],
|
||
"usage": {
|
||
"prompt_tokens": 10,
|
||
"completion_tokens": 20,
|
||
"total_tokens": 30
|
||
}
|
||
}
|
||
```
|
||
|
||
### Streaming Response
|
||
Returns Server-Sent Events (SSE) format compatible with OpenAI's streaming API. |