外链论坛

 找回密码
 立即注册
搜索
查看: 20|回复: 0

利用人工智能,打造个性化的知识库问答系统

[复制链接]

3112

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108663
发表于 2024-9-28 21:11:13 | 显示全部楼层 |阅读模式

转载说明:原创很难,未经授权,谢绝任何形式的转载

你好,欢迎来到人工智能的神奇世界,这儿人类和设备之间的交流越来越模糊。在本篇博客中,咱们将探索人工智能驱动交互的一个新的、令人兴奋的行业:与文本文件进行聊天!经过 OpenAI 的模型和创新的 LangChain 框架的强大组合,你此刻能够将静态文档转化为互动式对话。你准备好革新你处理文本文件的方式了吗?接下来咱们将带你一步步地介绍怎样将 OpenAI 和 LangChain 集成,全面诠释这个行业的终极指南。

什么是 LangChain?

LangChain 是一个强大的框架,旨在简化大型语言模型(LLM)应用程序的研发经过供给一个单一的通用接口,用于各样 LLM、提示管理、链接、数据加强生成、代理编排、内存和评定,LangChain 使研发人员能够将 LLM 与现实世界的数据和工作流程无缝集成。这个框架准许 LLMs 经过整合外边数据源和编排区别组件的交互序列来更有效地处理实质问题。

咱们将在以下示例应用程序中运用该框架,从文本文档源生成嵌入,并将此内容持久化到 Chroma 向量数据库中。而后咱们运用 LangChain 在后台运用 OpenAI 语言模型处理请求,运用用户供给的问题查找该源。这将使咱们能够与自己的文本文档进行交流。

项目设置

创建一个新的项目文件夹,并安装以下 Python 包:

pip install langchain openai chromadb tiktoken

运用 Python 包管理器 pip,能够运用命令 pip install langchain openai chromadb tiktoken 安装四个 Python 包。每一个包都有特定的用途,它们一起帮忙你集成 LangChain 和 OpenAI 模型,并管理应用程序中的令牌。让咱们认识一下所触及的包:

langchain:这个包是重点的 LangChain 库,它能够帮忙你无缝集成 OpenAI 模型,创建与文本文档交互式聊天体验。 openai:这是 OpenAI 的官方 Python 包,能够让你运用 OpenAI 供给的强大语言模型,如 GPT-4。 chromadb:ChromaDB 是一个轻量级、高性能、无模式向量数据库,专为 AI 应用程序设计。它准许你存储、检索和管理你的 LangChain 和 OpenAI 动力文档聊天应用所需的向量数据(嵌入)。 tiktoken:Tiktoken 是由于 OpenAI 供给的实用程序库,它能够帮忙你在不进行 API 调用的状况下计数和管理文本字符串中的令牌。这针对监控令牌运用状况、保持在 API 限制范围内和有效运用 OpenAI 的模型非常有用。

经过执行这个命令,你能够安装所有必要的包,起始构建和安排利用 LangChain 和 OpenAI 的文本文档聊天应用程序。

在项目文件夹中添加以下两个文件:

touch init_vectorstore.py ask.py

另外,让咱们在项目中添加一个 txt 文档。本篇文案的示例中,咱们将国情咨文的文本添加为 state_of_the_union.txt,你能够在下面看到:

咱们起始将以下 Python 代码添加到 init_vectorstore.py 文件中。

这段代码读取一个文本文档,将其拆分为较小的块,并运用 OpenAI 模型生成嵌入。而后,它创建并持久化一个包括嵌入和关联元数据的 Chroma 数据库。这使得能够有效地存储和检索文档嵌入,用于 AI 驱动的文本分析和交互。

