当前位置: 首页 > news >正文

Langchain-构建向量数据库和检索器

向量数据库安装

pip install langchain-chroma

文档》向量存储》向量数据库。

和0416 提示词工程相同。

初始化

import osfrom langchain_chroma import Chroma
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.documents import Document
from langchain_core.messages import HumanMessage
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory, RunnableLambda, RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langserve import add_routesos.environ['http_proxy'] = '127.0.0.1:7890'
os.environ['https_proxy'] = '127.0.0.1:7890'os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "LangchainDemo"
os.environ["LANGCHAIN_API_KEY"] = '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'# 聊天机器人案例
# 创建模型
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": "哺乳动物宠物文档"},),
]

向量数据库构建

Chroma.from_documents:返回一个向量空间。

vector_store.similarity_search_with_score( ‘xxx’ )  :返回相似度分数排序,分越低,越相似。

vector_store.similarity_search():直接返回相似搜索,不计算分数。

Chain的链接对象,必须是Runnable对象,但Chroma.from_documents不是;因此要,RunnableLamb生成检索器对象retriever并通过.bind(k=1)取相似度最高的。

retriever.batch([ 'xxx' , 'xxx' ]):通过batch进行​批量处理多个输入请求​​。


## 0416中,SemanticSimilarityExampleSelector直接从示例集中进行相似度选择;但俩者不同——本处是构建向量数据库,0416是示例集

0416 提示词工程实践-CSDN博客


# 实例化一个向量数空间
vector_store = Chroma.from_documents(documents, embedding=OpenAIEmbeddings())# 相似度的查询: 返回相似的分数, 分数越低相似度越高
# print(vector_store.similarity_search_with_score('咖啡猫'))# 检索器: bind(k=1) 返回相似度最高的第一个
# 将vector_store.similarity_search方法转换为可执行对象,会自动调用获取返回。
retriever = RunnableLambda(vector_store.similarity_search).bind(k=1)# print(retriever.batch(['咖啡猫', '鲨鱼']))resp = chain.invoke('请介绍一下猫?')print(resp.content)

检索器+模型

这里message中,还需要question、context参数,因此chain中需要先传参;

# 由于要根据用户输入进行检索,通过RunnablePassthrough允许我们将用户的问题稍后再 传递给prompt和model。这样用户只需要 输入,不需要处理上下文获取(模块越多,RunnablePassthrough越高效)。

## 按下图这种,需要显示调用检索器。

# 提示模板
# 这边是相当于,把message拿出来单写
message = """
使用提供的上下文仅回答这个问题:
{question}
上下文:
{context}
"""prompt_temp = ChatPromptTemplate.from_messages([('human', message)])# RunnablePassthrough允许我们将用户的问题之后再传递给prompt和model。
chain = {'question': RunnablePassthrough(), 'context': retriever} | prompt_temp | modelresp = chain.invoke('请介绍一下猫?')print(resp.content)

相关文章:

  • 【APM】NET Traces, Metrics and Logs to OLTP
  • 期货数据API对接实战指南
  • win11改回win10
  • 每日一题(小白)暴力娱乐篇31
  • Electricity Market Optimization(VI) - 机组组合问题的 GAMS 求解
  • 论文研读: LLaVA, 微调大模型以理解图像内容
  • pycharm配置python编译器,安装第三方库 (通俗易懂)
  • 【web考试系统的设计】
  • 前端开发 + Vue 2 + 卡片拖拽(带坐标系、左右互拖、多卡同容器)+ 学习参考
  • QT日历控件重写美化
  • T113S3学习记录—软件说明(三)
  • Linux:初学者的简单指令
  • CST仿真天线流程
  • 【Linux】第十章 配置和保护SSH
  • 探索Adobe软件的冷门技巧
  • Spring DI 详解
  • @Autowird 注解与存在多个相同类型对象的解方案
  • 【英语语法】基本句型
  • 大模型如何改变我们的日常生活
  • vue3 el-dialog新增弹窗,不希望一进去就校验名称没有填写
  • 华尔兹转岗与鲁比奥集权:特朗普政府人事震荡背后的深层危机
  • 国内锂矿“双雄”开局业绩PK:从巨亏中崛起,或深陷泥淖谋求多元转型
  • 缔造“水饺皇后”的香港,也是被移民塑造的香港
  • 思政课也精彩,“少年修齐讲堂”开讲《我的中国“芯”》
  • 两部门调度部署“五一”假期安全防范工作,要求抓好旅游安全
  • 澎湃回声丨23岁小伙“被精神病8年”续:今日将被移出“重精”管理系统