利用自查询技术进行RAG:LangChain与Elasticsearch的完美结合

102 阅读2分钟

引言

在当今信息过载的时代,如何从海量数据中准确检索出所需的信息成为了一项挑战。本文将介绍一种结合自查询技术(RAG-Self-Query)的方法,这种方法使用大型语言模型(LLM)将非结构化查询转化为结构化查询,以提高信息检索的准确性和效率。我们将使用OpenAI模型和Elasticsearch向量存储,并展示如何在本地环境中运行这一组合。

主要内容

环境配置

要使用本文中的示例,首先需要设置环境变量以访问OpenAI模型和Elasticsearch实例。

设置OpenAI API密钥

export OPENAI_API_KEY=<你的OpenAI_API_KEY>

连接到Elasticsearch

如果使用云实例:

export ELASTIC_CLOUD_ID=<CLOUD_ID>
export ELASTIC_USERNAME=<CLOUD_USERNAME>
export ELASTIC_PASSWORD=<CLOUD_PASSWORD>

如果在本地使用Docker进行开发:

export ES_URL="http://localhost:9200"
docker run -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "xpack.security.http.ssl.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.9.0

使用LangChain CLI

安装LangChain CLI以便使用自查询技术:

pip install -U "langchain-cli[serve]"

创建一个新的LangChain项目:

langchain app new my-app --package rag-self-query

添加到已有项目中:

langchain app add rag-self-query

server.py中添加以下代码:

from rag_self_query import chain
add_routes(app, chain, path="/rag-elasticsearch")

数据存储

将示例数据填充到向量存储中:

python ingest.py

LangSmith配置(可选)

通过LangSmith可以更好地跟踪、监控和调试LangChain应用。

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project>

运行LangServe实例

在当前目录中启动LangServe实例:

langchain serve

访问本地服务器http://localhost:8000,并在http://127.0.0.1:8000/docs处查看所有模板。

代码示例

以下是如何通过代码进行访问的示例:

from langserve.client import RemoteRunnable

runnable = RemoteRunnable("http://localhost:8000/rag-self-query")  # 使用API代理服务提高访问稳定性

常见问题和解决方案

  1. 连接不到Elasticsearch实例?

    • 确保您的环境变量设置正确,尤其是本地与远程实例之间的差异。
  2. LangChain程序意外中止?

    • 检查是否输入了正确的API密钥和项目设置。确保您的网络连接稳定。

总结和进一步学习资源

通过结合使用LangChain和Elasticsearch,以及创新的自查询技术,我们可以高效地从大量数据中检索信息。希望本文提供的步骤和代码示例能够帮助您快速上手并应用到实际项目中。

进一步学习资源

参考资料

  1. LangChain Documentation
  2. Elasticsearch Blogs
  3. OpenAI API Reference

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---