如何快速用LangChain打造一个智能问答小客服?仅需40行代码!(含代码)

我们该如何应用LangChain进行多种的开发呢?在写一些项目的时候我们经常离不开要阅读一些开源产品的代码,而这个智能问答小客服就是在LangChain源代码上进行微小改动写出来的,能够更加清晰LangChain的结构。一起来看看吧!希望通过这个例子能帮助大家更加理解LangChain。
框架设计

组件一览:
组件类型子类型TextLoader索引组件文本加载器RecursiveCharacterTextSplitter索引组件文本分割器RetrievalQA链组件对话链ChatOpenAI模型组件LLMOpenAIEmbeddings模型组件文本嵌入模型Chroma索引组件VectorStores
准备工作
安装依赖
设置密钥
导入库和TXT加载器
开始编码
加载文本数据
使用TextLoader加载名为qa.txt的文本文件,并将其存储在data变量中。
分割文本
使用RecursiveCharacterTextSplitter将文本数据分割成多个片段,存储在all_splits变量中。
chunk_size
是将这个长字符串按照设置的字符数拆分。
chunk_overlap
参数用于指定文本切分时的重叠量(overlap),表示每个分块的前后两个分块之间会有多少个字符是重复的。这样做的目的是避免关键信息被切分。
创建向量储存器
创建一个Chroma向量存储器,并使用OpenAIEmbeddings作为嵌入器,将分割后的文本片段作为输入,存储在vectorstore变量中。
用户输入循环
进入一个无限循环,提示用户输入问题。
创建问答链
创建一个ChatOpenAI实例,使用"GPT-3.5-turbo"模型和温度值为0。然后,使用RetrievalQA.from_chain_type方法,将ChatOpenAI实例和vectorstore作为检索器,创建一个问答链。
获取并打印回答
将用户输入的问题作为查询传递给问答链,并将结果存储在ret变量中。然后,打印出回答结果。
运行主函数
如果当前文件被直接执行(而不是被导入为模块),则调用run()函数。
qa.txt
内容
问题:扎染围巾的活动时长是多少?
答案:扎染围巾的活动时长是1.5—2小时。
问题:扎染围巾的价格是多少元一位?
答案:扎染围巾的价格是120元/人。
问题:制作土耳其水拓画的活动时长是多少?
答案:制作土耳其水拓画的活动时长是1.5—2小时。
问题:制作土耳其水拓画的价格是多少元一位?
答案:制作土耳其水拓画的价格是100元/人。
问题:北京绢人(标准版)的制作价格是多少元一位?
答案:北京绢人(标准版)的制作价格是150元/人。
问题:北京绢人(唐人坊精装版)的制作价格是多少元一位?
答案:北京绢人(唐人坊精装版)的制作价格是200元/人。
问题:捕梦网的制作活动时长是多少?
答案:捕梦网的制作活动时长是1—1.5小时。
问题:捕梦网的制作价格是多少元一位?
答案:捕梦网的制作价格是130元/人。
问题:马卡龙塑料框的光影纸雕灯制作价格是多少元一位?
答案:马卡龙塑料框的光影纸雕灯制作价格是160元/人。
问题:木框的光影纸雕灯制作价格是多少元一位?
答案:木框的光影纸雕灯制作价格是180元/人。
问题:弦丝画制作的活动时长是多少?
答案:弦丝画制作活动时长是2—3小时。
问题:用弦丝画制作福字是多少元一位?
答案:用弦丝画制作福字、旺字等单字款价格120元/人。
问题:用弦丝画制作旺字是多少元一位?
答案:用弦丝画制作福字、旺字等单字款价格120元/人。
问题:用弦丝画制作喜字是多少元一位?
答案:用弦丝画制作福字、旺字等单字款价格120元/人,其他图案款请咨询详谈。
问题:端午节香囊的制作价格是多少元一位?
答案:端午节香囊价格100元/人。
问题:中秋节月饼的制作价格是多少元一位?
答案:中秋节月饼价格120元/人。
执行结果演示
(可以换种问法尝试,我把“活动时长”改为“时间”尝试了一下)

报错与解决
在运行代码中遇到过两种问题:
报错1:Number of requested results 4 is greater than number of elements in index 1, updating n_results = 1
解决办法:增加txt文本的长度或减少切割长度

报错2:(无关紧要,可以忽略)python3.10/site-packages/sklearn/svm/_classes.py:32: FutureWarning: The default value of dual
will change from True
to 'auto'
in 1.5. Set the value of dual
explicitly to suppress the warning.
warnings.warn(
解决办法:加入代码
import warnings
warnings.filterwarnings('ignore', category=FutureWarning)

完整代码
完整代码在githhub搜qq31682216/chatgpt_all,第一个项目便是。
小结
以上就是我在配置并使用用LangChain打造一个源代码智能问答小客服分享,希望可以帮到各位!欢迎关注或发私信与我共同讨论更多大模型领域知识~