Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

微信 AI 自动回复服务

这是一个基于 WeChaty + DeepSeek 的微信消息自动回复项目。你只需要配置 DeepSeek API Key,然后运行项目并扫码登录微信即可。

功能

  • 监听微信文本消息
  • 监听微信图片消息,并把图片放入对话上下文用于问答
  • 调用 DeepSeek Chat Completions API 生成回复
  • 可把联网搜索工具交给模型自动判断是否调用
  • 自动回复私聊消息
  • 可选开启群聊回复
  • 群聊中可读取机器人上线后收到的最近文本和图片上下文
  • 支持触发前缀,例如只回复 AI: 你好
  • 每个会话保留有限上下文,避免重复问答时丢失上下文

准备

当前项目已经安装好依赖。如果你换了机器或删除了 node_modules,重新安装即可:

npm install

复制环境变量文件:

cp .env.example .env

编辑 .env,至少填入:

DEEPSEEK_API_KEY=你的DeepSeek API Key

启动

开发模式启动:

npm run dev

终端里出现二维码后,用微信扫码登录。登录成功后,给这个微信号发私聊文本消息,机器人会自动调用 DeepSeek 并回复。

生产运行

先编译:

npm run build

再启动:

npm start

常用配置

.env 里可以调整这些选项:

BOT_SYSTEM_PROMPT=你是微信群聊里的轻松有趣的聊天机器人,像群友一样自然接话。\n默认回复非常简短:1-2句,能一句说完就别展开;可以适度使用 emoji,但不要刷屏。\n不要使用 LaTeX、Markdown 标题、表格、代码块或复杂排版;公式用普通文字讲。\n闲聊时活泼、俏皮、有梗但不冒犯;不要装权威,也不要输出长篇说教。\n当用户明确提问、求助、要步骤或重要信息时,认真准确回答;必要时分点,但仍保持简洁。\n不确定就直说不确定,并给出可验证的方向。\n群聊上下文里如果能看出是谁在说话,按上下文自然回应,避免重复解释自己是 AI。
BOT_TRIGGER_PREFIX=
ENABLE_ROOM_REPLY=false
ENABLE_ROOM_CONTEXT=true
BOT_MAX_HISTORY=8
BOT_MAX_ROOM_CONTEXT_MESSAGES=20
BOT_MAX_MESSAGE_AGE_SECONDS=120
LLM_ENABLE_WEB_SEARCH=true
LLM_ENABLE_THINKING=false

说明:

  • 私聊始终会回复文本和图片消息,不受 BOT_TRIGGER_PREFIX 限制。
  • BOT_TRIGGER_PREFIX=AI: 时,群聊里只有以 AI: 开头的消息才会触发回复。
  • ENABLE_ROOM_REPLY=false 是默认值,避免机器人在群里误回复。
  • 如果设置 ENABLE_ROOM_REPLY=true 且不设置触发前缀,群聊里需要 @ 机器人。
  • 如果设置 ENABLE_ROOM_REPLY=true 且设置了触发前缀,群聊里发送对应前缀即可触发。
  • ENABLE_ROOM_CONTEXT=true 时,机器人会缓存运行期间收到的最近群聊文本和图片;被触发回复时会把这些上下文交给 LLM。
  • BOT_MAX_HISTORY=8 表示每个私聊联系人或每个群聊最多保留最近 8 轮问答历史;不同私聊和不同群聊互相隔离,同一群聊内不同用户共享同一份群历史。
  • BOT_MAX_ROOM_CONTEXT_MESSAGES=20 表示最多带上最近 20 条群聊消息。
  • LLM_ENABLE_WEB_SEARCH=true 会通过 OpenAI function calling 暴露 web_search 工具;模型判断需要实时信息时会调用工具,程序搜索后再让模型生成最终回复。
  • LLM_ENABLE_THINKING=false 会在 API 请求里发送 thinking: { type: "disabled" },并在回复前移除 <think>...</think> 内容,避免 thinking 泄露到微信。

图片问答

机器人会把微信图片消息下载成 data:image/...;base64,...,并按 OpenAI 兼容的多模态 image_url 消息格式放入上下文。

  • 私聊里直接发送图片时,机器人会尝试描述图片;之后继续发文字,也可以基于最近图片追问。
  • 用户发送的图片会作为一条 user 消息传给模型,文本说明和图片 image_url 会放在同一条消息内容里。
  • 私聊里单独发送图片也会立即回复;群聊图片是否立即回复仍取决于 @ 机器人或触发前缀。
  • 群聊图片会在 ENABLE_ROOM_CONTEXT=true 时进入群上下文;真正回复仍受 ENABLE_ROOM_REPLY、@ 机器人或触发前缀控制。
  • .env 里的 DEEPSEEK_BASE_URLDEEPSEEK_MODEL 必须指向支持图片输入、enable_searchenable_thinking 的 OpenAI 兼容模型。纯文本模型或不支持这些额外参数的 API 通常会拒绝这类请求。

系统提示词换行

.env 里建议把系统提示词写成一个字符串,用 \n 表示换行:

BOT_SYSTEM_PROMPT=你是微信群聊里的轻松有趣的聊天机器人,像群友一样自然接话。\n默认回复非常简短:1-2句,能一句说完就别展开;可以适度使用 emoji,但不要刷屏。\n不要使用 LaTeX、Markdown 标题、表格、代码块或复杂排版;公式用普通文字讲。\n当用户明确提问、求助、要步骤或重要信息时,认真准确回答;必要时分点,但仍保持简洁。

程序启动后会自动把 \n 转成真正的换行。

群聊使用

默认不回复群聊。要启用群聊,修改 .env

ENABLE_ROOM_REPLY=true

启用后:

  • 如果 BOT_TRIGGER_PREFIX 留空,群聊里需要 @ 机器人,它才会回复。
  • 如果设置了 BOT_TRIGGER_PREFIX=AI:,群聊里发送 AI: 你的问题 即可触发。
  • 机器人只能看到它运行期间 WeChaty 收到的新消息,不能读取上线前的历史聊天记录。
  • 群聊上下文目前保存在内存里,重启后会清空。

WeChaty Puppet 说明

WeChaty 是否能直接扫码登录,取决于可用的微信协议 puppet 和账号情况。默认配置会使用 WeChaty 的默认 puppet;如果你的账号无法登录,建议使用 WeChaty Puppet Service 或其他可用 puppet。

如果你有 Puppet Service token,在 .env 中配置:

WECHATY_PUPPET=wechaty-puppet-service
WECHATY_PUPPET_SERVICE_TOKEN=你的token

然后重新启动:

npm run dev

验证

检查 TypeScript:

npm run typecheck

构建项目:

npm run build

注意

  • 请不要把 .env 提交到代码仓库。
  • 如果出现 MemoryCard load() exception: Unexpected end of JSON input,通常是本地登录缓存损坏,删除 *.memory-card.json 后重新扫码即可。
  • 如果运行中偶发 AggregateError,通常是 Web 微信或 puppet 的网络请求短暂失败;程序会以警告形式处理,频繁出现时请检查网络/代理,或改用 Puppet Service。
  • 微信网页版和第三方协议能力可能受微信风控、账号类型和 puppet 服务影响。
  • 建议先用小号或测试账号验证自动回复行为。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages