本文主要是【RAG】——RAG代码实操的文章,如果有什么需要改进的地方还请大佬指出??
🎬作者简介:大家好,我是听风与他🥇
??博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见
针对大型语言模型效果不好的问题,之前人们主要关注大模型再训练、大模型微调、大模型的Prompt增强,但对于专有、快速更新的数据却并没有较好的解决方法,为此检索增强生成(RAG)的出现,弥合了LLM常识和专有数据之间的差距。
今天给大家分享的这篇文章,将介绍RAG的概念理论,并带大家利用LangChain进行编排,OpenAI语言模型、Weaviate 矢量数据库(也可以自己搭建Milvus向量数据库)来实现简单的 RAG 管道。
pip install langchain openai weaviate-client
接下来,你需要准备一个矢量数据库作为保存所有附加信息的外部知识源。该矢量数据库是通过以下步骤填充的:1)加载数据;2)数据分块;3)数据[块存储]
from langchain.document_loaders import TextLoader
loader = TextLoader('a.txt')
documents = loader.load()
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=1024, chunk_overlap=128)
chunks = text_splitter.split_documents(documents)
安装依赖
pip install tiktoken
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Weaviate
import weaviate
from weaviate.embedded import EmbeddedOptions
import openai
client = weaviate.Client(
embedded_options = EmbeddedOptions()
)
vectorstore = Weaviate.from_documents(
client = client,
documents = chunks,
# embedding = OpenAIEmbeddings(),
embedding = OpenAIEmbeddings(openai_api_key="openai的key",openai_api_base = "中转api"),
by_text = False
)
retriever = vectorstore.as_retriever()
from langchain.prompts import ChatPromptTemplate
template = """你是一个问答机器人助手,请使用以下检索到的上下文来回答问题,如果你不知道答案,就说你不知道。问题是:{question},上下文: {context},答案是:
"""
prompt = ChatPromptTemplate.from_template(template)
from langchain.chat_models import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser
llm = ChatOpenAI(model_name="gpt-3.5-turbo",openai_api_key="openai的key",openai_api_base = "中转api", temperature=0)
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
query = "萧薰儿是谁?"
res=rag_chain.invoke(query)
print(f'答案:{res}')
总的来说,RAG的生成过程如下图所示: