在电商场景中,客服需要快速响应用户关于商品、促销、价格计算等问题,传统的固定话术或简单问答机器人很难满足复杂的用户需求。本文将分享如何基于大语言模型(LLM)打造一个具备工具调用能力、多轮推理能力的智能电商客服 Agent,实现从 “被动回答” 到 “主动推理 + 工具调用” 的升级。

一、核心需求与技术思路

1. 核心需求

电商客服需要处理三类核心问题:

  • 通用咨询(无需工具,直接回答);
  • 商品信息查询(调用数据库工具);
  • 促销信息读取(调用文件读取工具);
  • 价格计算(调用计算器工具)。 要求 Agent 能自主判断问题类型,通过多轮推理调用对应工具,最终整合结果给出答案。

2. 技术思路

  • 基于 LLM(支持 OpenAI 在线模型 / 本地 Ollama 开源模型)构建 Agent 核心逻辑;
  • 设计 “Thought-Action-Observation” 循环:Agent 先思考→调用工具→获取观测结果→继续思考(或给出答案);
  • 封装工具函数(商品查询、促销读取、计算),让 LLM 按需调用;
  • 配置化管理模型参数,兼容不同 LLM 部署方式。

二、系统架构设计

整个系统分为 4 个核心模块,结构如下:

├── main.py          # 主程序(循环交互、工具调用逻辑、迭代控制)
├── agent.py         # 客服Agent核心类(系统提示、LLM调用、对话管理)
├── op_llm_client.py # LLM客户端封装(兼容Ollama/OpenAI)
├── tools/           # 工具函数目录
│   ├── query_product_data.py  # 商品查询工具
│   ├── read_promotions.py     # 促销信息读取工具
│   └── calc.py                # 价格计算工具
├── config.json      # 模型配置文件(切换模型、设置参数)
└── .env             # 环境变量(OpenAI API Key等)

1. LLM 客户端封装(op_llm_client.py)

兼容本地 Ollama 和 OpenAI 在线模型,统一调用接口:

  • OllamaClient类封装本地模型的 HTTP API 调用,处理请求格式、响应解析;
  • 统一chat_completions_create方法,对齐 OpenAI 的调用逻辑,降低 Agent 层的适配成本;
  • 处理网络异常、模型不存在等异常场景,提升鲁棒性。

核心代码片段(Ollama 调用):

def chat_completions_create(self, model, messages, temperature=0.7):
    url = f"{self.base_url}/api/generate"
    headers = {'Content-Type': 'application/json'}
    payload = {
        "model": model,
        "prompt": self._format_messages(messages),
        "stream": False,
        "temperature": temperature
    }
    response = requests.post(url=url, headers=headers, data=json.dumps(payload))
    if response.status_code == 200:
        data = json.loads(response.text)
        return data['response']

2. 客服 Agent 核心(agent.py)

  • 系统提示词设计:定义 Agent 的角色(电商客服)、思考逻辑(Thought-Action-Observation 循环)、工具调用格式、输出规范(最终答案以 Answer: 开头);
  • 对话管理:维护messages列表,记录系统提示、用户输入、Agent 回复,实现多轮对话上下文管理;
  • 可调用实例:通过__call__方法让 Agent 实例像函数一样调用,简化交互逻辑;
  • 模型适配:自动判断当前使用的是 Ollama 还是 OpenAI 模型,调用对应生成接口。

核心系统提示词设计要点:

self.system_prompt = """
You are a Intelligent customer service assistant for e-commerce platform. 
If specific information about the product is involved, You run in a loop of Thought, Action, Observation.
Use Thought to describe your analysis process.
Use Action to run one of the available tools - then wait for an Observation.
When you have a final answer, output it as Answer: [Your answer here].

Available tools:
1. query_by_product_name: Query the database to retrieve product info by name
2. read_store_promotions: Read promotion info for the product
3. calculate: Calculate final price with discount

When using an Action, always format it as:
Action: tool_name: argument1, argument2, ...
"""

3. 主程序逻辑(main.py)

