大模型——Langchain 构建检索器并查询 (3)

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
form langchain_core.prompt import ChatPromptTemplate
form langchain_chroma import Chroma
from langchain_core.documents import Document
from langchain_core.runnables import RunnableWithMessageHistory, RunnableLambda

model -= ChatOpenAI(model='gpt-4-turbo')

# 准备数据集列表
documents = [
    Document(
        page_content="狗是伟大的伴侣,以其忠诚和友好而闻名。",
        metadata={"source": "哺乳动物宠物文档"},
    ),
    Document(
        page_content="猫是独立的宠物,通常喜欢自己的空间。",
        metadata={"source": "哺乳动物宠物文档"},
    ),
    Document(
        page_content="金鱼是初学者的流行宠物,需要相对简单的护理。",
        metadata={"source": "鱼类宠物文档"},
    ),
    Document(
        page_content="鹦鹉是聪明的鸟类,能够模仿人类的语言。",
        metadata={"source": "鸟类宠物文档"},
    ),
    Document(
        page_content="兔子是社交动物,需要足够的空间跳跃。",
        metadata={"source": "哺乳动物宠物文档"},
    ),
]

# 实例化向量数据库
vector_store = Chroma.from_documents(documents, embedding=OpenAIEmbeddings())
# 检索器 bind(k=1)选取相似度最高的第一个,即分数最低的
retriever = RunableLambda(vector_store.similarity_search).bind(k=1)  

# 提示模板
message = """
使用提供的上下文仅回答这个问题:
{question}
上下文:
{context}
"""

prompt_temp = ChatPromptTemplate.from_messages([('human', message)])

# RunnablePassthrough允许我们将用户的问题之后再传递给prompt和model。
chain = {'question': RunnablePassthrough(), 'context': retriever} | prompt_temp | model

resp = chain.invoke('请介绍一下猫?')

print(resp.content)

Document 类中,page_content为内容,metadata为一个字典,一般从来存储page_content的相关信息(来源等)

RunableLambda:将 普通 Python 函数 或 自定义逻辑 转换为 LangChain 运行时(Runtime)兼容的可执行组件

RunnablePassthrough():占位符,防止报错

chain = {'question': RunnablePassthrough(), 'context': retriever} | prompt_temp | model

中,chain操作会将字典{'question': RunnablePassthrough(), 'context': retriever}自动赋值给message,从而实现变量的动态赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值