使用 LangChain、Pinecone 和 LLM(如 GPT-4 和 ChatGPT)构建基于文档的问答系统

目录

一、简介

二、为什么语义搜索+GPT问答比微调GPT更好?

2.1、更广泛的知识覆盖:

         2.2、特定于上下文的答案:

         2.3、适应性

         2.4、更好地处理模糊查询

三、LangChain 模块

四、设置环境

五、加载文档

六、分割文档

七、使用 OpenAI 嵌入文档

八、使用 Pinecone 进行向量搜索

九、查找相似的文档

十、使用 LangChain 和 OpenAI LLM 进行问答

十一、示例查询和答案

十二、结论


一、简介

今天我们将深入探讨使用LangChainPinecone创建基于文档的问答系统的过程,利用最新的大文本语言模型(LLMs),如OpenAI GPT-4和ChatGPT。

LangChain 是一个强大的框架,专为开发由语言模型驱动的应用程序而设计,而 Pinecone 则是一个高效的向量数据库,用于构建高性能的向量搜索应用程序。我们的用例重点是在特定的文档上回答问题,仅依赖于文档中的信息来生成准确和符合上下文的答案。

通过将语义搜索的能力与GPT等LLM的卓越能力相结合,我们将演示如何构建一种利用尖端人工智能技术的先进文档问答系统。

二、为什么语义搜索+GPT问答比微调GPT更好?

在深入实现之前,我们先来了解一下使用语义搜索+GPT问答相比微调GPT的优势:

2.1、更广泛的知识覆盖:

语义搜索 + GPT 问答主要包括两个核心步骤,首先从大量的文档中找到相关的段落,然后根据这些段落生成答案。这种方法可以提供更准确和最新的信息,利用来自各种来源的最新信息。而微调GPT则依赖于模型在训练期间编码的知识,这些知识随着时间的推移可能变得过时或不完整。

2.2、特定于上下文的答案:

语义搜索+GPT问答可以通过将答案基于相关文档中的特定段落来生成更具上下文的、更精确的答案。然而,微调的GPT模型可能会根据模型中嵌入的通用知识生成答案,这些答案可能不够准确或与问题的上下文无关。

2.3、适应性

语义搜索组件可以轻松更新新的信息源或调整到不同的领域,使其更适应特定的用例或行业。相比之下,微调GPT需要重新训练模型,这可能耗时且计算成本高昂。

2.4、更好地处理模糊查询

语义搜索可以通过识别与问题相关的最相关段落来消除查询的歧义。与没有适当上下文的微调GPT模型相比,这可以带来更准确和相关的答案。

三、LangChain 模块

LangChain 提供了对几个主要模块的支持:

模型:LangChain 支持的各种模型类型和模型集成。

索引:当结合你自己的文本数据时,语言模型通常更加强大 - 这个模块涵盖了这样做的最佳实践。

:链不仅仅是一个单一的 LLM 调用,而是一系列的调用(无论是对 LLM 还是其他工具)。LangChain 提供了一个标准的链接口,许多与其他工具的集成,以及针对常见应用的端到端链。

四、设置环境

首先,我们需要安装所需的包并导入必要的库。

安装所需的包:

!pip install --upgrade langchain openai -q
!pip install unstructured -q
!pip install unstructured[local-inference] -q
!pip install detectron2@git+https://github.com/facebookresearch/detectron2.git@v0.6#egg=detectron2 -q
!apt-get install poppler-utils

导入必要的库:

import os
import openai
import pinecone
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Pinecone
from langchain.llms import OpenAI
from langchain.chains.question_answering import load_qa_chain

五、加载文档

导入文档之前,请确保pillow <= 6.2.2,否则会抛出下面的异常:

ImportError: cannot import name 'is_directory' from 'PIL._util' (/usr/local/lib/python3.10/dist-packages/PIL/_util.py)

检查pillow的版本,重新安装6.2.2版本,安装完成后需要重启Colab Runtime环境。

!pip show pillow
!pip uninstall pillow 
!pip install --upgrade pillow==6.2.2 

首先,我们需要使用 LangChain 的 DirectoryLoader 从一个目录中加载文档。在这个例子中,我们假设文档存储在一个叫做 'data' 的目录中。

directory = '/content/data'def load_docs(directory):loader = DirectoryLoader(directory)documents = loader.load()return documentsdocuments = load_docs(directory)
len(documents)

