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


    这是继上一篇文章 “Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)” 的续篇。在这篇文章中,我主要来讲述 ElasticVectorSearch 的使用。

    我们的设置和之前的那篇文章是一样的,只不过,在这里我们使用 ElasticVectorSearch 而不是 ElasticKnnSearch。

    创建应用并展示

    安装包

    #!pip3 install langchain

    导入包

    1. from dotenv import load_dotenv
    2. from langchain.embeddings import OpenAIEmbeddings
    3. from langchain.vectorstores import ElasticKnnSearch
    4. from langchain.text_splitter import CharacterTextSplitter
    5. from urllib.request import urlopen
    6. import os, json
    7. load_dotenv()
    8. openai_api_key=os.getenv('OPENAI_API_KEY')
    9. elastic_user=os.getenv('ES_USER')
    10. elastic_password=os.getenv('ES_PASSWORD')
    11. elastic_endpoint=os.getenv("ES_ENDPOINT")
    12. elastic_index_name='elastic-vector-search'

    将文档分成段落

    1. import json
    2. # Load data into a JSON object
    3. with open('workplace-docs.json') as f:
    4. workplace_docs = json.load(f)
    5. print(f"Successfully loaded {len(workplace_docs)} documents")
    6. metadata = []
    7. content = []
    8. for doc in workplace_docs:
    9. content.append(doc["content"])
    10. metadata.append({
    11. "name": doc["name"],
    12. "summary": doc["summary"],
    13. "rolePermissions":doc["rolePermissions"]
    14. })
    15. text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
    16. docs = text_splitter.create_documents(content, metadatas=metadata)

    把数据写入到 Elasticsearch

    1. embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
    2. url = f"https://{elastic_user}:{elastic_password}@{elastic_endpoint}:9200"
    3. ssl_verify = {
    4. "verify_certs": True,
    5. "basic_auth": (elastic_user, elastic_password),
    6. "ca_certs": "./http_ca.crt"
    7. }
    8. es = ElasticVectorSearch.from_documents(
    9. docs,
    10. embedding = embeddings,
    11. elasticsearch_url = url,
    12. index_name = elastic_index_name,
    13. ssl_verify = ssl_verify)

    如上所示,ElasticVectorSearch 在未来的发布中将被移除。

    运行完上面的代码后,我们可以到 Kibana 中进行查看:

    展示结果

    1. def showResults(output):
    2. print("Total results: ", len(output))
    3. for index in range(len(output)):
    4. print(output[index])

    Similarity / Vector Search (KNN Search)

    1. query = "work from home policy"
    2. result = es.similarity_search(query=query)
    3. showResults(result)

    我们上面实现的代码可以在地址  https://github.com/liu-xiao-guo/semantic_search_es/blob/main/ElasticVectorSearch.ipynb 进行下载。

  • 相关阅读:
    亚马逊店铺运营的五个方法
    中英文域名,你是否也有点小迷糊......
    京东数据接口:京东数据分析怎么做?
    linux主机名
    Least-upper-bound property
    操作系统:进程与线程大解析
    OSPF虚拟链路以及选路
    尚硅谷ES学习笔记一
    paddle2.3+centos7.6.5+cuda10.1+nccl2.7.8
    Android学习笔记 76. 支持库
  • 原文地址:https://blog.csdn.net/UbuntuTouch/article/details/134027336