Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent

这篇具有很好参考价值的文章主要介绍了Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Background

很早就开始做检索增强的大语言模型Agent了,通过外接知识库为LLM提供外部知识能增强它回答的准确性。这里我们使用ElasticSearch作为数据库存储相关知识,使用百度文心千帆的embedding API提供向量嵌入;借助langchain搭建LLM Agent.

需要安装的环境有:

Python, ElasticSearch, langchain, qianfan;后两个直接pip install langchain,pip install qianfan

检索原理

这里可以参考我之前的博客:document-question-answering-bot(文档问答机器人)-CSDN博客

使用里面提到的双塔模型原理完成检索功能。

如何检索?我们抛弃了ElasticSearch中古老的TF-IDF检索方式,也放弃了使用BERT进行文档嵌入;而是全面向大语言模型时代看齐,使用新的模型构建基于语义的搜索引擎。

文本嵌入

现有的很多开源项目使用OpenAI提供的embedding API进行,但是考虑到翻墙,我们放弃了这个做法;也有人使用Huggingface上的模型进行API嵌入,考虑到可能需要本地部署LLM的算力消耗,我们仍没有考虑;出于类似的原因,我们放弃了本地部署LLaMa,Baichuan2等LLM模型进行词嵌入。

本文最后使用百度文心千帆提供的Embedding-V1文本嵌入模型进行,步骤是:

  1. 使用该模型需要现在文心千帆控制台注册账户:百度智能云控制台 (baidu.com)
  2. 注册账户后,左侧千帆大模型平台-应用接入-创建应用;记住API-KEY和SECRET-KEY。

Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent,langchain,elasticsearch,搜索引擎

数据库

需要先安装并启动ElasticSearch数据库,具体教程略

LangChain搜索引擎

langchain是一个大语言模型Agent开发框架,我们在这里使用它读取数据内容并建立索引,完成对前述文本嵌入模型和数据库的调用,搜索引擎构建:

from langchain.document_loaders import PyPDFLoader
from langchain.embeddings import QianfanEmbeddingsEndpoint
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import ElasticVectorSearch
from langchain.chains import RetrievalQA

import os
os.environ['QIANFAN_AK'] = ""
os.environ['QIANFAN_SK'] = ""


loader = PyPDFLoader("2307.10569.pdf")
data = loader.load()
 
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=0)
documents = text_splitter.split_documents(data)
print(len(documents), documents[0])

这里loader中是需要检索的外部知识库,我这里以一个PDF文档为例。如果嵌入的是HTML、TXT等其他类型,只需要调用langchain.documents_loaders里的其他读取方式即可。

使用RecursiveCharacterTextSplitter对文本进行分割;这里设置每200个词语截断成一段话,搜索引擎会为这每一段建立索引。像这里我们把PDF文件分成了98块,显示了第一块的内容,并为此建立了源。

Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent,langchain,elasticsearch,搜索引擎

下面这段代码定义了一个嵌入模型及数据库,这一段执行结束之后数据库中就已经存储了相关信息了;程序会输出下面的内容:

embeddings = QianfanEmbeddingsEndpoint()
db = ElasticVectorSearch.from_documents(
    documents,
    embeddings,
    elasticsearch_url="http://localhost:9200",
    index_name="elastic-index",
)
print(db.client.info())

Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent,langchain,elasticsearch,搜索引擎

接下来只需要查询:

db = ElasticVectorSearch(
    elasticsearch_url="http://localhost:9200",
    index_name="elastic-index",
    embedding=embeddings,
)

docs_and_scores = db.similarity_search_with_score("What it Aligning?", k=10)
print(docs_and_scores)

"What is Aligning"是我们提出的问题,K=10是搜索引擎按照相似度返回的前10个文档:

Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent,langchain,elasticsearch,搜索引擎

可以看到文档内容,文档源等等。在此可以说我们的搜索引擎已经构建完成啦!

Langchain构建检索增强LLM Agent

如果你的目标只是构建一个搜索引擎,那这一部分可以跳过。

如果你是想让一个LLM的机器人能根据检索出的文档内容回答,只需要调用LLM机器人,并把之前返回的文档内容写入prompt中即可完成。这方面可以自己调用API完成,也可以继续使用Langchain框架完成。具体如何调用LLM就不详细介绍啦。

一些参考文档:

同济子豪兄-基于文心大模型的金融知识库问答AI实战 - 飞桨AI Studio星河社区 (baidu.com)

基于langchain+千帆sdk的一个基于文档的QA问答Demo - 百度智能云千帆社区 (baidu.com)

使用 Elasticsearch、OpenAI 和 LangChain 进行语义搜索_Elastic 中国社区官方博客的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-758550.html

到了这里,关于Langchain+ElasticSearch+文心千帆 构建检索增强LLM Agent的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch:什么是检索增强生成 (RAG)?

    检索增强生成 (RAG) 是一种利用来自私有或专有数据源的信息来补充文本生成的技术。 它将旨在搜索大型数据集或知识库的检索模型与大型语言模型 (LLM) 等生成模型相结合,后者获取该信息并生成可读的文本响应。 检索增强生成可以通过添加来自其他数据源的上下文并通过培

    2024年02月04日
    浏览(42)
  • Elasticsearch:什么是检索增强生成 - RAG?

    在人工智能的动态格局中,检索增强生成(Retrieval Augmented Generation - RAG)已经成为游戏规则的改变者,彻底改变了我们生成文本和与文本交互的方式。 RAG 使用大型语言模型 (LLMs) 等工具将信息检索的能力与自然语言生成无缝结合起来,为内容创建提供了一种变革性的方法。

    2024年02月08日
    浏览(39)
  • Langchain 与 Elasticsearch:创新数据检索的融合实战

    在信息爆炸的时代,有效地检索和处理数据变得至关重要。Langchain 和 Elasticsearch 的结合,为我们提供了一个强大的工具,以更智能的方式进行数据检索和分析。 作为一名拥有多年 Elasticsearch 实战经验的技术博主,我将在本文中详细介绍这两种技术的整合应用。 Langchain是一个

    2024年01月19日
    浏览(42)
  • 使用 LangChain 构建 LLM 应用详细教程(附python代码演练)

    介绍 欢迎来到语言处理的未来!在一个语言是连接人与技术的桥梁的世界中,自然语言处理(NLP)的进步为我们带来了令人难以置信的机会。其中一个重要的进步是革命性的语言模型,即大型语言模型(LLM),它彻底改变了我们与基于文本的数据进行交互的方式。我们将探索

    2024年01月24日
    浏览(40)
  • LangChain入门:构建LLM驱动的应用程序的初学者指南

    LangChain DemoGPT         你有没有想过如何使用大型语言模型(LLM)构建强大的应用程序?或者,也许您正在寻找一种简化的方式来开发这些应用程序?那么你来对地方了!本指南将向您介绍LangChain,这是一个简化构建LLM驱动的应用程序的过程的工具。我们还将深入研究 

    2024年02月12日
    浏览(42)
  • 【ChatGPT】使用 LangChain 和 Ray 实现 100 行代码构建 LLM 开源搜索引擎【1】

    目录 Introduction Building the index 构建索引 Accelerating indexing using Ray 使用 Ray 加速索引编制 Serving

    2024年02月08日
    浏览(46)
  • Java-langchain:在Java环境中构建强大的基于LLM的应用程序

    Java-langchain : 一个Java 8+的LangChain实现。在(企业)Java环境中构建强大的基于LLM的应用程序。 这里持续连载详细的Java入门的LLM学习课程。课程分四个部分: 面向开发者的提示工程 (promptdevelopment) 搭建基于 ChatGPT 的问答系统 (chagptapi) 使用 LangChain 开发应用程序 (langchain) 使用 Lang

    2024年02月21日
    浏览(48)
  • 利用 Elasticsearch、ESRE、LLM 和 LangChain 加速制药行业的研发 — 第 1 部分

    作者:Valerio Arvizzigno, Dimitri Marx, Francesco Di Stefano 这是一篇通过生成式 AI/LLM、自定义模型和 Elasticsearch 相关性引擎 (ESRE​​) 支持制药行业更快的药物创新和发现的综合指南。更快的药物发现带来有前途的候选药物是制药行业的主要目标。 为了支持这一目标,该行业必须找到

    2024年02月16日
    浏览(38)
  • LLM本地知识库问答系统(一):使用LangChain和LlamaIndex从零构建PDF聊天机器人指南

           随着大型语言模型(LLM)(如ChatGPT和GPT-4)的兴起,现在比以往任何时候都更容易构建比普通熊更智能的智能聊天机器人,并且可以浏览堆积如山的文档,为您的输入提供准确的响应。        在本系列中,我们将探索如何使用pre-trained的LLM创建一个聊天机器人,该聊

    2024年02月11日
    浏览(65)
  • 理解构建LLM驱动的聊天机器人时的向量数据库检索的局限性 - (第1/3部分)

    本博客是一系列文章中的第一篇,解释了为什么使用大型语言模型( LLM )部署专用领域聊天机器人的主流管道成本太高且效率低下。在第一篇文章中,我们将讨论为什么矢量数据库尽管最近流行起来,但在实际生产管道中部署时从根本上受到限制。在下面的文章中,我们说

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包