如何用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
相关产品推荐
相关产品推荐

