随着生成式AI技术的爆发,传统的基于固定关键词匹配的微信自动回复机器人已无法满足复杂的企业级售后、咨询需求。将个人微信集成平台与大语言模型(LLM)的 Function Calling(函数调用)能力相结合,可以让微信机器人不仅能“陪聊”,还能实时调用后端系统API(如查询订单状态、库存盘点、预约系统)实现真正的业务闭环。

核心实现逻辑

  1. 意图识别与工具绑定:大模型根据用户的自然语言输入,自主判断是否需要调用外部工具。

  2. 结构化参数提取:模型从聊天文本中自动提取关键参数(如订单号、时间、地名),组装成规范的 JSON 结构。

  3. API路由执行与回传:本地服务拦截模型的工具调用请求,执行真实的系统API查询并将结果喂给大模型,最终生成通顺的自然语言答复发送给微信用户。

代码实现

以下是一个基于 Python (OpenAI SDK 风格) 的微信消息结合大模型 Function Calling 的完整逻辑实现:

import json
import openai

# 配置大模型客户端(兼容 OpenAI 规范或第三方中转)
openai.api_key = "sk-your-llm-api-key-here"
openai.api_base = "https://api.openai.com/v1"

# 模拟集成平台后端提供的业务能力函数声明
def query_order_status_from_erp(order_id: str):
    """
    【工具函数】查询ERP系统中的订单状态
    """
    # 模拟真实API调用
    print(f"[ERP Tool] 正在请求系统查询订单: {order_id}")
    if order_id == "ORD20260701":
        return {"status": "已发货", "express": "顺丰速运", "tracking_no": "SF1234567890"}
    else:
        return {"status": "未找到该订单,请核对单号"}

# 注册可供大模型调用的工具列表定义
tools_definition = [
    {
        "type": "function",
        "function": {
            "name": "query_order_status_from_erp",
            "description": "当用户询问微信订单物流、发货状态时,必须调用此函数查询",
            "parameters": {
                "type": "object",
                "properties": {
                    "order_id": {
                        "type": "string",
                        "description": "用户提供的订单编号,例如 ORD20260701"
                    }
                },
                "required": ["order_id"]
            }
        }
    }
]

def process_wechat_message_with_llm(user_input_text):
    """
    处理微信用户消息的主流程
    """
    messages = [
        {"role": "system", "content": "你是一个专业的微信智能售后客服助理,能够通过工具查询用户的订单。"},
        {"role": "user", "content": user_input_text}
    ]

    # 第一步:请求大模型
    response = openai.chat.completions.create(
        model="gpt-4o",
        messages=messages,
        tools=tools_definition,
        tool_choice="auto"
    )

    response_message = response.choices[0].message
    
    # 第二步:检查大模型是否决定调用工具
    if response_message.tool_calls:
        messages.append(response_message)
        
        for tool_call in response_message.tool_calls:
            function_name = tool_call.function.name
            function_args = json.loads(tool_call.function.arguments)
            
            # 路由执行本地对应函数
            if function_name == "query_order_status_from_erp":
                function_result = query_order_status_from_erp(
                    order_id=function_args.get("order_id")
                )
                
                # 将工具执行结果追加到消息上下文
                messages.append({
                    "tool_call_id": tool_call.id,
                    "role": "tool",
                    "name": function_name,
                    "content": json.dumps(function_result, ensure_ascii=False)
                })

        # 第三步:再次请求大模型,将工具返回的结果转化为最终给用户的自然语言回复
        second_response = openai.chat.completions.create(
            model="gpt-4o",
            messages=messages
        )
        return second_response.choices[0].message.content
    else:
        return response_message.content

# 模拟测试
if __name__ == "__main__":
    sample_user_query = "你好,帮我查一下我的订单 ORD20260701 发货了没有?"
    print(f"[User]: {sample_user_query}")
    
    # 模拟实际调用集成框架发送回复
    final_reply = process_wechat_message_with_llm(sample_user_query)
    print(f"[AI Bot Reply]: {final_reply}")

开发落地注意事项

  1. 超时熔断控制:由于 Function Calling 涉及多次网络交互(模型-本地工具-模型),整个处理链路耗时较长,建议在微信回调网关中设置异步线程处理,避免触发HTTP网关超时。

  2. 敏感信息脱敏:在将聊天上下文或系统查询结果送入大模型前,必须对用户的手机号、身份证号等敏感隐私数据进行脱敏处理。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