XteVision Prodigy 是什么,为谁而设?
XteVision Prodigy 是一款 自托管的、基于可视节点界面的 AI 工作流构建器,面向希望借助直观的拖放界面来组合复杂 AI 流水线的工程师、研究员和团队。它提供多模态 AI 支持、长期记忆(Wisdom)、智能体工具调用、RAG 嵌入以及多个 AI 后端的集成—all 在本地网络上运行,拥有完全的数据所有权。
高层设计和通信流程
┌─────────────────────────────────────────────────────────┐
│ 浏览器 (LAN 上任意设备) │
│ HTTPS / LAN │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ Kali Linux 服务器 (192.168.1.4) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ proxy_server.py (端口 9999) │ │
│ │ • 托管 UI (HTML/CSS/JS) │ │
│ │ • CORS 代理 → AI 后端 │ │
│ │ • 认证 (PostgreSQL 中的会话令牌) │ │
│ │ • Wisdom 长期记忆 (PostgreSQL) │ │
│ │ • 数据库查询 (MySQL/MariaDB) │ │
│ │ • 文档提取 (PDF/DOCX/XLSX 等) │ │
│ │ • 工具执行 (网络搜索、浏览器等) │ │
│ └──────────────────────────────────────────────────┘ │
│ PostgreSQL (端口 5432) SearXNG (端口 8888) │
└──────────────────────┬─────────────────────────────────┘
│ LAN (192.168.10.3)
┌──────────────────────▼─────────────────────────────────┐
│ Apple Silicon Mac │
│ ┌────────────┐ ┌──────────┐ ┌──────┐ ┌──────────┐ │
│ │ MLX 服务器 │ │LM Studio │ │Ollama│ │ Copilot │ │
│ │ 端口 5010 │ │端口 1234 │ │端口 │ │ 桥接 │ │
│ │ │ │ │ │11434 │ │端口 5015 │ │
│ └────────────┘ └──────────┘ └──────┘ └──────────┘ │
└───────────────────────────────────────────────────────┘Prodigy 面向 本地优先、网络可访问的部署 设计:
前端、后端与 AI 集成技术
| 技术 | 用途 |
|---|---|
| 原生 JavaScript (ES6+) | 具有模块化架构的应用逻辑 |
| HTML5 Canvas | 可视节点编辑器渲染 |
| CSS3 | 使用自定义属性、明/暗模式进行样式设计 |
| SVG | 节点之间的连接线 |
| localStorage | 工作流自动保存和状态持久化 |
| 技术 | 用途 |
|---|---|
| Python 3 | 多线程 HTTP 服务器 |
| PostgreSQL | Wisdom 记忆、用户会话、知识库 |
| pymysql | MySQL/MariaDB 数据库节点集成 |
| psycopg2-binary | Wisdom 的 PostgreSQL 驱动 |
| pypdf, python-docx, openpyxl, python-pptx | 文档提取 |
| chardet | 字符编码自动检测(CJK、西里尔字母) |
| bcrypt | 认证密码哈希 |
| Playwright | 用于智能体工具的浏览器自动化 |
| 后端 | 端口 | 类型 |
|---|---|---|
| MLX 服务器 | 5010 | 本地(Apple Silicon) |
| LM Studio | 1234 | 本地(任意 GGUF 模型) |
| Ollama | 11434 | 本地(嵌入 + 推理) |
| GitHub Copilot 桥接 | 5015 | 云端(通过 Node.js 桥接) |
让 Prodigy 在你的网络上运行起来
pip install psycopg2-binary pymysql pypdf python-docx openpyxl \
python-pptx chardet bcrypt playwright
# 可选:Playwright 浏览器(用于 playwright_browse 工具)
playwright install chromium
# 可选:agent-browser CLI,用于更丰富的手动浏览器自动化
npm install -g agent-browser
# 可选:文档节点内的 OCR 支持
sudo apt install tesseract-ocr poppler-utils
# 创建 Prodigy PostgreSQL 数据库和表
psql -U postgres -f postgres.sql
# 应用会话认证表
psql -U postgres -d prodigy -f sql_auth_setup.sql
cd /home/xteve/prodigy
./start.sh
# 或直接运行:
python3 proxy_server.py
局域网: http://192.168.1.4:9999
公开访问: https://prodigy.xtevision.net
直连: http://192.168.1.4:9999
# MLX 服务器
mlx_lm.server --model <model-path> --port 5010
# LM Studio(GUI - 自动启动)
# Ollama
ollama serve # 端口 11434
# GitHub Copilot 桥接
cd /path/to/copilot
node copilot_bridge.mjs
目录布局与模块组织
prodigy/
├── index.html # 主 UI 入口
├── styles.css # 应用样式(明/暗模式)
├── config.json # 运行时配置(后端、SearXNG、嵌入、Wisdom 数据库)
├── proxy_server.py # Python HTTP 服务器(端口 9999)
├── copilot_bridge.mjs # GitHub Copilot ↔ OpenAI 桥接(端口 5015)
├── start.sh # 便捷启动脚本
├── postgres.sql # PostgreSQL 模式(knowledge_base、users、sessions)
├── sql_auth_setup.sql # 认证表设置
├── js/
│ ├── main.js # 入口点
│ ├── state.js # 全局状态与后端配置
│ ├── constants.js # NODE_TYPES 枚举、节流值
│ ├── utils.js # fetchWithTimeout、Abort 控制器、URL 辅助
│ ├── logic/
│ │ ├── execution.js # 核心工作流引擎 — 所有节点执行逻辑
│ │ └── workflow.js # 保存 / 加载 / 导入 / 导出
│ └── ui/
│ ├── auth.js # 登录 / 注册 UI
│ ├── connections.js # SVG 连接线绘制
│ ├── dashboard.js # 仪表盘与工作流生成
│ ├── node_manager.js # 节点创建、设置面板
│ ├── playground.js # 画布、拖拽、平移、缩放
│ └── priority_manager.js # 执行顺序拖放
├── workflows/ # 预置工作流模板
│ ├── incident_triage_escalation.json
│ ├── customer_support_triage.json
│ ├── competitive_intel_brief.json
│ ├── sql_ops_assistant.json
│ ├── deep_research_sweep.json
│ ├── schema_migration_checklist.json
│ ├── db_incident_response.json
│ ├── xlsx2wisdom.json
│ ├── marketing.json
│ ├── software.json
│ ├── agency.json
│ └── developer/ # 软件交付代理模板
│ ├── software_development_agency_sota.json
│ ├── software_development_agency_enterprise_saas.json
│ ├── software_development_agency_ai_agent_platform.json
│ ├── software_development_agency_regulated_internal_tool.json
│ └── software_development_agency_parallel_specialists.json
├── plugins/ # 节点插件(内置 + 清单)
└── logs/
└── app.log # 应用日志main.js(bootstrap)
├── state.js
├── constants.js
├── utils.js
├── logic/execution.js → state.js、constants.js、utils.js
├── logic/workflow.js → state.js、utils.js
├── ui/auth.js → state.js、utils.js
├── ui/connections.js → state.js、playground.js
├── ui/dashboard.js → state.js、workflow.js、node_manager.js
├── ui/node_manager.js → state.js、constants.js、execution.js
├── ui/playground.js → state.js、connections.js、constants.js
└── ui/priority_manager.js → state.js、workflow.js
可视编辑器、认证、记忆、工具等
拖放画布,用于组合 AI 流水线。平移、缩放、调整节点大小。使用 SVG 线条绘制连接线。
用户注册和登录。所有 AI 操作都需要有效的 X-Session-ID 请求头。bcrypt 密码哈希。
基于 PostgreSQL 的知识库。AI 节点在推理前自动召回相关事实,在成功运行后自动存储新事实。
AI 节点可以在推理期间调用 web_search、fetch_webpage、playwright_browse、inspect_project、read_project_file、write_file、create_directory、update_memory、wisdom_memory。
内置语义分块选择,通过 Ollama 使用 nomic-embed-text。可配置分块大小和重叠。
原生视觉支持。通过图像节点上传图片,发送给支持视觉的模型(Qwen-VL、LLaVA 等)。
上传 PDF/DOCX/XLSX/PPTX/TXT/CSV。提取文本并发送给 AI 节点。通过 Tesseract 支持 OCR。
从工作流节点直接查询 MySQL/MariaDB。DB Schema 节点用于表/列内省。
SearXNG 元搜索,每个节点可配置引擎和语言。默认引擎:google、bing、duckduckgo。
用布尔触发信号门控任何 AI/Brainstorm/Translator/Decider 节点,进行条件执行。
内置和清单节点插件定义自己的元数据。仪表盘读取同一个插件注册表。
用于工具调用、记忆事件、错误的实时抬头显示。非侵入式屏幕底部面板。
可用节点类型的完整目录
| 节点 | 用途 |
|---|---|
| 输入 | 静态文本提示输入 |
| 图像 | 上传图片(Base64)用于视觉模型 |
| 文档 | 上传并解析 PDF/DOCX/XLSX/PPTX/TXT/CSV |
| Excel 专家 | 检查 XLSX 工作表、公式、依赖关系;将 AI 分析与手动 remap 映射结合 |
| 退出 | 最终输出,提供 TXT/JSON 下载 |
| 节点 | 用途 |
|---|---|
| DB Schema | 从 MySQL/MariaDB 获取表/列 schema |
| DB 查询 | 对 MySQL/MariaDB 数据库运行 SQL |
| 节点 | 用途 |
|---|---|
| Fetch | 抓取 URL;通过 chardet 处理 CJK/西里尔字母编码 |
| SearXNG | 元搜索,每个节点可配置引擎和语言 |
| 节点 | 用途 |
|---|---|
| AI | 带工具调用、RAG、Wisdom 召回的 LLM 推理 |
| AI Decider | LLM 分类器 → true / false / error 用于路由 |
| Translator | 自动检测源语言 → 目标语言 |
| Brainstorm | 多轮 AI 共识(3 个内部回合) |
| Wisdom | 显式长期记忆读/写节点 |
| 节点 | 用途 |
|---|---|
| 部署 | 发布规划、CI/CD、上线和回滚编排 |
| 监控 | 可观测性、告警、故障跟踪和运行手册规划 |
| 战略家 | 任务级规划、权衡和方法选择 |
| 战术总监 | 将策略分解为分配的任务、报告和升级 |
| 工作者代理 | 执行专家任务并返回具体交付物 |
| 创新者 | 生成新颖的、技术合理的解决方案概念 |
| 安全警察 | 策略、隐私、安全和运营风险审查 |
| 节点 | 用途 |
|---|---|
| 逻辑开关 | 在 true / false / error 信号上分支流程 |
| 定时器 | 在继续流程之前延迟执行 |
| 触发端口 | AI/Brainstorm/Translator/Decider 节点的布尔门控 |
| 节点 | 用途 |
|---|---|
| 项目 | 在项目路径下初始化和锁定项目路径(projects/ 下) |
| Coder | 打开所选项目链接的编码工作区 |
| 通信器 | 通过邮件、Telegram 或两者传递节点输出 |
| 节点 | 用途 |
|---|---|
| PLC / SPS | 运行 PLC 风格的逻辑,具有动态命名 I/O 引脚、保留状态、后端规则/Python/ST 引擎和 OpenPLC 桥接钩子 |
| 数学处理器 | 确定性计算、种子随机生成和函数表求值 |
可扩展的节点目录,基于清单的发现
所有节点类型都通过插件注册表定义。每个节点插件提供如下元数据:
class IProdigyNode:
def Initialize(self, config): ...
def Execute(self, input_data, ctx): ...
def Report(self): ...
def Hibernate(self): ...
def UpdateConfig(self, new_config): ...
仪表盘工作流架构师读取实时插件注册表,并在生成工作流时使用每个插件的 description 字段。这使生成的工作流与实际节点目录保持一致,包括新的角色节点和任何未来的清单加载插件。
配置和路由到多个 AI 供应商
后端在 config.json 的 backends 键下配置。每个后端都有一个 URL 和默认模型。
| 后端 | 主机 | 端口 | 类型 | 备注 |
|---|---|---|---|---|
| MLX | 192.168.10.3 | 5010 | 本地 | Apple Silicon MLX 服务器 |
| LM Studio | 192.168.10.3 | 1234 | 本地 | 任意 GGUF 模型 |
| Ollama | 192.168.10.3 | 11434 | 本地 | 也用于嵌入 |
| GitHub Copilot | 192.168.10.3 | 5015 | 云端 | 需要 copilot_bridge.mjs 运行 |
桥接将 OpenAI 兼容请求转换为 GitHub Copilot SDK 调用,并独立运行在 Apple Silicon Mac 上:
cd /path/to/copilot
node copilot_bridge.mjs
# 需要时覆盖配置路径:
COPILOT_BRIDGE_CONFIG_PATH=/path/to/copilot_bridge.config.json node copilot_bridge.mjs
| 模型 ID | 标签 |
|---|---|
| gemini-3-pro | Gemini 3 Pro(预览)— 默认 |
| gpt-5.3-codex | GPT-5.3-Codex |
| gpt-5.2-codex | GPT-5.2-Codex |
| gpt-5.2 | GPT-5.2 |
| gpt-5.1-codex-max | GPT-5.1-Codex-Max |
| gpt-5.1-codex | GPT-5.1-Codex |
| gpt-5.1 | GPT-5.1 |
| gpt-5.1-codex-mini | GPT-5.1-Codex-Mini(预览) |
| gpt-5-mini | GPT-5 mini |
| gpt-4.1 | GPT-4.1 |
桥接同时支持 流式(stream: true)和非流式请求,并对每个模型 复用会话 以避免每次请求的握手开销。
/browse 之上的高级渲染页面浏览/读取工具组合、保存和导入 AI 流水线
[输入: 主题] → [SearXNG] → [AI: 总结结果] → [退出]
[图片上传] → [AI(视觉模型)] → [退出]
[文档] → [AI(开启 Wisdom 召回)] → [Wisdom 节点: 存储结果] → [退出]
[输入] → [AI Decider] → true 端口 → [AI: 处理成功] → [退出]
→ false 端口 → [AI: 处理失败] → [退出]
将任意节点的输出连接到 AI / Brainstorm / Translator / Decider 节点的 触发 端口。下游节点仅在触发信号求值为 true 时执行。
预置模板位于 workflows/。通过工具栏中的 导入 按钮导入。
| 文件 | 描述 |
|---|---|
| incident_triage_escalation.json | 事件 intake → AI 严重度门控 → 路由升级路径 |
| customer_support_triage.json | 消息规范化 → 自动解决门控 → 人工交接 |
| competitive_intel_brief.json | 网络研究扫荡 → 来源蒸馏 → 战略简报 |
| sql_ops_assistant.json | NL→SQL → DB 执行 → 质量门控 → 运维洞察 |
| deep_research_sweep.json | 多来源研究,带来源整合 |
| schema_migration_checklist.json | DB schema 差异 → 迁移清单生成 |
| db_incident_response.json | 数据库事件检测与响应工作流 |
| xlsx2wisdom.json | 解析电子表格 → 将行存储到 Wisdom 知识库 |
| marketing.json | 营销文案生成流水线 |
| software.json | 软件工程工作流脚手架 |
| agency.json | 多代理代理工作流 |
workflows/developer/ 类别包含软件交付代理模板。它们都通过在解读客户简报之前用 项目 节点锁定项目代码库,并使用角色节点加上治理门控,来减少复杂客户请求上的歧义。
| 文件 | 适用情况 |
|---|---|
| software_development_agency_sota.json | 复杂客户工作的默认高纪律软件代理流程。最佳全面模板。 |
| software_development_agency_enterprise_saas.json | 多租户 SaaS 产品,带有 onboarding、IAM、计费、迁移或企业支持需求。 |
| software_development_agency_ai_agent_platform.json | AI 代理平台、编排层、工具运行时、记忆系统或代理运营栈。 |
| software_development_agency_regulated_internal_tool.json | 受监管的内部工具,带有审批、审计、政策文件或受控部署需求。 |
| software_development_agency_parallel_specialists.json | 值得并行前端、后端和 AI/数据工作流的复杂请求。 |
基于 PostgreSQL 的知识库,支持自动召回和自动存储
AI 节点可以在推理前自动从 PostgreSQL knowledge_base 表中召回相关条目,并在成功运行后存储新事实。
knowledge_base 和 messages 查询限定为当前用户users、sessions、pg_* 和 information_schema 不通过 Wisdom 查询端点暴露Wisdom 在 config.json 的 wisdom 键下配置:
{
"wisdom": {
"host": "192.168.1.4",
"port": 5432,
"database": "prodigy",
"user": "prodigy_user",
"password": "your-password"
}
}
如果你已有遗留共享 Wisdom 行,请运行 docs/sql_wisdom_user_isolation.sql,并决定是否将这些旧行回填到特定所有者,或让它们对普通用户不可访问。
AI 节点在推理期间可用的工具
| 工具 | 描述 |
|---|---|
| web_search | 通过 SearXNG 元搜索进行网络搜索 |
| fetch_webpage | 抓取 URL,带编码自动检测(CJK、西里尔字母) |
| playwright_browse | 通过 Playwright HTTP 桥接的高级渲染页面浏览/读取 |
| inspect_project | 在重新运行前检查现有项目输出;除非明确要求,否则避免覆盖文件 |
| read_project_file | 从项目目录读取文件 |
| write_file | 在项目目录中写入或创建新文件 |
| create_directory | 在项目目录中递归创建目录 |
| update_memory | 在推理期间更新内部代理记忆 |
| wisdom_memory | 读写 PostgreSQL Wisdom 知识库 |
在 Apple Silicon 主机上提供两个级别的浏览器自动化:
copilot_bridge.config.json 中配置的本地 HTTP 浏览器桥接。用于导航和读取渲染页面的高级 API。agent-browser CLI。用于 open/click/fill/press/wait/snapshot/get/is 操作的低级结构化自动化。当配置了 playwrightCdpTarget 或 PLAYWRIGHT_CDP_TARGET 时可选使用 CDP。认证、数据隔离和隐私控制
sessionStorage 中(关闭标签页时清除)X-Session-ID 请求头在每个请求中发送users、sessions、pg_*、information_schema)绝不通过查询端点暴露服务器是 多线程 的 — 每个请求在自己的线程中运行,因此长时间运行的 AI 推理调用不会阻塞 UI 或其他请求。请求大小限制:200 MB(用于文档上传)。
服务器端点和请求/响应格式
| 方法 | 路径 | 描述 |
|---|---|---|
GET | /health | 健康检查 — 返回 {status:'ok', server:'prodigy', ts:<unix>} |
GET | /* | 静态文件托管(UI 资源) |
POST | /proxy | 任意 URL 的 CORS 代理(Fetch 节点、SearXNG) |
POST | /ai | 所有 AI 操作:认证、文档提取、数据库查询、Wisdom 查询、嵌入、工具执行和 AI 后端代理 |
GET /health
X-Session-ID: your-session-token
POST /ai
Content-Type: application/json
X-Session-ID: your-session-token
{
"action": "ai_inference",
"backend": "mlx",
"model": "your-model",
"prompt": "Your prompt here",
"tools": ["web_search", "fetch_webpage"],
"wisdom_recall": true,
"wisdom_store": true
}
POST /proxy
Content-Type: application/json
X-Session-ID: your-session-token
{
"url": "https://api.example.com/data",
"method": "GET",
"headers": {}
}
通过 config.json 进行运行时配置
config.json 携带以下可管理的默认值:
每个 SearXNG 节点有两个可在节点面板中直接设置的可选数据集属性:
| 设置 | 数据集键 | 默认 |
|---|---|---|
| 搜索引擎 | searxngEngines | google,bing,duckduckgo |
| 语言 | searxngLanguage | en-US |
如果未在节点上设置,这些值回退到 config.searxng.engines / config.searxng.language。
{
"embedding": {
"endpoint": "http://192.168.10.3:11434/api/embeddings",
"model": "nomic-embed-text",
"chunkSize": 500,
"chunkOverlap": 50
}
}
来自通信器节点的邮件和 Telegram 投递
通信器 节点从 config.json 中可选的 notifications 块读取默认值。节点级字段可以在运行期间覆盖这些值。
{
"notifications": {
"defaults": {
"channel": "email",
"emailTo": "team@example.com",
"emailSubject": "Prodigy Update",
"telegramChatId": "123456789"
},
"smtp": {
"host": "smtp.example.com",
"port": 587,
"user": "mailer@example.com",
"password": "",
"fromAddress": "mailer@example.com",
"starttls": true,
"ssl": false,
"timeout": 30
},
"telegram": {
"botToken": "<telegram-bot-token>",
"chatId": "123456789",
"parseMode": "Markdown",
"disablePreview": false
}
}
}
带 PLC 风格逻辑的工业原型设计
内置的 PLC / SPS 节点支持面向工业原型设计的第二运行时模型:
| 引擎 | 描述 |
|---|---|
| 内置 | 原始闪烁器 / 计数器 / 输入镜像模式 |
| 规则 | 基于行的 PLC 逻辑,如 TON、TOF、TP、CTU 和 Q0.0 := T1.Q |
| Python | 通过 run_cycle(io, state, ctx) 进行沙箱化后端执行 |
| 结构化文本 | 上传到 OpenPLC 运行器的后端 |
对于 结构化文本 部署和 Modbus/OpenPLC 桥接,向 config.json 添加可选的 plc 块:
{
"plc": {
"openplcApiUrl": "http://192.168.1.50:8080/api",
"modbusHost": "192.168.1.50",
"modbusPort": 502,
"inputCoilOffset": 0,
"outputCoilOffset": 100
}
}
后端代理使用此配置进行 ST 上传和 Modbus I/O 同步。这是用于远程 Linux/OpenPLC 端;浏览器从不直接与 Modbus 通信。
VPN 连接的 Torizon 板与 PLC 桥接单独配置,以便在摄像头或 LiDAR 硬件存在之前可以测试 SSH 访问:
"port": 22, "user": "", "sshKeyPath": "", "remoteProjectPath": "/home/torizon", "pythonPath": "python3", "connectTimeoutSec": 8, "probeCommand": "uname -a" } }管理配置浮层暴露这些字段,并包含 测试板访问 操作。该探测首先检查到 SSH 端点的原始 TCP 可达性,然后在配置了用户时尝试非交互式 SSH 登录。
用自定义节点和插件扩展 Prodigy
plugins/ 创建新的插件文件IProdigyNode 接口class MyCustomNode:
id = "my_custom_node"
nodeType = "MY_CUSTOM"
title = "My Custom Node"
description = "Does something awesome"
def Initialize(self, config):
self.config = config
def Execute(self, input_data, ctx):
# Process input
result = "Output based on: " + input_data
return result
def Report(self):
return {"status": "ok"}
def Hibernate(self):
pass
def UpdateConfig(self, new_config):
self.config = new_config
前端是模块化的。关键扩展点:
js/constants.js:为枚举添加新的节点类型js/ui/node_manager.js:为新节点添加设置面板js/logic/execution.js:为新节点类型添加执行逻辑js/ui/playground.js:为新节点视觉添加自定义渲染| 键 / 操作 | 效果 |
|---|---|
| 删除 | 移除选中的节点 |
| 拖动节点标题 | 移动节点 |
| 拖动画布(空白区域) | 平移视口 |
| 拖动节点右下角 | 调整节点大小 |
常见问题与解决方案
proxy_server.py 中的 PORT = 9999postgres.sql 和 sql_auth_setup.sql 已应用到 prodigy 数据库192.168.1.4:5432 运行且 prodigy 数据库存在curl http://192.168.10.3:5010/v1/modelscopilot CLI 已登录:copilot auth loginnode copilot_bridge.mjscurl http://192.168.10.3:5015/healthagent-browser --helpPLAYWRIGHT_CDP_TARGET 将桥接指向不同浏览器端点,或用 AGENT_BROWSER_BIN 指向不同 CLI 路径pip install pypdf.doc、.xls、.ppt)— 转换为 .docx/.xlsx/.pptxsudo apt install tesseract-ocr poppler-utilsexport TESSERACT_LANG=eng(或 eng+chi_sim)在启动服务器之前prodigy PostgreSQL 数据库中是否存在 knowledge_base 表curl http://192.168.1.4:8888/search?q=test&format=json代理服务器通过 chardet 自动检测编码。如果问题持续,检查源网站声明的字符集。