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

RAG选择合适的向量数据库,完整案列,使用百川词嵌入模型与向量数据库lanceDB,智谱清言大模型整合

在这里插入图片描述
在这里插入图片描述
这里我们使用用LanceDB

import os

import 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 RecursiveCharacterTextSplitter
# 百川的apikey
os.environ['BAICHUAN_API_KEY'] = 'sk-fb5ef65021a207c17bf9f772839fbd16'
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()

# 连接向量数据库,向量数据库用的是lancedb
# 在当前目录下面创建一个文件夹名为lanceDB,作为存储向量数据
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)


# 和大语言模型整合
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='112534ffd84245e6a1ffe7df3a790289.9rVJE1mN7zswWDjU',
    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_parser

res = chain.invoke(query)
print(res)





http://www.kler.cn/a/470081.html

相关文章:

  • STM32U575按键转换及设备驱动
  • 新年感悟:2025年1月7日高铁随想
  • 支付宝手机网站支付
  • 如何利用PHP爬虫按关键字搜索淘宝商品
  • 【数据结构】链表(2):双向链表和双向循环链表
  • Nginx——静态资源部署(二/五)
  • 探索 Vue.js 的动态样式与交互:一个有趣的样式调整应用
  • 基于 Python 大数据的民宿酒店推荐管理系统研究
  • 创客匠人老蒋主题演讲:如何构建创始人IP的商业增长闭环?
  • 年会游戏大全 完整版见考试宝
  • 眼见不一定为实之MySQL中的不可见字符
  • 深度学习-79-大语言模型LLM之基于python与ollama启用的模型交互API介绍
  • 使用Python,pypinyin将汉字转为带音调,首字母等多种风格的拼音,自动学习生字词
  • conda/pip基本常用命令理解与整理
  • 鸣潮洛可可养成攻略 雷电云手机怎么刷养成材料
  • 安卓触摸对焦
  • Python应用——将Matplotlib图形嵌入Tkinter窗口
  • 分布式环境下定时任务扫描时间段模板创建可预订时间段
  • Unity学习笔记(七)使用状态机重构角色攻击
  • Qt菜单栏、工具栏、状态栏(右键)
  • Linux(Ubuntu24.04)安装Eigen3库
  • 公共数据授权运营机制建设(六大机制、存在问题、发展路径)
  • mongodb==安装prisma连接
  • (leetcode算法题)面试题 17.19. 消失的两个数字
  • 01、Redis初认识
  • 哈希表笔记