六、分割文档

现在,我们需要将文档分割成更小的块进行处理。我们将使用 LangChain 的 RecursiveCharacterTextSplitter,它默认尝试在字符 ["\n\n", "\n", " ", ""] 上进行分割。

def split_docs(documents, chunk_size=1000, chunk_overlap=20):text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)docs = text_splitter.split_documents(documents)return docsdocs = split_docs(documents)
print(len(docs))

七、使用 OpenAI 嵌入文档

一旦文档被分割,我们需要使用 OpenAI 的语言模型来嵌入它们。首先,我们需要安装 tiktoken 库。

!pip install tiktoken -q

现在,我们可以使用 LangChain 的 OpenAIEmbeddings 类来嵌入文档。

import openai
from langchain.embeddings.openai import OpenAIEmbeddingsembeddings = OpenAIEmbeddings(model="text-embedding-ada-002")query_result = embeddings.embed_query("记忆内存")
len(query_result)

八、使用 Pinecone 进行向量搜索

接下来,我们将使用 Pinecone 为我们的文档创建一个索引。首先,我们需要安装 pinecone-client。

!pip install pinecone-client -q

在初始化之前,我们需要在Pinecone控制台创建一个Index索引,Dimensions的值为我们前面计算的嵌入维度大小,这里为1536,具体需要根据你的实际计算结果来配置。

 然后,我们可以初始化 Pinecone 并创建一个 Pinecone 索引。

pinecone.init(api_key="pinecone api key",environment="env"
)index_name = "langchain-demo"index = Pinecone.from_documents(docs, embeddings, index_name=index_name)

我们使用方法创建了一个新的 Pinecone 向量索引。这个方法接受三个参数:Pinecone.from_documents()

1、docs: 一个由 RecursiveCharacterTextSplitter 分割成更小块的文档列表。这些更小的块将被索引到 Pinecone 中,以便以后更容易地搜索和检索相关的文档。

2、embeddings: OpenAIEmbeddings 类的一个实例,它负责使用 OpenAI 的语言模型将文本数据转换为嵌入(即数值表示)。这些嵌入将被存储在 Pinecone 索引中,并用于相似性搜索。

3、index_name: 一个表示 Pinecone 索引名称的字符串。这个名称用于在 Pinecone 的数据库中识别索引,并且应该是唯一的,以避免与其他索引冲突。

此方法用于处理输入文档,使用提供的 OpenAIEmbeddings 实例生成嵌入,并用指定的名称创建一个新的 Pinecone 索引。生成的索引对象可以执行相似性搜索,并根据用户查询检索相关的文档。Pinecone.from_documents()

九、查找相似的文档

现在,我们可以定义一个函数,根据给定的查询找到相似的文档。

def get_similiar_docs(query, k=2, score=False):if score:similar_docs = index.similarity_search_with_score(query, k=k)else:similar_docs = index.similarity_search(query, k=k)return similar_docs

查询结果

十、使用 LangChain 和 OpenAI LLM 进行问答

有了必要的组件,我们现在可以使用 LangChain 的 OpenAI 类和一个预构建的问答链来创建一个问答系统。

# model_name = "text-davinci-003"
# model_name = "gpt-3.5-turbo"
model_name = "gpt-4"
llm = OpenAI(model_name=model_name)chain = load_qa_chain(llm, chain_type="stuff")def get_answer(query):similar_docs = get_similiar_docs(query)answer = chain.run(input_documents=similar_docs, question=query)return answer

十一、示例查询和答案

最后,让我们用一些示例查询来测试我们的问答系统。

query = "如何安装LangChain?"
answer = get_answer(query)
print(answer)query = "管理LLM的提示?"
answer = get_answer(query)
print(answer)

十二、结论

在这篇博客文章中,我们演示了如何使用 LangChainPinecone 构建一个基于文档的问答系统。通过利用语义搜索和大型语言模型,这种方法提供了一个强大而灵活的解决方案,用于从大量的文档中提取信息。你可以进一步定制这个系统,以适应你的特定需求或领域。

Google Colab Notebook:

https://github.com/Crossme0809/langchain-tutorials/blob/main/Langchain_Semnatic_Serach_Pinecone.ipynb

如果你对这篇文章感兴趣,而且你想要学习更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。立即获取:

  • 「ChatGPT超全资料汇总|总有一款是你需要的」
  • 「最完整的ChatGPT提示工程(含PPT|Xmind|视频|代码)」
  • 「最强ChatGPT工具集合|超1200+工具,58个分类」

