ChatGPT集成入门指南:自定义数据查询在你的AI应用中-第2部分
在第一部分中,我们讨论了LLMs的用例,创建了项目的基本结构,并制定了我们的main.py文件的蓝图。
在这个部分,我们将使用LangChain来玩转简单的使用案例,例如从PDF文档中获取问题的答案。
要开始,我们需要安装LangChain。激活虚拟环境然后安装它。
pip install langchain
我们将在llm_processing.py中编写llm功能的代码。
对于这个演示,因为我们将与OpenAI模型进行交互,我们需要一个第三方封装库称为langchain-openai,通过langchain使用ChatGPT。
安装langchain-openai。
pip install langchain-openai
为了与OpenAI API进行交互,我们需要一个API密钥。可以通过这里生成。在你创建API密钥之后,我们可以开始构建我们应用程序的llm部分。
在llm_processing.py文件中:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(openai_api_key="your_key" # add your API key here.
llm.invoke("How many carbon emissions were emitted in 2022?")
一些建议:
- ChatOpenAI是指ChatGPT模型。
- invoke方法用于向模型提问问题。
- 目前,由于该模型是基于截至2022年1月的数据进行训练的,所以它的答案可能不准确。为了获得准确的答案,我们需要提供自定义数据源。
我们有两个选项来解决这个问题。
- 我们可以直接提供可能包含答案的文本给模型。
- 我们可以使用嵌入来找到文本的最相似匹配,并用它来回答问题。
让我们逐个探索这两个选项。
选项1:直接将文本提供给模型:
在llm_processing.py中,:
from langchain_openai import ChatOpenAI
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.documents import Document
llm = ChatOpenAI(openai_api_key="your_key" # add your API key here.
prompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context:
<context>
{context}
</context>
Question: {input}""")
document_chain = create_stuff_documents_chain(llm, prompt)
document_chain.invoke({
"input": "How many carbon emissions were emitted in 2022?",
"context": [Document(page_content="37.15 billion metric tons CO2e were emitted in 2022")]
})
这里有一些建议:
- prompt被用作将llm中的上下文和输入传递到模板中的模板。当调用document_chain.invoke()方法时,可以将context和input作为变量传递到模板中。
- create_stuff_documents_chain 帮助在向 llm 提问问题时使用提示。
- document_chain.invoke() 方法发送一个请求到 OpenAI API,根据所提出的问题和提供的上下文来获取响应。
- 上下文是模型需要的信息,以便能够准确回答不在其训练数据范围内或特定于某种使用情况的问题。
API现在将提供正确的响应,因为我们已经提供了与问题答案相关的信息。
在接下来的部分中,我们将探讨如何使用整个PDF来回答我们的问题,而不是把答案逐个提供给阅读理解模型。