核心模块重构与功能增强技术报告
日期:2026年3月10日 — 2026年3月11日
本报告详细记录了 SayClaw 系统在此期间进行的核心模块重构与功能增强工作,涵盖 LLM 日志关联、WebChat 架构重写、API Key 管理重构以及移动端体验的全面升级。
1. LLM 日志与聊天消息关联
1.1 背景
系统已于此前完成了 LiteLLM → OneAPI 的迁移(refactor: admin-api + portal-api 清除 LiteLLM 遗留 → One API),OneAPI 直连 MySQL,实现了请求日志的实时记录。本次更新在此基础上,打通了 LLM 调用日志与用户聊天消息之间的双向关联。
1.2 实现细节
| 接口 | 文件 | 关联逻辑 |
|---|---|---|
chatHistoryHandler | portal-api/cmd/server/main.go | assistant 消息通过 instance_id + ±5s 时间窗口匹配 oneapi.logs,返回 prompt_tokens / completion_tokens / cost_usd / latency_ms / model |
usageLogsHandler | portal-api/cmd/server/usage_handlers.go(新增) | LLM 调用日志反向关联 chat_messages,返回 user_message / ai_message 预览 |
涉及 Commits:
f1b1425feat: LLM 日志与聊天消息关联(backend)f050c41feat: WebChat 和使用记录页面展示 LLM 关联信息(frontend)
2. WebChat WebSocket 架构重写
2.1 消息投递与持久化
WebChat 模块在已有 WebSocket 直连架构的基础上,完成了以下关键修复:
- Telegram 消息互通:将消息发送的
deliver参数从false修改为true,实现 Web 端发送的消息同步推送至用户绑定的 Telegram Bot。 - 聊天历史加载:页面加载时优先从 Portal API
/me/chat/history获取持久化的聊天记录,fallback 到 OC Gateway 的chat.history事件。 - 消息持久化 (
saveChatMsg):前端在收发消息后,调用 Portal API 的POST /me/chat/save端点,将聊天记录写入sayclaw_portal.chat_messages表。
2.2 后端支持
portal-api新增POST /me/chat/save端点,接收instance_id、role、content参数。- 修复 WebChat session verify 流程,确保 Nginx
auth_request鉴权链路正常工作。
涉及 Commits:
0fd3c23feat: 重写 API Key 管理模块和 WebChat WS 架构(backend)4c9eabefeat: WebChat 页面修复 - deliver=true, 历史记录加载(frontend)
3. API Key 管理模块重构
为配合 OneAPI 架构,管理后台(admin-api)的 API Key 管理模块进行了彻底重写。
| 模块 | 文件 | 变更说明 |
|---|---|---|
| Master Key 管理 | admin-api/cmd/server/api_master_keys.go | 重写主密钥管理逻辑,实现与 OneAPI Channel 的自动同步。添加/修改主密钥时自动在 OneAPI 中创建或更新对应 Channel |
| Sub Key 派生 | admin-api/cmd/server/deprecated_sub_keys.go | 重写子密钥(Token)派生逻辑,基于实例信息自动在 OneAPI 中生成 Token 并设置额度限制 |
涉及 Commits:
0fd3c23feat: 重写 API Key 管理模块和 WebChat WS 架构(backend)e172e89Merge feature-webchat-tg-integration into main(backend)
4. 移动端 (H5) 体验全面升级
4.1 功能同步
移动端 Chat 和 Usage 页面从静态/简化版本升级为与 Web 端功能完全一致:
| 页面 | 同步功能 |
|---|---|
/portal/m/chat/ | WebSocket 直连、deliver=true 消息互通、saveChatMsg 持久化、Portal API 优先加载历史、AI 回复展示 token/费用/延迟/模型 |
/portal/m/usage/ | 接入真实 API(summary/daily/logs)、今日/本月用量统计、7/14/30 天趋势图、调用日志关联消息展开 |
4.2 全局移动端自动跳转
新增 portal/shared/js/mobile-redirect.js 统一检测脚本,覆盖所有 Web 端页面:
- 检测逻辑:User-Agent 匹配(Android / iPhone / iPad / iPod / Mobile / WeChat)或
window.innerWidth < 768 - 跳转规则:
/portal/xxx/→/portal/m/xxx/ - 覆盖页面:dashboard、chat、usage、marketplace、settings、login、根 index.html
- OAuth 兼容:
/auth/callback回调也支持移动端跳转
4.3 Dashboard UI 修复
- 添加底部导航菜单(
tab-bar-mount+renderTabBar('dashboard')),与其他移动端页面一致 - 添加统一的
mobile-header(标题 + Logo) - 调整内容区间距(
page-content容器,padding: 20px 16px)
涉及 Commits:
7b0eee5feat: 移动端 chat 和 usage 页面同步 Web 端完整功能986cb3bfeat: 移动端自动跳转3a9fe74fix: 移动端 dashboard 添加底部导航菜单和 header
5. 完整 Commit 清单
sayclaw-backend(/opt/sayclaw-backend-repo)
| Commit | 时间 | 说明 |
|---|---|---|
0fd3c23 | 03-10 20:45 | feat: 重写 API Key 管理模块和 WebChat WS 架构 |
e172e89 | 03-10 20:54 | Merge feature-webchat-tg-integration into main |
f1b1425 | 03-11 15:44 | feat: LLM 日志与聊天消息关联 |
sayclaw-app(/var/www/sayclaw-app)
| Commit | 时间 | 说明 |
|---|---|---|
4c9eabe | 03-10 20:48 | feat: WebChat 页面修复 - deliver=true, 历史记录加载 |
37427cb | 03-10 20:55 | Merge feature-webchat-tg-integration into main |
f050c41 | 03-11 15:45 | feat: WebChat 和使用记录页面展示 LLM 关联信息 |
7b0eee5 | 03-11 16:39 | feat: 移动端 chat 和 usage 页面同步 Web 端完整功能 |
986cb3b | 03-11 17:02 | feat: 移动端自动跳转 |
3a9fe74 | 03-11 17:09 | fix: 移动端 dashboard 添加底部导航菜单和 header |