Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)

这篇具有很好参考价值的文章主要介绍了Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

这是继之前文章:

  • Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)

  • Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (二)

的续篇。在今天的文章中,我将详述如何使用 ElasticsearchStore。这也是被推荐的使用方法。如果你还没有设置好自己的环境,请详细阅读第一篇文章。

创建应用并展示

安装包

#!pip3 install langchain

导入包

from dotenv import load_dotenv
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import ElasticsearchStore
from langchain.text_splitter import CharacterTextSplitter
from urllib.request import urlopen
import os, json

load_dotenv()
 
openai_api_key=os.getenv('OPENAI_API_KEY')
elastic_user=os.getenv('ES_USER')
elastic_password=os.getenv('ES_PASSWORD')
elastic_endpoint=os.getenv("ES_ENDPOINT")
elastic_index_name='elasticsearch-store'

添加文档并将文档分成段落

with open('workplace-docs.json') as f:
   workplace_docs = json.load(f)
 
print(f"Successfully loaded {len(workplace_docs)} documents")

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

metadata = []
content = []

for doc in workplace_docs:
  content.append(doc["content"])
  metadata.append({
      "name": doc["name"],
      "summary": doc["summary"],
      "rolePermissions":doc["rolePermissions"]
  })

text_splitter = CharacterTextSplitter(chunk_size=50, chunk_overlap=0)
docs = text_splitter.create_documents(content, metadatas=metadata)

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

把数据写入到 Elasticsearch

from elasticsearch import Elasticsearch

embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
 
url = f"https://{elastic_user}:{elastic_password}@{elastic_endpoint}:9200"
connection = Elasticsearch(url, ca_certs = "./http_ca.crt", verify_certs = True)

 
es = ElasticsearchStore.from_documents( 
                            docs,
                            embedding = embeddings, 
                            es_url = url, 
                            es_connection = connection,
                            index_name = elastic_index_name, 
                            es_user = elastic_user,
                            es_password = elastic_password)

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

展示结果

def showResults(output):
  print("Total results: ", len(output))
  for index in range(len(output)):
    print(output[index])

Similarity / Vector Search (Approximate KNN Search) - ApproxRetrievalStrategy()

query = "work from home policy"
result = es.similarity_search(query=query)

showResults(result)

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

Hybrid Search (Approximate KNN + Keyword Search) - ApproxRetrievalStrategy()

我们在 Kibana 的 Dev Tools 里打入如下的命令:

embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)


es = ElasticsearchStore(
    es_url = url,
    es_connection = connection,
    es_user=elastic_user,
    es_password=elastic_password,
    embedding=embeddings,
    index_name=elastic_index_name,
    strategy=ElasticsearchStore.ApproxRetrievalStrategy(
        hybrid=True
    )
)

es.similarity_search("work from home policy")

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

造成这个错误的原因是因为当前的 License 模式不支持 RRF。我们去 Kibana 启动当前的授权:

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

我们再次运行代码:

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

Exact KNN Search (Brute Force) - ExactRetrievalStrategy()

embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)


es = ElasticsearchStore(
    es_url = url,
    es_connection = connection,
    es_user=elastic_user,
    es_password=elastic_password,
    embedding=embeddings,
    index_name=elastic_index_name,
    strategy=ElasticsearchStore.ExactRetrievalStrategy()
)

es.similarity_search("work from home policy")

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

Index / Search Documents using ELSER - SparseVectorRetrievalStrategy()

在这个步骤中,我们需要启动 ELSER。有关 ELSER 的启动,请参阅文章 “Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR”。

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)

es = ElasticsearchStore.from_documents(
    docs,
    es_url = url,
    es_connection = connection,
    es_user=elastic_user,
    es_password=elastic_password,
    index_name=elastic_index_name+"-"+"elser",
    strategy=ElasticsearchStore.SparseVectorRetrievalStrategy()
)

es.similarity_search("work from home policy")

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

在运行完上面的代码后,我们可以在 Kibana 中进行查看所生成的字段:

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三),Elasticsearch,AI,Elastic,langchain,elasticsearch,搜索引擎,大数据,人工智能,全文检索

上面代码的整个 jupyter notebook 可以在地址 https://github.com/liu-xiao-guo/semantic_search_es/blob/main/ElasticsearchStore.ipynb 下载。文章来源地址https://www.toymoban.com/news/detail-714493.html

