ACCESS GUIDE · 接入总览

四种方式用 boss,先搞清楚该走哪条

boss 的判断流水线有 四条接入路径:零门槛的体验接口、自带模型的 HTTP 三连、 Claude Code 里的 MCP、以及功能最全的本地自托管。它们的能力、凭证、限额差别很大, 选错会白折腾。这一页把四条路摆在一起对比,给出可直接粘贴的最小示例, 并附错误码与排障速查。

本页是接入方视角的操作手册。 部署运维(起服务、配 systemd、排查 VM)见 手册 · 部署;方法论(5 镜头 / 6 维评委 / 反方机制)见 手册首页。接口的实时真相永远以运行中服务的 /docs(Swagger UI)为准,本页是导航与解释。

SECTION 1 · 决策树

你想干什么?对号入座

不必读完全页。先在下面四张卡里找到你的场景,直接跳到对应章节。

只想试一下 / 写脚本批量跑
零凭证,curl 直接调,服务端替你跑完整流程。上手最快,但不连知识库,且有配额与公开保留期。
要正式集成到自己的系统
自带模型(BYOM):boss 出题与纪律,你的模型出判断,boss 再确定性聚合成报告。需要申请 token。
想在 Claude Code 里直接用
配一个 .mcp.json,之后用自然语言驱动,Claude 自动跑完 prepare → 评委 → submit → render 闭环。
要全功能(连知识库、全参数)
克隆仓库自托管。唯一能连知识库、用全部 flag、跑三套导出的方式,代价是要自备模型 key。
SECTION 2 · 对照表

四条路径逐项对比

同一张表看完差异。「谁跑模型」是最关键的一列——它决定了你要不要自备 API key,以及费用算谁的。

路径状态谁跑模型凭证连知识库限额数据保留上手成本
A · 体验接口
/v1/demo/*
已上线 服务端代跑 不需要 ❌ 不连 每 IP 10 单/日
全局 60 单/日
并发 1
⚠️ 判例库公开 7 天 一条 curl
B · HTTP 三连
/v1/prepare|submit|render
已上线 你自己(BYOM) BOSS_SVC_TOKEN ✅ 可选 无硬配额 run TTL 24 小时 三次调用
C · MCP
/mcp
已上线 你的 Claude 同上(经网关) ✅ 可选 无硬配额 run TTL 24 小时 一个配置文件
D · 本地 CLI
run_pipeline_local.py
仅本地 你的模型 key 模型 API key 完整 你自己的额度 全在你机器上 clone + 配置
SECTION 3 · 容易搞混的地方

其实有两套独立服务

这是最容易踩的坑:boss 对外有两个不同的 HTTP 服务,端点、用途、 token 全都不通用。看到 401 先确认你拿的是哪一套的 token。

① boss-svc · 判断流水线

svc.apex.fan  ·  MCP + HTTP 双协议
  • 干什么:跑判断评审的主力。prepare / submit / render 三连,或等价的三个 MCP 工具。
  • 谁用:路径 A / B / C 都走这里。
  • tokenBOSS_SVC_TOKEN(体验接口 token)
  • 探活GET /v1/healthz
  • 接口文档/docs ↗(Swagger UI)

② boss-skills API · 元数据与运维

内网 :8421  ·  FastAPI
  • 干什么:查 panels / anchors / scenes、触发 attribution 复盘、提交评审 job。不是跑判断的主通道。
  • 谁用:内部集成与运维脚本。
  • tokenBOSS_API_TOKEN与 ① 不通用
  • 认证:Bearer fail-close——服务端没配 token 时除 /v1/healthz 外一律 503。
  • 接口文档integration cookbook
SECTION 4 · 逐条上手

四条路的最小可跑示例

每条都给能直接粘贴的命令。示例里的 token 与域名请替换为你被授权的值。

A · 体验接口 已上线 免 token

首页的在线体验台走的就是这组接口。服务端用自己的模型代跑完整流程,你只管发议题、取报告。

# 1) 探活
$ curl -s https://svc.apex.fan/v1/healthz
{"ok":true,"service":"boss-svc","schema_version":"1.0"}

# 2) 起一单 (topic 与 review_doc 至少给一个)
$ curl -s https://svc.apex.fan/v1/demo/start \
    -H "Content-Type: application/json" \
    -d '{"topic":"评估 X 产品线明年是否扩张"}'
{"run_id":"run_...","judges_total":4,"judges":[...]}

# 3) 轮询进度 (进度只存内存, 过期会 404 — 重新发起即可)
$ curl -s https://svc.apex.fan/v1/demo/status/run_xxxxx

# 4) 取报告 · 三种格式任选
$ curl -sL https://svc.apex.fan/v1/demo/report/run_xxxxx/md   -o report.md
$ curl -sL https://svc.apex.fan/v1/demo/report/run_xxxxx/html -o report.html
$ curl -sL https://svc.apex.fan/v1/demo/report/run_xxxxx/pdf  -o report.pdf

# 5) 浏览公开判例库 (别人跑过的, 保留 7 天)
$ curl -s "https://svc.apex.fan/v1/demo/gallery?limit=5"
$ curl -s https://svc.apex.fan/v1/demo/gallery/run_xxxxx
限制默认值说明
每 IP 每日10 单超出返回 429,次日 UTC 零点重置
全局每日60 单所有访客共享
并发1 单同时只跑一单,排队时会被拒
议题长度500 字符超出返回 400
文档长度30000 字符同上
判例保留7 天到期物理删除

以上为默认值,服务端可调;线上实际值以部署配置为准。

  • 提交内容会公开 7 天。议题与生成的报告会进公开判例库,其他访客可浏览与下载。严禁提交机密内容。
  • 体验接口不连知识库——评委 doctrine 照常加载(那是方法论本体),但不会检索你的组织数据。
  • prompt 包不出网:与路径 B 不同,体验接口把全套 prompt 留在服务端,你只拿最终报告。

B · HTTP 三连(自带模型) 已上线

boss 出题与纪律,你的模型出判断,boss 再做确定性聚合。适合正式集成——模型选型和费用都在你手里。

# 环境
$ export BOSS=https://svc.apex.fan
$ export TOKEN=***          # 值来自 BOSS_SVC_TOKEN, 向服务管理员申请
$ AUTH=(-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json")

# 1) prepare — 起 run, 拿冻结 context + 全套 prompt 包
$ curl -s $BOSS/v1/prepare "${AUTH[@]}" \
    -d '{"scene":"default","topic":"评估 X 产品线明年是否扩张"}'

# 2) 你的模型按 prompt 包跑 synthesis 与每位评委, 然后回传
$ curl -s $BOSS/v1/submit "${AUTH[@]}" \
    -d '{"run_id":"run_...","reviews":[{"judge":"tian","review_md":"---\n..."}]}'

# 3) render — 确定性聚合出富报告 (可重复调用)
$ curl -s $BOSS/v1/render "${AUTH[@]}" -d '{"run_id":"run_..."}'
  • run TTL 24 小时,过期物理删除,之后 submit / render 会 404。
  • submit 全批原子:任一份 review 不合格,整批 422 拒绝并返回逐条明细。维度评委必填 adversarial_view 三字段(if_thesis_wrong / contrary_signal_observed / base_rate_warning),anchor 评委不写。
  • prompt 模板里的哨兵 <<SYNTHESIS_MD>> / <<REVIEWS_MD>> 必须用字符串替换,不要用模板引擎(正文含大括号会炸)。
  • 浏览器直连需要你的域名在服务端 CORS 白名单里(精确匹配,不支持通配);curl 与服务端调用不受影响。
  • 完整契约与字段说明见 MCP 接入指南 · 回传契约,两条路径共用同一套契约。

懒得自己编排?这两个脚本把上面整套压成一条命令

「prepare → 跑 synthesis → 逐评委打分 → submit → merge → render」全帮你串好, 模型调用留在你自己进程里。拷走随便改,没有黑盒。

Python 版 推荐

零第三方依赖(只用标准库)。评委并发、错误提示更细,支持 Anthropic 与 OpenAI 兼容网关。
examples/boss_byom.py

Bash 版

需要 curl + jq。串行跑评委,胜在一眼看得懂、方便嵌进现有 shell 流程。
examples/boss-byom.sh

# 下载并跑 (Python 版)
$ curl -O https://www.apex.fan/examples/boss_byom.py
$ export BOSS_SVC_TOKEN=***          # 服务 token
$ export ANTHROPIC_API_KEY=***      # 或 OPENAI_API_KEY

$ python3 boss_byom.py "评估 X 产品线明年是否扩张" -o report.md
① prepare …
   run_id=run_... · panel=default · 4 位评委
② synthesis …
③ 4 位评委打分 (并发 3) …
   ✓ tian (anchor)
   ✓ industry-trend (dimension)
   …
④ submit …
⑤ merge …
⑥ render …
✓ 报告已写入 report.md

# 评议一份现成文档
$ python3 boss_byom.py --doc plan.md -o review.md

# Bash 版: 报告走 stdout, 进度走 stderr, 所以重定向只拿到报告
$ curl -O https://www.apex.fan/examples/boss-byom.sh && chmod +x boss-byom.sh
$ ./boss-byom.sh "评估 X 产品线明年是否扩张" > report.md
  • 两个脚本都只用环境变量读凭证,不写配置文件、不落盘 token。
  • 换模型供应商只需改 call_model() 一个函数——脚本其余部分与模型无关。
  • 常见错误码(401 / 404 / 422 / 502 / 503)都当场给提示,不用回来翻文档。
  • 脚本按当前契约写死了哨兵替换与字段名。契约若升级,以本页与 /docs 为准,脚本可能需要同步——它们是示例,不是受支持的产品

C · MCP 接入(Claude Code) 已上线

与路径 B 能力等价,但你不用手写调用——配好之后用自然语言驱动,Claude 自己跑完整闭环。

// .mcp.json — 放在项目根目录, 重启会话生效
{
  "mcpServers": {
    "boss": { "type": "http", "url": "https://<your-endpoint>/mcp" }
  }
}

然后在对话里直接说:

用 boss_prepare 起一个评审: scene 用 default, 议题是"评估 X 产品线明年是否扩张"。
拿到 prompt 包后你自己跑 synthesis 和每位评委, 然后 submit 回去, 最后 render 出报告给我。
工具作用
boss_prepare起 run,返回冻结 context + synthesis/评委/merge 的全套 prompt 包
boss_submit_reviews回传结构化 reviews(校验同路径 B,全批原子)
boss_render_report确定性聚合出富报告,可重复调用
  • 经反向代理接入时,服务端必须把对外域名加进 BOSS_SVC_ALLOWED_HOSTS。MCP SDK 的 DNS-rebinding 防护默认只认 localhost,隧道进来的请求 Host 是公网域名,不加白名单会返回 421 Invalid Host header。本机直连调试用 http://127.0.0.1:8431/mcp
  • curl/mcp 会得到 406,这是正常的——MCP 要求客户端接受 text/event-stream。能收到 406 说明请求已穿过安全层。
  • 详细工作流、契约与 FAQ 见 MCP 接入指南

D · 本地 CLI(自托管) 仅本地

唯一能连完整知识库、用全部参数、跑三套导出的方式。没有 pip 包,直接跑仓库里的脚本。

# 安装
$ git clone https://github.com/zhanglunet/boss-vault.git && cd boss-vault
$ make install                                # 依赖 + git hook + 建目录
$ bash scripts/install_tian_skill.sh          # 把 /boss 装进 Claude Code
$ cp .env.example .env.local && vi .env.local # 填模型 key
$ set -a; source .env.local; set +a            # ⚠ .env 不会自动加载, 必须手动 source
$ make smoke                                  # 1 分钟自检

# 跑一单
$ python3 scripts/run_pipeline_local.py "议题" --brand <slug>

# 评议一份现成方案文档
$ python3 scripts/run_pipeline_local.py --review docs/plan.md

# 在 Claude Code 里用 slash command
> /boss 评估 X 产品线明年是否扩张
  • .env 不会自动加载。脚本里没有 dotenv 调用,必须自己 set -a; source .env; set +a 或逐个 export,否则模型调用会因为缺 key 而失败。
  • /boss 的参数和 Python CLI 不是同一套。--quick / --refresh / --focus 等只被 slash command 理解,直接传给 run_pipeline_local.py 会报 unrecognized arguments
  • 需要 Python 3.11+。知识库不是硬依赖——没有编译好的知识库时会退化成全文检索。
  • 完整参数表见 手册 · CLI 参考;自托管说明见 产品页 · 上手
SECTION 5 · 错误码速查

看到这个码,意味着什么

按「该谁修」排序——有些码是你的问题,有些是服务端的问题,重试也没用。

含义该谁修 / 怎么办
200正常
202评审 job 已受理(异步)记下 job_id,轮询查状态
400输入不合法(议题与文档都为空、超长):修请求
401缺 / 错 Authorization: Bearer:确认 token 正确,且是对应那套服务的 token(见 §3)
404run / job 不存在或已过期:确认 id;run TTL 24h、体验进度仅存内存,过期需重跑。
也可能是路径写错——如 /health 应为 /v1/healthz
406MCP:客户端未声明接受 text/event-stream:加 Accept 头。裸 curl 打 /mcp 出现这个是正常的,说明已穿过安全层
421MCP:Invalid Host header服务端:把对外域名加进 BOSS_SVC_ALLOWED_HOSTS重试无用
422review 校验失败(全批拒绝):看返回的逐条明细;多半是缺 adversarial_view 字段
429体验接口配额用尽:等次日 UTC 零点重置,或改走路径 B
502网关连不上源站服务端:多半是服务重启的几秒空窗,等 10 秒重试;持续 502 才是真故障
503服务端未配置 token(fail-close)服务端:不是你的错,重试永远好不了,找部署方配 token
SECTION 6 · 排障速查

我们真踩过的

以下每一条都来自实际排查,不是假想。

MCP 一直返回 421 Invalid Host header+

MCP SDK 在服务绑定 localhost 时会自动开启 DNS-rebinding 防护,而它的白名单硬编码只有 127.0.0.1 / localhost / [::1]。经反向代理(如隧道)进来的请求,Host 头是公网域名,因此一律被判死。

解法:服务端把对外域名加进 BOSS_SVC_ALLOWED_HOSTS(逗号分隔),然后重启服务。不要用关闭防护的方式绕过——那等于对任意 Host 敞开。

刚重启完服务,请求变成 502+

大概率是重启空窗:旧进程已退出、新进程还没监听,这中间通常有几秒,网关此时无处可连,就返回 502。

解法:等 10 秒再验证。要确认服务真活着,看进程状态和端口监听,而不是只看 HTTP 码。持续 502 才需要查日志。

手动跑自检说「白名单未配」,但服务明明是好的+

这是假警。手动跑自检读的是你当前 shell 的环境变量,而线上的值配在 systemd unit 的 Environment= 里——两者不互通。所以 shell 下「未配」不代表服务没配。

查真实生效值systemctl show boss-svc -p Environment

裸 curl 打 /mcp 得到 406,是坏了吗?+

没坏,这恰恰是好消息。406 Not Acceptable: Client must accept text/event-stream 是 MCP 协议层在抱怨你没带 Accept 头。能收到这句话,说明请求已经穿过安全层进到协议层了。

真正的验证方式是用 MCP 客户端(如配好 .mcp.json 的 Claude Code)连一次,或手工发一个带正确头的 initialize 请求。

照着旧文档 / 旧信息图敲,全是 401 或 503+

早期文档写过「v1 API 默认无 auth」,那已经作废——现在是 Bearer 必填 + fail-close。带日期的历史信息图(/showcase/ 下)是发布当日的存档,刻意不改写,页首有横幅提示,请勿照抄其中的示例。

以什么为准:运行中服务的 /docscookbook,以及本页。

本地 CLI 报缺 API key,但 .env 明明填了+

脚本里没有 dotenv 自动加载。填了 .env 不等于进程能读到。

解法set -a; source .env.local; set +a,或把变量逐个 export 之后再跑。