码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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 进行下载。

  • 相关阅读:
    Mysql高级——索引创建和使用
    TCP 与 UDP 如何互通
    整理mongodb文档:搭建分片集群
    【数据结构】栈
    从查询语句执行流程看MySQL架构
    6-2 矩阵乘法函数(高教社,《Python编程基础及应用》习题4-11)
    The 2021 ICPC Asia Shenyang Regional Contest补题
    flutter app开发环境搭建
    遍历堆 PAT甲级 1155 堆路径
    【Android】WebView请求HttpRequest和HttpResponse
  • 原文地址:https://blog.csdn.net/UbuntuTouch/article/details/134027336
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号