到了这里,关于Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【论文笔记】Active Retrieval Augmented Generation

    【论文笔记】Active Retrieval Augmented Generation

    论文题目:Active Retrieval Augmented Generation 论文地址:Active Retrieval Augmented Generation - ACL Anthology 会议:EMNLP 2023 main (Proceedings of the 2023 Conference on Empirical Methods in Natural Language Processing) github 链接:jzbjyb/FLARE: Forward-Looking Active REtrieval-augmented generation (FLARE) (github.com) 笔记参考:

    2024年03月20日
    浏览(14)
  • Retrieval-Augmented Multimodal Language Modeling

    本文是LLM系列文章,针对《Retrieval-Augmented Multimodal Language Modeling》的翻译。 最近的多模态模型,如DALL-E和CM3,在文本到图像和图像到文本生成方面取得了显著进展。然而,这些模型将其所有知识(例如,埃菲尔铁塔的外观)存储在模型参数中,需要越来越大的模型和训练数据

    2024年02月12日
    浏览(10)
  • In-Context Retrieval-Augmented Language Models

    本文是LLM系列文章,针对《In-Context Retrieval-Augmented Language Models》的翻译。 检索增强语言建模(RALM)方法在生成过程中对基础语料库中的相关文档设置语言模型(LM),可以显著提高语言建模性能。此外,它们可以缓解事实上不准确的文本生成问题,并提供自然的来源归因机

    2024年02月10日
    浏览(9)
  • 论文阅读:Retrieval-augmented Generation across Heterogeneous Knowledge

    论文阅读:Retrieval-augmented Generation across Heterogeneous Knowledge

    跨异构知识的检索增强生成 NAACL 2022 论文链接 摘要 检索增强生成(RAG)方法越来越受到NLP社区的关注,并在许多NLP下游任务上取得了最先进的性能。与传统的预训练生成模型相比, RAG方法具有知识获取容易、可扩展性强、训练成本低等显著优点 。尽管现有的RAG模型已应用于

    2024年02月06日
    浏览(9)
  • 使用langchain与你自己的数据对话(三):检索(Retrieval)

    使用langchain与你自己的数据对话(三):检索(Retrieval)

      之前我已经完成了使用langchain与你自己的数据对话的前两篇博客,还没有阅读这两篇博客的朋友可以先阅读一下: 使用langchain与你自己的数据对话(一):文档加载与切割 使用langchain与你自己的数据对话(二):向量存储与嵌入 今天我们来继续讲解deepleaning.AI的在线课程“Lan

    2024年02月15日
    浏览(11)
  • 【AI大模型应用开发】【LangChain系列】实战案例3:深入LangChain源码,你不知道的WebResearchRetriever与RAG联合之力

    【AI大模型应用开发】【LangChain系列】实战案例3:深入LangChain源码,你不知道的WebResearchRetriever与RAG联合之力

    大家好,我是同学小张,日常分享AI知识和实战案例 欢迎 点赞 + 关注 👏, 持续学习 , 持续干货输出 。 +v: jasper_8017 一起交流💬,一起进步💪。 微信公众号也可搜【同学小张】 🙏 本站文章一览: 上篇文章我们学习了如何利用 LangChain 通过 URL 获取网页内容。本文我们继

    2024年04月17日
    浏览(11)
  • Decoupling Knowledge from Memorization: Retrieval-augmented Prompt Learning

    本文是LLM系列的文章,针对《Decoupling Knowledge from Memorization: Retrieval 提示学习方法在仍然遵循基于参数的学习范式的同时,通过诱导更好的小样本表现,在自然语言处理中掀起了波澜;学习中的遗忘和死记硬背问题可能会遇到不稳定的泛化问题。具体来说,在完全监督的训练

    2024年02月11日
    浏览(13)
  • 使用 LangChain 和 Elasticsearch 的隐私优先 AI 搜索

    使用 LangChain 和 Elasticsearch 的隐私优先 AI 搜索

    作者:Dave Erickson 在过去的几个周末里,我一直在 “即时工程” 的迷人世界中度过,并了解像 Elasticsearch® 这样的向量数据库如何通过充当长期记忆和语义知识存储来增强像 ChatGPT 这样的大型语言模型 (LLM)。 然而,让我和许多其他经验丰富的数据架构师感到困扰的一件事是,

    2024年02月08日
    浏览(7)
  • 【论文阅读】REPLUG: Retrieval-Augmented Black-Box Language Models

    【论文阅读】REPLUG: Retrieval-Augmented Black-Box Language Models

    原文地址:REPLUG: Retrieval-Augmented Black-Box Language Models 本文提出 REPLUG ,一个将语言模型视为黑盒检索增强的语言模型架构。在 REPLUG 中,仅将检索得到的文档拼接到原有输入前面即可,不需要像以前一样更新语言模型参数。该架构中可以通过更新检索器进一步提升性能。 给一

    2024年02月11日
    浏览(26)
  • 论文阅读---Albert :Few-shot Learning with Retrieval Augmented Language Models

    论文阅读---Albert :Few-shot Learning with Retrieval Augmented Language Models

    增强语言模型 Augmented Language Models https://arxiv.org/abs/2208.03299 提前知识: BERT (Bidirectional Encoder Representations from Transformers)是一种预训练语言模型,它通过在大规模文本数据上进行预训练,学习文本的双向表示,并在多种NLP任务中展现出卓越的性能。BERT的双向性意味着它能够

    2024年04月23日
    浏览(8)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包