1.首先安装依赖
pip install --upgrade --quiet langchain-core langchain-community langchain-openai
2.设置chatOpenAI的模型
1.ChatOpenAI:这是一个用于处理对话式文本的类。它专门设计用于处理对话,并且可以用于构建对话系统、聊天机器人等。ChatOpenAI
类通常用于与用户进行自然语言交互
,回答问题
、提供建议
或执行对话任务。
2.OpenAI:这是一个通用的文本生成类。它提供了一个接口,可以使用 OpenAI
的 GPT
模型来生成各种类型的文本,包括文章、故事、代码等。OpenAI
类可以用于广泛的文本生成任务,而不仅限于对话或聊天。
3.总结: 因此,主要的区别在于它们的设计和用途。ChatOpenAI 更适合处理对话式文本和构建对话系统,而 OpenAI 则更通用,可以用于各种文本生成任务。
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-3.5-turbo-0125")
3.对上下文数据进行文档向量存储
利用DocArrayInMemorySearch
进行向量存储,设置向量的嵌入OpenAIEmbeddings()
vectorstore = DocArrayInMemorySearch.from_texts(
["Fairy是一个英俊无比的男生,即便他身高不高但依旧有很多女生追他",
"Fairy今年21了,硕士毕业后他将达到24岁,不出意外他想留在上海广州深圳长沙这四个地方",
"Fairy擅长写Java代码,即便他已经一年没有写相关代码了,但写起接口来还是比较专注的",
"Fairy的弱点在于他对于前端代码的编写十分薄弱",
"Fairy毕业于长沙理工大学城南学院",
"Fairy在2022年中国大学生计算机设计大赛夺得了省二",
"Fairy夺得中国服创大赛全国三等奖是在2023年10月份",
"Fairy的LeetCode刷了有近300道,但是灌水比较多"],
embedding=OpenAIEmbeddings(),
)
4.将文档向量转为检索器
将**【文档向量】存储转换为【检索器】(retriever),以便后续查询(【后续的上下文】就从我们的这个【检索器retriever】**中进行检索)
retriever = vectorstore.as_retriever()
5.创建语义模板,并设置字符串输出解析器
- 利用
ChatPromptTemplate生成语义模板
- 利用
StrOutputParser()
创建字符串解析器
# 4.这段代码创建了一个【提示模板template】,并利用【chatPromptTemplate】进行创建该模板。
template = """请根据以下上下文回答问题:
{context}
问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)
# 5.【StrOutputParser()】旨在创建一个【字符串输出解析器】
output_parser = StrOutputParser()
6.创建一个并行任务链
创建一个并行任务链,一是从检索器retriever
获取上下文,二是将问题传给模型模板prompt
# 6.这行代码创建了一个【并行运行的任务链】,其中包括两个任务:1.一个是【从检索器】中获取【上下文】;2.另一个是将【问题】传递给【模型】
setup_and_retrieval = RunnableParallel(
{"context": retriever, "question": RunnablePassthrough()}
)
7.组成处理链处理上下文和问题
# 7.将上下文【检索器中的上下文和问题】——>提示词模板——>模型——>字符串输出链:组合成一个处理链
chain = setup_and_retrieval | prompt | model | output_parser
8.调用处理链,传递一个问题进行处理
# 8.调用处理链,传递了一个问题
response = chain.invoke("Fairy的LeetCode是否灌水?")
print("RAG回答问题:"+response.__str__())
9.所有代码
import getpass
import os
from langchain_openai import ChatOpenAI, OpenAI
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain_openai import OpenAIEmbeddings
# 1.这行代码创建了一个 ChatOpenAI 的实例,使用的是 GPT-3.5 模型。
model = OpenAI(model="gpt-3.5-turbo-instruct")
# 2.创建了一个【文档向量存储】(vectorstore),使用 【DocArrayInMemorySearch】 类从提供的文本列表中创建,
# 【向量的嵌入】使用了 OpenAIEmbeddings()
vectorstore = DocArrayInMemorySearch.from_texts(
["Fairy是一个英俊无比的男生,即便他身高不高但依旧有很多女生追他",
"Fairy今年21了,硕士毕业后他将达到24岁,不出意外他想留在上海广州深圳长沙这四个地方",
"Fairy擅长写Java代码,即便他已经一年没有写相关代码了,但写起接口来还是比较专注的",
"Fairy的弱点在于他对于前端代码的编写十分薄弱",
"Fairy毕业于长沙理工大学城南学院",
"Fairy在2022年中国大学生计算机设计大赛夺得了省二",
"Fairy夺得中国服创大赛全国三等奖是在2023年10月份",
"Fairy的LeetCode刷了有近300道,但是灌水比较多"],
embedding=OpenAIEmbeddings(),
)
# 3.这行代码将【文档向量】存储转换为【检索器】(retriever),以便后续查询(【后续的上下文】就从我们的这个【检索器retriever】中进行检索)
retriever = vectorstore.as_retriever()
# 4.这段代码创建了一个【提示模板template】,并利用【chatPromptTemplate】进行创建该模板。
template = """请根据以下上下文回答问题:
{context}
问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)
# 5.【StrOutputParser()】旨在创建一个【字符串输出解析器】
output_parser = StrOutputParser()
# 6.这行代码创建了一个【并行运行的任务链】,其中包括两个任务:1.一个是【从检索器】中获取【上下文】;2.另一个是将【问题】传递给【模型】
setup_and_retrieval = RunnableParallel(
{"context": retriever, "question": RunnablePassthrough()}
)
# 7.将上下文【检索器中的上下文和问题】——>提示词模板——>模型——>字符串输出链:组合成一个处理链
chain = setup_and_retrieval | prompt | model | output_parser
# 8.调用处理链,传递了一个问题
response = chain.invoke("Fairy的LeetCode是否灌水?")
print("RAG回答问题:"+response.__str__())