前言
上一篇我们介绍了如何用 React + X6 (传送门:P&ID编辑器)生产高质量的图数据。本文将分享如何消费这些数据,构建一个垂直领域的> GraphRAG 应用。
本项目 my_rag_project 是一个基于 Python 的全栈 RAG Demo,旨在演示如何结合结构化图谱与非结构化文本,提升 LLM 在工程领域的准确率。
技术栈 (Tech Stack)
- UI 框架: Streamlit (快速构建交互界面)
- 编排框架: LangChain (核心逻辑)
- 图数据库: Neo4j (存储 P&ID 拓扑结构)
- 大模型: Ollama / DeepSeek / OpenAI
- 开发模式: Expert + AI (100% Code generated by Gemini)
架构设计 (Architecture)
我们在 RAG 流程中引入了路由层 (Router) :
- Intent Classification: 判断用户问题是关于“结构/关系”还是“流程/规范”。
- Graph Chain: 如果是关系问题,生成 Cypher 语句查询 Neo4j(例如:MATCH (n:Equipment)-[:PIPING_CONNECT]->(m) RETURN m)。
- Vector Chain: 如果是文本问题,查询 Chroma/Faiss 向量库。
- Context Fusion: 将图查询结果转为自然语言,与向量结果合并,喂给 LLM。
核心代码片段
Streamlit 的 Session 状态管理与密钥处理:
code Python
# 安全读取 Neo4j 配置(不再硬编码)
graph = Neo4jGraph(
url=st.secrets["neo4j"]["url"],
username=st.secrets["neo4j"]["username"],
password=st.secrets["neo4j"]["password"]
)
# 混合检索的思考过程展示
with st.expander("🕵️♂️ 查看检索源 (Source Trace)"):
if graph_result:
st.markdown("**Structured (Graph):**")
st.json(graph_result)
if vector_result:
st.markdown("**Unstructured (Text):**")
st.info(vector_result)
项目亮点
- 生态闭环:与 chemical-graph-editor 无缝对接,实现了从“绘图”到“问答”的数据流转。
- 安全规范:使用了 .streamlit/secrets.toml 管理敏感信息,适合生产环境参考。
- 低代码友好:通过 Streamlit 实现了侧边栏配置模型、Temperature 等参数。
开源地址
如果你正在探索 GraphRAG 或 工业数字化,欢迎 Star 和交流!
🔗 GitHub: github.com/ssnchenfeng…