企业微信 API 实战:对接 DeepSeek / 大模型打造企微 AI 智能体 Agent

发布时间:2026/10/23 22:32:48
企业微信 API 实战:对接 DeepSeek / 大模型打造企微 AI 智能体 Agent

把大模型接进企微,不是"调个 API 就完事"。客户发一条消息,你要判断意图、查上下文、调模型、拼回复、发回去,中间任何一环出问题,体验就垮了。这篇讲清楚整条链路怎么搭。

先想清楚 Agent 和 Chatbot 的区别

Chatbot 是"你问我答",一问一答,没有状态。Agent 是"你交代一件事,它自己拆步骤、调工具、做完汇报"。

在企微场景里,Agent 的价值在于能调企微自己的接口:查客户资料、发消息、拉群、打标签。客户说"给张三发个报价单",Agent 自己查张三是谁、找到会话、发送文件。

整体架构

客户消息 → Webhook 回调 → 意图识别 → Agent 循环 → 工具调用 → 回复发送

Agent 循环是核心:模型判断下一步该做什么,调用工具,拿到结果,再判断,直到完成或转人工。

意图识别:别什么都扔给模型

客户消息进来,先过一层规则判断,明显不是任务指令的直接走快捷回复:

TASK_KEYWORDS = {"查", "发", "拉", "打", "统计", "提醒"} def is_task(text): return any(k in text for k in TASK_KEYWORDS) def handle_message(data): text = data["content"] if not is_task(text): reply(data["conversationId"], "请问有什么可以帮您的?") return # 扔给 Agent 处理 agent_queue.put(data)

这层过滤能挡掉 70% 的无效调用,省 token 也省时间。

Agent 循环:模型决策,工具执行

Agent 的核心是"模型决定调什么工具,代码执行工具,结果喂回模型"。

TOOLS = { "query_customer": {"desc": "查询客户资料", "func": query_customer}, "send_message": {"desc": "发送消息", "func": send_message}, "create_group": {"desc": "创建群聊", "func": create_group}, "add_label": {"desc": "给客户打标签", "func": add_label}, } def agent_loop(task, context): for step in range(10): # 最多 10 步,防死循环 prompt = build_prompt(task, context, TOOLS) action = llm.decide(prompt) if action["type"] == "reply": return action["content"] if action["type"] == "tool": tool = TOOLS[action["tool"]] result = tool["func"](**action["args"]) context.append({"tool": action["tool"], "result": result}) continue if action["type"] == "escalate": return transfer_to_human() return "任务处理超时,已转人工。"

模型返回的 action 是结构化 JSON,包含 type、tool、args 或 content。代码解析后执行,结果追加到 context,继续循环。

工具封装:安全第一

Agent 能调的工具要严格控制,不能随便开一个"执行任意代码"的口子。

每个工具函数里做二次校验:

def send_message(conversation_id, content): # 校验会话归属 if not is_valid_conversation(conversation_id): raise ValueError("无效会话") # 校验内容长度 if len(content) > 2000: raise ValueError("内容过长") # 校验敏感词 if contains_sensitive(content): raise ValueError("内容不合规") return call_api("message/sendText", { "appid": APPID, "conversationId": conversation_id, "content": content })

工具白名单 + 函数内校验,两层防护。

上下文管理:别塞太多

企微群聊的上下文跳跃、多人交叉,全塞给模型既贵又乱。做法:

  • 只取最近 10 条相关消息

  • 标记发言人,让模型知道谁问了什么

  • 排除机器人自己发的消息

def build_context(messages, limit=10): context = [] for msg in messages[-limit:]: if msg["senderUin"] == BOT_UIN: continue context.append(f"{msg['senderName']}: {msg['content']}") return "\n".join(context)

一个真实场景

某销售团队的企微 Agent,客户说"给李总发一份产品资料",Agent 自动:

  1. 查"李总"是谁 → 找到客户 uin

  2. 查资料库 → 找到最新产品手册

  3. 上传文件 → 拿到 CDN 凭证

  4. 发送文件 → 完成

全程 15 秒,销售不用动手。

接口路径和字段在Eyun 开发文档里能查到,Agent 的工具封装在 Eyun 控制台开通实例后配置。