LangChain+Ollama实现自动通过企业微信发消息:零成本响应快(未认证企业也可用) 前言以“给妈妈自动发暖心问候语的本地Agent”为案例,最终成功用企业微信的API来实现消息推送。本以为很简单,结果踩了一路的坑。特别是对于未认证的个人组织企业,企业微信的种种限制让人抓狂。本文将详细记录整个过程,重点介绍接收消息服务器URL的概念,以及如何避开cpolar、路由侠等工具被识别为第三方服务商的坑。一、本地部署方案云端大模型(GPT / 通义 / 智谱)要 API Key、要计费、要联网。玩个小项目,奔着0成本去,就装了个Ollama,拉了个Qwen2.5:7b(通义千问的中文版,大概4.7G),本地跑起来,完全免费,断网也能用,我16G内存的笔记本CPU跑,一秒能吐五六个字,生成一句30字的问候语也就五六秒,完全够用。要是你有显卡,RTX 3060以上跑14B版本,那叫一个丝滑。本地方案:模型:Qwen2.5(7B 量化版约 4.7GB,中文能力强,通义出品)推理:Ollama 本地服务框架:LangChainChatOllama成本:0 元,断网也能跑速度:16G 内存 + CPU 跑qwen2.5:7b≈ 5 token/s(开流式可接受)RTX 3060 级别显卡跑 14B ≈ 15 token/s(丝滑)开streaming=True逐字吐字,体感比等整段生成快很多# 1. 装 Ollama 后拉模型ollama pull qwen2.5:7b# 2. Python 依赖pipinstalllangchain langchain-ollama requests python-dotenvfromlangchain_ollamaimportChatOllama llm=ChatOllama(model="qwen2.5:7b",base_url="http://localhost:11434",temperature=0.7,streaming=True,# 本地模型提速关键)💡 生成问候语这种短文本任务,7B 完全够用,别一上来就冲 32B,家用机跑不动。二、企业微信发消息的两条路通道是否需要 access_token未认证企业能否用限制群机器人 Webhook❌ 不需要✅ 直接用只能发到群,不能私信自建应用message/send✅ 需要⚠️ 能建但要可信 IP未认证企业卡死在 IP 白名单我们的目标只是“给妈妈发句话”,我选用群机器人 Webhook 方案,简便快捷。三、未认证企业的「会触发60020报错 」(重点避坑)不要选择自建应用:{"errcode":60020,"errmsg":"not allow to access from your ip"}含义:调用方公网 IP 不在「企业可信 IP」里。未认证企业的输入框是灰的,你需要二选一完成以下信息,才能配置白名单IP:配「可信域名」(要同主体备案域名 → 个人组织没有)配「接收消息服务器 URL」解灰接收消息服务器 URL 到底是什么?不是你去访问企微,是企微反过来访问你。方向:企微 Client → 你的 Flask Server场景归类:等价于「网站搭建 / 公网暴露本机 Web 路由」,不是远程桌面、不是游戏联机验证流程:后台填http://公网/wecom/callback企微发GET ?msg_signature=timestamp=nonce=echostr=密文你的服务验签、解密、原样返回明文 echostr(1 秒内)验证通过 → 可信 IP 输入框解灰我查了一些第三方工具生成可用的服务器IP,例如cpolar / 路由侠它们给的共享二级域名:*.cpolar.top*.rXX.cpolar.top*.luyouxia.net企微在保存 URL 时会查域名备案主体,发现主体是「cpolar 公司 / 路由侠公司」,不是你的企业主体,直接拦截:该域名主体为第三方服务商,请使用企业主体域名实测结论(未认证个人组织):cpolar 随机域名 → ❌ 被拦路由侠.net共享域名 → ❌ 被拦ngrok-free → ❌ 被拦四、成功方案:群消息 Webhook企业微信建一个「你+妈妈」的内部群(必须是企业微信内部群,不是微信外部群)→ 群设置 → 群机器人 → 添加 → 复制 Webhook:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx-xxxx-xxxx如何获取Webhook:点击群聊界面,点击右上角三个点,进入“消息推送”,添加一条消息推送后自动生成Webhook地址。若无权限,网页端进入企业微信后台管理,点击“应用管理”,进入自建栏下的“消息推送”应用,在“可创建消息推送的成员”处添加目标用户即可。因为是调用本地大模型,代码里就不需要连接大模型API的相关参数了( token / corp_id / 可信 IP):importos,requestsfromdotenvimportload_dotenv load_dotenv()WECOM_WEBHOOK=os.environ["WECOM_WEBHOOK"]defpush_to_mom(text:str)-str:r=requests.post(WECOM_WEBHOOK,json={"msgtype":"text","text":{"content":text}},timeout=5).json()return"✅ 已发送"ifr.get("errcode")==0elsef"❌{r}"五、LangChain 创建Agent (本地 Qwen2.5 驱动)完整代码:importosfromdatetimeimportdateimportdotenvimportrequests