在 human-llm 总机 基础上进化出的双主线 AI 系统:外部用户照常走 OpenAI 兼容接口,但接答的不再是"你手打",而是一条完整的 AI 指挥链。
外部用户 ──POST /v1/chat/completions──▶ ┌────────────────────────────┐
│ Black API 服务 │
│ │
会话上下文存储 ◀─── │ ①上下文主脑 AI │
(服务端全权维护) │ 自动应答·可被中途打断 │
│ ▲ │
│ │ 中途注入 │
你的监工对话 ◀───── │ ②轻量监工 AI │
│ 工具:看会话/注入指令/ │
│ 追加回复/跑命令 │
└────────────────────────────┘
-
① 上下文主脑:接线时把会话上下文直接交给它。客户端可以无状态地一次发一句(
x-session-id或自动按首条消息归并会话),主脑始终带着完整历史回答。 -
② 轻量监工:你在指挥台跟它聊天。它能调用工具:
工具 作用 list_sessions/get_session查看全部/某个进行中的对话 inject_instruction中途注入:往指定会话的下一次主脑调用里插一条最高优先级指令(如"必须提到退款政策") append_to_reply给下一次回复末尾附加一段【监督者附言】 run_command执行 PowerShell 命令(受安全门控)——比如打开软件、起个进程 open_app快捷打开 notepad/calc/explorer/powershell/cmd/taskmgr 例:主脑正给用户服务时,你对监工说 "在这个对话里注入:让他先看说明书,顺便帮我在本机打开 powershell" —— 监工会自动拆成两次工具调用完成。
-
操作员(你):可开"审核模式"逐条把关(批准/改写/否决),也可随时切回纯人工接答;所有命令执行都有审计日志。
cd C:\Users\Admin\Documents\worksapce1\black-api
node server.js # 指挥台 http://127.0.0.1:8900- 右侧「配置」→ 主脑模型:填 baseUrl/key/model → 测试拉取模型 → 保存 → 顶部切到「主脑自动」。
- 轻量监工:填一个便宜快的模型(如 deepseek-chat、gpt-4o-mini),保存即可对话。
- 外部应用 base_url 指
http://127.0.0.1:8900/v1(可选带x-session-id头固定会话)。
curl http://127.0.0.1:8900/v1/chat/completions -H "Content-Type: application/json" \
-d '{"model":"black-context","messages":[{"role":"user","content":"在吗"}]}'
# 第二次带 -H "x-session-id: my-session" 即延续同一份上下文监工能碰你的真机,因此有三档开关(默认 🔒 关闭):
| 模式 | 行为 |
|---|---|
off(默认) |
所有命令一律拒绝 |
allowlist |
仅精确匹配白名单的命令放行(面板可视化增删) |
all |
全放行(危险,需二次确认) |
每次工具调用(无论成败)都写入「审计」页签并经 SSE 推送。
访问密钥保护全端点:一旦设置密钥,不仅 /v1/*,指挥台全部接口 /api/*(含监工对话、命令执行、配置修改)同样要求验证——前端会弹窗要密钥(存 localStorage),SSE 走 /api/events?key=<密钥>。穿透公网前必须设置密钥,否则任何人都能对你的监工说"关机"。
复用其骨架:OpenAI 兼容层、SSE 推线、配置原子持久化、静态伺服、访问密钥、流式分片。新增:双供应商配置、服务端会话存储、注入队列、OpenAI tools 工具循环、PowerShell 执行沙箱门控、审核工作流。
穿透暴露公网前务必设置访问密钥(教程见 human-llm/TUNNEL.md,命令里的端口换成 8900)。
black-api/
├── server.js # 零依赖核心:双AI调度+注入+工具循环+命令门控
├── public/ # 三栏指挥台前端
├── test/mock-upstream.js # 支持 tools 的模拟上游(8790)
├── test/smoke.mjs # 全链路冒烟
├── config.json # 运行时生成(含 key,勿外传)
└── README.md