您将找到丰富的资源和工具,帮助您深入了解和应用ChatGPT。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17008.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 启示录:AI 已经把人类逼退到了信仰和宗教的边界上了?

哲学的滑落 哲学之初&#xff0c;研究的对象是客观存在的物质实体&#xff0c;物体是不依赖于人们思想的东西。后来康德、叔本华等说物自体不可知&#xff0c;于是哲学家离开客体&#xff0c;转而研究人这一主体&#xff0c;研究人们内在感知到的表象世界。 到了维特根斯坦这里…

特斯拉因辅助驾驶发生致命车祸;APUS发布AiLMe大模型;欧洲成立人工智能研究中心来监督大型平台丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 APUS多模态大模型“AiLMe”发布 4月19日&#xff0c;APUS发布自研多模态人工智能大模型“AiLMe”。据介绍&#xff0c;AiLMe参数已达千亿规模&#xff0c;具备对文本、图像、视频、音频的理解和生成能力。针对具…

关于生成式人工智能服务管理的一些思考

&#xff08;本文阅读时间&#xff1a;&#xff16;分钟&#xff09; 01 生成式AI是我这几个月的重点研究领域&#xff0c;我也先后发表了20多篇文章&#xff0c;20来条视频节目&#xff0c;现在也在写作一本相关书籍&#xff0c;在业界也有那么一点点影响。 所以当生成式人工智…

马斯克低头了?改口此前评价比亚迪“做的不好”!

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 不得不说&#xff0c;互联网是带记忆的。 近日&#xff0c;有网友“挖”出一条 YouTube 上的“考古”视频 —— 特斯拉 CEO 马斯克评价比亚迪汽车“做的不好”。 令人没想到的是&#x…

【人工智能】AI 人工智能技术近十年演变发展历程

人工智能技术近十年演变发展历程 过去十年对于人工智能(AI)领域来说是一段激动人心的多事之秋。对深度学习潜力的适度探索变成了一个领域的爆炸性扩散,现在包括从电子商务中的推荐系统到自动驾驶汽车的对象检测以及可以创建从逼真的图像到连贯文本的所有内容的生成模型。 …

马斯克:我将开发不会消灭人类的 AI!

整理 | 王子彧 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 在怒喷 OpenAI 是盈利性组织&#xff0c;训练的 AI 说谎&#xff0c;闭源、不安全之后&#xff0c;亿万富翁埃隆马斯克表示&#xff1a;“他将推出一个名为 TurthGPT 的 AI 聊天机器人&#xff0c;以…

“偷”代码建起公司、学历造假、6天拿下1亿美元却拖欠工资,这位AI独角兽CEO屡遭质疑后亲自回应了...

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年5月份全网热门报告合集 无需翻墙&#xff0c;无需注册&#xff0c;ChatGPT4直接使用 ChatGPT提词手册&#xff0c;学完工作效率提升百倍 马斯克谈AI&#xff1a;中美差…

任正非再谈ChatGPT:今后职场只有两种人,一种是会用AI的人,另一种...

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 近日&#xff0c;任正非在接受采访时说&#xff1a;“ChatGPT对我们的机会是什么&#xff1f;它会把管道流量撑大&#xff0c;这样我们的5G产品就有市场需求。” 任总还强调&#xff1a;“今后职场上…

写自己的故事,帮别人说话

点击 欧盟IT那些事 关注我们 公告&#xff1a;因企鹅审核规定&#xff0c;本公众号从《德国IT那些事》更名为《欧盟IT那些事》。 世界很乱&#xff0c;安静了一年。 今年一年几乎没怎么动笔写作&#xff0c;以至于有人怀疑这个公众号博主是不是和小姨子跑路了&#xff1f; 没有…

研报复现 | Alpha是否存在于日内股价跳跃中?

今年9月&#xff0c;方正证券在其名为《个股股价跳跃及其对振幅因子的改进》的研报中提到&#xff1a; 股票市场中&#xff0c;由于利好或利空消息的不断到达&#xff0c;叠加投资者情绪的影响&#xff0c;股票价格经常会表现出突然的大幅波动。股价跳跃常常被用来描述和衡量这…

《恒盛策略》外资巨头突然出手!又有炒股软件罢工