fromlangchain.embeddings.openaiimport OpenAIEmbeddings # 导入 OpenAI 嵌入类 from langchain.text_splitter import CharacterTextSplitter # 导入字符级文本拆分器类 from langchain.vectorstores import Chroma # 导入 Chroma 向量存储类 import os os.environ["OPENAI_API_KEY"] = "[INSERT YOUR OPEN AI API KEY HERE]" # 设置 OpenAI API 密钥 with open("state_of_the_union.txt") as f: # 读取文本文件 state_of_the_union = f.read() text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) # 创建字符级文本拆分器对象texts = text_splitter.split_text(state_of_the_union)# 运用拆分器对象拆分文本并获取文本块列表 embeddings = OpenAIEmbeddings() # 创建 OpenAI 嵌入对象 # 运用 Chroma 向量存储类创建文本检索对象,将每一个文本块及其元数据转化为向量并存储到 Chroma 数据库中 docsearch = Chroma.from_texts( texts, embeddings, metadatas=[{"source": f"Text chunk {i} of {len(texts)}"} for i inrange(len(texts))], persist_directory="db" ) docsearch.persist() # 持久化文本检索对象及其关联内容 docsearch = None # 清空文本检索对象,释放内存空间

注:LangChain 和 OpenAI 的模型都支持中文。您能够运用中文文本代替英文文本来训练和生成嵌入,并运用相同的代码和过程来实现文本嵌入和问答系统。然则重视区别的语言和语种可能需要区别的训练和处理办法来生成有效的嵌入和问答系统。

以下是代码的逐步描述:

1、导入必要的库和模块:

从 langchain.embeddings.openai 导入 OpenAIEmbeddings,用于运用 OpenAI 模型和生成嵌入。从 langchain.text_splitter 导入 CharacterTextSplitter,用于将输入文本分割为较小的块。从 langchain.vectorstores 导入 Chroma,用于创建 Chroma 数据库以存储嵌入和元数据。导入 os 用于处理环境变量。

