Skip to content

05 · 跑起来与安全边界

前四章分别搞定了解密、读库、MCP、Skill。这一章把它们接上 NoCannoBB 的模型推理, 端到端跑起来,并把必须守住的边界收个尾。

一、配置 NoCannoBB 作为模型后端

NoCannoBB 提供 OpenAI / Anthropic 兼容的推理接口。Skill 的「摘要、归纳、路由」这些 智力活,都由它背后的模型完成。你需要两样东西:base_urlapi_key

以常见客户端为例(按你实际用的客户端填):

  • OpenAI 兼容
    OPENAI_BASE_URL=https://<你的 NoCannoBB 网关>/v1
    OPENAI_API_KEY=<你的 key>
  • Anthropic 兼容
    ANTHROPIC_BASE_URL=https://<你的 NoCannoBB 网关>
    ANTHROPIC_API_KEY=<你的 key>

模型选择跟着客户端走即可。到这一步,「Skill 的大脑」就接好了。

二、端到端启动顺序

1) 微信登录运行
2) (一次性)导出明文库:
     cd course/wechat-ai-assistant/code
     python -m wechat_win.main_win --out C:\temp\wx_plain
3) 配置 MCP,指向明文库:WECHAT_PLAIN_DIR=C:\temp\wx_plain
4) 安装 Skill:skill/wechat-local/ → 客户端 skills 目录
5) 配置 NoCannoBB:base_url + api_key
6) 打开客户端对话:
     "帮我总结下我和张三最近的对话"
     "微信里搜一下提到'报销'的消息"

流程串起来就是:

你的话 → Skill 判断用哪个工具 → MCP 只读查明文库 → 结果回给模型
        → NoCannoBB 推理做摘要 → 人话回给你

三、自检清单

  • [ ] python wechat_win/selftest_crypto.pySELFTEST PASS
  • [ ] python -m wechat_win.main_win 能打印出消息表数 / 联系人数
  • [ ] python -m mcp dev wechat_mcp/server.py 里四个工具可见、list_contacts 有数据
  • [ ] 客户端能列出 wechat-local 的工具
  • [ ] 问一句「我的联系人里有谁」能拿到脱敏结果
  • [ ] 问一句「搜下提到 X 的消息」能返回命中

四、安全边界(这套设计的重点)

这套链路从架构上把风险关进了笼子,落地时请守住:

数据来源

  • 仅用于你自己设备、你自己账号的数据。上下文一旦暗示是他人账号/设备,停止。

密钥

  • 密钥只在第 1 章取一次、用来解密。推荐用来源 A(先导出明文库),让 MCP 层完全不碰 密钥;必须用来源 B 时,密钥只经环境变量传入,永不打印、不写日志、不进返回值
  • 别把 --dump-key 的输出贴进聊天、issue、截图。

能力面

  • MCP 只暴露 4 个只读工具;绝不execute_sql / dump_key / export_all
  • 读库层只读打开(mode=ro)、参数化查询、标识符白名单——三条都别拆。

明文库与临时文件

  • 明文库(C:\temp\wx_plain 或临时文件)等同于你的全部聊天记录,不要上传、不要进 版本库、不要发给任何外部服务。用完删掉;MCP 的临时库已在退出时自动清理。
  • 演示 / 分享结果时开 SANITIZE=1 打码 wxid。

分发

  • 方法参考公开项目 LifeArchiveProject/WeChatDataAnalysis(无 LICENSE),本工具按算法 事实 clean-room 独立实现。对外分发前请自行确认代码来源与再分发权限。

五、常见问题

  • 换了微信版本后取不到密钥:DLL 汇编特征可能变,用 --internal-key 手动传,或 调 dll_scan_win.py 的匹配间距(第 1 章故障排查)。
  • MCP 报"未配置消息库"WECHAT_PLAIN_DIR 指向的目录里没有 message_0.db, 或来源 B 的 WECHAT_ENC_MSG_DB + WECHAT_MSG_KEY 没配全。
  • 搜索慢search_messages 是在多张表上拉近消息后做 Python 层子串匹配;数据量大时 调小每表拉取量或先用 read_chat_history 缩小到具体会话。
  • macOS:解密/读库一致,密钥用 lldb 捕获,见 code/wechat_mac/README-mac.md

你学到了什么

不只是「会用一个 Skill」,而是完整走了一遍:

  1. 自己写 .py 连接并解密数据库(SQLCipher-4 内核 + 进程内存取密钥);
  2. 把只读查询封装成干净的函数(防注入三纪律);
  3. 用 MCP 把这些函数暴露成受控工具;
  4. 用 Skill 把自然语言路由到工具、编排多步、约束边界;
  5. 接上 NoCannoBB 的推理,得到一个真正好用的本地微信 AI 助手。

这套「Python 干活 → MCP 暴露 → Skill 编排 → NoCannoBB 推理」的模式,换个数据源 (浏览器历史、笔记、本地文件……)就能复制到别的场景。


上一章:04 · NoCannoBB Skill | 返回:课程首页