跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(75) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) 聊天机器人(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) ChatGPT(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) RAG(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) 智能体(4) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) kafka(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 编程语言(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 大型语言模型(2) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

category

欢迎来到人工智能的迷人世界,在那里,人与机器之间的通信越来越模糊。在这篇博客文章中,我们将探索人工智能驱动交互的一个令人兴奋的新前沿:与您的文本文档聊天!借助OpenAI模型和创新的LangChain框架的强大组合,您现在可以将静态文档转化为交互式对话。

你准备好彻底改变你使用文本文件的方式了吗?然后系好安全带,深入了解我们将OpenAI与LangChain集成的终极指南,我们将一步一步地为您介绍整个过程。

什么是LangChain?

LangChain是一个强大的框架,旨在简化大型语言模型(LLM)应用程序的开发。通过为各种LLM、提示管理、链接、数据增强生成、代理编排、内存和评估提供单一通用接口,LangChain使开发人员能够将LLM与真实世界的数据和工作流无缝集成。该框架允许LLM通过合并外部数据源和编排与不同组件的交互序列,更有效地解决现实世界中的问题。

我们将在下面的示例应用程序中使用该框架从文本文档源生成嵌入,并将这些内容持久化到Chroma矢量数据库中。然后,我们将使用LangChain在后台使用OpenAI语言模型来查询用户提供的问题,以处理请求。

这将使我们能够与自己的文本文档聊天。

设置项目

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

pip install langchain openai chromadb tiktoken

命令pip-install langchain openai chromadb tiktoken用于使用Python包管理器pip安装四个Python包。每个包都有特定的用途,它们共同帮助您将LangChain与OpenAI模型集成,并管理应用程序中的令牌。让我们对所涉及的程序包进行细分:

  1. langchain:这个包是主要的langchain库,它有助于与OpenAI模型无缝集成,以创建与文本文档的交互式聊天体验。
  2. openai:这是openai API的官方Python包,使您能够使用openai提供的强大语言模型,例如GPT-4。
  3. chromadb:ChrmaDB是一个轻量级、高性能、无模式的矢量数据库,专为人工智能应用程序设计。它允许您存储、检索和管理LangChain和OpenAI支持的文档聊天应用程序所需的矢量数据(嵌入)。
  4. tiktoken:tiktoken是OpenAI提供的一个实用程序库,它可以帮助您计算和管理文本字符串中的标记,而无需进行API调用。这对于监控令牌使用情况、保持在API限制内以及有效地使用OpenAI的模型都很有用。

通过执行此命令,您可以安装所有必要的软件包,以开始构建和部署使用OpenAI的LangChain的文本文档聊天应用程序。

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

touch init_vectorstore.py ask.py

此外,我们还将一个txt文档添加到项目中。对于本文的示例,国情咨文文本添加为State_of_the_Union.txt,如您所见:

让我们开始将以下Python代码添加到文件init_vectorstore.py中。

该代码读取文本文档,将其拆分为更小的块,并使用OpenAI模型生成嵌入。然后,它创建并持久化一个包含嵌入和相关元数据的Chroma数据库。这允许有效地存储和检索文档嵌入,用于人工智能驱动的文本分析和交互。

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma

import os
os.environ["OPENAI_API_KEY"] = "[INSERT YOUR OPEN AI API KEY HERE]"

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()

docsearch = Chroma.from_texts(texts, embeddings, metadatas=[{"source": f"Text chunk {i} of {len(texts)}"} for i in range(len(texts))], persist_directory="db")

docsearch.persist()
docsearch = None

以下是对代码的逐步描述:

  1. 导入必要的库和模块:
    • langchain.embeddings.openai中的openai嵌入,以使用openai模型并生成嵌入。
    • 来自langchain.text_splitter的CharacterTextSplitter,用于将输入文本拆分为更小的块。
    • langchain.vectorstores中的Chroma,用于创建Chroma数据库以存储嵌入和元数据。
    • 用于处理环境变量的操作系统。
  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实例。
    • 元数据:每个文本块的元数据字典列表。
    • persist_directory:存储Chroma数据库的目录(在本例中为“db”)。
    • 8.使用Persist()方法将Chroma对象持久化到指定的目录。
    • 9.将docsearch变量设置为None以将其从内存中清除。

总之,此代码读取文本文档,将其拆分为更小的块,使用OpenAI模型生成嵌入,使用生成的嵌入和元数据创建Chroma数据库,并将数据库保存到指定的目录中以备将来使用。

让我们运行以下代码,通过使用以下命令为Chroma矢量数据库创建嵌入内容:

python init_vectorstore.py

然后,您应该会收到以下输出:

在您的项目文件夹中,您应该能够找到一个包含一些内容的数据库子文件夹。

与文本文档交互

让我们用文件ask.py中的文本文档实现交互逻辑。下面的代码演示了如何使用LangChain、OpenAI模型和包含嵌入的Chroma数据库创建问答(QA)系统。Chroma矢量数据库已经在最后一步中与我们的内容一起准备好了,因此我们现在准备好利用它:

from langchain.chains import RetrievalQAWithSourcesChain
from langchain import OpenAI
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings

import os
os.environ["OPENAI_API_KEY"] = "[INSERT YOUR OPEN AI API KEY HERE]"

embeddings = OpenAIEmbeddings()

docsearch = Chroma(persist_directory="db", embedding_function=embeddings)

chain = RetrievalQAWithSourcesChain.from_chain_type(OpenAI(temperature=0), chain_type="stuff", retriever=docsearch.as_retriever())

user_input = input("What's your question: ")

result = chain({"question": user_input}, return_only_outputs=True)

print("Answer: " + result["answer"].replace('\n', ' '))
print("Source: " + result["sources"])

以下是代码的说明:

  1. 导入必要的库和模块,包括RetrievalQAWithSourcesChain、OpenAI、Chroma和OpenAI嵌入。
  2. 使用os.environ将OpenAI API密钥设置为环境变量。
  3. 创建一个名为embeddings的OpenAIEmbeddings实例,以使用OpenAI模型生成文档嵌入。
  4. 使用persist_directory参数(存储先前创建的Chroma数据库的位置)和embedding_function参数(embeddings实例)实例化Chroma对象。
  5. 使用from_chain_type()方法创建RetrievalQAWithSourcesChain实例。此实例采用以下参数:
    • OpenAI(temperature=0):具有指定温度设置的OpenAI类的实例。
    • chain_type=“stuff”:要创建的链的类型(在本例中为“stuff“)。
    • retriever=docsearch.as_retriever():retriever对象,它是使用as_retriever()方法转换为retriever的Chroma实例。
  6. 使用input()函数提示用户输入问题。
  7. 将用户的问题传递给QA系统(链实例)并检索结果。
  8. 打印答案和答案来源,并从答案文本中删除换行符。

总之,这段代码使用LangChain、OpenAI模型和Chroma数据库创建了一个简单的QA系统。它提示用户提出问题,使用QA系统处理问题,并返回答案及其来源——让我们看看它的实际操作。使用启动脚本

python ask.py

然后要求您输入问题:

输入与国情咨文文本的任何内容相关的问题,例如:

然后,您将收到答案以及用于从中检索必要信息的文本块的源信息。

这使我们现在可以通过在后台使用OpenAI的语言模型来询问与文本文档相关的任何问题。

结论

OpenAI模型和LangChain的强大结合为改变我们与文本文档的交互方式开辟了新的可能性。正如我们在本指南中所展示的,集成这些尖端技术从未如此容易。

文章链接