在LangChain中使用Milvus + openai使用

news/2024/7/7 23:11:52

Milvus(opens in a new tab) 是一个存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大规模嵌入向量的数据库。

1.文档分割

from langchain.document_loaders import PyPDFLoader

'''
pdf
'''
loader = PyPDFLoader("D:\py\LangChaindao\操作系统原理.pdf")
docs = loader.load()
# 将文档拆分成更小的块
text_splitter = CharacterTextSplitter(chunk_size=1024, chunk_overlap=0)
docs = text_splitter.split_documents(docs)
from langchain.document_loaders import WebBaseLoader
'''
网页1
'''
loader = WebBaseLoader([
    #"https://zhuanlan.zhihu.com/p/105945721",
    # "https://www.zhihu.com/question/382955637",
    "https://baike.baidu.com/item/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f/192"
])
docs = loader.load()
# 将文档拆分成更小的块
text_splitter = CharacterTextSplitter(chunk_size=1024, chunk_overlap=0)
docs = text_splitter.split_documents(docs)

2.使用嵌入 向量化存储+查找

目标是从我们的长文本中选择相关的块,但是我们要提取哪些块?最流行的方法是基于比较向量嵌入来提取相似的文本。
使用 OpenAIEmbeddings

def fun(docs):
    # 设置一个嵌入模型,将文档块转换为向量嵌入。
    embeddings = OpenAIEmbeddings(engine="text-embedding-ada-002")
    # print(embeddings)
    # 设置用于保存矢量嵌入的矢量存储。这里我们使用Milvus作为向量存储。
    Milvus.from_documents(
        docs,
        embedding=embeddings,
        connection_args={"host": HOST, "port": PORT}
    )

3.问答 向量化查询与返回topK

embeddings = OpenAIEmbeddings(engine="text-embedding-ada-002")
vector_store = Milvus.from_documents(
        "",
        embedding=embeddings,
        connection_args={"host": HOST, "port": PORT}
    )
query = "操作系统的发展历程?"
docs = vector_store.similarity_search(query)
print(docs)

topK

related_docs_with_score = vector_store.similarity_search_with_score(query,k=self.top_k)

在这里插入图片描述

4 .相关文档 以提示词的方式给openai 然后结合回答

chain = load_qa_with_sources_chain(AzureOpenAI(deployment_name=model, model_name="gpt-35-turbo", temperature=0),
                                   chain_type="map_reduce", return_intermediate_steps=True)
query = "操作系统的发展历程?"
# 包括intermediate_steps和output_text。前者指示搜索期间引用的文档,后者是问题的最终答案
data = chain({"input_documents": docs, "question": query}, return_only_outputs=False)
print(data)

在这里插入图片描述

来源:
1.[LangChain 🦜️🔗 中文网]https://www.langchain.com.cn/modules/indexes/vectorstores/examples/milvus
2.[用 LangChain 和 Milvus 从零搭建 LLM 应用]https://zhuanlan.zhihu.com/p/644603736


http://lihuaxi.xjx100.cn/news/1602555.html

相关文章

[HNOI2003]激光炸弹---二维前缀和

题目描述 一种新型的激光炸弹,可以摧毁一个边长为 m 的正方形内的所有目标。现在地图上有 n 个目标,用整数 xi​ , yi​ 表示目标在地图上的位置,每个目标都有一个价值 vi​ .激光炸弹的投放是通过卫星定位的,但其有一个缺点&…

深度学习纯小白如何从零开始写第一篇论文?看完这篇豁然开朗!

📢前言 上个月小贾消失了一段时间,原因就是。。。 写论文去啦!!! 先拿我导的认可镇个楼: 本篇文章将分享我个人从迷茫地找方向→苦苦做了48次实验才高效涨点→写论文到头秃等等一系列真实经历&#xff0c…

当我们谈论量化时,我们在谈论什么?量化投资常见策略有哪些?| 融券T0和高频交易详解【邢不行】

最近关于量化的争议不断,很多人甚至建议取缔量化。 部分人认为量化以高频交易配合融券变相实现T0,赚走了市场所有的钱,有失公正。 高频交易大家都听过,即凭借程序在几秒甚至几毫秒内完成一笔交易,有人认为这对还在盯盘…

C++中的强制转换

目录 背景介绍: C static_cast 的使用 C dynamic_cast 的使用 C reinterpret_cast 的使用 C const_cast 的使用 强制转换小结: 资料引用: 背景介绍: 在编写很多工程代码的时候,我们经常会遇到类型转换的问题。当…

asgi与wsgi与uwsgi的区别

Web 服务器和 Web框架 Web服务器即用来接受客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由Web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。 Nginx是一个Web服务器,Django或flask就…

vue-1

一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 构建用户界面 的 渐进式 框架 …

ref与DOM-findDomNode-unmountComponentAtNode知识点及应用例子

​​​​​​http​​​http://t.csdnimg.cn/og3BI 知识点讲解↑ 需求: (下载/导出 用post请求时:) 实例: react部分代码 1、点击下载按钮,需要传给后端数据,到数据扁平,不是那么复杂,只需url地址即可完成下载,后端…

Python中跨越多个文件使用全局变量

嗨喽,大家好呀~这里是爱看美女的茜茜呐 这个琐碎的指南是关于在 Python 中跨多个文件使用全局变量。 但是在进入主题之前,让我们简单地看看全局变量和它们在多个文件中的用途。 👇 👇 👇 更多精彩机密、教程&#xff…