Streamlit + Neo4j 实战:如何构建一个懂“化工工艺”的 AI 助手?

72 阅读2分钟

前言
上一篇我们介绍了如何用 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)

  1. Intent Classification: 判断用户问题是关于“结构/关系”还是“流程/规范”。
  2. Graph Chain: 如果是关系问题,生成 Cypher 语句查询 Neo4j(例如:MATCH (n:Equipment)-[:PIPING_CONNECT]->(m) RETURN m)。
  3. Vector Chain: 如果是文本问题,查询 Chroma/Faiss 向量库。
  4. 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)

项目亮点

  1. 生态闭环:与 chemical-graph-editor 无缝对接,实现了从“绘图”到“问答”的数据流转。
  2. 安全规范:使用了 .streamlit/secrets.toml 管理敏感信息,适合生产环境参考。
  3. 低代码友好:通过 Streamlit 实现了侧边栏配置模型、Temperature 等参数。

开源地址
如果你正在探索 GraphRAG 或 工业数字化,欢迎 Star 和交流!
🔗 GitHub: github.com/ssnchenfeng…

截屏2025-12-23 16.04.57.png