构建LangChain应用程序的示例代码:23、使用LLM与Elasticsearch交互教程

Elasticsearch 数据库自然语言查询

使用大型语言模型(LLMs)与 Elasticsearch 分析数据库进行自然语言交互。

这个链通过 Elasticsearch DSL API(过滤器和聚合)构建搜索查询。

Elasticsearch 客户端必须具有索引列表、映射描述和搜索查询的权限。

点击此处查看如何在本地运行 Elasticsearch 的说明。

# 安装所需的Python库
! pip install langchain langchain-experimental openai elasticsearch

# 设置环境变量OPENAI_API_KEY或从.env文件中加载
import dotenv
dotenv.load_dotenv()

# 导入所需的模块
from elasticsearch import Elasticsearch
from langchain.chains.elasticsearch_database import ElasticsearchDatabaseChain
from langchain_openai import ChatOpenAI

# 初始化Elasticsearch Python客户端
# 详情见:https://elasticsearch-py.readthedocs.io/en/v8.8.2/api.html#elasticsearch.Elasticsearch
ELASTIC_SEARCH_SERVER = "https://elastic:pass@localhost:9200"  # Elasticsearch服务器地址
db = Elasticsearch(ELASTIC_SEARCH_SERVER)  # 创建Elasticsearch实例

取消下面单元格的注释以初始化数据库填充。

# 初始化数据库数据
customers = [
    {"firstname": "Jennifer", "lastname": "Walters"},
    {"firstname": "Monica", "lastname": "Rambeau"},
    {"firstname": "Carol", "lastname": "Danvers"},
    {"firstname": "Wanda", "lastname": "Maximoff"},
    {"firstname": "Jennifer", "lastname": "Takeda"},
    # 为每个客户创建文档
    for i, customer in enumerate(customers):
        db.create(index="customers", document=customer, id=i)
]
# 创建ChatOpenAI实例,用于与LLM交互
llm = ChatOpenAI(model="gpt-4", temperature=0)  # 使用gpt-4模型,温度设置为0

# 创建ElasticsearchDatabaseChain链
chain = ElasticsearchDatabaseChain.from_llm(llm=llm, database=db, verbose=True)  # verbose=True表示详细输出
# 定义问题并运行链
question = "What are the first names of all the customers?"  # 问题:所有客户的名是什么?
chain.run(question)  # 执行链并传入问题

我们可以自定义提示。

# 自定义提示模板
from langchain.prompts.prompt import PromptTemplate

PROMPT_TEMPLATE = """
给定一个输入问题,创建一个语法正确的Elasticsearch查询来运行。除非用户在他们的问题中指定了他们希望获得的示例数量,否则总是限制你的查询最多返回{top_k}个结果。你可以按相关列对结果进行排序,以返回数据库中最有趣的例子。

除非被告知不要查询特定索引的所有列,否则只请求根据问题相关的少数几列。

注意只使用你在映射描述中看到的列名。小心不要查询不存在的列。还要注意哪个列属于哪个索引。返回有效的json格式查询。

使用以下格式:

问题:这里的问题
ESQuery: 格式化为json的Elasticsearch查询
"""

# 创建提示模板实例
PROMPT = PromptTemplate.from_template(
    PROMPT_TEMPLATE,
)

# 使用自定义的提示模板创建ElasticsearchDatabaseChain链
chain = ElasticsearchDatabaseChain.from_llm(llm=llm, database=db, query_prompt=PROMPT)

注意: 代码中的 ELASTIC_SEARCH_SERVER 变量需要根据实际情况替换为有效的 Elasticsearch 服务器地址,密码和端口号也需要相应调整。此外,customers 列表中的客户数据也需要根据实际数据库的结构和需求进行调整。

总结:
本文介绍了如何利用大型语言模型(LLM)以自然语言的形式与Elasticsearch分析数据库进行交互。通过构建Elasticsearch DSL API(过滤器和聚合)的搜索查询,实现了对数据库的查询操作。文中提供了详细的代码示例,包括如何安装必要的库、如何初始化Elasticsearch的Python客户端、如何向数据库中填充初始数据、如何创建和运行ElasticsearchDatabaseChain链,以及如何自定义提示模板以生成正确的Elasticsearch查询。此外,还介绍了如何设置环境变量和如何本地运行Elasticsearch服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hugo_Hoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值