如何利用LangChain和OpenAI实现相似输入匹配特定默认响应?
使用LangChain + OpenAI构建相似语句匹配的对话系统
需求概述
构建对话系统,当用户输入与预设示例语句语义相似时,返回对应预设响应;无匹配示例时可礼貌回应。
预设示例(中文翻译)
语句:您好,我需要更新我的电子邮箱地址。
回复:感谢您告知我们,请在此提供您的新邮箱。
语句:您好,我有一些关于我的案件的问题,能给我回个电话吗?
回复:您好,我们的案件经理会尽快给您回电。
实现方案
1. 依赖安装
执行以下命令安装所需依赖:pip install langchain openai python-dotenv
2. 核心代码实现
from langchain.llms import OpenAI from langchain.prompts import FewShotPromptTemplate, PromptTemplate from langchain.example_selectors import SemanticSimilarityExampleSelector from langchain.vectorstores import FAISS from langchain.embeddings import OpenAIEmbeddings import os from dotenv import load_dotenv # 加载OpenAI API密钥(需提前在.env文件中配置OPENAI_API_KEY) load_dotenv() # 结构化存储预设的语句-回复对 examples = [ { "statement": "您好,我需要更新我的电子邮箱地址。", "answer": "感谢您告知我们,请在此提供您的新邮箱。" }, { "statement": "您好,我有一些关于我的案件的问题,能给我回个电话吗?", "answer": "您好,我们的案件经理会尽快给您回电。" } ] # 定义单个示例的模板格式 example_template = """ 语句:{statement} 回复:{answer} """ example_prompt = PromptTemplate( input_variables=["statement", "answer"], template=example_template ) # 初始化语义相似度选择器:基于嵌入向量匹配用户输入与示例 example_selector = SemanticSimilarityExampleSelector.from_examples( examples, OpenAIEmbeddings(), FAISS, k=1 # 选取最相似的1条示例 ) # 构建Few-Shot提示模板 few_shot_prompt = FewShotPromptTemplate( example_selector=example_selector, example_prompt=example_prompt, prefix="请参照以下示例,对用户输入给出对应回复;若无相似示例,可礼貌回应。", suffix="语句:{user_input}\n回复:", input_variables=["user_input"], example_separator="\n\n" ) # 初始化OpenAI模型(temperature=0保证输出稳定性) llm = OpenAI(temperature=0) # 定义对话响应函数 def get_response(user_input): formatted_prompt = few_shot_prompt.format(user_input=user_input) return llm(formatted_prompt) # 测试用例 print(get_response("我想修改我的邮箱地址")) print(get_response("关于我的案子有疑问,能给我回个电话吗?"))
关键逻辑说明
- 语义相似度匹配:通过
SemanticSimilarityExampleSelector调用OpenAI嵌入模型,将用户输入和预设示例转化为向量,计算相似度后选取最匹配的示例 - 向量存储:使用FAISS轻量级向量数据库存储示例向量,实现快速检索
- 稳定输出:将LLM的
temperature设为0,避免生成随机内容,确保匹配示例时输出预设响应
内容的提问来源于stack exchange,提问作者iambdot
相关产品推荐
相关产品推荐

