Rag实战案例代码

今天学了Rag技术,感觉挺有意思,所以就自己亲自玩了玩,下面是通过爬取知乎中关于选购机型机型指南作为大模型的外挂知识库,然后使用Rag技术实现对这篇文章中的内容进行回答。
如果您不太清楚百度api_key和secret_key的申请,可以参考这篇文章

import requests
from langchain_wenxin.llms import Wenxin
from langchain.vectorstores import Chroma
from langchain.prompts import ChatPromptTemplate
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import HuggingFaceBgeEmbeddings
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema.output_parser import StrOutputParser

'''--------------------------------------------step1: 准备大模型未见过的知识--------------------------------------------'''
url = "https://www.zhihu.com/tardis/bd/art/511508925" # 爬取链接,里面包含了大模型没学过的知识
res = requests.get(url)
with open("93853.html", "w") as f:
    f.write(res.text)

'''--------------------------------------------ste2: 将知识文本划分成若干个chunk------------------------------------------'''
loader = TextLoader('./93853.html')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = text_splitter.split_documents(documents) # 将文本划分成若干个chunk

'''--------------------------------------------step3: 使用m3e模型对这些chunk进行编码----------------------------------------'''
# embedding model: m3e-base
model_name = "moka-ai/m3e-base"
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': True}
embedding = HuggingFaceBgeEmbeddings(
                model_name=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs,
                query_instruction="为文本生成向量表示用于文本检索"
            )

'''--------------------------------------------step4: 把编码后的特征向量存入chroma数据库中-----------------------------------'''
# load data to Chroma db
db = Chroma.from_documents(chunks, embedding)
retriever = db.as_retriever()

'''--------------------------------------------step5: 准备提升模板-------------------------------------------------------'''
template = """你是问答任务助手。使用以下检索到的上下文片段来回答问题。如果你不知道答案,就说你不知道。最多使用三个句子,保持答案简洁。
Question: {question} 
Context: {context} 
Answer:
"""
prompt = ChatPromptTemplate.from_template(template)

'''--------------------------------------------step6: 将检索出的知识与query组合通过大模型生成回答-----------------------------'''
llm = Wenxin(model="wenxin", baidu_api_key="Your api—key", baidu_secret_key="Your secret-key") #注意需要填下自己的key
rag_chain = (
    {"context": retriever,  "question": RunnablePassthrough()} 
    | prompt 
    | llm
    | StrOutputParser() 
)
query = "小米15ultra 升级了哪些地方?" # 用户提出的问题
print(rag_chain.invoke(query)) # 打印回答内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值