You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用NLU优化Python+Langchain+OpenAI聊天机器人的引导类查询处理?

改进聊天机器人的引导类查询NLU检测方案

问题背景

我正在使用Python、Langchain和OpenAI为网站开发聊天机器人,需处理各类用户查询,包括"I have a query."、"Can you help me?"、"How does this work?"、"Tell me more."这类请求协助的引导类查询。目前采用关键词匹配方式实现自然语言理解(NLU)系统检测这类查询,但担心该方法会出现误判或遗漏变体,期望NLU系统能自动识别并触发对应响应。

现有简化实现代码

import re
from flask import Flask, request, jsonify

app = Flask(__name__)

# 检测引导类查询的函数
def detect_guidance_query(text):
    guidance_keywords = ["query", "question", "help", "assistance", "work", "more", "capabilities", "assist"]
    # 检查文本中是否包含任意引导类关键词
    for keyword in guidance_keywords:
        if re.search(r'\b' + re.escape(keyword) + r'\b', text, re.IGNORECASE):
            return True
    return False

# 生成AI引导响应的函数
def generate_guidance_response(query):
    # 此处可添加自定义引导响应逻辑,当前为固定示例
    return "Of course! How can I assist you?"

# 使用Chain生成专业回答的函数
def generate_chain_answer(question):
    # 此处可添加Langchain+OpenAI的回答逻辑,当前为固定示例
    return "I can provide information on a wide range of topics."

# 处理用户请求的路由
@app.route('/ask', methods=['POST'])
def ask():
    if request.method == 'POST':
        question = request.form['question']

        # 判断是否为引导类查询
        if detect_guidance_query(question):
            response = generate_guidance_response(question)
        else:
            response = generate_chain_answer(question)

        return jsonify({'answer': response})

if __name__ == '__main__':
    app.run(debug=True)

优化方案

方法1:利用OpenAI大模型做意图分类

直接调用OpenAI API让模型判断用户意图,无需维护关键词列表,能覆盖所有自然语言变体:

from openai import OpenAI
client = OpenAI()

def detect_guidance_query_with_llm(text):
    prompt = f"""判断以下用户查询是否属于请求协助的引导类查询(比如请求帮助、询问功能、需要更多信息等),只需返回"是"或"否":
用户查询:{text}"""
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": prompt}],
        temperature=0
    )
    return response.choices[0].message.content.strip() == "是"

修改路由中的判断逻辑:

@app.route('/ask', methods=['POST'])
def ask():
    if request.method == 'POST':
        question = request.form['question']

        # 使用LLM检测引导类查询
        if detect_guidance_query_with_llm(question):
            response = generate_guidance_response(question)
        else:
            response = generate_chain_answer(question)

        return jsonify({'answer': response})

方法2:用Langchain构建分类链

结合Langchain组件,无缝集成到现有工作流中:

from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

classification_prompt = PromptTemplate(
    input_variables=["user_query"],
    template="""判断以下用户查询是否属于请求协助的引导类查询(如请求帮助、询问功能、索要更多信息等),仅输出"是"或"否":
用户查询:{user_query}"""
)

classification_chain = LLMChain(llm=llm, prompt=classification_prompt)

def detect_guidance_query_langchain(text):
    result = classification_chain.run(user_query=text)
    return result.strip() == "是"

方法3:微调小型分类模型(可选)

若对调用成本有要求,可收集引导类/非引导类查询样本,微调BERT等小型文本分类模型,适合离线部署场景。

内容的提问来源于stack exchange,提问作者gaurav rawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:35:09