创建新账户
用户注册
响应结果
用户登录
账户登录
响应结果
个人信息
当前用户信息
修改密码
API Key 管理
我的 API Keys
点击刷新加载...
创建新 Key
API 对话测试
接口配置
响应结果
接口文档
基础信息
Base URL:http://agent.fzbykj.com/api
认证方式:JWT(Bearer Token)或 X-API-Key 请求头
认证接口(无需凭证)
用户接口(需 Bearer Token)
API Key 接口(需 Bearer Token)
业务接口(需 X-API-Key)
AI 地震智能体 · API 接入指南
0. 一句话说明
本服务对外提供与 OpenAI Chat Completions 完全兼容的接口。你不需要为它单独写客户端——把任意 OpenAI 风格的 SDK / 工具(OpenAI 官方 SDK、LangChain、各类大模型网关等)的「服务地址」指到本服务、模型名填 eq-agent 即可直接调用,支持流式输出。
它只回答地震相关问题(速报、预警、历史地震目录),所有数字来自真实数据库查询,不会编造。
1. 快速开始(最小示例)
把 BASE 换成你的服务地址(本机开发默认 http://localhost:18432)。
2. 基础信息
| 项 | 值 | 说明 |
|---|---|---|
| 协议 | HTTP / JSON,兼容 OpenAI Chat Completions | |
| 服务地址(本机开发) | http://localhost:18432 |
后端端口 18432 |
| 服务地址(生产) | 见下方「生产环境访问」 | 公网端口默认被云安全组挡住,需经隧道或 nginx 反代 |
| 对话端点 | POST /v1/chat/completions |
OpenAI SDK 里 base-url 填到 http://<地址>:18432/v1 |
| 模型列表端点 | GET /v1/models |
返回唯一模型 eq-agent |
| 模型名 | eq-agent |
请求里 model 字段填这个;其实填任意值也能跑,响应会回显 |
3. 鉴权(可选)
服务端有一个鉴权开关,默认关闭——本机开发与内网调用可以不带任何凭证。
开启后(生产对公网开放时建议开启),所有 /v1/** 请求必须带请求头:
<API_KEY>是服务端在环境变量API_KEY里配置的值。- 校验不通过返回 401,响应体为 OpenAI 风格的错误结构(见第 7 节)。
- 用 OpenAI SDK 时,把这个值填进 SDK 的
api_key参数即可;若服务端没开鉴权,api_key随便填一个非空字符串。
application.yml 的 app.api-auth.enabled(环境变量 API_AUTH=true)+ app.api-auth.api-key(环境变量 API_KEY)。
4. 接口详解
4.1 POST /v1/chat/completions
请求体字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 否 | 模型名,填 eq-agent;缺省也行 |
| messages | array | 是 | 完整对话历史,见下 |
| stream | boolean | 否 | true 走 SSE 流式;缺省 false 一次性返回 |
| user | string | 否 | 借作会话标识,仅用于服务端问答留档归类,不影响对话本身 |
temperature、top_p、n、max_tokens 等)会被安全忽略,不报错、也不生效(本服务为了答案稳定,温度等参数固定在服务端)。
messages 的每条消息结构:
role: user/assistant:构成对话历史(见第 5 节多轮对话)。role: system:会被服务端忽略。本服务始终用自己的内置规则,不接受外部覆盖。content目前只支持字符串;不支持 OpenAI 的多模态数组形式。
4.2 非流式响应(stream 缺省或 false)
标准 chat.completion 结构:
* 注意:usage 里的 token 数目前固定为 0(服务端未做统计)。
4.3 流式响应(stream: true)
Content-Type: text/event-stream,逐片下发,每一片是一行 data: 加一个 JSON。结构与 OpenAI 一致:
- 首片只带
delta.role = "assistant"。 - 中间片只带
delta.content(一段文字);拼接起来即是完整答案。 - 收尾片
delta为空对象{}且带finish_reason: "stop"。 - 最后单独一行
data:[DONE]表示结束。
4.4 GET /v1/models
返回服务支持的模型列表(只有一个):
5. 多轮对话(重要)
本接口遵循 OpenAI 的无状态语义:服务端不在会话间保存上下文,你需要在每次请求的 messages 里把完整对话历史给全。
例如第二轮追问「那它的深度呢」,要把第一轮的问答也一起带上,模型才知道「它」指哪次地震:
6. 各语言 / 工具接入示例
下例统一假设服务地址 http://localhost:18432,鉴权关闭(api_key 随便填)。开了鉴权就把 api_key 换成真实 Key。
7. 错误与排查
| 现象 | 原因 | 处理 |
|---|---|---|
HTTP 401,响应 {"error":{"message":"无效的 API Key",…}} |
开了鉴权但没带或带错 Key | 加请求头 Authorization: Bearer <正确 Key> |
HTTP 401,响应 {"error":{"message":"服务端鉴权未正确配置…",…}} |
服务端开了鉴权却没配 Key | 联系服务端在 .env 里补 API_KEY |
| 回答「系统未配置大模型密钥…」 | 服务端没配 DEEPSEEK_API_KEY |
联系服务端配置后重启 |
| 回答「抱歉,这个我不方便介绍 / 超出了我的范围」 | 生产默认开启了「问题过滤 / 自身信息保密」 | 这是预期行为:本服务只答地震问题,问无关或探查实现的问题会被礼貌拒答 |
| 连接被拒 / 超时(生产) | 公网端口被云安全组挡住 | 见下方「生产环境访问」 |
401 错误结构(OpenAI 风格,便于现成客户端识别):
提示:调用出错时,服务端通常不会抛 HTTP 5xx,而是把错误说明作为正常回答内容返回(流式则作为一段 content 增量),方便前端直接展示。
8. 注意事项与边界
- 只答地震问题:本服务专注地震速报、预警、历史地震目录。生产环境默认开启问题过滤,与地震无关的问题会被礼貌拒答。
- 数字来自真实数据,不编造:查不到会如实说「数据中没有相关记录」。
- 数据范围:事件库为 2026 年 3~6 月的历史事件 + MQTT 实时新增;台网历史目录覆盖 2008-12 至 2026-06-09(之后不更新)。
- 无状态:多轮对话靠你在
messages里给全历史,服务端不跨请求记忆(见第 5 节)。 usagetoken 数固定为 0:未做统计。- 暂无限流:服务端目前没有调用频率限制,请自行控制并发与频率。
content仅支持字符串:不支持多模态数组。
9. 生产环境访问
生产部署在腾讯云,公网 18432 端口默认被云安全组挡住(接口面向公网有风险,刻意如此)。如需对外提供 API:
- 服务端在
.env里设API_AUTH=true并填一个足够随机的API_KEY(开启鉴权); - 再放开端口或经 nginx 反代(建议加 HTTPS 与限流);
- 调用方按第 3 节带上
Authorization: Bearer <API_KEY>。
在未对公网开放前,可通过 SSH 隧道把服务器的 18432 映射到本地再调用。
附录:内部接口(自带前端专用,第三方一般不用)
除上面的 OpenAI 兼容接口外,服务还有一组 /api/** 内部接口,供项目自带的网页前端使用,带服务端多轮记忆(按 sessionId 区分会话,无需每次给全历史):
| 端点 | 说明 |
|---|---|
| POST/api/chat | 非流式问答,入参 {question, sessionId?},出参 {answer} |
| POST/api/chat/stream | 流式问答(SSE),逐片 data:{"delta":"…"},末尾 data:[DONE] |
| GET/api/info | 返回当前环境 {env: "dev" | "prod"} |
这组接口不受 /v1 的 API Key 鉴权约束(给同源前端用)。第三方集成请优先使用第 1~6 节的 OpenAI 兼容接口。