M0:编排接入神识与照壁(天门 /api 改经照壁)、.env.example 新增配置段、SSE 契约路径对齐 /stream、能力矩阵与执行计划落 M0 证据

This commit is contained in:
chenxin committed 2026-08-21 22:07:39 +08:00
1 parent 8d8d81e757
commit 8ebcc11a8a
6 files changed
+85 -13

No files matched your search

+25
View File
@@ -665,3 +665,28 @@ SAFETY_POLICY_PATH=config/safety.yaml
# BACKEND_URL=http://localhost:8000 (本地开发,跨公网须 https://) # BACKEND_URL=http://localhost:8000 (本地开发,跨公网须 https://)
# Docker 部署由 docker-compose.app.yml 写死为 http://hunjing-backend:8000 # Docker 部署由 docker-compose.app.yml 写死为 http://hunjing-backend:8000
# 浏览器所有请求同源走 BFF(/api/proxy、/api/sse、/api/auth),客户端不需要后端地址。 # 浏览器所有请求同源走 BFF(/api/proxy、/api/sse、/api/auth),客户端不需要后端地址。
# =====================================================================
# 神识 · 模型网关(Go,rewrite/1.0 M0) — 灵台唯一模型出口
# =====================================================================
# 神识服务地址;为空时灵台 Kernel 使用进程内回声桩(仅骨架验证,不出真实模型流)。
# 本地开发:SHENSHI_BASE_URL=http://127.0.0.1:8080(先 shenshi/ 目录 `go run .`)
# Docker 部署由 docker-compose.app.yml 写死为 http://hunjing-shenshi:8080
SHENSHI_BASE_URL=
# 灵台 → 神识服务令牌(两边一致);为空时神识开发档放行不校验
SHENSHI_SERVICE_TOKEN=
# 神识流式调用超时(秒)
SHENSHI_TIMEOUT_SECONDS=120.0
# 神识服务监听端口(shenshi 服务自身)
SHENSHI_PORT=8080
# =====================================================================
# 照壁 · BFF(Fastify,rewrite/1.0 M0) — 鉴权透传 / SSE 直通
# =====================================================================
# 照壁监听端口
BFF_PORT=3000
# 照壁转发的灵台地址;本地开发默认 http://127.0.0.1:8000
# Docker 部署由 docker-compose.app.yml 写死为 http://hunjing-backend:8000
BACKEND_URL=http://127.0.0.1:8000
+45
View File
@@ -56,6 +56,8 @@ services:
NEBULAGRAPH_HOST: hunjing-nebula-graphd NEBULAGRAPH_HOST: hunjing-nebula-graphd
MINIO_ENDPOINT: http://hunjing-minio:9000 MINIO_ENDPOINT: http://hunjing-minio:9000
STORAGE_PROVIDER: ${STORAGE_PROVIDER:-local} STORAGE_PROVIDER: ${STORAGE_PROVIDER:-local}
# rewrite/1.0:模型出口走神识网关(覆盖 .env 默认空值;令牌经 env_file 注入)
SHENSHI_BASE_URL: http://hunjing-shenshi:8080
volumes: volumes:
# bind mount 到 /app 下的对应目录,使 .env 相对路径 ../logs ../db ../storage ../config 生效。 # bind mount 到 /app 下的对应目录,使 .env 相对路径 ../logs ../db ../storage ../config 生效。
- ../logs:/app/logs - ../logs:/app/logs
@@ -71,6 +73,47 @@ services:
limits: { memory: 1G } limits: { memory: 1G }
reservations: { memory: 256M } reservations: { memory: 256M }
# ============================== 神识 · 模型网关(Go,rewrite/1.0 M0) ==============================
# 灵台唯一模型出口:IR 入站 → 适配器(当前 stub,云 Provider/元炁按 M4 接入)→ SSE 出站。
# 鉴权:SHENSHI_SERVICE_TOKEN 经 env_file 注入;未配置时开发档放行。
hunjing-shenshi:
build:
context: ../shenshi
dockerfile: ../docker/shenshi/Dockerfile
image: hunjing-shenshi:latest
container_name: hunjing-shenshi
restart: unless-stopped
networks: [hunjing-net]
env_file:
- ../.env
environment:
SHENSHI_PORT: "8080"
deploy:
resources:
limits: { memory: 256M }
reservations: { memory: 64M }
# ============================== 照壁 · BFF(Fastify,rewrite/1.0 M0) ==============================
# 客户端与灵台之间的无状态通道:鉴权透传、SSE 直通、响应透传。无业务规则、无权威数据。
hunjing-bff:
build:
context: ../bff
dockerfile: ../docker/bff/Dockerfile
image: hunjing-bff:latest
container_name: hunjing-bff
restart: unless-stopped
networks: [hunjing-net]
environment:
BFF_PORT: "3000"
BACKEND_URL: http://hunjing-backend:8000
depends_on:
hunjing-backend:
condition: service_started
deploy:
resources:
limits: { memory: 256M }
reservations: { memory: 64M }
# ============================== 琉璃镜 · 前端 Next.js(Frontend) ============================== # ============================== 琉璃镜 · 前端 Next.js(Frontend) ==============================
hunjing-frontend: hunjing-frontend:
build: build:
@@ -228,6 +271,8 @@ services:
depends_on: depends_on:
hunjing-backend: hunjing-backend:
condition: service_started condition: service_started
hunjing-bff:
condition: service_started
hunjing-frontend: hunjing-frontend:
condition: service_started condition: service_started
deploy: deploy:
+6 -6
View File
@@ -1,9 +1,9 @@
# 天门 · 魂镜统一入口反向代理(Nginx,可选,profile: nginx)。 # 天门 · 魂镜统一入口反向代理(Nginx,可选,profile: nginx)。
# 对外只暴露 80:/api/* 与 SSE 走后端,其余走前端 Next.js。 # 对外只暴露 80:/api/* 与 SSE 经照壁(BFF)走灵台,其余走前端 Next.js。
# 启用前需先启动 backend 与 frontend;详见 docker/README.md。 # 启用前需先启动 backend、bff 与 frontend;详见 docker/README.md。
upstream hunjing_backend { upstream hunjing_bff {
server hunjing-backend:8000; server hunjing-bff:3000;
keepalive 32; keepalive 32;
} }
@@ -19,9 +19,9 @@ server {
# 适配人物资料 / 感知文件上传(IMPORT_MAX_FILE_MB 等)。 # 适配人物资料 / 感知文件上传(IMPORT_MAX_FILE_MB 等)。
client_max_body_size 64m; client_max_body_size 64m;
# ============================== 后端 API 与 SSE 流 ============================== # ============================== API 与 SSE 流(经照壁) ==============================
location /api/ { location /api/ {
proxy_pass http://hunjing_backend; proxy_pass http://hunjing_bff;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
+3 -2
View File
@@ -74,9 +74,10 @@ POST /api/v1/nodes/{id}/citations # 建立引文锚
```text ```text
POST /api/v1/runs # 发起前台 Run(问节应答等);命台忙返回 HJ-1101+队列位 POST /api/v1/runs # 发起前台 Run(问节应答等);命台忙返回 HJ-1101+队列位
GET /api/v1/runs/{id} # 状态与轨迹(可读摘要、证据、工具轨迹) GET /api/v1/runs/{id} # 状态与轨迹(可读摘要、证据、工具轨迹)
GET /api/v1/runs/{id}/events # JSON 事件时间线(读模型,按 sequence 升序)
GET /api/v1/runs/{id}/stream # SSE 事件流(见 §4)
POST /api/v1/runs/{id}/steer # 运行中插话(入队,下一 turn 生效) POST /api/v1/runs/{id}/steer # 运行中插话(入队,下一 turn 生效)
POST /api/v1/runs/{id}/cancel POST /api/v1/runs/{id}/cancel
GET /api/v1/runs/{id}/events # SSE(见 §4)
GET /api/v1/characters/{id}/queue # 前台队列 GET /api/v1/characters/{id}/queue # 前台队列
``` ```
@@ -140,7 +141,7 @@ GET /api/v1/me/usage # 用量与成本
## 4. SSE 协议 ## 4. SSE 协议
- 端点:`GET /api/v1/runs/{id}/events`(运行流);镜树页可另订阅树级合并流 `GET /api/v1/trees/{id}/events`。 - 端点:`GET /api/v1/runs/{id}/stream`(运行流;与既有前端约定一致);`GET /runs/{id}/events` 为 JSON 事件时间线读模型;镜树页后续可另订阅树级合并流 `GET /api/v1/trees/{id}/stream`。
- 帧格式: - 帧格式:
```text ```text
+4 -4
View File
@@ -19,18 +19,18 @@
| 能力 | 里程碑 | 当前状态 | 说明与缺口 | | 能力 | 里程碑 | 当前状态 | 说明与缺口 |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| 灵台 Kernel 与插件运行时 | M0 | 未实现 | 事件溯源、投影、插件装配、硬核不变量均待建;旧 runtime 模块待退役 | | 灵台 Kernel 与插件运行时 | M0 | 局部实现 | M0 骨架已验证(本地开发档,2026-08-21):`backend/tests/test_kernel.py` 5 用例(事件序列/命台串行/否决/不变量/SSE),Kernel 经 DbEventStore 事件溯源;投影仍为占位,九枢插件与禁域裁决待 M2+/M5 |
| 镜生闭环(灵胚/启镜/魂籍/命台) | M1 | 未实现 | 旧 characters 表将重建;命台唯一性无实现 | | 镜生闭环(灵胚/启镜/魂籍/命台) | M1 | 未实现 | 旧 characters 表将重建;命台唯一性无实现 |
| 镜树对话(问节/候答/采用/归真/引文/移栽) | M2 | 未实现 | 现有 chat 为线性会话,将被替换删除 | | 镜树对话(问节/候答/采用/归真/引文/移栽) | M2 | 未实现 | 现有 chat 为线性会话,将被替换删除 |
| 三级记忆(微痕/明忆/重忆/实录/心痕) | M3 | 未实现 | 旧 memory/extraction 模块待退役;新管线未建 | | 三级记忆(微痕/明忆/重忆/实录/心痕) | M3 | 未实现 | 旧 memory/extraction 模块待退役;新管线未建 |
| 神识 Go 网关 | M4 | 未实现 | 现为 Python ai_provider 过渡承载,重写期间一次性替换 | | 神识 Go 网关 | M4 | 局部实现 | M0 骨架已上线(2026-08-21):IR 入站/SSE 出站/stub 适配器/服务令牌/健康检查,`go test` 5 用例,与灵台 HttpShenshiClient 联调通过;云 Provider 与元炁端点、路由冷却计量待 M4 |
| 百工与司命(授契/行契/请命/禁域/行动账) | M5 | 局部实现 | 乾坤沙箱(HMAC/进程隔离)已有工程与测试;能力注册与四维裁决待重写 | | 百工与司命(授契/行契/请命/禁域/行动账) | M5 | 局部实现 | 乾坤沙箱(HMAC/进程隔离)已有工程与测试;能力注册与四维裁决待重写 |
| 缘契/人格演进/河图世界 | M6 | 未实现 | 旧 personality/drive/evolution/world 待退役 | | 缘契/人格演进/河图世界 | M6 | 未实现 | 旧 personality/drive/evolution/world 待退役 |
| 形仪与语音(真形/Live2D/TTS/ASR/通感) | M7 | 局部实现 | 天目 OCR、元炁本地推理可用;形仪域未建 | | 形仪与语音(真形/Live2D/TTS/ASR/通感) | M7 | 局部实现 | 天目 OCR、元炁本地推理可用;形仪域未建 |
| 天工阁/叩心/辰正 | M8 | 未实现 | 旧 agent/knocking/time_sense 待退役重实现 | | 天工阁/叩心/辰正 | M8 | 未实现 | 旧 agent/knocking/time_sense 待退役重实现 |
| 照壁 BFF | M0 | 未实现 | Fastify 骨架待建 | | 照壁 BFF | M0 | 局部实现 | M0 骨架已验证(2026-08-21):头透传/SSE 直通/错误映射 4 用例;登录→占位 Run→SSE 三服务(照壁/灵台/神识)E2E 冒烟通过;响应裁剪与聚合待 M2+ |
| 镜匣桌面壳 | M9 | 未实现 | Tauri 最小壳待建 | | 镜匣桌面壳 | M9 | 未实现 | Tauri 最小壳待建 |
| 基础设施复用(auth/RBAC/审计/事件/幂等/SSE) | M0 | 局部实现 | 旧实现可用,待重组入 `infra/` 并对接六域 | | 基础设施复用(auth/RBAC/审计/事件/幂等/SSE) | M0 | 局部实现 | auth/事件存储/SSE 已被 Kernel 复用(POST /runs 验收链路);重组入 `infra/` 待后续里程碑 |
| 乾坤沙箱 | M5 | 局部实现 | 隔离执行/HMAC/超时取消已有;设备安全与双裁决待扩 | | 乾坤沙箱 | M5 | 局部实现 | 隔离执行/HMAC/超时取消已有;设备安全与双裁决待扩 |
| 博闻 MCP 搜索 | M5 | 局部实现 | 多引擎/密钥池/熔断/缓存可用;待登记入百工 | | 博闻 MCP 搜索 | M5 | 局部实现 | 多引擎/密钥池/熔断/缓存可用;待登记入百工 |
| 天目 / 元炁 | M4/M7 | 局部实现 | 服务可用;元炁待接入神识 Endpoint,天目待接通感 | | 天目 / 元炁 | M4/M7 | 局部实现 | 服务可用;元炁待接入神识 Endpoint,天目待接通感 |
+2 -1
View File
@@ -77,10 +77,11 @@
> 编号为实施顺序;每个里程碑末尾的"验收"是进入下一个的硬门。 > 编号为实施顺序;每个里程碑末尾的"验收"是进入下一个的硬门。
### M0 地基(骨架先行) ### M0 地基(骨架先行)— ✅ 已完成(2026-08-21)
- 交付:Kernel 骨架(不变量裁决器/命台控制/事件日志接口/循环骨架)、事件总线与插件加载、`shenshi_client` 边界(先指向临时 stub)、BFF 骨架(鉴权透传+SSE 代理)、神识骨架(ingress/transform 占位实现 + 元炁 endpoint)、Alembic 新基线、Compose 更新(+hunjing-bff/+hunjing-shenshi)。 - 交付:Kernel 骨架(不变量裁决器/命台控制/事件日志接口/循环骨架)、事件总线与插件加载、`shenshi_client` 边界(先指向临时 stub)、BFF 骨架(鉴权透传+SSE 代理)、神识骨架(ingress/transform 占位实现 + 元炁 endpoint)、Alembic 新基线、Compose 更新(+hunjing-bff/+hunjing-shenshi)。
- 验收:登录(复用 auth)→ 创建占位 Run → SSE 端到端流到浏览器(经照壁);"模型可见即可重建"断言在 stub 上可跑;旧 chat/memory 模块仍可用但不再新增调用。 - 验收:登录(复用 auth)→ 创建占位 Run → SSE 端到端流到浏览器(经照壁);"模型可见即可重建"断言在 stub 上可跑;旧 chat/memory 模块仍可用但不再新增调用。
- 证据:`backend/tests/test_kernel.py` 5 用例(事件序列/命台串行/否决/不变量/流式);`shenshi` `go test` 5 用例;`bff` vitest 4 用例;三服务(照壁 18100 / 灵台 18000 / 神识 18081)真实进程 E2E 冒烟:注册→登录→POST /api/v1/runs→SSE 流读至 run.finished,模型流经 Go 神识 stub("【神识回声桩】"前缀可证);全量后端回归 925 passed(另有 20 个预存失败,根因本地缺 `config/models.yaml`,与本次改动无关,stash 验证);Alembic 基线合并为单一迁移(41 表,空库 upgrade 干净)。
### M1 镜生闭环(灵胚→启镜→魂籍→命台) ### M1 镜生闭环(灵胚→启镜→魂籍→命台)