概述
本指南涵盖常见配置问题、如何诊断以及行之有效的解决方案。快速诊断
检查环境变量
验证配置文件
检查服务健康状态
常见问题
1. 服务无法启动
缺少环境变量
症状:- 服务立即崩溃
- 日志显示 “variable not set” 错误
- 容器以代码 1 退出
- 至少一个 LLM 提供商密钥 (OPENAI_API_KEY, ANTHROPIC_API_KEY 等)
- 数据库凭据 (POSTGRES_*)
- Redis 连接 (REDIS_*)
无效的配置语法
症状:- “Failed to parse config” 错误
- YAML 语法错误
- 服务启动失败
2. 身份认证失败
Gateway 返回 401 未授权
症状:- 所有请求返回 401
- “Unauthorized” 错误
- API 密钥被拒绝
JWT 密钥未设置
症状:- “JWT secret not configured” 错误
- 身份认证中间件失败
3. 数据库连接问题
无法连接到 PostgreSQL
症状:- “connection refused” 错误
- “dial tcp: connect: connection refused”
- 服务启动时崩溃
数据库架构未初始化
症状:- “table does not exist” 错误
- “column not found” 错误
- 日志中的 SQL 错误
4. Redis 连接问题
无法连接到 Redis
症状:- Redis “connection refused”
- 会话状态不持久
- 缓存未命中
Redis 认证失败
症状:- “NOAUTH Authentication required”
- 连接正常但命令失败
5. LLM 提供商问题
API 密钥无效或过期
症状:- “Invalid API key” 错误
- LLM 提供商返回 401
- 任务立即失败
超出速率限制
症状:- LLM 提供商返回 429 错误
- 日志中显示 “Rate limit exceeded”
- 任务超时或失败
超出配额
症状:- “insufficient_quota” 错误
- “You exceeded your current quota”
- 所有 LLM 调用失败
6. 模型配置问题
模型未找到
症状:- “model not found” 错误
- “invalid model” 错误
- 任务因模型错误而失败
7. 预算和成本问题
任务超出预算
症状:- “Budget exceeded” 错误
- 任务因成本错误而失败
- 超出
MAX_COST_PER_REQUEST
预算执行未生效
症状:- 成本超出限制
- 没有预算错误
8. 性能问题
任务执行缓慢
症状:- 任务耗时是预期的 2-3 倍
- 高延迟
- 超时
高内存使用
症状:- OOM 错误
- 容器重启
- 高交换区使用
9. 流式传输问题
SSE 连接断开
症状:- SSE 流断开连接
- 事件在任务执行中途停止
- “Connection closed” 错误
未收到事件
症状:- 流中没有事件
- 空的 SSE 响应
- 流连接但没有数据
10. 工具执行问题
Python 代码执行失败
症状:- “WASI interpreter not found”
- Python 代码工具失败
- 沙箱错误
工具超时
症状:- “Tool execution timeout” 错误
- 工具无限期挂起
- WASI 超时错误
配置验证
验证所有设置
最佳实践
1. 使用特定环境的配置
2. 记录自定义设置
3. 版本控制
4. 定期验证
5. 监控配置
快速修复检查清单
当出现问题时,按顺序尝试以下方法:- 重启所有服务:
docker compose restart - 检查日志:
docker compose logs --tail=50 - 验证 .env 文件存在且包含必需变量
- 测试数据库连接:
docker compose exec postgres pg_isready - 测试 Redis:
docker compose exec redis redis-cli ping - 验证至少设置了一个 LLM API 密钥
- 检查磁盘空间:
df -h - 检查内存:
docker stats - 完全重置 (最后手段):
docker compose down -v && docker compose up -d
获取帮助
如果问题持续存在:-
收集日志:
-
导出配置:
- 查看 GitHub issues: https://github.com/Kocoro-lab/Shannon/issues
- 加入 Discord: https://discord.gg/NB7C2fMcQR