Files
wechat-bot-ai/docs/pi-im-agent.md
2026-06-09 14:50:53 +08:00

220 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Pi Agent + IM 使用说明
这份文档说明如何把当前项目作为 Pi agent 的运行壳,用 IM 作为外部通信渠道。
## 目标链路
```text
外部 IM 消息 -> wechat-bot -> Pi agent -> IM 回复
```
当前已实现:
- 微信 IM扫码登录后接收/回复消息。
- Pi agent作为 `serve` 类型处理微信消息。
- 本地微信数据:通过 OpenCLI `wx-cli` 访问聊天、群成员、统计和朋友圈缓存。
- 飞书 IM通过 `lark-cli` 登录、发消息、读消息、搜索消息。
## 安装命令
如果希望直接使用 `wb` 命令,在项目根目录执行:
```sh
npm link
```
也可以不用 `wb`,直接使用:
```sh
npm run start -- <command>
```
## 环境配置
复制并编辑 `.env`
```sh
cp .env.example .env
```
微信 + Pi 推荐配置:
```env
BOT_NAME='@你的微信昵称'
ALIAS_WHITELIST='允许私聊你的好友备注'
ROOM_WHITELIST='允许接入的群名'
AUTO_REPLY_PREFIX=''
WECHAT_DATA_DIR='.data/wechat'
WECHAT_STORE_MESSAGES='true'
PI_BIN='pi'
PI_NPM_PACKAGE='@earendil-works/pi-coding-agent'
PI_AGENT_ARGS='--print --no-session'
```
如果本机没有全局 `pi` 命令,可以先留空:
```env
PI_BIN=''
```
项目会通过 `npx --yes @earendil-works/pi-coding-agent` 调起 Pi但每次冷启动会慢一些。
## 微信扫码接入 Pi
推荐命令:
```sh
wb agent --im wechat --agent pi
```
等价命令:
```sh
wb start --serve pi
```
或使用 npm
```sh
npm run agent
npm run start -- start --serve pi
```
启动后终端会展示微信二维码。扫码登录成功后,链路如下:
```text
微信扫码登录 -> Wechaty 收消息 -> 本地 JSONL 捕获 -> Pi 单轮 agent 回复 -> 微信 IM 发回
```
触发规则:
- 私聊:发消息人必须在 `ALIAS_WHITELIST` 中。
- 群聊:群名必须在 `ROOM_WHITELIST` 中,并且消息里需要 `@机器人昵称`
- 非文本消息不会进入 Pi 回复链路。
## 微信内置分析命令
微信聊天中可以直接发命令:
```text
/统计 群 XX群1
/分析 群 XX群1
/统计 好友 好友备注
/分析 好友 好友备注
```
说明:
- `/统计` 只读取本地 JSONL不调用 AI。
- `/分析` 会调用当前 agent 或 AI 服务,并把最近消息样本发给模型。
- 隐私聊天建议优先使用本地模型或本地 Pi 配置。
## 本地微信数据与朋友圈
OpenCLI 的 `wx-cli` 可访问本机微信缓存数据:
```sh
wb wx init
wb wx sessions
wb wx history
wb wx search
wb wx contacts
wb wx members
wb wx stats
wb wx favorites
wb wx sns-feed
wb wx sns-search
wb wx sns-notifications
```
首次使用先执行:
```sh
wb wx init
```
查看 `wx-cli` 支持的完整命令:
```sh
wb wx help
```
## 飞书 IM
飞书当前是 CLI 控制通道,可登录、读写和搜索消息:
```sh
wb lark login --no-wait
wb lark status
wb lark messages --chat-id oc_xxx
wb lark search --query "关键词"
wb lark send --chat-id oc_xxx --text "hello"
```
`--no-wait` 会返回 device-flow 授权链接/扫码信息。你完成授权后,再运行读写命令。
当前飞书还不是实时事件通道;也就是说,飞书消息不会自动推给 Pi 回复。后续要实现飞书实时 agent需要接入 Lark event consume再把收到的消息转给 Pi。
## Pi 透传命令
直接调用 Pi
```sh
wb pi -- --help
wb pi -- --print "分析当前项目结构"
```
`PI_AGENT_ARGS` 控制 Pi 作为 IM 回复 agent 时的参数。默认:
```env
PI_AGENT_ARGS='--print --no-session'
```
这表示每条 IM 消息都是单轮非交互回复。如果希望沿用会话,可以去掉 `--no-session`,但要注意上下文和隐私数据会被 Pi session 保存。
## 常见问题
### 扫码后没有回复
检查:
- 私聊好友备注是否在 `ALIAS_WHITELIST`
- 群名是否在 `ROOM_WHITELIST`
- 群聊是否真的 `@``BOT_NAME`
- `.env``BOT_NAME` 是否形如 `@你的微信昵称`
- 当前消息是否为文本消息。
### Pi 回复慢
建议配置本机 Pi
```env
PI_BIN='pi'
```
如果留空,项目会通过 `npx` 调起 Pi首次执行和冷启动都会更慢。
### 如何只分析,不自动回复
使用命令行:
```sh
wb analyze --room "群名" --stats-only
wb analyze --friend "好友备注" --stats-only
```
或调用 AI 深度分析:
```sh
wb analyze --room "群名" --serve pi
```
### 安全边界
- 项目只处理本机已登录账号可见的数据。
- 微信自动回复受白名单控制。
- OpenCLI 远程执行默认关闭。
- `/分析` 会把消息样本交给当前模型或 agent处理隐私数据前请确认模型运行位置和配置。