Flowise部署教程:Flowise与Neo4j图数据库结合知识图谱应用
1. Flowise是什么:拖拽式AI工作流的“乐高积木”
Flowise不是另一个需要写几十行代码才能跑起来的LangChain项目,而是一个真正让非程序员也能上手构建AI应用的可视化平台。它把原本藏在代码深处的LLM调用、提示词工程、文档切分、向量检索、工具集成等能力,全部封装成一个个可拖拽的节点——就像搭乐高一样,你只需要把“大语言模型”节点、“知识库检索”节点、“条件判断”节点连起来,一个能回答公司内部文档问题的RAG机器人就完成了。
它诞生于2023年,开源不到一年就在GitHub收获了45.6k颗星,MIT协议意味着你可以放心把它用在任何项目里,包括商业系统。它的核心价值很实在:不用写一行LangChain代码,5分钟就能在本地搭出一个能读PDF、答问题、连数据库的AI助手;导出API后,业务系统直接调用,不碰Python环境,也不用管CUDA版本兼容问题。
更关键的是,Flowise不是玩具。它支持生产级部署:Docker一键启动、PostgreSQL持久化聊天记录、React/Vue前端嵌入、甚至提供Railway和Render的一键上线模板。树莓派4上都能跑起来,说明它足够轻量;而企业级用户也用它对接内部知识库、ERP字段、客服工单系统——因为它真正解决了“AI能力落地最后一公里”的问题:把技术能力,变成业务人员能理解、能调整、能交付的流程。
2. 为什么选Flowise + Neo4j做知识图谱?不是所有知识都适合扔进向量库
很多团队一提到“知识图谱”,第一反应是“得建图谱、写Cypher、学图算法”。但现实是:你手头可能已经有大量结构化数据(比如CRM客户关系、产品BOM清单、组织架构树),也有大量非结构化文档(会议纪要、技术白皮书、FAQ),它们天然存在关联,只是没被显式表达出来。
这时候,硬套纯向量检索(VectorStore)会遇到明显瓶颈:
- 向量搜索擅长“语义相似”,但不擅长“精确关系推理”——比如问“张三负责的项目中,哪些用了Redis?”向量库大概率返回一堆含“Redis”的文档,但未必能精准定位到“张三→项目→技术栈”这条链路;
- 多跳查询(multi-hop)在向量空间里很难稳定实现,而图数据库天生就是为“找关系”设计的;
- 当你需要动态组合条件:“找出2023年签约、行业为金融、且使用过AI质检模块的客户”,SQL或Cypher写起来清晰直接,向量检索则需要复杂重排序或多次召回。
Flowise的强项,恰恰在于它不绑定某一种存储方式。它允许你把“向量检索”和“图数据库查询”作为两个独立节点接入同一个工作流。你可以让Flowise先用向量库从海量文档中快速圈定相关主题范围,再把关键实体(如人名、产品名、时间)提取出来,交给Neo4j执行精准的关系查询——一个节点负责“广度覆盖”,一个节点负责“深度穿透”,两者互补,不是替代。
这正是本教程要带你走通的路径:不推翻现有技术栈,而是让Flowise成为调度中枢,把Neo4j的知识图谱能力,像插件一样“即插即用”。
3. 本地环境准备:从零开始搭建Flowise + vLLM + Neo4j
本节目标:在一台普通Linux服务器(或Mac/Windows WSL)上,完成Flowise服务、vLLM本地大模型、Neo4j图数据库三者的协同部署。全程无需GPU云主机,CPU机器即可运行(效果稍慢但完全可用),重点在于流程可复现、配置可迁移。
3.1 基础依赖安装
# 更新系统包管理器 apt update # 安装编译和科学计算基础依赖(vLLM构建所需) apt install -y cmake libopenblas-dev python3-dev python3-pip # 升级pip并安装常用工具 pip3 install --upgrade pip pip3 install wheel setuptools3.2 部署Neo4j图数据库(社区版)
我们选用Neo4j Desktop(桌面版)或Neo4j Server(服务版)均可。为简化,这里采用Docker方式一键拉起:
# 拉取官方Neo4j镜像(社区版,免费) docker pull neo4j:5.21.0 # 创建数据与插件挂载目录 mkdir -p /app/neo4j/data /app/neo4j/plugins # 启动Neo4j容器(默认账号neo4j/neo4j,首次登录需改密码) docker run \ --name neo4j-kb \ -p 7474:7474 -p 7687:7687 \ -d \ -v /app/neo4j/data:/data \ -v /app/neo4j/plugins:/plugins \ -e NEO4J_AUTH=neo4j/neo4j \ -e NEO4J_dbms_memory_heap_max__size=2g \ neo4j:5.21.0验证:浏览器打开
http://localhost:7474,输入账号密码(neo4j / neo4j),首次登录后按提示修改密码为KKJiang123.。进入Browser界面后,执行:play movies可快速体验示例图谱。
3.3 部署Flowise(含vLLM本地模型支持)
Flowise官方默认使用HuggingFace Transformers加载模型,但对中文长文本、低延迟响应支持一般。我们替换为vLLM后端,显著提升吞吐与首字延迟。
# 进入工作目录 cd /app # 克隆Flowise主仓库(注意:使用main分支,非旧版v1) git clone https://github.com/FlowiseAI/Flowise.git cd Flowise # 复制环境配置模板 cp packages/server/.env.example packages/server/.env # 编辑 .env 文件,关键配置如下(用nano/vi打开): # ──────────────────────────────────────────────────────── # FLOWISE_BASE_API_URL=http://localhost:3000/api/v1 # NODE_ENV=production # PORT=3000 # # # 启用vLLM后端(关键!) # VLLM_ENABLED=true # VLLM_MODEL_NAME="Qwen2-1.5B-Instruct" # 支持中文的小型指令模型 # VLLM_API_BASE="http://localhost:8000/v1" # # # Neo4j连接配置(后续节点将用到) # NEO4J_URI="bolt://localhost:7687" # NEO4J_USERNAME="neo4j" # NEO4J_PASSWORD="KKJiang123." # ──────────────────────────────────────────────────────── # 安装依赖并构建(pnpm比npm更快) curl -fsSL https://get.pnpm.io/install.sh | sh -s -- -p source ~/.zshrc # 或 source ~/.bashrc pnpm install pnpm build # 启动Flowise(后台运行,便于后续查看日志) nohup pnpm start > flowise.log 2>&1 &3.4 启动vLLM服务(为Flowise提供模型推理)
# 安装vLLM(需Python 3.10+) pip3 install vllm # 启动vLLM API服务(使用Qwen2-1.5B-Instruct,约2GB显存/CPU内存) vllm-entrypoint --model Qwen/Qwen2-1.5B-Instruct \ --host 0.0.0.0 \ --port 8000 \ --tensor-parallel-size 1 \ --enforce-eager \ --max-model-len 4096注意:若无GPU,添加
--device cpu参数(性能下降但可运行);首次加载模型较慢,请耐心等待控制台出现Uvicorn running on http://0.0.0.0:8000提示。
4. Flowise工作流搭建:把Neo4j变成你的“关系问答引擎”
Flowise界面启动后(http://localhost:3000),使用演示账号登录:
- 邮箱:
kakajiang@kakajiang.com - 密码:
KKJiang123.
接下来,我们将创建一个名为“知识图谱问答助手”的新工作流,目标是:用户提问“李四参与过哪些AI项目?”,系统自动提取实体“李四”“AI项目”,在Neo4j中查询(:Person {name:"李四"})-[:PARTICIPATED_IN]->(:Project)-[:USES_TECH]->(:Technology {name:"AI"}),并将结果整合进自然语言回复。
4.1 添加Neo4j查询节点(核心自定义节点)
Flowise原生不带Neo4j节点,需手动注册。进入Flowise根目录,创建自定义节点文件:
mkdir -p /app/Flowise/packages/components/nodes/Neo4jQuery新建/app/Flowise/packages/components/nodes/Neo4jQuery/Neo4jQuery.ts,内容如下:
import { INode, INodeData, INodeParams } from '../../../src/Interface' import { Neo4jGraph } from '@langchain/community/graphs/neo4j_graph' class Neo4jQuery implements INode { label: string name: string description: string type: string icon: string category: string baseClasses: string[] inputs: INodeParams[] constructor() { this.label = 'Neo4j Query' this.name = 'neo4jQuery' this.type = 'Neo4jQuery' this.icon = 'neo4j.svg' this.category = 'Database' this.description = 'Execute Cypher query against Neo4j database' this.baseClasses = [this.type] this.inputs = [ { label: 'Query', name: 'query', type: 'string', placeholder: 'MATCH (p:Person)-[r]->(t:Technology) WHERE t.name = $tech RETURN p.name' }, { label: 'Parameters', name: 'params', type: 'json', optional: true, placeholder: '{"tech": "AI"}' } ] } async init(nodeData: INodeData): Promise<any> { const query = nodeData.inputs?.query as string const params = nodeData.inputs?.params ? JSON.parse(nodeData.inputs.params as string) : {} const uri = process.env.NEO4J_URI || 'bolt://localhost:7687' const username = process.env.NEO4J_USERNAME || 'neo4j' const password = process.env.NEO4J_PASSWORD || 'neo4j' const graph = new Neo4jGraph({ url: uri, username, password }) try { const result = await graph.query(query, params) return result } catch (error) { throw new Error(`Neo4j query failed: ${error}`) } } } module.exports = { node: Neo4jQuery }然后在/app/Flowise/packages/server/src/utils/buildCustomNodes.ts中注册该节点(追加一行):
import { node as Neo4jQuery } from '../components/nodes/Neo4jQuery/Neo4jQuery' // ... 其他import const customNodes = [ // ... 其他节点 Neo4jQuery, ]最后重新构建并重启Flowise:
pnpm build && pnpm start4.2 构建完整工作流(可视化连线)
拖入节点:
Chat Model→ 选择vLLM类型,自动读取.env中配置Prompt Template→ 输入系统提示词,例如:你是一个知识图谱查询助手。请从用户问题中提取关键实体(人名、项目名、技术名等)和关系意图(参与、负责、使用、属于等)。只输出JSON格式,包含字段:entities: [], relations: []Parse JSON→ 解析上一步输出的JSONNeo4j Query→ 新增的自定义节点,输入Cypher模板(如MATCH (p:Person)-[r:PARTICIPATED_IN]->(proj:Project) WHERE p.name IN $entities RETURN p.name, proj.name LIMIT 5)LLM Chain→ 将Neo4j结果+原始问题喂给vLLM,生成自然语言回答
连线逻辑:
- 用户输入 →
Prompt Template Prompt Template输出 →Parse JSONParse JSON的entities字段 →Neo4j Query的params(需在节点设置中映射)Neo4j Query结果 + 原始问题 →LLM Chain的input字段LLM Chain输出 → 最终回复
- 用户输入 →
保存并测试: 点击右上角「Save」,再点「Chat」标签页,输入:“王五在2023年主导了哪些安全类项目?”,观察是否成功调用Neo4j并返回结构化结果。
5. 实战技巧与避坑指南:让知识图谱真正“活”起来
Flowise + Neo4j的组合很强大,但实际落地时几个细节决定成败。以下是我们在多个客户项目中验证过的经验:
5.1 实体识别不能只靠LLM——加一层规则兜底
LLM提取实体有时不稳定(尤其缩写、中英文混杂)。建议在Parse JSON后加一个Code节点,用正则做二次校验:
# Python代码节点(Flowise内置) import re def main(inputs): entities = inputs.get("entities", []) # 强制过滤掉长度<2或纯数字的“伪实体” clean_entities = [e for e in entities if len(e) >= 2 and not e.isdigit()] # 补充常见别名映射 alias_map = {"AI": "Artificial Intelligence", "NLP": "Natural Language Processing"} clean_entities = [alias_map.get(e, e) for e in clean_entities] return {"clean_entities": clean_entities}5.2 Neo4j查询要防“爆炸式遍历”
错误写法:MATCH (a)-[*..3]-(b) WHERE a.name="张三" RETURN b
后果:全图扫描,超时崩溃。
正确做法:
- 所有查询必须指定标签(
:Person,:Project) - 关系类型明确限定(
-[:MANAGED_BY]->而非-[]->) - 加
LIMIT 10控制返回量 - 复杂查询提前在Neo4j Browser中用
PROFILE分析执行计划
5.3 Flowise调试技巧:日志比界面更可靠
- 查看Flowise日志:
tail -f /app/Flowise/flowise.log - 查看vLLM日志:
tail -f启动vLLM的终端 - Neo4j日志:
docker logs neo4j-kb - Flowise每个节点右上角有「Debug」按钮,点击可查看该节点输入/输出原始数据,比猜更高效。
6. 总结:知识图谱不是终点,而是AI应用的新起点
回看整个流程,你其实只做了三件事:装好Neo4j、跑起Flowise、连好两个节点。没有写一句Cypher给业务方看,也没有为LangChain的链式调用头疼。但结果是——你拥有了一个能理解“谁在什么时间、用什么技术、做了什么项目”的AI助手。
这背后体现的是一种更务实的AI工程观:不追求技术栈的“最先进”,而追求问题解决的“最短路径”。Flowise的价值,正在于它把LangChain的抽象能力,翻译成了产品经理能画、开发能调、运维能管的标准化模块;Neo4j的价值,则在于它把模糊的“知识关联”,固化为可查询、可验证、可审计的图结构。
下一步,你可以:
- 把CRM客户表导入Neo4j,让销售助理自动回答“这个客户最近3次沟通提到了哪些竞品?”
- 将研发文档中的API接口、参数、错误码构建成图,让新人提问“支付失败怎么排查?”直接返回调用链路;
- 甚至把Flowise工作流本身存为图谱节点,实现“AI工作流的自我编排”。
技术终将退隐,价值始终在前。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。