企业微信API二次开发:接入 AI 大模型实现外部群智能问答

在社群运营与客户服务场景中,将 AI 大模型(如 DeepSeek、OpenAI 等)与企业微信外部群打通,能够大幅降低人工客服答疑成本,实现 24 小时实时响应。

本文将演示如何利用企微二次开发 API 与 Webhook 回调,结合 LLM 构建一个具备上下文记忆能力的外部群智能问答助手。

一、 整体系统架构设计

系统通过 Webhook 接收企微群消息,将其发送给大模型进行处理,再将生成的结果异步回复至对应的外部群:

复制代码
 [企微外部群消息] ──► [企微 API 节点] ──► (Webhook 回调) ──► [开发者 Python 后端]
                                                                  │
                                                        (请求 LLM 大模型 API)
                                                                  │
 [企微外部群消息] ◄── [企微 API 节点] ◄── (HTTP 发送接口) ◄────────┘

环境准备提示 :在开始接入前,关于企微消息回调格式与发送消息的接口规范,可先查阅 企微二次开发 API 文档 了解完整的 Request / Response 字段定义。

二、 核心代码实现(Python + DeepSeek / OpenAI API)

以下为完整的可运行服务端代码示例,实现了接收群消息 ➔ 智能判断 ➔ 调用大模型 ➔ 回复群消息的完整闭环。

python 复制代码
from flask import Flask, request, jsonify
import requests
import json

app = Flask(__name__)

# 配置参数
QIWE_API_BASE = "http://your-qiwe-api-server"
DEEPSEEK_API_KEY = "your-deepseek-api-key"

def call_llm(prompt):
    """调用大模型 API 获取回答"""
    url = "https://api.deepseek.com/v1/chat/completions"
    headers = {
        "Authorization": f"Bearer {DEEPSEEK_API_KEY}",
        "Content-Type": "application/json"
    }
    data = {
        "model": "deepseek-chat",
        "messages": [
            {"role": "system", "content": "你是一位专业且礼貌的企业客服助手,回答要简明扼要。"},
            {"role": "user", "content": prompt}
        ]
    }
    try:
        res = requests.post(url, headers=headers, json=data, timeout=10)
        return res.json()['choices'][0]['message']['content']
    except Exception as e:
        return "不好意思,客服系统正忙,请稍后再试。"

def send_group_text(guid, chat_id, text):
    """通过企微 API 发送群消息"""
    url = f"{QIWE_API_BASE}/work/message/sendtext"
    payload = {
        "guid": guid,
        "content": {
            "chat_id": chat_id,
            "msg_type": 1,
            "text": text
        }
    }
    requests.post(url, json=payload)

@app.route('/webhook/group_msg', methods=['POST'])
def handle_group_msg():
    data = request.json
    
    # 解析企微群消息事件
    if data.get('event_type') == 'GROUP_MSG_RECEIVED':
        guid = data.get('guid')
        content = data.get('content', {})
        chat_id = content.get('chat_id')
        msg_text = content.get('text', '')
        
        # 触发条件(例如包含 @机器人 或特定前缀)
        if msg_text.startswith("@客服"):
            query = msg_text.replace("@客服", "").strip()
            
            # 1. 请求大模型
            ai_reply = call_llm(query)
            
            # 2. 回复群消息
            send_group_text(guid, chat_id, ai_reply)
            
    return jsonify({"code": 0, "msg": "success"})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

三、 优化与避坑指南

  1. 异步队列(MQ)隔离 :大模型生成回答通常需要 1-3 秒,Webhook 收到消息后应立即返回 200 OK,将任务推入 Redis/RabbitMQ 异步处理,防止超时导致的重复回调。

  2. 上下文对话管理 :如需支持多轮对话,建议在 Redis 中按 chat_id + user_id 维护历史消息 List,控制 Token 长度。

相关推荐
Kobebryant-Manba17 小时前
IEKT向量矩阵流程&评估
人工智能·算法·矩阵
看浪的路人17 小时前
第2讲:LLM API 统一网关——把 OpenAI/Claude/文心一言 管起来
人工智能·文心一言
奈落2417 小时前
工程界讲角色边界,控制论讲博弈与稳定性:从 Swarms 的实践清单到《自动化学报》的协同综述,多智能体‘协同‘这件事有两套语言
人工智能·深度学习·自动化·ai 编程
我要见SA姐117 小时前
Chrome 内存泄漏诊断指南:从现象定位到根因排查
ide·vscode·python·自动化·编辑器
小王R语言学习17 小时前
PaddleNLP:基于飞桨的大模型开发套件
人工智能·其他·paddlepaddle
椒颜皮皮虾྅17 小时前
让 C# 读懂整张图:DeploySharp 驱动 PaddleOCR v4/v5/v6,打通 OCR 全流程
开发语言·人工智能·深度学习·学习·c#·ocr·cuda
roman_日积跬步-终至千里17 小时前
【数据建模入门】从一家小店看懂数仓与机器学习:先理业务,再串技术
数据仓库·人工智能·机器学习·数据分析·数据建模
BJ_Bonree17 小时前
聊点技术 | Bonree ONE 业务链路观测实战 支付成功率下降,问题究竟出在哪一环?
大数据·人工智能
Bode_200217 小时前
TRIZ 理论知识体系与架构全景图
人工智能
richard_first17 小时前
第21章 训练一个简单的 GPT
人工智能·gpt·深度学习