外观
callai-server
统一的 AI 大语言模型推理与策略执行中台服务,基于 Bun + TypeScript + Drizzle ORM 构建,默认监听 9930 端口。
在单进程内提供:
- NLU 语义理解 API:意图决策 (
decision) 与槽位/实体抽取 (extract),支持高并发零延迟内存 O(1) 解析。 - Chat 会话对话 API:流式 SSE(
delta/complete/error事件)与非流式问答,支持动态会话上下文管理与退出分支判定。 - Script 话术辅助 API:AI 话术流程图自动生成、拟真客户对话模拟 (
simulate-user)、节点级策略自动生成;后两者与整图生成共用POST /api/v1/script/generate(按请求体分派)与POST /api/v1/script/simulate-user。 - AI 策略与用量持久化:管理
callai.ai_nlu_profiles、callai.ai_chat_profiles与callai.ai_usage_records,提供完整的增删改查、Playground 快速评估与用量监控 API。
快速启动
bash
cd apps/callai-server
bun install
bun run dev # 监听模式开发(等价于仓库根 bun run dev:callai-server)
bun run start # 生产启动
bun run typecheck # 严格类型检查
bun test # 运行本模块 *.test.ts
bun run db:push # 同步 callai schema
bun run build # typecheck 后构建 Windows x64 独立可执行文件(另有 build:linux / build:bundle / build:all)配置文件说明
默认读取同目录下的 config.json(可通过环境变量 CALLAI_CONFIG_PATH 或 LLM_CONFIG_PATH 指定覆盖)。 全部字段都可用 CALLAI_* 环境变量覆盖,次选 LLM_*,再回退 config.json,最后使用代码内置默认值。
llm 段是可选的:写明则固定推理后端;整段省略(仓库内的 config.json 即如此)时, 运行期从数据库 callai.ai_llm_configs 中启用的记录取地址、Key 与各领域模型, 由 callai-webpage 的「后端模型」页或 GET/PUT /api/v1/ai/llm-config 维护。 省略的字段回落到内置默认值:NLU / Chat 模型 qwen3.5-2b,Script 模型 qwen3.6-27b-fp8。
json
{
"server": {
"host": "0.0.0.0",
"port": 9930,
"authToken": ["llm-token"]
},
"llm": {
"openaiUrl": "http://127.0.0.1:8000/v1/chat/completions",
"apiKey": "optional-api-key",
"nlu": {
"model": "qwen3.5-2b",
"timeoutMs": 30000,
"maxTokens": 300
},
"chat": {
"model": "qwen3.5-2b",
"timeoutMs": 30000
},
"script": {
"model": "qwen3.6-27b-fp8",
"timeoutMs": 60000,
"maxTokens": 3000
}
},
"db": {
"url": "postgres://postgres:postgres@localhost:5432/freeswitch"
},
"logging": {
"dir": "logs",
"level": "info",
"maxSize": "20m",
"maxFiles": "14d",
"detailedContentEnabled": false
},
"usageRecording": {
"enabled": true,
"dir": "data/usage"
},
"callout": {
"baseUrl": "http://127.0.0.1:9920",
"token": "callout-token",
"timeoutMs": 5000
}
}| 配置段 | 说明 |
|---|---|
server | 监听地址、端口与内部 token 列表(任一命中即通过) |
llm | 可选。固定推理后端地址、Key 与 nlu / chat / script 三个领域各自的模型、超时与 token 上限 |
db | PostgreSQL 连接;策略、LLM 配置与用量记录都存在 callai schema |
logging | 日志目录与滚动策略;detailedContentEnabled 控制是否落盘对话正文 |
usageRecording | 本地 JSONL 用量双写兜底目录 |
callout | callout-server 基址与 token,用于流程脚本依赖检查等反向查询 |
control | 可选。兼容旧版外部控制平面同步,常规部署不需要,由本地 DB 取代 |
鉴权
除 /health 系列外的接口都要求内部 token,可放在 X-Callai-Internal-Token、X-Callout-Internal-Token 或 Authorization: Bearer <token> 中, 命中 server.authToken 列表任一值即通过。
核心 API 路由清单
| 方法 | 路径 | 鉴权 | 描述 |
|---|---|---|---|
GET | /health、/api/health、/api/v1/health | 无 | 服务存活与健康检查 |
GET | /api/v1/nlu/capabilities | Token | 查询当前已生效的 NLU 决策/抽取策略列表与参数元数据 |
POST | /api/v1/nlu | Token | 执行语义分析(支持决策分类与槽位提取) |
GET | /api/v1/chat/capabilities | Token | 查询当前已生效的 Chat 对话策略与会话模板 |
POST | /api/v1/chat/stream | Token | 执行单轮/多轮流式对话推理(SSE 返回) |
GET | /api/v1/conversation/capabilities | Token | 查询确定性对话策略清单 |
POST | /api/v1/conversation | Token | 确定性对话策略问答 |
POST | /api/v1/script/generate | Token | 生成外呼流程图节点与连线;请求体标明节点级策略模式时走 profile 生成分支 |
POST | /api/v1/script/simulate-user | Token | 模拟客户答复与意图分类 |
GET / PUT | /api/v1/ai/llm-config | Token | 读取 / 更新全局生效的 LLM 引擎配置 |
POST | /api/v1/ai/llm-config/test | Token | 对指定 LLM 配置做一次连通性探活 |
GET / POST | /api/v1/ai/nlu-profiles | Token | NLU 策略查询与创建 |
PATCH / PUT / DELETE | /api/v1/ai/nlu-profiles/:id | Token | NLU 策略修改与删除 |
GET / POST | /api/v1/ai/chat-profiles | Token | Chat 策略查询与创建 |
PATCH / PUT / DELETE | /api/v1/ai/chat-profiles/:id | Token | Chat 策略修改与删除 |
POST | /api/v1/ai/profiles/batch | Token | 批量创建 NLU / Chat 策略 |
POST | /api/v1/ai/nlu/eval | Token | 单次 NLU 策略评估(Playground 用) |
GET | /api/v1/ai/usage | Token | 分页查询 AI 调用明细记录 |
GET | /api/v1/ai/usage/summary | Token | 查询调用量与质量指标汇总 |
GET | /api/v1/models | Token | 查询后端模型在线状态与可用模型列表 |
所有响应使用 { ok, data } / { ok, error } 信封;未匹配路径返回 404 与 { ok: false, error: "接口不存在" }。
数据表
bun run db:push 同步 callai schema 下的四张表:ai_llm_configs(全局 LLM 引擎配置)、 ai_nlu_profiles、ai_chat_profiles、ai_usage_records。