刚刚&#xff0c;又有炒股软件出事&#xff01; 据新浪财经&#xff0c;今日有网友表示&#xff0c;一家头部券商APP无法登录&#xff0c;客服电话无法打通&#xff0c;在线客服无法接通。东方财富刚出事没多久&#xff0c;又产生这种事情&#xff0c;终究是为什么&#xff1f;…

Ai数字人浪潮来袭,超写实数字人系统出世,为企业打造定制化服务

数字人概念首次出现在80年代&#xff0c;最初在音乐领域应用&#xff0c;使用手绘技术进行生成。随着时间的推移&#xff0c;传统手绘被CG和动作捕捉等技术取代&#xff0c;从而使虚拟数字人的制作变得更加简化并降低成本。因此&#xff0c;虚拟数字人产业进入产业化探索阶段。…

Stable Diffusion 关键词入门基础-人像动漫篇

AI绘图在线体验 二次元绘图 在线体验地址:Chatgpt中文版-智云全球版-AI绘画-Stable Diffusion 简化版 中文关键词&#xff1a;逼真&#xff0c;中国女孩&#xff0c;精致美丽的脸&#xff0c;黑色长发&#xff0c;全身居中&#xff0c;夏天低胸裙子&#xff0c;CG渲染&…

Unity Open Day 北京站-工业专场:Unity引擎打造3D互动式汽车智能座舱体验

【获取 2023 Unity Open Day 北京站演讲 PPT】 Unity 2018年开始加大工业领域投入和布局&#xff0c;特别是在汽车智能座舱方面有很多的尝试和创新&#xff0c;积累了丰富的经验。在Unity技术开放日北京站工业专场中&#xff0c;Unity中国平台技术总监杨栋分享了《Unity引擎打造…

波士顿动力新年炸场!人形机器人飞身转投工具包,最后体操式落地把人类给整不会了

波士顿动力Atlas&#xff0c;又来整活炸场了&#xff01; 不是跑酷不是跳舞&#xff0c;而是去工地老实上班当助手&#xff0c;结果把人类给整不会了。 当高架上工人需要工具包&#xff0c;Atlas二话不说完成搭桥、爬楼等一系列动作后&#xff0c;一记漂亮的飞身旋转&#xff0…

微软开源Visual ChatGPT,7天斩获2.2万stars

点击“开发者技术前线”&#xff0c;选择“星标” 让一部分开发者看到未来 来自 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) 除了大力投资 Open AI &#xff0c;微软还亲自下场大搞 AI 。7 天前&#xff0c;微软开源了 Visual ChatGPT &#xff0c;这个软件可以连接…

ChatGPT 类 AI 软件供应链的安全及合规风险

AIGC 将成为重要的软件供应链 近日&#xff0c;OpenAI 推出的 ChatGPT 通过强大的 AIGC&#xff08;人工智能生产内容&#xff09;能力让不少人认为 AI 的颠覆性拐点即将到来&#xff0c;基于 AI 将带来全新的软件产品体验&#xff0c;而 AI 也将会成为未来软件供应链中非常重…

chatgpt赋能python:Python整人代码:让你的朋友大跌眼镜

Python 整人代码&#xff1a;让你的朋友大跌眼镜 Python 是一种强大的编程语言&#xff0c;常用于开发各种应用程序。然而&#xff0c;除了正常的开发工作之外&#xff0c;Python 还可以用来整人。通过一些简单的代码&#xff0c;你可以让你的朋友在屏幕前大跌眼镜。在本篇文章…

认知智能浪潮将至,企业技术底座和业务流程变革在即 | 爱分析报告

报告编委 黄勇 爱分析合伙人&首席分析师 李进宝 爱分析高级分析师 陈元新 爱分析分析师 外部专家&#xff08;按姓氏拼音排序&#xff09; 何敏 明略科技集团 副总裁 尤辉 竹间智能 售前经理 周宁捷 拓尔思 金融和产业大脑产品中心总经理 特别鸣谢&#xff0…

2023年医疗健康企业CRM选型与应用指南

全国两会期间&#xff0c;作为医疗行业建设重点之一的“医疗信息化”受到关注&#xff0c;推进“智慧医疗”体系建设、推进健康医疗数据共享等成为热门议题。 事实上&#xff0c;随着人工智能、大数据等新兴技术的不断成熟、推广与应用&#xff0c;传统医疗行业正在经历数字化…