基于 WeChatFerry 接入个人微信,通过 Kimi (Moonshot AI) 的 Function Calling 实现智能群聊助手。
- 群聊监听:全量存储群聊消息到 SQLite 数据库
- 智能回复:@机器人 或关键词触发,理解群聊上下文后回复
- 餐厅推荐:接入高德地图 POI API,搜索并推荐附近餐厅
- 动态上下文:
- 滑动窗口(最近 20 条消息)
- 向量语义检索(bge-small-zh-v1.5 + sqlite-vec)
- 长对话自动摘要压缩
微信桌面客户端 ←→ WeChatFerry (hook)
↓
消息处理器 → 全量写入 SQLite + 异步向量入库
↓ (触发时)
上下文组装 = 摘要 + 语义检索 + 滑动窗口
↓
Kimi Agent (Function Calling) → 餐厅搜索等工具
↓
回复发送到群聊
- Windows 系统
- 微信 桌面客户端 v3.9.11.25(必须锁定此版本)
- Python 3.10+
# 1. 克隆项目
git clone <repo-url> && cd imclaw
# 2. 创建虚拟环境
python -m venv .venv
.venv\Scripts\activate
# 3. 安装依赖
pip install -r requirements.txt
# 4. 配置 API Key
copy .env.example .env
# 编辑 .env,填入你的 Key编辑 .env 文件:
| 变量 | 说明 | 获取方式 |
|---|---|---|
MOONSHOT_API_KEY |
Kimi API Key | platform.moonshot.ai |
AMAP_API_KEY |
高德地图 Web 服务 Key | lbs.amap.com |
可在 config.py 中调整其他参数:
BOT_NAME:机器人在群里的显示名TRIGGER_KEYWORDS:触发关键词列表AMAP_DEFAULT_CITY:默认搜索城市
# 确保微信 3.9.11.25 已登录
python main.py在群聊中:
@小助手 推荐个火锅店— 触发餐厅搜索@小助手 今晚吃什么— AI 基于上下文推荐- 包含"吃饭"、"餐厅"等关键词的消息也会触发
imclaw/
├── main.py # 入口
├── config.py # 配置
├── bot/
│ ├── wechat.py # wcferry 封装
│ ├── handler.py # 消息路由与触发检测
│ └── context.py # 动态上下文组装(核心)
├── ai/
│ ├── agent.py # Kimi API + tool calling
│ ├── embedding.py # bge-small-zh-v1.5 本地 embedding
│ └── tools.py # 工具定义
├── storage/
│ ├── database.py # SQLite 全量消息存储
│ └── vector_store.py # sqlite-vec 向量检索
├── services/
│ └── restaurant.py # 高德 POI 餐厅搜索
└── utils/
└── logger.py # 日志
- WeChatFerry 通过 hook 微信客户端工作,可能导致微信账号被封,建议用小号测试
- wcferry 官方已停止维护,需锁定微信版本 3.9.11.25
- 本项目仅供学习交流,请勿用于违法用途