Google Gemini With LangChain RAG
2023-12-22 15:48:53
初始化模型
import os
os.environ["GOOGLE_API_KEY"] = 'XXX'#填入自己的api_key
from IPython.display import display
from IPython.display import Markdown
import google.generativeai as genai
from langchain_google_genai import ChatGoogleGenerativeAI,GoogleGenerativeAIEmbeddings
from langchain.vectorstores import DocArrayInMemorySearch
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
model = ChatGoogleGenerativeAI(model="gemini-pro", temperature=0.7)
我们创建一个简单的向量数据库,并存储几条文本
embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001")
vectorstore = DocArrayInMemorySearch.from_texts(
["Gemini Pro 是 外星人 开发的大型语言模型。",
"Gemini 可以是一个星座,也可以是一系列语言模型的名称。",
"人是由龙进化而来的。",
"天才儿童喜欢吃牛肉",
"儿童喜欢吃零食"],
embedding=embeddings # passing in the embedder model
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})
这里我们创建了一个内存向量数据库,并向其中存储了5条文本,然后使用了gemini的嵌入模型“embedding-001”作为文本嵌入工具,最后我们通过向量数据库创建了一个检索器retriver, 接下来我们可以通过检索器retriver来检索向量数据库中的相关文档:
接下来我们来创建chian, 不过在创建chian之前我们需要创建prompt模板和RunnableMap,最后将它们组合成一个chain:
from langchain.schema.runnable import RunnableMap
#创建prompt模板
template = """Answer the question a a full sentence, based only on the following context:
{context}
Question: {question}
"""
output_parser = StrOutputParser()
#由模板生成prompt
prompt = ChatPromptTemplate.from_template(template)
#创建chain
chain = RunnableMap({
"context": lambda x: retriever.get_relevant_documents(x["question"]),
"question": lambda x: x["question"]
}) | prompt | model | output_parser
本实验使用llama.cpp的README.md作为我们需要进行询问的文档。
from langchain.document_loaders import UnstructuredMarkdownLoader
loader = UnstructuredMarkdownLoader("./README.md")
text = loader.load()
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size = 2000,
chunk_overlap = 400,
length_function = len,
is_separator_regex = False
)
all_splits = text_splitter.split_documents(text)
from langchain.vectorstores import FAISS
vectorstore = FAISS.from_documents(all_splits, embeddings)
from langchain.schema.runnable import RunnableMap
from langchain_core.runnables import RunnablePassthrough
#创建prompt模板
template = """Answer the question a a full sentence, based only on the following context:
{context}
Question: {question}
"""
#由模板生成prompt
prompt = ChatPromptTemplate.from_template(template)
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})
query = {"question": "What is --interactive option used for?"}
#创建chain
chain = RunnableMap({
"context": lambda x: retriever.get_relevant_documents(x["question"]),
"question": RunnablePassthrough()
}) | prompt | model | output_parser
chain.invoke(query)
文章来源:https://blog.csdn.net/zwqjoy/article/details/135068927
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!