logo
3

基于LangChain和百度 ElasticSearch的QA问答使用

概述

百度智能云 ElasticSearch(以下简称 BES) 是兼容开源的分布式检索分析服务。为结构化/非结构化数据提供低成本、高性能及可靠性的检索、分析平台级产品服务,向量能力方面,支持多种索引类型和相似度距离算法。本文旨在介绍基于LangChain和BES搭建一个简单的基于文档的 QA 问答,其中,BES 的向量检索可以直接通过引用LangChain包的方式。
  
  
  
  
  
  
from langchain.vectorstores import BESVectorStore

版本依赖说明

lanchain >= 0.0.324
qianfan >= 0.0.9
python >= 3.9
elasticsearch(>=7.10.0, <8.0.0)

QA问答Demo

用例
此处展示了如何使用 Langchian + BES 完成文档完成加载、切分、转为向量并存储在 BES 中,根据提问的 query进行回答的样板间。
基于 LangChain,将一个非结构化文件搭建私域知识的过程再次不做过多的赘述,如图所示
图中向量存储的部分采用BES的向量数据库能力。

系统预装

首先需要在本地执行
  
  
  
  
  
  
! pip install langchain
! pip install qianfan
! pip instann elasticsearch == 7.11.0
加载文档
文档加载包含文档的加载和切分。
  
  
  
  
  
  
from langchain.document_loaders.unstructured import UnstructuredFileLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = UnstructuredFileLoader("test.pdf")
document_data = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=0)
split_docs = text_splitter.split_documents(document_data)
文本向量化
在文本向量化方面,向量化的算法选择的是 test2vector 模型,向量化维度是768维。
  
  
  
  
  
  
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
import sentence_transformers
embeddings = HuggingFaceEmbeddings(model_name="shibing624/text2vec-base-chinese")
embeddings.client = sentence_transformers.SentenceTransformer(embeddings.model_name)
向量存储
本文中的向量存储是用的百度云ElasticSearch 产品,需要提前有一个 BES 集群,具体使用详见 https://cloud.baidu.com/doc/BES/index.html
  
  
  
  
  
  
from langchain.vectorstores import BESVectorStore
db = BESVectorStore.from_documents(
documents=split_docs, embedding=embeddings, bes_url="http://user:password@host:ip", index_name=INDEX_NAME, vector_query_field='vector'
)
db.client.indices.refresh(index=INDEX_NAME)
retriever = db.as_retriever()
知识问答
本文中知识问答大模型采用百度智能云千帆平台的预置服务 ERNIE-Bot。
  
  
  
  
  
  
from langchain.llms.baidu_qianfan_endpoint import QianfanLLMEndpoint
llm = QianfanLLMEndpoint(model="ERNIE-Bot", qianfan_ak="your_ak", qianfan_sk="your_sk")
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
query = "xxxxxxx"
print(qa.run(query))
效果展示
在本文的案例中,上传的文档格式是 pdf 文档,主要内容是对国内AI 大模型领域做了一个完整综述(原文:https://www.jos.org.cn/jos/article/abstract/6121?st=search)
问题和回答描述如下:
  
  
  
  
  
  
> 问题:
人工智能在落地过程中面临的挑战性问题有哪些?
> 回答:
人工智能在落地过程中面临的挑战性问题有:
1. 现有 AI 技术使用门槛高,依赖于 AI 从业者选择合适模型、设计合理参数。
2. 无法保证一定能从数据中找到有价值的信息,例如面对大量的无用或者无关的信息,AI 算法并不能完全保证从中找出真正有价值的信息。
3. 现有的模型大多数在训练时用的是单台设备或者单机集群,无法很好的扩展到大规模的集群中去,在算力上也无法满足大规模数据处理的需求。
  
  
  
  
  
  
问题:
本文从哪些层次介绍数据管理技术如何支持和优化人工智能技术?
回答:
根据原文信息得出,本文从行优化、物理执行优化、数据管理四个层次介绍数据管理技术如何支持和优化人工智能技术。
文中提到,行优化、物理执行优化、数据管理四个方面综述数据库技术如何优化人工智能的使用和执行效率,并给出未来人工智能技术与数据库内核结合的挑战和机遇。
  
  
  
  
  
  
问题:
面向AI的数据管理技术研究展望与未来趋势有哪些?
回答:
很抱歉,我无法回答面向AI的数据管理技术研究展望与未来趋势有哪些,但我可以提供一些相关信息。
目前,面向AI的数据管理技术已经成为研究的热点之一,随着人工智能技术的不断发展,数据管理技术也面临着越来越多的挑战和机遇。未来,面向AI的数据管理技术将会朝着以下几个方向发展:
智能化:随着人工智能技术的不断发展,智能化数据管理技术将会成为未来的重要趋势。通过利用机器学习、深度学习等技术,实现对数据的自动化分类、标注、检索等功能,提高数据管理的效率和精度。
云原生:随着云计算技术的不断发展,云原生数据管理技术也将会成为未来的重要趋势。通过利用云平台提供的资源和管理能力,实现对数据的分布式存储、处理、分析等功能,提高数据管理的可扩展性和灵活性。
隐私保护:随着人们对隐私保护的关注度不断提高,面向AI的数据管理技术也将会更加注重隐私保护。通过采用加密、匿名化等技术手段,保护用户隐私,提高数据管理的安全性和可信度。
多模态数据管理:随着物联网、社交媒体等应用的不断发展,多模态数据管理技术也将会成为未来的重要趋势。通过整合不同类型的数据源,实现对图像、文本、音频等多种类型数据的统一管理和分析,提高数据管理的全面性和深入性。
总之,面向AI的数据管理技术将会朝着智能化、云原生、隐私保护和多模态数据管理方向不断发展,为人工智能技术的发展提供更加全面和高效的数据支持。

总结

本文介绍了基于 LangChain 实现一个简单的问答系统,其中对于私域知识的向量存储采用百度智能云的 ElasticSearch 产品,将 BES的向量检索和存储的能力集成进入 LangChain 中,一方面发挥 BES 低成本、高性能的向量检索能力,另一方面,给LangChain社区开发者和使用者提供了一种向量检索的能力。
评论
用户头像