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

Langchain+RAG+向量数据库

加载数据

import osimport lancedb
from langchain_community.document_loaders import TextLoader
from langchain_community.embeddings import BaichuanTextEmbeddings
from langchain_community.vectorstores import LanceDB
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain_openai import ChatOpenAI
from langchain_text_splitters import RecursiveCharacterTextSplitteros.environ['BAICHUAN_API_KEY'] = 'sk-732b2b80be7bd800cb3a1dbc330722b4'
loader = TextLoader('state_of_the_union.txt', encoding='utf8')documents = loader.load()

切块


text_splitter = RecursiveCharacterTextSplitter(chunk_size=100,#分块大小chunk_overlap=0,#重复大小length_function=len,is_separator_regex=False,separators=["\n\n","\n",".","?","!","。","!","?",",",","," "]
)docs = text_splitter.split_documents(documents)
print('=======', len(docs))

编码

embeddings = BaichuanTextEmbeddings()#收费。可以通过HuggingFace下载不收费的

构建向量数据库

LanceDB:

os.path.join(os.getcwd(), 'lanceDB'):使用当前目录,作为DB存储目录。

# 连接向量数据库
connect = lancedb.connect(os.path.join(os.getcwd(), 'lanceDB'))  # 本地目录存储向量vectorStore = LanceDB.from_documents(docs, embeddings, connection=connect, table_name='my_vectors')query = '今年长三角铁路春游运输共经历多少天?'
# 测试一下向量数据库
# docs_and_score = vectorStore.similarity_search_with_score(query)
# for doc, score in docs_and_score:
#     print('-------------------------')
#     print('Score: ', score)
#     print("Content:  ", doc.page_content)

LLM整合

Prompt—》Model—》parser—》Retrieve(将Question和检索结果结合)—》chain

retriever = vectorStore.as_retriever()
template = """Answer the question based only on the following context:
{context}
Question: {question}
"""prompt = ChatPromptTemplate.from_template(template)# 创建模型
model = ChatOpenAI(model='glm-4-0520',api_key='0884a4262379e6b9e98d08be606f2192.TOaCwXTLNYo1GlRM',base_url='https://open.bigmodel.cn/api/paas/v4/'
)output_parser = StrOutputParser()#  把检索器和用户输入的问题,结合得到检索结果
start_retriever = RunnableParallel({'context': retriever, 'question': RunnablePassthrough()})# 创建长链
chain = start_retriever | prompt | model | output_parserres = chain.invoke(query)
print(res)

相关文章:

  • vue-study(1)
  • java面向对象编程【基础篇】之基础语法
  • Day11(回溯法)——LeetCode79.单词搜索
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(10): つもり 计划/打算
  • Jenkins:开启高效软件开发的魔法之门
  • Java面试:从Spring Boot到微服务的全面考核
  • 【Leetcode 每日一题】2799. 统计完全子数组的数目
  • Nginx 中间件
  • 【一次成功!】Ubuntu22.04 安装 Autoware、 cuda、 cudnn、 TensorRT
  • PostgreSQL 分区表——范围分区SQL实践
  • Web3.0的认知补充(去中心化)
  • 从Kafka读取数据
  • “广州丰田汽车.网址”中文域名仲裁案:“网络门牌”保护战
  • Nginx 通过 Let‘s Encrypt 实现 HTTPS 访问全流程指南
  • 大模型是如何生成内容的?
  • Linux基础使用-笔记
  • 第三篇:Django创建表关系及生命周期流程图
  • Macbook M系列Arm设置任何来源安装第三方软件,安装Notepad--
  • 点云配准算法之NDT算法原理详解
  • 【信息系统项目管理师】高分论文:论进度管理和成本管理(智慧城管平台项目)
  • 百台新车首秀上海车展,跨国车企联手中国技术开启智能化下半场
  • 著名茶叶专家谢丰镐逝世,享年95岁
  • 民生访谈|马拉松中签率低何解?预付费监管落实得如何?市体育局回应
  • 国防部:希望美方不要有“受迫害妄想症”,总拿别人当借口
  • 中华人民共和国和肯尼亚共和国关于打造新时代全天候中非命运共同体典范的联合声明
  • 上海体育消费节将从5月持续至11月,推出运动装备商品促销活动