智能工具库

构建生产级 LLM 聊天机器人:两阶段架构与意图识别实战

构建生产级 LLM 聊天机器人:两阶段架构与意图识别实战

生产环境下的聊天机器人不能仅靠 LLM 直接生成。本文介绍“理解-生成”两阶段架构,通过意图识别将用户请求分类,再精准路由到对应模型或工具。文中提供基于 Oxlo.ai 的 Python 代码示例,涵盖分类、上下文生成及复杂推理模型路由。

2026-09-20 1来源:dev.to AI

构建生产级 LLM 聊天机器人:两阶段架构与意图识别实战

在 AI 应用开发中,直接向大模型(LLM)发送提示词往往被视为“银弹”。然而,在构建面向真实用户的生产级聊天机器人时,这种简单粗暴的方式往往会带来严重的隐患:请求路由错误、政策幻觉以及高昂的算力浪费。

要解决这些问题,我们需要引入意图识别机制,并采用两阶段架构来解耦理解与生成。本文将深入探讨这一架构的设计思路,并提供基于 Oxlo.ai 的实战代码。

为什么需要意图识别?

意图识别的核心任务是将用户非结构化的自然语言输入,映射为一个结构化的目标标签。

想象一下,用户说“我被多扣费了”,如果没有意图识别层,模型只能盲目猜测用户是想咨询余额、投诉还是查看账单。引入意图识别后,这个输入会被精准归类为 billing_dispute(账单争议),从而确保后续处理逻辑的准确性。

其价值在于:

  • 确定性钩子:为路由提供明确的依据。
  • 护栏与安全:防止模型在未授权的领域胡乱输出。
  • 数据分析:便于统计用户行为和优化服务。

两阶段架构设计

生产级聊天机器人的核心在于将“理解用户意图”和“生成回答”两个过程分离。

流程如下:

  1. 接收消息:获取用户输入。
  2. 分类与提取:识别意图并提取关键信息(如日期、ID、分类)。
  3. 路由分发:根据意图调用不同的处理程序,例如特定的 Prompt 模板、API 工具或检索步骤。
  4. 生成回复:由 LLM 根据处理结果生成最终回复。

这种设计将 LLM 限制在它最擅长的语言任务上,而复杂的业务逻辑和规则则由应用程序代码来执行,从而保证了系统的稳定性。

实战:意图分类

我们可以利用 LLM 本身来实现意图分类。这里推荐使用 Oxlo.ai,它采用请求定价模式,无论 Prompt 中包含多少示例或长定义,成本都是固定的,非常适合将其作为第一类 API 调用。

我们使用 OpenAI 兼容的接口,调用 Qwen 3 32B 模型,并开启 JSON 模式,以确保输出结构化且易于解析。

import os
import json
from openai import OpenAI

# 初始化客户端
client = OpenAI(
    base_url="https://api.oxlo.ai/v1",
    api_key=os.environ["OXLO_API_KEY"]
)

# 定义意图列表
INTENTS = [
    "billing_question", "technical_support", 
    "account_management", "general_chat"
]

def classify_intent(user_message: str) -> dict:
    """将用户消息分类为结构化意图"""
    response = client.chat.completions.create(
        model="qwen-3-32b",
        messages=[
            {
                "role": "system",
                "content": (
                    f"Classify the user message into one of these intents: {', '.join(INTENTS)}. "
                    "Respond with a JSON object containing 'intent' and 'confidence'."
                )
            },
            {"role": "user", "content": user_message}
        ],
        response_format={"type": "json_object"}
    )
    return json.loads(response.choices[0].message.content)

技术要点:

  • JSON Mode:避免了使用脆弱的正则表达式提取数据,确保了输出的稳定性。
  • 模型选择:Qwen 3 32B 在 Oxlo 平台上对多语言支持良好。

实战:基于意图的上下文生成

一旦意图被识别,我们就可以为该意图选择专门的系统提示词。这能显著减少幻觉,让模型专注于特定领域的任务。

SYSTEM_PROMPTS = {
    "billing_question": "You are a billing assistant. Cite policy ID 402. Be concise.",
    "technical_support": "You are a tier-1 support engineer. Ask one clarifying question.",
    "account_management": "You are an account coordinator. Never delete data.",
    "general_chat": "You are a helpful assistant."
}

def generate_response(intent: str, user_message: str) -> str:
    """根据意图生成定制化回复"""
    system = SYSTEM_PROMPTS.get(intent, SYSTEM_PROMPTS["general_chat"])
    response = client.chat.completions.create(
        model="llama-3.3-70b",
        messages=[
            {"role": "system", "content": system},
            {"role": "user", "content": user_message}
        ]
    )
    return response.choices[0].message.content

在这个例子中,如果是技术支持请求,模型被设定为“一级工程师”并被告知“只提一个问题”,这比通用的提示词更能引导模型输出有用的信息。

高级:复杂推理模型路由

对于简单的分类和生成任务,通用模型即可胜任。但对于需要深度推理的任务(如复杂的代码故障排查),我们可以利用 Oxlo.ai 提供的强大模型池进行动态路由。

代码无需变更,只需在生成阶段切换模型即可。例如,遇到技术支持中的代码调试请求,可以自动路由至 DeepSeek R1 671B MoE 或 Kimi K2.6 等推理能力更强的模型,从而大幅提升答案的准确度。

总结

构建生产级聊天机器人,关键在于控制。通过引入意图识别和两阶段架构,我们不仅提高了对话的准确率,还使得系统的延迟和成本变得可预测,同时极大地简化了审计和调试工作。

对于开发者而言,将 LLM 视为一个可调用的“工具箱”,而非全能的“上帝”,才是构建可靠 AI 应用的正确姿势。

本文基于 dev.to AI 的公开内容,由 AI 辅助整理改写后发布。

原标题:Chatbot Development with LLM and Intent Recognition

阅读原文