2、运用 os.environ将 OpenAI API 密钥设置为环境变量。要获取 OpenAI API 密钥,请在 OpenAI 的官方网站(https://www.openai.com/)上注册帐户。一旦你的帐户获准准,就能够在帐户设置或仪表板下的 API 密钥部分中找到你的独一 API 密钥,你能够运用它来拜访 OpenAI 的模型和服务。

3、打开并读取 "state_of_the_union.txt" 文件的内容到变量 state_of_the_union 中。

4、创建一个CharacterTextSplitter 实例,其中 chunk_size 为 1000 个字符,chunk_overlap 为 0,即块之间重叠的字符。

5、运用 text_splitter 实例的 split_text 办法将 state_of_the_union 文本分割为块。

6、创建一个名为 embeddings 的 OpenAIEmbeddings 实例,运用 OpenAI 模型生成文档嵌入。

7、运用 from_texts() 办法实例化 Chroma 对象,该办法接受以下参数:

texts:先前生成的文本块。embeddings:用于生成嵌入的 OpenAIEmbeddings 实例。metadatas:每一个文本块的元数据字典列表。persist_directory:存储 Chroma 数据库的目录(这里示例中为 "db")。

8、运用 persist() 办法将 Chroma 对象持久化到指定的目录中。

9、将 docsearch 变量设置为 None,以清除内存中的对象。

总之,该代码读取一个文本文档,将其分割为较小的块,运用 OpenAI 模型生成嵌入,创建包括生成的嵌入和元数据的 Chroma 数据库,并将其持久化到指定的目录以备将来运用

咱们运行此代码,运用以下命令创建 Chroma 向量数据库的嵌入内容:

python init_vectorstore.py

接下来,你应该会收到以下输出:

而后在你的项目文件夹中应该能够找到一个名为 db 的子文件夹,其中包括一些内容。

咱们在 ask.py 文件中实现与文本文档的交互规律。以下代码演示了怎样运用 LangChain、OpenAI 模型和包括嵌入的 Chroma 数据库创建问答(QA)系统。在最后一步中,咱们已然准备好了包括内容的 Chroma 向量数据库,此刻咱们能够起始运用它:

fromlangchain.chainsimport RetrievalQAWithSourcesChain # 导入检索 QA 链类 from langchain import OpenAI # 导入 OpenAI 类 from langchain.vectorstores import Chroma # 导入 Chroma 向量存储类 fromlangchain.embeddings.openaiimport OpenAIEmbeddings # 导入 OpenAI 嵌入类 import os os.environ["OPENAI_API_KEY"] = "[INSERT YOUR OPEN AI API KEY HERE]" # 设置 OpenAI API 密钥 embeddings = OpenAIEmbeddings() # 创建 OpenAI 嵌入对象 docsearch = Chroma(persist_directory="db", embedding_function=embeddings) # 创建 Chroma 向量存储对象,使用指定的嵌入函数和存储目录 chain = RetrievalQAWithSourcesChain.from_chain_type( OpenAI(temperature=0), chain_type="stuff", retriever=docsearch.as_retriever() )# 运用指定的 OpenAI 模型和检索器创建检索 QA 链对象 user_input = input("Whats your question: ") # 获取用户输入的问题 result = chain({"question": user_input}, return_only_outputs=True) # 运用检索 QA 链对象处理用户输入的问题 print("Answer: " + result["answer"].replace(\n, )) # 输出答案 print("Source: " + result["sources"]) # 输出答案源自

简要描述一下代码:

导入所需的库和模块,包含 RetrievalQAWithSourcesChain、OpenAI、Chroma 和 OpenAIEmbeddings。运用 os.environ 将 OpenAI API 密钥设置为环境变量。创建 OpenAIEmbeddings 实例做为 OpenAI 模型的嵌入函数。运用 persist_directory 参数(先前创建的 Chroma 数据库存储的位置)和 embedding_function 参数(嵌入实例)实例化 Chroma 对象。运用 from_chain_type() 办法创建 RetrievalQAWithSourcesChain 实例。此实例接受以下参数:OpenAI(temperature=0):拥有指定温度设置的 OpenAI 类的实例。chain_type="stuff":要创建的链的类型(这里示例中为 "stuff")。retriever=docsearch.as_retriever():检索器对象,运用 as_retriever() 办法将 Chroma 实例转换为检索器。运用 input() 函数提示用户输入一个问题。将用户的问题传递给 QA 系统(链实例)并检索结果。输出答案和答案源自,从答案文本中删除换行符。

总之,该代码运用 LangChain、OpenAI 模型和 Chroma 数据库创建了一个简单的 QA 系统。它提示用户提出问题,运用 QA 系统处理问题,并返回答案以及其源自。让咱们瞧瞧它的实质运行效果。运用以下命令运行该脚本:

python ask.py

接下来,你将被需求输入问题:

请问关于国情咨文的哪个主题相关税收政策?

你将会收到答案和用于检索所需信息的文本块的源自信息。

这使得咱们此刻能够经过后台运用 OpenAI 的语言模型来提出与文本文档关联的任何问题。

结论

在当今信息时代,个人知识库已然作为了越来越多人的需要经过收集和整理个人文档、笔记、书籍等各样信息源自,构建起自己的个人知识库,能够帮忙咱们更好地学习、工作和生活。而运用 LangChain 和 OpenAI 模型,咱们能够实现对个人知识库的交互式处理和分析,使其作为一个更加智能和有效的工具。

同期,个性化的问答系统作为了一个备受关注的行业。相比于传统的问答系统,个性化的问答系统能够按照用户的需要和偏好,供给更加准确和个性化的回答。经过运用 LangChain 和 OpenAI 模型,咱们能够实现基于个人知识库的个性化问答系统,为用户供给更加符合她们需要和兴趣的回答。

因此呢,学习和把握这些技术和工具,不仅能够帮忙咱们构建更加智能和有效的个人知识库,还能够实现更加个性化和精细的问答系统,满足区别用户的需要和偏好。在今后的信息时代,这些技术和工具将会变得越来越重要和必要,帮忙咱们更好地获取和处理信息,加强咱们的工作和生活效率。

原文:

https://medium.com/codingthesmartway-com-blog/chat-with-your-documents-the-ultimate-guide-to-integrating-openai-with-langchain-11ccd802e505

作者:Sebastian

非直接翻译,有自动改编和添加部分,翻译水平有限,难免有疏漏,欢迎指正





上一篇:人工智能问答怎么运用?智能回答
下一篇:原创 人工智障ChatGPT的三国问答——“张飞之死”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-19 21:20 , Processed in 0.179494 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.