跳到正文

callai-server

统一的 AI 大语言模型推理与策略执行中台服务,基于 Bun + TypeScript + Drizzle ORM 构建,默认监听 9930 端口。

在单进程内提供:

  1. NLU 语义理解 API:意图决策 (decision) 与槽位/实体抽取 (extract),支持高并发零延迟内存 O(1) 解析。
  2. Chat 会话对话 API:流式 SSE(delta / complete / error 事件)与非流式问答,支持动态会话上下文管理与退出分支判定。
  3. Script 话术辅助 API:AI 话术流程图自动生成、拟真客户对话模拟 (simulate-user)、节点级策略自动生成;后两者与整图生成共用 POST /api/v1/script/generate(按请求体分派)与 POST /api/v1/script/simulate-user
  4. AI 策略与用量持久化:管理 callai.ai_nlu_profilescallai.ai_chat_profilescallai.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_PATHLLM_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 上限
dbPostgreSQL 连接;策略、LLM 配置与用量记录都存在 callai schema
logging日志目录与滚动策略;detailedContentEnabled 控制是否落盘对话正文
usageRecording本地 JSONL 用量双写兜底目录
calloutcallout-server 基址与 token,用于流程脚本依赖检查等反向查询
control可选。兼容旧版外部控制平面同步,常规部署不需要,由本地 DB 取代

鉴权

/health 系列外的接口都要求内部 token,可放在 X-Callai-Internal-TokenX-Callout-Internal-TokenAuthorization: Bearer <token> 中, 命中 server.authToken 列表任一值即通过。


核心 API 路由清单

方法路径鉴权描述
GET/health/api/health/api/v1/health服务存活与健康检查
GET/api/v1/nlu/capabilitiesToken查询当前已生效的 NLU 决策/抽取策略列表与参数元数据
POST/api/v1/nluToken执行语义分析(支持决策分类与槽位提取)
GET/api/v1/chat/capabilitiesToken查询当前已生效的 Chat 对话策略与会话模板
POST/api/v1/chat/streamToken执行单轮/多轮流式对话推理(SSE 返回)
GET/api/v1/conversation/capabilitiesToken查询确定性对话策略清单
POST/api/v1/conversationToken确定性对话策略问答
POST/api/v1/script/generateToken生成外呼流程图节点与连线;请求体标明节点级策略模式时走 profile 生成分支
POST/api/v1/script/simulate-userToken模拟客户答复与意图分类
GET / PUT/api/v1/ai/llm-configToken读取 / 更新全局生效的 LLM 引擎配置
POST/api/v1/ai/llm-config/testToken对指定 LLM 配置做一次连通性探活
GET / POST/api/v1/ai/nlu-profilesTokenNLU 策略查询与创建
PATCH / PUT / DELETE/api/v1/ai/nlu-profiles/:idTokenNLU 策略修改与删除
GET / POST/api/v1/ai/chat-profilesTokenChat 策略查询与创建
PATCH / PUT / DELETE/api/v1/ai/chat-profiles/:idTokenChat 策略修改与删除
POST/api/v1/ai/profiles/batchToken批量创建 NLU / Chat 策略
POST/api/v1/ai/nlu/evalToken单次 NLU 策略评估(Playground 用)
GET/api/v1/ai/usageToken分页查询 AI 调用明细记录
GET/api/v1/ai/usage/summaryToken查询调用量与质量指标汇总
GET/api/v1/modelsToken查询后端模型在线状态与可用模型列表

所有响应使用 { ok, data } / { ok, error } 信封;未匹配路径返回 404{ ok: false, error: "接口不存在" }

数据表

bun run db:push 同步 callai schema 下的四张表:ai_llm_configs(全局 LLM 引擎配置)、 ai_nlu_profilesai_chat_profilesai_usage_records

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。