尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

RocketRide Graph 节点详解:在 Postgres + Apache AGE 上用自然语言查询图数据库

发布时间:2026/9/25 5:11:34

资讯中心
01
ARTICLE

RocketRide Graph 节点详解:在 Postgres + Apache AGE 上用自然语言查询图数据库

RocketRide Graph 节点详解:在 Postgres + Apache AGE 上用自然语言查询图数据库
【免费下载链接】rocketride-serverHigh-performance AI pipeline engine with a C core and 50 Python-extensible nodes. Build, debug, and scale LLM workflows with 13 model providers, 8 vector databases, and agent orchestration, all from your IDE. Includes VS Code extension, TypeScript/Python SDKs, and Docker deployment.项目地址https://gitcode.com/gh_mirrors/ro/rocketride-server点击查看免费下载RocketRide 的rocketride_graph节点是一个面向 Apache AGE 图数据库的自然语言查询节点它把自然语言问题交给绑定的 LLM 翻译成只读 Cypher再通过 Cypher→AGE 翻译层转成 SQL 执行最终把结果以 Markdown 表格、文本或 answers 形式输出。阅读本文后你将掌握该节点的接入方式连接、Lanes、Agent 工具面、全部配置参数的含义与取值范围以及底层 Cypher 安全校验、只读事务、资源防火墙与 EXPLAIN 修复循环的实现原理——这些正是让LLM 生成的 Cypher可以安全落库的关键机制。节点定位什么时候选 rocketride_graph当关系与多跳遍历relationships and traversals就是你的数据模型时应优先选择rocketride_graph而不是rocketride_sql如果要做的是关系型 SQL 查询用 rocketride_sql如果做的是基于向量的文档检索则用 rocketride_vector。节点的核心工作流是接收questionsLane 上的自然语言问题调用必选的 LLM 连接生成只读 Cypher将 Cypher 翻译成 Apache AGE SQLApache AGE 无法直接执行裸 Cypher在服务器端只读事务中执行返回结果行输出到table/text/answersLane。它同时把图查询能力get_data、get_schema、get_query、execute、dialect以工具函数形式暴露给 Agent让 LLM Agent 可以零 Cypher 知识地直接问图。节点定义协议、能力与 Lane节点的注册元数据集中在 services.json其中几个关键声明配置项值含义titleRocketRide GraphUI 显示名protocolrocketride_graph://节点端点协议classType[graph, tool]既是图数据库节点也是工具节点capabilities[noremote, invoke]不支持远程执行只能在引擎宿主上运行可被 invokeregisterfilter注册为 filter 组件prefixrocketridegraph配置字段前缀所有字段以rocketridegraph.开头invoke.llmmin: 1必须连接至少一个 LLM用于从问题生成 Cypherlanesquestions: [table, text, answers]输入问题、三种输出 Lane唯一的连接要求如下连接是否必需说明llm是从自然语言问题生成 Cypher 查询Lane 行为一览输入 Lane输出 Lane说明questionstable以 Markdown 表格返回执行后的图查询结果questionstext以文本返回图查询结果questionsanswers以 answers Lane 返回图查询结果运行时依赖只有一个psycopg2-binary2.9.12见 requirements.txt节点直接驱动 psycopg2不经过 SQLAlchemy。零配置连接DSN 从已签入的 RocketRide 身份解析与graph_neo4j等需要填 host/user/password 的图节点不同rocketride_graph没有任何连接配置项。RocketRide 会为租户开通每租户per-tenant托管数据库Postgres Apache AGE节点从已签入的 RocketRide 身份自动解析 DSN。这一缝seam由 packages/ai/src/ai/common/rocketride_db.py 中的resolve_rocketride_dsn()统一提供rocketride_sql、rocketride_vector、rocketride_graph三个节点共用同一套解析逻辑。从源码看DSN 的交付顺序是ROCKETRIDE_DB_DSN环境变量——生产路径。任务引擎在任务启动时于服务端解析好租户 DSN 并注入到节点子进程只有服务端进程持有 SaaS 账户上下文节点子进程始终看到 OSS 账户实现Account.resolve_db_dsn(client_id)——服务端进程调用与测试的兜底路径在未配置的开源构建下会抛出需签入 RocketRide 云的错误。节点侧的连接逻辑在 IGlobal.py 的_open_driver中以connect_timeout3有界连接避免不可达的 pooler 卡住系统级 TCP 超时启动即做 fail-fast 往返校验先查pg_extension确认Apache AGE 扩展已安装再查ag_catalog.ag_graph确认配置的图存在任一校验失败立即抛错——例如缺失图时提示AGE graph rocketride does not exist ... create the graph (SELECT create_graph(rocketride)) or configure an existing one。节点不会自动创建不存在的图图由节点还是云端供给方创建的归属权在设计上仍是 open question。保存节点时的探测_probe_connection是警告级别的AGE 未装、图不存在时只warning不阻断因为用户可能还在编辑。全链路 Cypher→AGE 翻译查询路径的底层机制Apache AGE 不能执行裸 Cypher。该节点所有查询路径——安全读_run_query、原始执行_run_query_raw、校验_validate_query——都路由到 ai/common/graph/age 翻译层。该层是一个纯变换不访问数据库流水线为Parseanalysis.py——用 openCypher ANTLR 语法M23而非正则解析提取 RETURN 投影、写子句、$params、变长路径深度上界与调用的函数Firewallfirewall.py——对两条路径都施加资源上限查询长度、变长路径深度、语句超时语义只读规则禁写、禁 CALL仅作用于安全路径Dialectcapabilities.py——按 AGE 版本的能力表分SUPPORTED/EMULATE/REJECT/TBD不支持的特性在预检阶段就大声失败Emitemit.py——生成cypher()SQL 信封防冲突的美元引号标签、合成的AS (c0 agtype, …)结果列、SET LOCAL search_path/statement_timeout前导语句以及带参数时的PREPARE …(agtype)/EXECUTE …(%s::agtype)/DEALLOCATEAGE 要求cypher()第三个参数必须是预编译语句参数Decodedecode.py——用内置vendored的 Apache AGE 驱动解析器把 agtype 文本解码为 Python 对象顶点/边/路径扁平化为 dict。翻译层的机制已对照 PG 16.14 AGE 1.5.0 pgvector 0.8.0 的固定容器版本实测例如BEGIN READ ONLY能在服务器端阻止经由cypher()的写入EXPLAIN可以作用在信封语句上并干净地暴露 Cypher 语法错误——后者正是节点查询校验的机制。在节点侧翻译后的计划在_execute_planIGlobal.py中执行几个设计要点SET LOCAL而非SET云端端点是事务模式 pooler普通SET会跨租户泄漏因此翻译出的计划全部携带SET LOCAL服务器端只读保护安全路径以SET TRANSACTION READ ONLY作为事务内第一条语句由数据库本身拒绝写入事务前置断言_require_transactional_client显式断言autocommitFalse因为READ ONLY与SET LOCAL statement_timeout在事务外是静默空操作——这条断言确保未来改动会大声失败而不是悄悄丢掉写保护与超时上限。作为工具暴露给 Agent 的函数面IInstance层IInstance.py本身只有两行核心实现——显示名RocketRide Graph与方言标识age——五个工具函数全部继承自 graph_instance_base.py。函数注册为裸名本节点没有可配置的 server-name 前缀入参为 JSON 对象函数说明get_data把必需的自然语言question转换为安全的只读 Cypher 并执行、返回行limit可选get_schema返回发现的 labels、采样的节点属性与关系get_query把必需的自然语言question转换为只读 Cypher但不执行limit可选execute在启用直接执行时运行必需的原始 Cypherquerydialect返回{dialect: age}各函数的返回契约与 README 一致并在基类源码中可核对get_data默认行数为共享读取上限基类DEFAULT_ROW_LIMIT 250随后把请求的 limit 钳制到节点max_rows上限。成功结果包含{valid, rows, query, row_limit, truncated}生成、校验或执行失败返回{valid: false, error, query, rows: []}若问题是非图问题则可能携带 LLM 的文本回答且valid: false。基类还会多取一行limit1来判断truncated并在客户端再截一次防止 LLM 忘写LIMIT时把无界结果流给调用方。get_query只有在通过安全查询检查is_cypher_safe正则拦截 CREATE/MERGE/SET/DELETE/REMOVE/DROP 等写/管理子句后才返回{query, valid: true}校验失败会带error返回非图问题则把 LLM 的散文回答放在answer字段并置valid: false。execute绕过 LLM 翻译与只读闸门但仍要过 AGE 翻译层及其资源上限节点未启用直接执行时直接抛错否则返回{rows, affected_rows}。由于 AGE 不暴露写入计数器不像 Bolt 协议affected_rows报告的是结果行数——没有RETURN子句的写操作为 0。配置参数全解services.json的preconfig声明了一个内置 profiledefaultprofile 预置graph: rocketride。所有可调字段的定义含 UI 上强制的取值范围如下字段类型说明默认值取值范围rocketridegraph.allow_executebooleanAllow direct query execution允许QuestionType.EXECUTE调用方不经 LLM 翻译、不做只读安全检查地运行原始 Cypher资源限制仍然生效。除非可信应用确需直接下发 Cypher否则保持 OFFfalse—rocketridegraph.db_descriptionstringtextareaGraph description图是做什么的描述其内容与用途帮助 LLM 生成更准确的查询—rocketridegraph.graphstringGraph name要查询的 AGE 图名rocketride—rocketridegraph.max_attemptsintegerMax validation attempts校验拒绝生成的 Cypher 时重新询问 LLM 的最大次数51–20rocketridegraph.max_rowsintegerMax read rowsquestions Lane 与get_data工具读查询的行上限10001–25000rocketridegraph.profilestring隐藏字段配置档案选择defaultdefaultrocketridegraph.query_timeout_msintegerQuery timeout (ms)施加在每条查询事务内部的语句超时30000100–600000Graph name 与 Graph descriptiongraph默认rocketride必须指向已存在的 AGE 图启动时图缺失会直接失败而不是自动建图见上文 fail-fast 逻辑。租户库里有多张 AGE 图时修改该字段并同时更新db_description让生成的 Cypher 命中正确的模型。db_description默认为空。它会被原样注入 LLM 的提示词Graph description: ...见_buildQueryOnce因此当图的 label、关系语义与领域词汇无法从反射出的 schema 直接看出时应在此写明。校验重试与读取行数max_attempts即max_validation_attempts默认 5 次生成的 Cypher 被 EXPLAIN 校验拒绝后引擎会把上一次的查询和数据库返回的错误回填给 LLM 要求修复见 graph_instance_base.py 的_buildQuery修复循环。对复杂 schema若校验错误信息足以让 LLM 自我修复可以调高反之调低以便更快失败。max_rows默认 1000是节点属主对 questions Lane 和get_data的行上限。只有当 Agent 确需更大结果集时才调高——超出上限的结果是有意截断的truncated: true。基类中execute路径另有独立上限max_execute_rows默认 25000防止单条原始查询耗尽 worker 内存。查询超时query_timeout_ms默认 30,000通过翻译层FirewallConfig(statement_timeout_ms...)生效落地为事务内的SET LOCAL statement_timeout——即在每条查询的事务内部生效。调低它保护交互式管道不被昂贵的遍历拖住调高仅用于确知需要更多时间的查询。它与行上限是正交的两道闸一个限制执行时间另一个限制返回数据量。允许直接执行allow_execute默认关闭。打开后execute工具与QuestionType.EXECUTE可以放行原始 Cypher这些调用跳过 LLM 翻译与只读安全闸门但仍然走 AGE 翻译器及其资源控制_run_query_raw以TranslateMode.RAW翻译并在超过max_execute_rows时抛错。只应为你确需写入或原始 Cypher 的可信调用方开启。Schema 发现尽力而为的反射get_schema背后是_reflect_schemaIGlobal.py按契约是best-effort任何一步失败只warning并降级为部分或空schema绝不阻断启动。其结构为{nodes: {label: [(prop, type), ...]}, relationships: [{type, start, end}]}Label 列表从ag_catalog.ag_label关联ag_catalog.ag_graph查出过滤_\ag_%%内部 label顶点 label 采样上限SCHEMA_LABEL_LIMIT 200边 label 上限SCHEMA_REL_LIMIT 100节点属性对每个顶点 label 执行SELECT properties FROM graph.label LIMIT 1解码 agtype 后取属性名 → Python 类型名关系端点对每种边类型跑一条采样 CypherMATCH (a)-[r:type]-(b) RETURN label(a) AS s, label(b) AS e。这是节点自己拼接的唯一一条 Cypher因此 label 必须匹配^[A-Za-z_][A-Za-z0-9_]{0,62}$标识符规则——AGE 允许反引号引号包裹任意字符的 label这些绝不能被拼接进查询文本不合规的 label 会跳过采样并告警。反射出的 schema 随后被_describe_schema压缩成紧凑文本块注入 LLM 提示词Node :Person/name: str/( :A )-[:KNOWS]-( :B )的形式并附加强约束指令只允许用上下文提供的 label、属性与关系类型只许MATCH/RETURN与只读过程禁止输出 CREATE/MERGE/SET/DELETE/REMOVE/DROP。限制与适用前提不支持远程执行capabilities: [noremote, ...]节点运行在 RocketRide 引擎宿主上宿主必须能访问用于解析租户 DSN 的已签入 RocketRide 身份租户库必须已安装 Apache AGE且已包含所配置的图——两者都在_open_driver中启动即校验读取路径是有意只读的原始执行在显式开启allow_execute之前保持禁用DSN 解析要求运行在任务引擎内ROCKETRIDE_DB_DSN注入或具备账户上下文的进程内开源构建下没有云签入时Account.resolve_db_dsn兜底路径会报需签入 RocketRide 云错误。测试如何验证这些安全保证集成测试 nodes/test/test_rocketride_graph_full.py 在真实 PG16 AGE 1.5.0 容器上端到端运行该节点通过环境变量ROCKETRIDE_CLIENT_ID加可注入的假Account.resolve_db_dsnDSN 由RR_TEST_AGE_DSN指定数据库不可达时自动 skip。测试分组与关键断言TestLifecyclebegin_global连接并反射 schema图缺失时快速失败TestSafePath读查询正确解码行参数往返limit 契约最多返回 limit1 行只读事务由数据库强制服务器端拒绝写写语句在到达数据库前就被翻译层拒绝不支持的datetime()按能力表 REJECTTestExecutePathexecute受allow_execute门控开启后可写入并读回原始路径仍强制执行资源上限TestValidateQuery合法查询通过语法错误以可修复消息上报供修复循环防火墙拒绝被上报校验不执行查询EXPLAIN 路径TestInstanceToolsdialect与get_schema工具面行为。CI 可用RR_REQUIRE_DB_TESTS把这些 skip 转为硬失败确保容器故障时安全控制测试不会静默变绿。小结rocketride_graph的设计主线是让 LLM 生成的 Cypher 可以安全地落到多租户 Postgres AGE 上零配置的租户 DSN 解析、全链路 Cypher→AGE 翻译ANTLR 解析 资源防火墙 版本能力表 参数化信封、服务器端READ ONLY事务、SET LOCAL语句超时、EXPLAIN 校验与错误回填修复循环、尽力而为的 schema 反射再加上默认关闭的allow_execute写闸门。使用时只需连上一个 LLM确认租户库已有 AGE 与目标图然后围绕图的规模与形状调graph、db_description、max_rows与query_timeout_ms四个参数即可需要原始 Cypher 或写入时再显式打开allow_execute。赞分享【免费下载链接】rocketride-serverHigh-performance AI pipeline engine with a C core and 50 Python-extensible nodes. Build, debug, and scale LLM workflows with 13 model providers, 8 vector databases, and agent orchestration, all from your IDE. Includes VS Code extension, TypeScript/Python SDKs, and Docker deployment.项目地址https://gitcode.com/gh_mirrors/ro/rocketride-server点击查看免费下载相关推荐PGlite 接入 Apache AGE在 WebAssembly 中运行 Cypher 图数据库查询PGlite 接入 Apache AGE在 WebAssembly 中运行 Cypher 图数据库查询 PGlite 是 Postgres 的 WebAsse数据库嵌入式数据库WebAssemblyVanna 2.0用自然语言解锁数据库智能查询Vanna 2.0用自然语言解锁数据库智能查询 人工智能驱动的数据库查询革命 。使用RAG技术实现精准的自然语言到SQL转换让数据对话变得简单直观。 核心功人工智能AI AgentRAG数据库后端数据可视化kCTF多类型挑战模板使用教程Pwn、Web与XSS-Bot全解析kCTF多类型挑战模板使用教程Pwn、Web与XSS Bot全解析 想要快速构建安全可靠的CTF挑战环境吗kCTF是一个基于Kubernetes的CTF竞赛上一篇【亲测免费】 Moquette MQTT Broker 使用教程下一篇CircleImageView 使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。