merge: 客服Agent+RAG+画像 与 架构师最新 qyqy_develop 合并

- customer_service.py 以架构师实现为骨架(三档置信/适当性/会话记忆/话题矩阵),嫁接本人画像出口
- 知识检索契约合并两条链路:架构师 search_knowledge(KnowledgeSearchInput) + 本线
  query_knowledge 链路所需常量(ALLOWED_CONSTANTS/VECTOR_DIM/intent_for_qa_id)
- bootstrap 保留架构师 6 工具/3 Agent,补回 query_customer_profile 与 get_milvus_knowledge_writer
- model_gateway 能力映射修正 intent_classification→chat,保留空集回退兜底
- governance 免责声明限定面向客户 Agent(agent_type 由定义透传),风控结构化输出不再被追加
- 修 JWT 密钥路径(config/jwt/dev)、文档 21 号撞号→25
- 测试基线 934 passed / 1 failed(既有空集缺陷)
This commit is contained in:
qyqy
2026-09-11 15:06:44 +08:00
parent e4c4099aaa
commit 57c4add7d8
14 changed files with 388 additions and 659 deletions
@@ -148,7 +148,7 @@ D:\conda\envs\jr_py313\python.exe C:\Users\...\e2e_run_check.py --label 手工
单条链路的手工命令(客户身份 9001,JWT 用配置项 `JWT_PRIVATE_KEY_PATH` 指向的私钥按 RS256 自签,
参考 `tools/acceptance_check.py::token()`)。还没有密钥就先跑一次
`python tools/generate_jwt_keys.py --out-dir config/jwt/dev`(详见 `docs/21-JWT密钥管理与轮换.md`):
`python tools/generate_jwt_keys.py --out-dir config/jwt/dev`(详见 `docs/25-JWT密钥管理与轮换.md`):
```text
POST /api/v1/agent-runs
@@ -225,10 +225,10 @@ D:\conda\envs\jr_py313\python.exe tools\demo_agent_e2e.py
4. **`docs/05` §9.5 未收录 `agent-intent-configs` 的 `GET` 详情路径**:该接口实际存在(用于获取
`If-Match` 所需的 ETag),但权威接口文档未列出,属文档待补项。
5. **没有登录接口(已决定推迟,不是遗漏)**:当前没有"账号密码换令牌"的接口,令牌由外部按
RS256 用私钥自签(见 `docs/21-JWT密钥管理与轮换.md`)。**决定:等业务 Agent 开发阶段
RS256 用私钥自签(见 `docs/25-JWT密钥管理与轮换.md`)。**决定:等业务 Agent 开发阶段
结束后再补**。补的时候只需动签发侧(新增 `POST /auth/login`:校验密码 → 用私钥签令牌),
验签侧 `JwtAuthenticator` 与身份解析侧 `IdentityService` 都不需要改。
代价与约束:开发阶段凡拿到私钥者都能以 `9001/9002/9003` 身份调用(实测**无法**伪造不存在的
用户、**无法**使用已禁用账号,边界是"签名有效 + 用户存在且启用"),因此私钥按 `docs/21`
用户、**无法**使用已禁用账号,边界是"签名有效 + 用户存在且启用"),因此私钥按 `docs/25`
第 7 节的红线管理;同时业务代码必须始终只从 `RequestContext` 取身份,否则后补登录接口会
从"增量"变成"翻遍所有业务代码"。