Skip to content

Commit 932a3be

Browse files
committed
feat: add default api and mock data
1 parent 8f84aa8 commit 932a3be

File tree

14 files changed

+2644
-2
lines changed

14 files changed

+2644
-2
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,6 @@ dist
134134
.yarn/build-state.yml
135135
.yarn/install-state.gz
136136
.pnp.*
137+
package-lock.json
138+
pnpm-lock.yaml
139+
yarn.lock

README.md

Lines changed: 287 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,287 @@
1-
# mock-openai-api
2-
a mock OpenAI Compatible Provider API server
1+
# Mock OpenAI API
2+
3+
一个完整的 OpenAI API 兼容的模拟服务器,无需调用真实的大模型,返回预定义的测试数据。非常适合开发、测试和调试使用 OpenAI API 的应用程序。
4+
5+
## 🚀 快速开始
6+
7+
### 安装
8+
9+
```bash
10+
npm install -g mock-openai-api
11+
```
12+
13+
### 启动服务器
14+
15+
```bash
16+
npx mock-openai-api
17+
```
18+
19+
服务器将在 `http://localhost:3000` 启动。
20+
21+
### 基本使用
22+
23+
```bash
24+
# 获取模型列表
25+
curl http://localhost:3000/v1/models
26+
27+
# 聊天完成(非流式)
28+
curl -X POST http://localhost:3000/v1/chat/completions \
29+
-H "Content-Type: application/json" \
30+
-d '{
31+
"model": "mock-gpt-thinking",
32+
"messages": [{"role": "user", "content": "你好"}]
33+
}'
34+
35+
# 聊天完成(流式)
36+
curl -X POST http://localhost:3000/v1/chat/completions \
37+
-H "Content-Type: application/json" \
38+
-d '{
39+
"model": "mock-gpt-thinking",
40+
"messages": [{"role": "user", "content": "你好"}],
41+
"stream": true
42+
}'
43+
44+
# 图像生成
45+
curl -X POST http://localhost:3000/v1/images/generations \
46+
-H "Content-Type: application/json" \
47+
-d '{
48+
"model": "gpt-4o-image",
49+
"prompt": "一只可爱的猫咪",
50+
"n": 1,
51+
"size": "1024x1024"
52+
}'
53+
```
54+
55+
## 🎯 特性
56+
57+
-**完整的 OpenAI API 兼容性**
58+
-**支持流式和非流式聊天完成**
59+
-**支持函数调用**
60+
-**支持图像生成**
61+
-**预定义的测试场景**
62+
-**TypeScript 编写**
63+
-**易于集成和部署**
64+
-**详细的错误处理**
65+
66+
## 📋 支持的 API 端点
67+
68+
### 模型管理
69+
- `GET /v1/models` - 获取可用模型列表
70+
- `GET /models` - 兼容端点
71+
72+
### 聊天完成
73+
- `POST /v1/chat/completions` - 创建聊天完成
74+
- `POST /chat/completions` - 兼容端点
75+
76+
### 图像生成
77+
- `POST /v1/images/generations` - 生成图像
78+
- `POST /images/generations` - 兼容端点
79+
80+
### 健康检查
81+
- `GET /health` - 服务器健康状态
82+
83+
## 🤖 可用模型
84+
85+
### 1. mock-gpt-thinking
86+
**思考型模型** - 显示推理过程,适合调试逻辑
87+
88+
```json
89+
{
90+
"model": "mock-gpt-thinking",
91+
"messages": [{"role": "user", "content": "计算 2+2"}]
92+
}
93+
```
94+
95+
响应会包含 `<thinking>` 标签显示思考过程。
96+
97+
### 2. mock-gpt-function
98+
**函数调用模型** - 支持工具和函数调用
99+
100+
```json
101+
{
102+
"model": "mock-gpt-function",
103+
"messages": [{"role": "user", "content": "今天北京的天气怎么样?"}],
104+
"functions": [
105+
{
106+
"name": "get_weather",
107+
"description": "获取天气信息",
108+
"parameters": {
109+
"type": "object",
110+
"properties": {
111+
"location": {"type": "string"},
112+
"date": {"type": "string"}
113+
}
114+
}
115+
}
116+
]
117+
}
118+
```
119+
120+
### 3. mock-gpt-markdown
121+
**Markdown 示例模型** - 始终输出标准 Markdown 格式
122+
123+
```json
124+
{
125+
"model": "mock-gpt-markdown",
126+
"messages": [{"role": "user", "content": "任何问题"}]
127+
}
128+
```
129+
130+
响应将是一个完整的 Markdown 文档,包含各种格式元素,适合前端 UI 调试。
131+
132+
### 4. gpt-4o-image
133+
**图像生成模型** - 专门用于图像生成
134+
135+
```json
136+
{
137+
"model": "gpt-4o-image",
138+
"prompt": "一只可爱的橘猫在阳光下玩耍",
139+
"n": 2,
140+
"size": "1024x1024",
141+
"quality": "hd"
142+
}
143+
```
144+
145+
支持多种尺寸和质量设置,返回高质量的模拟图像。
146+
147+
## 🛠️ 开发
148+
149+
### 本地开发
150+
151+
```bash
152+
# 克隆项目
153+
git clone https://github.com/zerob13/mock-openai-api.git
154+
cd mock-openai-api
155+
156+
# 安装依赖
157+
npm install
158+
159+
# 开发模式运行
160+
npm run dev
161+
162+
# 构建项目
163+
npm run build
164+
165+
# 生产模式运行
166+
npm start
167+
```
168+
169+
### 项目结构
170+
171+
```
172+
src/
173+
├── types/ # TypeScript 类型定义
174+
├── data/ # 预定义的测试数据
175+
├── utils/ # 工具函数
176+
├── services/ # 业务逻辑服务
177+
├── controllers/ # 路由控制器
178+
├── routes/ # 路由定义
179+
├── app.ts # Express 应用设置
180+
├── index.ts # 服务器启动
181+
└── cli.ts # CLI 工具入口
182+
```
183+
184+
### 添加新的测试场景
185+
186+
1.`src/data/mockData.ts` 中添加新的测试用例
187+
2. 可以为现有模型添加测试用例,或创建新的模型类型
188+
3. 重新构建项目:`npm run build`
189+
190+
示例:
191+
192+
```typescript
193+
const newTestCase: MockTestCase = {
194+
name: "新功能测试",
195+
description: "测试新功能的描述",
196+
prompt: "触发关键词",
197+
response: "预期的响应内容",
198+
streamChunks: ["分段", "流式", "内容"], // 可选
199+
functionCall: { // 可选,仅用于 function 类型模型
200+
name: "function_name",
201+
arguments: { param: "value" }
202+
}
203+
};
204+
```
205+
206+
## 🌐 部署
207+
208+
### Docker 部署
209+
210+
创建 `Dockerfile`:
211+
212+
```dockerfile
213+
FROM node:18-alpine
214+
WORKDIR /app
215+
COPY package*.json ./
216+
RUN npm ci --only=production
217+
COPY dist ./dist
218+
EXPOSE 3000
219+
CMD ["node", "dist/index.js"]
220+
```
221+
222+
构建和运行:
223+
224+
```bash
225+
docker build -t mock-openai-api .
226+
docker run -p 3000:3000 mock-openai-api
227+
```
228+
229+
### 环境变量
230+
231+
- `PORT` - 服务器端口(默认:3000)
232+
- `HOST` - 服务器主机(默认:0.0.0.0)
233+
234+
## 🧪 测试
235+
236+
### 使用 curl 测试
237+
238+
```bash
239+
# 测试健康检查
240+
curl http://localhost:3000/health
241+
242+
# 测试模型列表
243+
curl http://localhost:3000/v1/models
244+
245+
# 测试思考型模型
246+
curl -X POST http://localhost:3000/v1/chat/completions \
247+
-H "Content-Type: application/json" \
248+
-d '{
249+
"model": "mock-gpt-thinking",
250+
"messages": [{"role": "user", "content": "解释一下递归"}]
251+
}'
252+
253+
# 测试函数调用
254+
curl -X POST http://localhost:3000/v1/chat/completions \
255+
-H "Content-Type: application/json" \
256+
-d '{
257+
"model": "mock-gpt-function",
258+
"messages": [{"role": "user", "content": "现在几点了?"}]
259+
}'
260+
261+
# 测试 Markdown 输出
262+
curl -X POST http://localhost:3000/v1/chat/completions \
263+
-H "Content-Type: application/json" \
264+
-d '{
265+
"model": "mock-gpt-markdown",
266+
"messages": [{"role": "user", "content": "任何内容"}]
267+
}'
268+
269+
# 测试流式输出
270+
curl -X POST http://localhost:3000/v1/chat/completions \
271+
-H "Content-Type: application/json" \
272+
-d '{
273+
"model": "mock-gpt-thinking",
274+
"messages": [{"role": "user", "content": "讲个故事"}],
275+
"stream": true
276+
}'
277+
278+
# 测试图像生成
279+
curl -X POST http://localhost:3000/v1/images/generations \
280+
-H "Content-Type: application/json" \
281+
-d '{
282+
"model": "gpt-4o-image",
283+
"prompt": "一只可爱的橘猫",
284+
"n": 2,
285+
"size": "1024x1024"
286+
}'
287+
```

0 commit comments

Comments
 (0)