把 https://www.huatuogpt.cn 的对话接口包装成标准 OpenAI 兼容接口(/v1/chat/completions)。
先创建配置文件:
cp .env.example .env然后按需修改 .env。
go run .环境变量:
PORT:监听端口(默认8080)API_KEY:可选;设置后需要鉴权(Authorization: Bearer <key>或X-API-Key: <key>)HUATUO_BASE_URL:上游地址(默认https://www.huatuogpt.cn)UPSTREAM_MODE:上游请求模式(std/tls)。如果你遇到上游返回UNKNOWN_ERROR/空内容,改成tlsCORS_ALLOW_ORIGIN:CORS 允许来源(默认*)UPSTREAM_USER_AGENT:上游请求 UA(默认Mozilla/5.0 (HuatuoGPT2API))SESSION_TTL_SECONDS:会话缓存过期时间(默认0=不启用)SESSION_CLEANUP_INTERVAL_SECONDS:会话清理间隔(默认60)READ_HEADER_TIMEOUT_SECONDS:HTTP 读 header 超时(默认10)
健康检查:GET /healthz
Huatuo 上游本质上更适合单次提问。现在这个适配层会自动读取标准 OpenAI 请求里的 messages,
把完整上下文压缩成一条单次输入,再让上游只回答最后一条用户消息。
- 只有一条
user消息时:直接透传,保持最简单路径 - 存在多条
messages(含system/assistant历史)时:自动启用“伪多轮”压缩 - 启用“伪多轮”压缩时:默认不会复用内存里的 Huatuo 会话,避免上游 session 和记忆重复叠加
- 如果你明确传了
X-Huatuo-Session-Id/X-Huatuo-Question-Id,仍会优先按你指定的上游会话发送
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "huatuogpt",
"messages": [{"role":"user","content":"你好"}]
}'curl -N http://127.0.0.1:8080/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "huatuogpt",
"stream": true,
"messages": [{"role":"user","content":"你好"}]
}'Huatuo 的上下文依赖 sessionId / questionId。本项目用 X-Conversation-Id 做内存会话映射:
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-Conversation-Id: demo" \
-d '{
"model": "huatuogpt",
"messages": [{"role":"user","content":"你是谁?"}]
}'
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "X-Conversation-Id: demo" \
-d '{
"model": "huatuogpt",
"messages": [{"role":"user","content":"继续"}]
}'也可以手动指定:
X-Huatuo-Session-IdX-Huatuo-Question-Id