一个面向真实用户需求的开箱即用智能应用平台——通过多平台公开数据、Skill、Agent 和二级 Skill / Run 执行链路,自动为用户生成可用的结果或方案,并具备可扩展、可追溯、可治理、可保护的能力。
重构说明
当前仓库已完成从旧
backend/app结构到新分层结构的重构。正式实现以 apps、modules、shared、config 和 tests 为主;integrations 与 legacy 仅保留外围集成和冻结兼容内容。
团队迁移和协作请优先阅读: 模块分工、 仓库约定、 迁移映射
如何启动该项目并验证功能: 用例与验证说明。
OpenUniflo 不是单纯的聊天产品,也不是固定功能的工具集合。它让用户直接输入需求,由系统自动完成多平台公开数据的获取、处理、组合与输出,最终直接给出可用的结果或方案。
它要解决的核心问题是:用户在真实场景下往往需要跨多个平台反复搜索、比较、整理和判断,过程繁琐、效率低,而现有通用聊天产品很难直接产出结构化、可执行的结果。OpenUniflo 把这一过程产品化,让用户得到一个可以直接使用的应用形态。
| 能力 | 说明 |
|---|---|
| 开箱即用 | 用户无需自行配置工具、接口或数据源,直接使用应用 |
| 跨平台自动任务 | 将多平台公开数据接入后,自动整理、比较、筛选、组合,输出用户真正需要的结果 |
| 可扩展 | 沉淀可复用的 Skill、Agent 和二级 Skill,并支持自动创建新的采集 Skill |
| 可追溯 | 记录完整调用链路与执行轨迹,每个结果都可以看到它是如何生成的 |
| 可治理 | 身份管理、调用权限控制、高风险操作识别、敏感数据保护、异常链路回溯 |
- 购物推荐与多平台商品比价
- 旅行规划与酒店/景点信息整合
- 团购、本地生活和消费决策辅助
- 多平台信息筛选与方案自动生成
系统由五个模块组成,整体数据流如下:
用户输入
│
▼
系统 / Agent 编排模块 ──── 组织执行流程
│
├──► 数据接入模块 ──── 从外部平台拿数据
│
├──► 业务逻辑模块 ──── 把数据变成结果
│
├──► 调用轨迹与审计模块 ──── 记录系统做了什么
│
└──► 前端 / 客户端模块 ──── 展示结果与过程给用户
目标:把外部平台的公开数据稳定接入系统。
- 第一阶段接入平台:淘宝 / 京东、携程、小红书(后续扩展至美团、抖音等)
- 接入数据类型:商品信息、商家/店铺信息、价格、评分销量、酒店景点列表、公开内容
- 实现方式:SaaS 抓取服务 + 独立 connector / 采集 Skill,含抓取、缓存、重试、限流与错误处理
- 后续支持自动创建新的采集 Skill(1 级 Skill),降低新数据源接入成本
目标:把接入的数据处理成用户可直接使用的结果。
- 统一数据模型定义
- 数据清洗、去重、标准化
- 筛选、排序、聚合规则
- 结果生成与推荐理由输出
- 实现形式:结果生成智能体 + 反思优化智能体
目标:把不同的 Skill 和 Agent 组织成完整的执行流程。
- 管理 Skill、Agent 和 MCP
- 编排 2 级 Skill(旧接口中仍可能看到
workflow兼容命名) - 控制调用顺序和中间状态流转
- 保证整条任务链路跑通
- 实现形式:编排优化智能体 + 自动编排智能体
目标:记录整个系统执行过程,保证可追溯。
- 为 Skill、Agent、Workflow 分配唯一标识
- 记录完整调用关系与输入输出摘要
- 保存任务执行链路,支持查询、展示和回放
目标:把系统做成用户可以直接使用和演示的产品。
- 本地一键安装客户端,零配置体验
- 核心页面:首页、输入页、结果页、方案页、轨迹页
- 对接后端接口,负责整体 Demo 展示效果
快速验证完整链路,重点在于功能闭环与展示效果,不追求完整商业产品。
- 多平台公开数据接入
- 结果自动生成
- 二级 Skill / Run 执行
- 调用轨迹展示
- 基础身份标识与安全控制
- 本地一键安装,用户无需自行配置
- 云端运行能力与长期后台任务
- 更多场景和 Skill 覆盖
- 更稳定的数据接入方式
- 更完整的安全、轨迹与审计能力
- Python 3.12+
- Node.js 18+
- 推荐安装
uv - 建议使用仓库根目录的
.venv/
git clone <your-remote-url>
cd Uniflocp config/config.example.toml config/config.toml
cp .env.example .env
mkdir -p workspace logs至少需要配置一套可用的 LLM;如果你要验证远程 SkillsMP 搜索与安装,还需要配置 SkillsMP key。
.env 中建议至少包含:
# 必填:主聊天 / agent / API 使用的 LLM
DEEPSEEK_API_KEY=your-deepseek-api-key
# 可选:当你要从 SkillsMP 远程搜索并安装 skill 时配置
SKILLSMP_API_KEY=your-skillsmp-api-key
# SKILLSMP_API_BASE=https://skillsmp.com
# SKILLSMP_AUTH_SCHEME=Bearer如果你不用 DeepSeek,也可以直接改 config/config.toml 的 [llm] 配置,切换到:
- Azure OpenAI
- Ollama
- Jiekou.AI
- Amazon Bedrock
当前默认示例配置读取:
DEEPSEEK_API_KEY
推荐:
uv venv && source .venv/bin/activate
uv pip install -r requirements.txt或使用标准 venv + pip:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtsource .venv/bin/activate
.venv/bin/python apps/api/main.py --host 127.0.0.1 --port 8001启动后可先做健康检查:
curl -s http://127.0.0.1:8001/health
curl -s http://127.0.0.1:8001/api/health
curl -s http://127.0.0.1:8001/api/status说明:
- 当前主线运行模型已经开始收敛到
Run - 旧
/workflow/*接口仍保留兼容语义 - 聊天请求会返回
run_id,后续可通过 run 状态接口继续查询
真实前端源码位于 modules/frontend_client/web,根目录 frontend/ 只是兼容壳;日常开发和验证优先使用正式前端入口。
你可以直接启动正式前端:
cd modules/frontend_client/web
npm install
VITE_API_URL=http://127.0.0.1:8001 npm run dev -- --host 127.0.0.1 --port 5173如果你仍想使用兼容入口,也可以:
cd frontend
npm install
npm run dev只有在你明确需要独立集成服务时再启动;常规 API / workflow 验证不依赖这一步。
cd integrations/skillsmp-mcp
npm install
node server.js后端启动后,建议至少执行:
curl -s -X POST http://127.0.0.1:8001/api/chat \
-H 'Content-Type: application/json' \
-d '{"prompt":"你现在处于自检模式。禁止调用任何工具。请只返回两个大写字母:OK","stream":false}'你会在响应中看到 session_id 和 run_id。拿到 run_id 后,继续验证 run 状态接口:
curl -s http://127.0.0.1:8001/run/<run_id>/status如果你要验证兼容提交入口,也可以执行:
curl -s -X POST http://127.0.0.1:8001/workflow/submit \
-H 'Content-Type: application/json' \
-d '{"request":"列出一个最小的系统自检步骤"}'该接口会同时返回旧 task_id 和新的 run_id。
如果你刚改过 Run 内核、聊天入口或前端状态流,建议至少跑一组最小测试:
source .venv/bin/activate
pytest tests/test_run_kernel_phase_1.py \
tests/test_run_kernel_phase_2.py \
tests/test_run_kernel_phase_3.py \
tests/test_run_kernel_phase_4.py -q如果你要验证 workflow 与 skill 搜索链路,请继续阅读:
- LLM 主配置:
config/config.toml - 环境变量示例:
.env.example - MCP 示例配置:
config/mcp.example.json - 当前仓库默认不会再内置本地 mock skill;本地优先使用稳定 skill,本地没有时再尝试远程搜索和安装。
- Python 统一使用仓库根目录的
.venv/ - 运行入口统一使用
apps/ - 业务实现统一放在
modules/ - 公共类型、配置和工具统一放在
shared/ - 测试统一放在
tests/
以下目录有明确边界:
frontend/仅是前端兼容壳;真实源码在modules/frontend_client/webintegrations/仅放外部协议和独立集成服务;不要在这里写 5 个核心模块业务逻辑legacy/冻结兼容代码;不再新增功能workspace/、logs/运行产物目录,不存放源码
后续开发默认不再进入旧 backend 结构,也不在兼容壳目录中新增真实实现。
OpenUniflo/
├── apps/ # Python 运行入口(API / CLI / MCP)
├── config/ # 全局配置文件
├── docs/ # 项目文档、静态资源、示例
├── frontend/ # Web 前端兼容壳
├── integrations/ # 外部协议与独立集成服务
├── legacy/ # 冻结保留的一轮兼容代码
├── logs/ # 运行日志
├── modules/ # 5 个业务模块
├── shared/ # 公共 schema / config / utils
├── tests/ # 统一测试目录
├── workspace/ # 运行产物
└── README.md
模块独立开发,联调分四轮进行:
- 数据接入 ↔ 业务逻辑:验证接入数据可被正确处理
- 业务逻辑 ↔ Agent 编排:验证结果生成可纳入 Workflow
- Agent 编排 ↔ 轨迹审计:验证执行过程可被完整记录
- Agent 编排 ↔ 前端:验证前端可发起任务、获取结果并展示过程
本项目采用 LICENSE 中指定的开源协议。
- MediaCrawler (小红书数据接入): 提供跨平台的数据采集增强能力。未配置 `uv` 或 `third_party/MediaCrawler` 环境时,主服务仍正常运行,仅在调用此工具时返回失败提示。
- Lark-CLI (飞书协作接入): 提供飞书文档、日历等能力的打通。未配置或未授权 `lark-cli` 时,不阻断主服务。