主程序是整个系统的 “大脑”,负责:

  • 加载配置,初始化 LLM 客户端和 Agent;
  • 处理用户输入,启动多轮推理循环;
  • 解析 LLM 输出的 Action 指令,调用对应工具;
  • 控制最大迭代次数,防止无限循环;
  • 提取最终 Answer 并返回给用户。

核心推理循环逻辑:

while iteration < max_iterations:
    try:
        result = agent(query)
        # 解析Action指令
        action_re = re.compile(r'^Action: (\w+): (.*)$')
        actions = [action_re.match(a) for a in result.split('\n') if action_re.match(a)]
        if actions:
            # 调用工具,获取观测结果
            tool_name = action_parts[0]
            tool_args = action_parts[1]
            observation = tools[tool_name](tool_args)
            query = f"Observation: {observation}"  # 作为下一轮输入
        elif "Answer:" in result:
            # 提取最终答案,结束循环
            print(f"客服回复:{result.split('Answer:', 1)[1].strip()}")
            break
        iteration += 1

三、关键技术亮点

1. 工具调用的标准化设计

通过正则表达式解析 LLM 输出的Action: 工具名: 参数格式,实现工具调用的标准化:

  • 工具注册:通过字典tools = {"query_by_product_name": query_by_product_name, ...}注册工具,便于扩展;
  • 参数传递:兼容单参数场景,异常捕获工具执行错误,返回友好的 Observation;
  • 扩展性:新增工具只需实现函数并注册到字典,无需修改核心推理逻辑。

2. 多模型兼容与配置化

通过config.json配置模型类型、参数,实现 “一键切换”:

{
  "openai": {
    "use_model": false,
    "model_name": "gpt-3.5-turbo",
    "base_url": "https://api.openai.com/v1",
    "max_iterations": 10,
    "temperature": 0.7
  },
  "ollama": {
    "use_model": true,
    "model_name": "qwen:7b",
    "max_iterations": 10,
    "temperature": 0.7
  }
}

3. 防无限循环的迭代控制

通过max_iterations参数限制推理轮数,避免 LLM 陷入 “思考 - 调用工具 - 思考” 的无限循环,提升系统稳定性。

四、运行与扩展指南

1. 环境准备

  • 安装依赖:pip install requests openai python-dotenv
  • 部署 Ollama(本地模型):参考Ollama 官方文档,拉取模型(如ollama pull qwen:7b);
  • 配置.env文件:设置 OpenAI API Key(如需使用在线模型);
  • 编写工具函数:实现query_by_product_nameread_store_promotionscalculate的具体逻辑(如连接数据库、读取促销文件)。

2. 扩展方向

  • 新增工具:如物流查询、订单状态查询,只需实现函数并注册到tools字典;
  • 优化提示词:加入更多场景约束(如商品分类、地域促销),提升工具调用准确性;
  • 多轮对话优化:增加上下文总结,减少 LLM 输入长度;
  • 流式输出:适配 Ollama/OpenAI 的流式响应,提升用户体验。

五、总结

本文构建的智能电商客服 Agent,核心是将 LLM 的 “推理能力” 与 “工具调用能力” 结合,解决了传统客服机器人 “只会固定回答” 的痛点。通过标准化的工具调用设计、多模型兼容、迭代控制,实现了一个可扩展、高鲁棒性的智能客服系统。

该方案不仅适用于电商客服场景,还可迁移到金融、政务、教育等需要 “推理 + 工具调用” 的领域,只需调整系统提示词和工具函数,即可快速适配新场景。

附:完整运行流程示例

输入您的问题或输入 '退出' 来结束: 你们店卖足球吗?如果卖的话现在有什么优惠?最终价格是多少?
Thought: 要回答这个问题,首先需要查询数据库确认是否有足球在售及价格。
Action: query_by_product_name: 足球
Observation: 足球有库存,售价120元。
Thought: 接下来需要查询足球的促销政策。
Action: read_store_promotions: 足球
Observation: 足球当前享9折优惠。
Thought: 最后需要计算最终价格。
Action: calculate: 120 * 0.9
Observation: 计算结果为108.0元。
Thought: 已获取所有信息,可给出最终答案。
客服回复: 据查询,本店有足球在售,原价120元,当前享9折优惠,最终购买价格为108元。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