179 lines
3.4 KiB
Markdown
179 lines
3.4 KiB
Markdown
# chat-api-demo
|
||
|
||
调用 AI 的 demo(Node.js)。
|
||
|
||
## 1. 安装依赖
|
||
|
||
```bash
|
||
npm install --registry=https://registry.npmjs.org
|
||
```
|
||
|
||
## 2. 配置环境变量
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
在 `.env` 中填入你的 `QWEN_API_KEY`(DashScope API Key)。
|
||
如需调用 DeepSeek,再填入 `DEEPSEEK_API_KEY`。
|
||
如需调用火山引擎,再填入 `VOLCENGINE_API_KEY` 与 `VOLCENGINE_MODEL`(方舟 Endpoint ID)。
|
||
|
||
## 3. 启动服务
|
||
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
默认端口:`3000`
|
||
|
||
## 4. 调用千问接口 demo
|
||
|
||
### 普通接口地址
|
||
|
||
`POST /api/qwen/chat`
|
||
|
||
### 普通请求示例
|
||
|
||
```bash
|
||
curl -X POST http://localhost:3000/api/qwen/chat \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"messages": [
|
||
{"role":"system","content":"你是一个简洁的助手"},
|
||
{"role":"user","content":"你好,请介绍一下你自己"}
|
||
]
|
||
}'
|
||
```
|
||
|
||
### 普通返回示例
|
||
|
||
```json
|
||
{
|
||
"id": "xxx",
|
||
"model": "qwen-plus",
|
||
"content": "你好,我是一个 AI 助手...",
|
||
"raw": {}
|
||
}
|
||
```
|
||
|
||
## 5. 流式输出(SSE)demo
|
||
|
||
### 流式接口地址
|
||
|
||
`POST /api/qwen/chat/stream`
|
||
|
||
### 流式请求示例
|
||
|
||
```bash
|
||
curl -N -X POST http://localhost:3000/api/qwen/chat/stream \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"messages": [
|
||
{"role":"system","content":"你是一个简洁的助手"},
|
||
{"role":"user","content":"请用三句话介绍流式输出"}
|
||
]
|
||
}'
|
||
```
|
||
|
||
### 返回格式(事件流)
|
||
|
||
每个增量片段:
|
||
|
||
```text
|
||
data: {"delta":"..."}
|
||
```
|
||
|
||
结束标记:
|
||
|
||
```text
|
||
data: [DONE]
|
||
```
|
||
|
||
## 6. 调用 DeepSeek 接口 demo
|
||
|
||
### DeepSeek 普通接口地址
|
||
|
||
`POST /api/deepseek/chat`
|
||
|
||
### DeepSeek 普通请求示例
|
||
|
||
```bash
|
||
curl -X POST http://localhost:3000/api/deepseek/chat \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"messages": [
|
||
{"role":"system","content":"你是一个简洁的助手"},
|
||
{"role":"user","content":"你好,请介绍一下 DeepSeek"}
|
||
]
|
||
}'
|
||
```
|
||
|
||
### DeepSeek 流式接口地址
|
||
|
||
`POST /api/deepseek/chat/stream`
|
||
|
||
### DeepSeek 流式请求示例
|
||
|
||
```bash
|
||
curl -N -X POST http://localhost:3000/api/deepseek/chat/stream \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"messages": [
|
||
{"role":"system","content":"你是一个简洁的助手"},
|
||
{"role":"user","content":"请用三句话介绍你自己"}
|
||
]
|
||
}'
|
||
```
|
||
|
||
## 7. 目录结构
|
||
|
||
每个平台接口都独立在自己的目录中,`index.js` 只负责挂载路由:
|
||
|
||
```text
|
||
.
|
||
├── index.js
|
||
└── platforms
|
||
├── deepseek
|
||
│ └── router.js
|
||
├── qwen
|
||
│ └── router.js
|
||
└── volcengine
|
||
└── router.js
|
||
```
|
||
|
||
## 8. 调用火山引擎 Chat 接口 demo
|
||
|
||
### 火山普通接口地址
|
||
|
||
`POST /api/volcengine/chat`
|
||
|
||
### 火山普通请求示例
|
||
|
||
```bash
|
||
curl -X POST http://localhost:3000/api/volcengine/chat \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"messages": [
|
||
{"role":"system","content":"你是一个简洁的助手"},
|
||
{"role":"user","content":"你好,请介绍一下你自己"}
|
||
]
|
||
}'
|
||
```
|
||
|
||
### 火山流式接口地址
|
||
|
||
`POST /api/volcengine/chat/stream`
|
||
|
||
### 火山流式请求示例
|
||
|
||
```bash
|
||
curl -N -X POST http://localhost:3000/api/volcengine/chat/stream \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"messages": [
|
||
{"role":"system","content":"你是一个简洁的助手"},
|
||
{"role":"user","content":"请用三句话介绍流式输出"}
|
||
]
|
||
}'
|
||
```
|