当前位置: 首页 > 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)

http://www.xdnf.cn/news/112717.html

相关文章:

  • GitHub万星项目维护者分享:开源协作的避坑指南
  • C++ 日志系统实战第二步:不定参数函数解析
  • 深入理解 BLE PHY 模式:1M、2M 与 Coded 的演进与应用
  • 手撕C++STL list:深入理解双向链表的实现
  • 解决 Dart Sass 的旧 JS API 弃用警告 的详细步骤和解决方案
  • 【含文档+PPT+源码】基于SpringBoot+Vue旅游管理网站
  • 【无人机】无人机遥控器设置与校准,飞行模式的选择,无线电控制 (RC) 设置
  • 精益数据分析(20/126):解析经典数据分析框架,助力创业增长
  • day36图像处理OpenCV
  • Windows IIS 配置编辑器 应用程序初始化 <applicationInitialization>
  • 开发并发布一个属于自己的包(npm)
  • 算法笔记.spfa算法(bellman-ford算法的改进)
  • 要从给定的数据结构中提取所有的 itemList 并将其放入一个新的数组中
  • Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素
  • mfc学习(一)
  • 基于whisper和ffmpeg语音转文本小程序
  • 【深度学习】#9 现代循环神经网络
  • 【C++】继承
  • 数据结构与算法实战:从理论到落地的深度探索
  • 原生微信小程序,canvas生成凭证,保存到手机
  • Java的进阶学习
  • 鲲鹏麒麟搭建Docker仓库
  • 海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成
  • C++ RPC以及cmake
  • VBA技术资料MF300:利用Mid进行文本查找
  • 专家系统的一般结构解析——基于《人工智能原理与方法》的深度拓展
  • JBoltAI 赋能金融文档:基于 RAG 的基金招募说明书视觉增强方案
  • 分布式微服务架构,数据库连接池设计策略
  • 【框架学习】Spring AI-功能学习与实战(一)
  • node.js 实战——(Http 知识点学习)