53 lines
2.8 KiB
Markdown
53 lines
2.8 KiB
Markdown
# Debug Session: knowledge-chat-401
|
||
- **Status**: [OPEN]
|
||
- **Issue**: 04 知识库应用发送问题后,原先会看到 `LLM 返回 401: {"error":{"message":"No cookie auth credentials found","code":401}}`;修复目标是让问题路由正确,并且不要把底层模型鉴权报错直接暴露给前台。
|
||
- **Debug Server**: http://127.0.0.1:7777/event
|
||
- **Log File**: .dbg/trae-debug-log-knowledge-chat-401.ndjson
|
||
|
||
## Reproduction Steps
|
||
1. 启动前端、Go 后端与知识服务。
|
||
2. 打开 `04 知识库应用`。
|
||
3. 发送闲聊、FAQ、总结类问题,例如:
|
||
- `给我讲个小故事`
|
||
- `你好,你是怎么工作的`
|
||
- `请根据知识库总结规则制度库里关于审批的要点`
|
||
|
||
## Hypotheses & Verification
|
||
| ID | Hypothesis | Likelihood | Effort | Evidence |
|
||
|----|------------|------------|--------|----------|
|
||
| A | 后端把知识服务或模型服务地址调错了 | High | Low | Rejected |
|
||
| B | 当前运行进程不是最新版本 | Medium | Low | Rejected |
|
||
| C | LLM 兜底层命中了未配置 API Key 的 OpenRouter 路由,所以把 401 直接抛给了前台 | High | Low | Confirmed |
|
||
| D | 第一层分类器把闲聊 / 总结类问题分错了,所以问题走错层级 | High | Low | Confirmed |
|
||
|
||
## Instrumentation Plan
|
||
- A: `frontend/src/api/ai.js` 记录请求入口与非 200 响应
|
||
- B: `backend-go/internal/api/ai_chat.go` 记录聊天入口、四层计划、LLM 路由与错误
|
||
- C: `backend-go/internal/ai/llm.go` 记录真实下游 URL、状态码与错误体前缀
|
||
- D: `backend-go/internal/ai/knowledge_service_client.go` 记录知识服务调用状态
|
||
|
||
## Log Evidence
|
||
- 知识服务稳定命中本地 `http://127.0.0.1:10233/classify` 和 `/search`
|
||
- 分类修复后:
|
||
- `给我讲个小故事` -> `intent=smalltalk`、`layer=bert_classifier`
|
||
- `你好,你是怎么工作的` -> `intent=smalltalk`、`layer=bert_classifier`
|
||
- `请根据知识库总结规则制度库里关于审批的要点` -> `intent=document`、`layer=llm_fallback`
|
||
- 进入 `llm_fallback` 时,埋点显示:
|
||
- 目标地址:`https://openrouter.ai/api/v1/chat/completions`
|
||
- `hasAPIKey=false`
|
||
- `authHeader=false`
|
||
- 修复前下游直接返回 401 `No cookie auth credentials found`
|
||
- 修复后,同类问题不再把 401 暴露给前台,而是返回“当前没有可用 LLM 兜底服务”的业务化提示
|
||
|
||
## Verification Conclusion
|
||
- **pre-fix**
|
||
- 闲聊 / 总结类问题会被误路由
|
||
- 一旦进入 `llm_fallback`,前台直接看到 OpenRouter 401 / cookie 报错
|
||
- **post-fix**
|
||
- 第一层分类已改成规则优先,闲聊与总结类问题路由更符合预期
|
||
- `llm_fallback` 不再直抛 401,而是返回更友好的业务化提示
|
||
- **Remaining Blocker**
|
||
- 当前剩余不是代码 Bug,而是运行环境缺口:
|
||
- OpenRouter 未配置 API Key
|
||
- 本地 `Ollama` 未启动(`127.0.0.1:11434` refused)
|