用自然语言,操作你的任何系统。
Language User Interface · 零更改接入/移除 · 企业级安全 · 全接口类型覆盖
开发者协议文档:API 参考(聊天端点
/api/chat/*+ 管理端点,英文版单一文档)
许多后端系统,尤其是企业系统、办事系统、专业工作系统往往功能强大,却极难使用——用户必须深入多级菜单、记住筛选项组合、反复填写表单,才能完成一件本可以用一句话描述的事。
LUI-for-All 在你现有系统旁边放一个独立文件夹,不碰你的一行代码,就能让用户改用自然语言来操作它:
用户:「把上周所有待审批的采购单,按金额从高到低给我列出来,超过五万的高亮标出。」
LUI:[自动识别意图 → 调用现有接口 → 渲染数据表 + 高亮标注]
✓ 全程不修改你一行已有代码
它是一层可控、安全、零侵入的 自然语言操作层,架在你现有系统之上。
2026 年初,开源 AI Agent OpenClaw 以现象级速度席卷全球——GitHub 星标超 30 万登顶榜首,国内外掀起"养虾热"。OpenClaw 让 AI 从"问答机器人"进化为"24 小时数字工人":它通过 WhatsApp、Telegram 等消息平台接收指令,自主操作你的电脑——执行 Shell 命令、控制浏览器、管理文件、发送邮件,真正实现了自然语言驱动的本地自动化。
随后,Claw 生态迅速衍生出 ClawMobile(移动端)、企业级 WorkBuddy、AutoClaw 等众多变体,腾讯云和阿里云提供一键部署,国产模型厂商(Kimi、MiniMax、阶跃星辰)争相适配——一个全新的 Agent 生态已然成形。
但 Claw 们有一个共同的盲区:它们的手脚伸不到你的业务系统里。
Claw 擅长的是通用桌面操作——打开浏览器、点击按钮、填写表单。但企业核心系统的操作对象是 API 接口和数据库,不是 GUI 元素。对于 ERP 里的采购审批流、CRM 里的客户订单管理、OA 里的多级审批链——Claw 只能退化为"模拟点击",既不可靠,也无安全保障。
LUI-for-All 正是为 Claw 生态补上这最后一环:
| Claw 系列 | LUI-for-All | |
|---|---|---|
| 操作对象 | 本地设备、浏览器、文件系统 | 企业业务系统 API |
| 交互方式 | GUI 自动化(点击/截图) | 原生 API 调用(结构化、可审计) |
| 安全模型 | OS 级权限 | 5 级安全分级 + 人工审批门控 |
| 适用场景 | 个人效率、通用自动化 | 企业业务操作、多系统协同 |
当 Claw 通过 MCP 协议接入 LUI-for-All,它就获得了一双能伸进企业系统的手——不是模拟点击,而是通过能力图谱理解接口语义、通过安全策略矩阵管控风险、通过人工审批流保障关键操作。Claw 负责"什么时候做",LUI 负责"怎么安全地做"。
这意味着:你在 Telegram 里对 Claw 说"把上周所有待审批的采购单按金额排序",Claw 将这条指令通过 MCP 传给 LUI-for-All,LUI 自动识别意图、调用 ERP 接口、返回结构化数据表——全程可审计、可回溯、写操作需你确认。
整个 LUI 以 独立文件夹 形式挂靠在目标项目旁,对已有代码保有严格的 只读权限,所有运行时写操作隔离在 workspace/ 目录内。想要移除,只需删除这个文件夹,原系统完全不受影响,零负担尝试接入。
虽然 LUI 停靠在目标项目文件夹旁时是为单一项目服务(这也是它的特色),但 LUI 同时支持 多项目同时管理——你可以一次性无侵入地管理你的所有指定项目,每个项目拥有独立的能力地图、会话记录和权限隔离。
LUI 实现了 双通道 JWT 认证,让系统真正对项目管理员和项目所有用户都可用:
sub=lui-admin):项目管理员通过 LUI 独立密码登录,拥有全局管理权限——创建项目、配置能力、管理角色画像、查看审计日志等。sub=lui-user):项目终端用户通过 目标系统自身的登录接口 验证凭据,LUI 代理登录并签发受限 JWT。用户只能访问所属项目内其角色画像允许的接口,实现真正的项目级权限隔离。角色画像机制:管理员可为不同角色(如「普通用户」「部门主管」)创建角色画像,系统会以该角色凭据自动探测每条路由的可达性(RouteAccessibility),生成精确的接口白名单。未匹配画像的用户将使用默认角色画像。
这意味着:
系统采用“双层发现管线”:
OpenAPI / Swagger 文档,快速建立标准路由视图Tree-sitter AST 引擎,从源码中定位路由对应的完整 Handler/函数实现关键能力包括:
FrameAdapter + get_tree_sitter_query() 协议,适配器可扩展、可插拔source_path):id -> {id}),降低跨框架匹配误差最终将路由与源码逻辑共同交给 LLM,生成更可靠的能力地图:
domain(如:财务、用户管理、审批流)best_modalities)无需手动维护映射表,上游接口或源码一旦变化,重新发现即可同步。
当前仓库已增加 7 个代表测试样例,并通过两级提取测试(路由发现 + 函数实现提取)。
| 代表样例 | 路由风格派系 | 当前适配器覆盖目标(同派系) | 理论可迁移(需新增适配器) |
|---|---|---|---|
fastapi_sample | Python 装饰器路由(@router.get / @app.post) | FastAPI、Flask、Sanic、Starlette、Litestar、aiohttp、Bottle、Quart | Ruby Sinatra/Grape、PHP Slim |
node_sample | Node 路由调用链(app.get() / router.post()) | Express、Fastify、Koa Router、Hono、Elysia、Restify | PHP Laravel/Lumen/Slim、Ruby Hanami |
django_sample | URLConf 集中声明(path/re_path/include) | Django、Django REST Framework | Ruby on Rails (routes.rb)、PHP Laravel (routes/web.php) |
springboot_sample | 控制器注解路由(类前缀 + 方法注解) | Java Spring Boot、Spring MVC | C# ASP.NET Core Attribute Controller、PHP Symfony Attribute Route |
aspnetcore_sample | Minimal API 映射(MapGet/MapPost/MapMethods) | ASP.NET Core Minimal API | Java Javalin/Spark、Go net/http + mux |
go_gin_sample | 分组链式注册(Group + METHOD(path, handler)) | Gin、Echo、Fiber、Chi | Rust Actix/Axum、PHP Slim |
node_native_sample | 无框架命令式分发(if (method && path)) | Node.js built-in http | Python wsgiref/werkzeug 命令式分发、Ruby Rack、PHP Swoole 原生分发 |
说明:
backend/test/test_route_extractor_representative_samples.py。当前发现链路已统一到 4 个 AST 路由范式,7 个代表样例只是“框架语法代表”,不是新增范式:
decorator_metadata: 注解/装饰器元数据路由(FastAPI、Spring、ASP.NET Controller)call_registration: 调用式注册路由(Express/Fastify、Gin/Echo/Fiber/Chi、ASP.NET Minimal API)route_table: 集中式路由表(Django URLConf)imperative_dispatch: 命令式控制流分发(Node native if/switch)这 4 类最终都会统一输出同一 RouteSnippet 结构,再进入同一代码切片与 LLM 上下文注入流程。
flowchart TD
A[discover_project project_id, base_url, openapi_path, source_path] --> B{OpenAPI 摄取成功?}
B -- 是 --> C[ingest_openapi 生成 RouteMap source=openapi]
B -- 否 --> D{提供 source_path?}
D -- 否 --> E[发现失败 直接返回 OpenAPI 错误]
D -- 是 --> F[ingest_semantic_routes 走 AST 语义发现 生成 RouteMap source=ast]
C --> G[generate_project_context]
F --> G
G --> H[build_capability_graph]
H --> I{提供 source_path?}
I -- 否 --> J[跳过源码精准提取 全量走规则兜底]
I -- 是 --> K[RouteExtractor.extract_batch route_pairs]
K --> L{检测到适配器?}
L -- 否 --> M[全部路由 snippet=None]
L -- 是 --> N[Adapter.extract_all_routes]
N --> O{Tree-sitter 与 Query 可用?}
O -- 否 --> P[fallback_extract_all_routes]
O -- 是 --> Q[遍历源码 AST Query captures 转 RouteSnippet]
P --> R[按目标路由逐条匹配]
Q --> R
R --> S{route_id 精确命中?}
S -- 是 --> T[选择候选中 code 最长片段]
S -- 否 --> U{path_matches 模糊命中?}
U -- 是 --> T
U -- 否 --> V[该路由 snippet=None]
T --> W[命中片段按约 32K 分块]
V --> W
M --> W
J --> X[组装能力图谱]
W --> Y{存在可分析分块?}
Y -- 否 --> Z[analysis_map 为空]
Y -- 是 --> AA[并发 LLM 分析每个分块]
AA --> AB[合并 analysis_map]
Z --> X
AB --> X
X --> AC{该路由有 AI 结果?}
AC -- 是 --> AD[使用 AI 域 安全 摘要]
AC -- 否 --> AE[按 HTTP Method 规则兜底]
AD --> AF[写入 RouteMap Capability 与 Project 状态]
AE --> AF
AF --> AG[discover 完成]
系统在建图阶段自动分析每条路由的响应模式(response_mode),将其归入三类:
| 响应模式 | 典型场景 | AI 采集策略 |
|---|---|---|
instant | 普通 CRUD、查询、写操作 | 一次请求-响应,直接返回 |
streaming | SSE 实时推送(指标流、告警流、通知流) | stream_call:时间窗口 / 事件计数 / 快照,支持心跳过滤与 [DONE] 终止检测 |
paginated | 游标分页(next_cursor)、偏移分页(page/page_size) | stream_call:自动翻页,支持游标和偏移两种分页协议,自动探测并适配 |
运行时,AI 在能力列表中看到带 📡SSE流式 或 📄分页追加 标记的接口后,会自动选择 stream_call 动作而非普通 call,按策略采集数据后返回压缩汇总结果(含采样率、统计摘要),而非将原始流直接灌给用户。
硬限制保障:最大采集时长 60s、最大事件数 500、单事件 4KB、总结果 32KB,超出自动均匀采样保留首尾,AI 无法覆盖。
模型 永远不允许 输出原始 HTML / JS / CSS,从根源掐死前端注入攻击的可能性。所有界面元素均通过严格的声明式 JSON 协议下发,前端只渲染以下 8 种白名单组件:
| 组件类型 | 用途 |
|---|---|
text_block | 默认自然语言回答 |
metric_card | 关键指标面板 |
data_table | 可分页数据表 |
echart_card | 配置驱动图表(ECharts) |
confirm_panel | 高危操作审批拦截器 |
filter_form | 参数补充收集 |
timeline_card | 事件序列与流转 |
diff_card | 对照与变化展示 |
灵感源自 Google A2UI 协议,彻底关闭大模型越权渲染的攻击面。
核心任务流水线由 LangGraph 编排,具备完整的持久化检查点。
flowchart LR
START(["💬 用户消息"]) --> AE["agent_entry\n加载能力地图\nLLM 判断复杂度"]
AE -- "direct" --> D_END(["END ✓ 直接回答"])
AE -- "error" --> E_END1(["END ✗ 异常"])
AE -- "agentic" --> AL["agentic_loop\n↩ ReAct 循环"]
AL -- "error" --> E_END2(["END ✗ 异常"])
AL -- "done=False" --> AL
AL -- "done=True" --> SUM["summarize\nLLM 汇总"]
SUM --> EB["emit_blocks\nUI Block 装配"]
EB --> F_END(["END ✓ SSE 推送"])
flowchart TD
IN(["进入本轮 Loop"]) --> CHK{"iterations ≥ 10?"}
CHK -- 是 --> FORCE["agentic_done=True\n强制终止"]
CHK -- 否 --> LLM["LLM 推理\nSystem Prompt + 对话历史"]
LLM --> ACT{"action"}
ACT -- "finish" --> DONE["agentic_done=True"]
ACT -- "unknown" --> UNK["强制结束 + 告警"]
ACT -- "call_tools" --> SEC{"安全等级"}
SEC -- "🟢 readonly_safe\n🟡 readonly_sensitive" --> EXEC["直接 HTTP 执行"]
SEC -- "🟠 soft_write\n🔴 hard_write\n🔐 critical" --> INT["interrupt()\n推送 ConfirmPanel"]
INT --> APV{"用户审批"}
APV -- "✅ 批准" --> EXEC
APV -- "❌ 拒绝" --> SKIP["跳过 + 审计日志"]
EXEC --> OBS["收集 ExecutionArtifact\n追加 Observation"]
SKIP --> OBS
OBS --> NEXT(["iterations+1\n返回上层路由"])
flowchart LR
ART(["ExecutionArtifacts"]) --> SUM["summarize\nLLM 结构化总结\n→ summary_text"]
SUM --> VIZ{"需要可视化?"}
VIZ -- 是 --> PICK["选取白名单组件\ndata_table / echart_card\nmetric_card / timeline_card\ndiff_card / confirm_panel …"]
VIZ -- 否 --> TXT["text_block"]
PICK --> SER["序列化 ui_blocks JSON"]
TXT --> SER
SER --> SSE(["SSE 推送 → 前端渲染"])
5 级安全:readonly_safe → readonly_sensitive → soft_write → hard_write → critical,任何写操作均通过 LangGraph interrupt() 硬性暂停,前端唤出 ConfirmPanel,用户确认后 Graph 从断点恢复,拒绝则跳过并记录审计日志。
前后端通信基于 Server-Sent Events,完整实现 AG-UI 事件流协议:
ConfirmPanel,无需轮询每一次对话,从用户输入到最终渲染,全链路注入统一 Trace ID:
不是黑盒,每一步决策均可溯源审计。
内置 Agent Matchbox 多模型路由网关,支持多平台 LLM 统一调度、Token 配额管理与用量统计,切换模型无需改动业务代码。
sample-fastapi:8010)localhost 端口source_path,在 OpenAPI 不可用时自动切换 AST 发现,导入流程不再被单点阻塞volumes 将目标项目源码目录挂载到 LUI 容器内,并给出具体的挂载示例POST /api/projects/verify-source-path,前端在导入项目时可先验证路径可达性、框架识别和权限状态,获得即时反馈后再提交导入LUI-for-All 将"聊天能力内核"与"前端呈现层"解耦:
chat 端点,替换现有前端 UI,而无需改动后端执行链路/api/chat/* 是自定义 GUI 的唯一推荐接入接口;内部前端使用的 /api/sessions/* 为遗留内部接口详细字段与事件清单见:API 参考 — 聊天端点 Part A
管理类接口(项目管理、认证、设置、LLM 配置、审计查询等)见:API 参考 — 管理端点 Part B
Claw 生态定位详见上方 LUI-for-All 在 Claw 生态中的位置。
OpenClaw 的最大价值,是把自然语言直接变成可持续执行的自动化,不需要人盯着它一步一步点。你只要下指令,它就能在自己的电脑、账号和渠道里持续跑下去,做真正的无人值守任务。
和 LUI-for-All 联动后,价值会更直接:
接入步骤很简单:
/openapi.json 或文件路径)source_path)以启用 AST 路由发现git clone https://github.com/your-org/lui-for-all.git
cd lui-for-all
# 创建并激活 Conda 环境
conda create -n lui python=3.11 -y
conda activate lui
# 安装依赖
pip install -r backend/requirements.txt
# 复制配置文件(macOS/Linux)
cp backend/.env.example backend/.env
# Windows PowerShell 可用:
# Copy-Item backend/.env.example backend/.env
配置说明(重要):
backend/.env:用于 LUI 全局配置(LUI_*),例如 LUI_DB_PATH、LUI_MCP_API_TOKEN。LLM_KEY 不在 backend/.env 中读取。workspace/agent_matchbox/.env 生成并读取 LLM_KEY。AGENT_MATCHBOX_HOME。cd frontend
pnpm install
# 终端 1:启动后端
cd backend
conda run -n lui uvicorn app.main:app --reload --port 6689
# 终端 2:启动前端
cd frontend
pnpm dev
启动后可先做健康检查:
# macOS/Linux
curl http://localhost:6689/health
# Windows PowerShell
Invoke-RestMethod http://localhost:6689/health
打开 http://localhost:5173,点击「新建项目」,优先填写 OpenAPI 地址(如 http://your-app/openapi.json)。
如果目标系统没有暴露 OpenAPI,也可以仅提供源码路径 source_path,系统会自动切换为 AST 语义发现并继续建图。
Docker 部署时:若 LUI 运行在容器中,而目标项目源码位于宿主机或其他容器,需要在 docker-compose.yml 中通过 volumes 将源码目录挂载到 LUI 容器内,例如:
services:
lui-backend:
volumes:
- lui_workspace:/app/workspace
# 挂载目标项目源码(只读即可)
- /path/on/host/my-project:/app/projects/my-project:ro
然后在 source_path 中填写容器内挂载路径 /app/projects/my-project。系统会在验证路径时自动检测容器环境并给出卷挂载提示。
系统将自动完成能力发现与建模,通常耗时 10-30 秒。
完成后,在对话框中直接用自然语言向你的系统提问。
提示:LUI 支持同时管理多个项目。你可以重复「新建项目」流程接入任意数量的后端系统,每个项目拥有独立的能力地图、会话和权限配置。
┌─────────────────────────────────────────────────────────────┐
│ 前端 (Vue 3 + Vite) │
│ ChatPage ProjectsPage SettingsPage │
│ SSE 事件流 ──── AG-UI 协议 ──── UI Block 渲染器 │
└──────────────────────┬──────────────────────────────────────┘
│ HTTP / SSE
┌──────────────────────▼──────────────────────────────────────┐
│ 后端 (FastAPI) │
│ /api/chat /api/sessions /api/projects /api/settings │
│ │ │ │
│ LangGraph 编排器 Project Modeler │
│ ┌────────────┐ ┌──────────────────────────┐ │
│ │ 意图解析节点│ │ OpenAPI + AST 路由发现 │ │
│ │ 能力路由节点│ │ 能力建模与语义聚类 │ │
│ │ 规划节点 │ │ 能力地图持久化 │ │
│ │ 安全裁定节点│ └──────────────────────────┘ │
│ │ HTTP执行节点│ │
│ │ 汇总渲染节点│ ←── Agent Matchbox (多模型网关) │
│ └────────────┘ │
│ │ │
│ SQLite (lui.db + checkpoints.db) │
└─────────────────────────────────────────────────────────────┘
lui-for-all/
├── backend/
│ ├── app/
│ │ ├── api/ # FastAPI 路由层 (chat, projects, sessions, settings)
│ │ ├── graph/ # LangGraph 状态机定义
│ │ ├── orchestrator/ # 任务编排状态与节点
│ │ ├── discovery/ # OpenAPI 摄取与能力建模
│ │ ├── runtime/ # SSE 事件发射器
│ │ ├── llm/ # Agent Matchbox 网关 + 提示词
│ │ ├── models/ # SQLAlchemy ORM 模型
│ │ └── schemas/ # Pydantic 数据契约
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── views/ # ChatPage, ProjectsPage
│ │ ├── stores/ # Pinia 状态 (session, project)
│ │ ├── components/ # UI Block 渲染组件
│ │ └── api/ # HTTP / SSE 客户端
│ └── package.json
├── workspace/ # 运行时隔离沙箱(自动生成)
│ ├── lui.db
│ └── checkpoints.db
└── LUI-for-all_Execution_Plan.md
| LUI-for-All 是什么 | LUI-for-All 不是什么 |
|---|---|
| ✅ 自然语言操作层 | ❌ 简易API to MCP |
| ✅ 接口能力编排器 | ❌ RPA / GUI 点选自动化 |
| ✅ 只读安全默认,写操作需审批 | ❌ 无安全界限 CRUD 的系统 |
| ✅ 声明式 UI Block 增强回答 | ❌ 前端重写器 / 低代码生成器 |
| ✅ 零侵入挂靠在已有系统旁 | ❌ 替换、侵入已有系统 |
本项目采用 Apache License 2.0,详见 LICENSE。
Copyright (c) 2026 Mournight (AIdeaStudio)
让语言成为界面。
Python
72.8%
Vue
15.8%
TypeScript
8.6%
JavaScript
1.8%
用自然语言,操作你的任何系统。
Language User Interface · 零更改接入/移除 · 企业级安全 · 全接口类型覆盖
开发者协议文档:API 参考(聊天端点
/api/chat/*+ 管理端点,英文版单一文档)
许多后端系统,尤其是企业系统、办事系统、专业工作系统往往功能强大,却极难使用——用户必须深入多级菜单、记住筛选项组合、反复填写表单,才能完成一件本可以用一句话描述的事。
LUI-for-All 在你现有系统旁边放一个独立文件夹,不碰你的一行代码,就能让用户改用自然语言来操作它:
用户:「把上周所有待审批的采购单,按金额从高到低给我列出来,超过五万的高亮标出。」
LUI:[自动识别意图 → 调用现有接口 → 渲染数据表 + 高亮标注]
✓ 全程不修改你一行已有代码
它是一层可控、安全、零侵入的 自然语言操作层,架在你现有系统之上。
2026 年初,开源 AI Agent OpenClaw 以现象级速度席卷全球——GitHub 星标超 30 万登顶榜首,国内外掀起"养虾热"。OpenClaw 让 AI 从"问答机器人"进化为"24 小时数字工人":它通过 WhatsApp、Telegram 等消息平台接收指令,自主操作你的电脑——执行 Shell 命令、控制浏览器、管理文件、发送邮件,真正实现了自然语言驱动的本地自动化。
随后,Claw 生态迅速衍生出 ClawMobile(移动端)、企业级 WorkBuddy、AutoClaw 等众多变体,腾讯云和阿里云提供一键部署,国产模型厂商(Kimi、MiniMax、阶跃星辰)争相适配——一个全新的 Agent 生态已然成形。
但 Claw 们有一个共同的盲区:它们的手脚伸不到你的业务系统里。
Claw 擅长的是通用桌面操作——打开浏览器、点击按钮、填写表单。但企业核心系统的操作对象是 API 接口和数据库,不是 GUI 元素。对于 ERP 里的采购审批流、CRM 里的客户订单管理、OA 里的多级审批链——Claw 只能退化为"模拟点击",既不可靠,也无安全保障。
LUI-for-All 正是为 Claw 生态补上这最后一环:
| Claw 系列 | LUI-for-All | |
|---|---|---|
| 操作对象 | 本地设备、浏览器、文件系统 | 企业业务系统 API |
| 交互方式 | GUI 自动化(点击/截图) | 原生 API 调用(结构化、可审计) |
| 安全模型 | OS 级权限 | 5 级安全分级 + 人工审批门控 |
| 适用场景 | 个人效率、通用自动化 | 企业业务操作、多系统协同 |
当 Claw 通过 MCP 协议接入 LUI-for-All,它就获得了一双能伸进企业系统的手——不是模拟点击,而是通过能力图谱理解接口语义、通过安全策略矩阵管控风险、通过人工审批流保障关键操作。Claw 负责"什么时候做",LUI 负责"怎么安全地做"。
这意味着:你在 Telegram 里对 Claw 说"把上周所有待审批的采购单按金额排序",Claw 将这条指令通过 MCP 传给 LUI-for-All,LUI 自动识别意图、调用 ERP 接口、返回结构化数据表——全程可审计、可回溯、写操作需你确认。
整个 LUI 以 独立文件夹 形式挂靠在目标项目旁,对已有代码保有严格的 只读权限,所有运行时写操作隔离在 workspace/ 目录内。想要移除,只需删除这个文件夹,原系统完全不受影响,零负担尝试接入。
虽然 LUI 停靠在目标项目文件夹旁时是为单一项目服务(这也是它的特色),但 LUI 同时支持 多项目同时管理——你可以一次性无侵入地管理你的所有指定项目,每个项目拥有独立的能力地图、会话记录和权限隔离。
LUI 实现了 双通道 JWT 认证,让系统真正对项目管理员和项目所有用户都可用:
sub=lui-admin):项目管理员通过 LUI 独立密码登录,拥有全局管理权限——创建项目、配置能力、管理角色画像、查看审计日志等。sub=lui-user):项目终端用户通过 目标系统自身的登录接口 验证凭据,LUI 代理登录并签发受限 JWT。用户只能访问所属项目内其角色画像允许的接口,实现真正的项目级权限隔离。角色画像机制:管理员可为不同角色(如「普通用户」「部门主管」)创建角色画像,系统会以该角色凭据自动探测每条路由的可达性(RouteAccessibility),生成精确的接口白名单。未匹配画像的用户将使用默认角色画像。
这意味着:
系统采用“双层发现管线”:
OpenAPI / Swagger 文档,快速建立标准路由视图Tree-sitter AST 引擎,从源码中定位路由对应的完整 Handler/函数实现关键能力包括:
FrameAdapter + get_tree_sitter_query() 协议,适配器可扩展、可插拔source_path):id -> {id}),降低跨框架匹配误差最终将路由与源码逻辑共同交给 LLM,生成更可靠的能力地图:
domain(如:财务、用户管理、审批流)best_modalities)无需手动维护映射表,上游接口或源码一旦变化,重新发现即可同步。
当前仓库已增加 7 个代表测试样例,并通过两级提取测试(路由发现 + 函数实现提取)。
| 代表样例 | 路由风格派系 | 当前适配器覆盖目标(同派系) | 理论可迁移(需新增适配器) |
|---|---|---|---|
fastapi_sample | Python 装饰器路由(@router.get / @app.post) | FastAPI、Flask、Sanic、Starlette、Litestar、aiohttp、Bottle、Quart | Ruby Sinatra/Grape、PHP Slim |
node_sample | Node 路由调用链(app.get() / router.post()) | Express、Fastify、Koa Router、Hono、Elysia、Restify | PHP Laravel/Lumen/Slim、Ruby Hanami |
django_sample | URLConf 集中声明(path/re_path/include) | Django、Django REST Framework | Ruby on Rails (routes.rb)、PHP Laravel (routes/web.php) |
springboot_sample | 控制器注解路由(类前缀 + 方法注解) | Java Spring Boot、Spring MVC | C# ASP.NET Core Attribute Controller、PHP Symfony Attribute Route |
aspnetcore_sample | Minimal API 映射(MapGet/MapPost/MapMethods) | ASP.NET Core Minimal API | Java Javalin/Spark、Go net/http + mux |
go_gin_sample | 分组链式注册(Group + METHOD(path, handler)) | Gin、Echo、Fiber、Chi | Rust Actix/Axum、PHP Slim |
node_native_sample | 无框架命令式分发(if (method && path)) | Node.js built-in http | Python wsgiref/werkzeug 命令式分发、Ruby Rack、PHP Swoole 原生分发 |
说明:
backend/test/test_route_extractor_representative_samples.py。当前发现链路已统一到 4 个 AST 路由范式,7 个代表样例只是“框架语法代表”,不是新增范式:
decorator_metadata: 注解/装饰器元数据路由(FastAPI、Spring、ASP.NET Controller)call_registration: 调用式注册路由(Express/Fastify、Gin/Echo/Fiber/Chi、ASP.NET Minimal API)route_table: 集中式路由表(Django URLConf)imperative_dispatch: 命令式控制流分发(Node native if/switch)这 4 类最终都会统一输出同一 RouteSnippet 结构,再进入同一代码切片与 LLM 上下文注入流程。
flowchart TD
A[discover_project project_id, base_url, openapi_path, source_path] --> B{OpenAPI 摄取成功?}
B -- 是 --> C[ingest_openapi 生成 RouteMap source=openapi]
B -- 否 --> D{提供 source_path?}
D -- 否 --> E[发现失败 直接返回 OpenAPI 错误]
D -- 是 --> F[ingest_semantic_routes 走 AST 语义发现 生成 RouteMap source=ast]
C --> G[generate_project_context]
F --> G
G --> H[build_capability_graph]
H --> I{提供 source_path?}
I -- 否 --> J[跳过源码精准提取 全量走规则兜底]
I -- 是 --> K[RouteExtractor.extract_batch route_pairs]
K --> L{检测到适配器?}
L -- 否 --> M[全部路由 snippet=None]
L -- 是 --> N[Adapter.extract_all_routes]
N --> O{Tree-sitter 与 Query 可用?}
O -- 否 --> P[fallback_extract_all_routes]
O -- 是 --> Q[遍历源码 AST Query captures 转 RouteSnippet]
P --> R[按目标路由逐条匹配]
Q --> R
R --> S{route_id 精确命中?}
S -- 是 --> T[选择候选中 code 最长片段]
S -- 否 --> U{path_matches 模糊命中?}
U -- 是 --> T
U -- 否 --> V[该路由 snippet=None]
T --> W[命中片段按约 32K 分块]
V --> W
M --> W
J --> X[组装能力图谱]
W --> Y{存在可分析分块?}
Y -- 否 --> Z[analysis_map 为空]
Y -- 是 --> AA[并发 LLM 分析每个分块]
AA --> AB[合并 analysis_map]
Z --> X
AB --> X
X --> AC{该路由有 AI 结果?}
AC -- 是 --> AD[使用 AI 域 安全 摘要]
AC -- 否 --> AE[按 HTTP Method 规则兜底]
AD --> AF[写入 RouteMap Capability 与 Project 状态]
AE --> AF
AF --> AG[discover 完成]
系统在建图阶段自动分析每条路由的响应模式(response_mode),将其归入三类:
| 响应模式 | 典型场景 | AI 采集策略 |
|---|---|---|
instant | 普通 CRUD、查询、写操作 | 一次请求-响应,直接返回 |
streaming | SSE 实时推送(指标流、告警流、通知流) | stream_call:时间窗口 / 事件计数 / 快照,支持心跳过滤与 [DONE] 终止检测 |
paginated | 游标分页(next_cursor)、偏移分页(page/page_size) | stream_call:自动翻页,支持游标和偏移两种分页协议,自动探测并适配 |
运行时,AI 在能力列表中看到带 📡SSE流式 或 📄分页追加 标记的接口后,会自动选择 stream_call 动作而非普通 call,按策略采集数据后返回压缩汇总结果(含采样率、统计摘要),而非将原始流直接灌给用户。
硬限制保障:最大采集时长 60s、最大事件数 500、单事件 4KB、总结果 32KB,超出自动均匀采样保留首尾,AI 无法覆盖。
模型 永远不允许 输出原始 HTML / JS / CSS,从根源掐死前端注入攻击的可能性。所有界面元素均通过严格的声明式 JSON 协议下发,前端只渲染以下 8 种白名单组件:
| 组件类型 | 用途 |
|---|---|
text_block | 默认自然语言回答 |
metric_card | 关键指标面板 |
data_table | 可分页数据表 |
echart_card | 配置驱动图表(ECharts) |
confirm_panel | 高危操作审批拦截器 |
filter_form | 参数补充收集 |
timeline_card | 事件序列与流转 |
diff_card | 对照与变化展示 |
灵感源自 Google A2UI 协议,彻底关闭大模型越权渲染的攻击面。
核心任务流水线由 LangGraph 编排,具备完整的持久化检查点。
flowchart LR
START(["💬 用户消息"]) --> AE["agent_entry\n加载能力地图\nLLM 判断复杂度"]
AE -- "direct" --> D_END(["END ✓ 直接回答"])
AE -- "error" --> E_END1(["END ✗ 异常"])
AE -- "agentic" --> AL["agentic_loop\n↩ ReAct 循环"]
AL -- "error" --> E_END2(["END ✗ 异常"])
AL -- "done=False" --> AL
AL -- "done=True" --> SUM["summarize\nLLM 汇总"]
SUM --> EB["emit_blocks\nUI Block 装配"]
EB --> F_END(["END ✓ SSE 推送"])
flowchart TD
IN(["进入本轮 Loop"]) --> CHK{"iterations ≥ 10?"}
CHK -- 是 --> FORCE["agentic_done=True\n强制终止"]
CHK -- 否 --> LLM["LLM 推理\nSystem Prompt + 对话历史"]
LLM --> ACT{"action"}
ACT -- "finish" --> DONE["agentic_done=True"]
ACT -- "unknown" --> UNK["强制结束 + 告警"]
ACT -- "call_tools" --> SEC{"安全等级"}
SEC -- "🟢 readonly_safe\n🟡 readonly_sensitive" --> EXEC["直接 HTTP 执行"]
SEC -- "🟠 soft_write\n🔴 hard_write\n🔐 critical" --> INT["interrupt()\n推送 ConfirmPanel"]
INT --> APV{"用户审批"}
APV -- "✅ 批准" --> EXEC
APV -- "❌ 拒绝" --> SKIP["跳过 + 审计日志"]
EXEC --> OBS["收集 ExecutionArtifact\n追加 Observation"]
SKIP --> OBS
OBS --> NEXT(["iterations+1\n返回上层路由"])
flowchart LR
ART(["ExecutionArtifacts"]) --> SUM["summarize\nLLM 结构化总结\n→ summary_text"]
SUM --> VIZ{"需要可视化?"}
VIZ -- 是 --> PICK["选取白名单组件\ndata_table / echart_card\nmetric_card / timeline_card\ndiff_card / confirm_panel …"]
VIZ -- 否 --> TXT["text_block"]
PICK --> SER["序列化 ui_blocks JSON"]
TXT --> SER
SER --> SSE(["SSE 推送 → 前端渲染"])
5 级安全:readonly_safe → readonly_sensitive → soft_write → hard_write → critical,任何写操作均通过 LangGraph interrupt() 硬性暂停,前端唤出 ConfirmPanel,用户确认后 Graph 从断点恢复,拒绝则跳过并记录审计日志。
前后端通信基于 Server-Sent Events,完整实现 AG-UI 事件流协议:
ConfirmPanel,无需轮询每一次对话,从用户输入到最终渲染,全链路注入统一 Trace ID:
不是黑盒,每一步决策均可溯源审计。
内置 Agent Matchbox 多模型路由网关,支持多平台 LLM 统一调度、Token 配额管理与用量统计,切换模型无需改动业务代码。
sample-fastapi:8010)localhost 端口source_path,在 OpenAPI 不可用时自动切换 AST 发现,导入流程不再被单点阻塞volumes 将目标项目源码目录挂载到 LUI 容器内,并给出具体的挂载示例POST /api/projects/verify-source-path,前端在导入项目时可先验证路径可达性、框架识别和权限状态,获得即时反馈后再提交导入LUI-for-All 将"聊天能力内核"与"前端呈现层"解耦:
chat 端点,替换现有前端 UI,而无需改动后端执行链路/api/chat/* 是自定义 GUI 的唯一推荐接入接口;内部前端使用的 /api/sessions/* 为遗留内部接口详细字段与事件清单见:API 参考 — 聊天端点 Part A
管理类接口(项目管理、认证、设置、LLM 配置、审计查询等)见:API 参考 — 管理端点 Part B
Claw 生态定位详见上方 LUI-for-All 在 Claw 生态中的位置。
OpenClaw 的最大价值,是把自然语言直接变成可持续执行的自动化,不需要人盯着它一步一步点。你只要下指令,它就能在自己的电脑、账号和渠道里持续跑下去,做真正的无人值守任务。
和 LUI-for-All 联动后,价值会更直接:
接入步骤很简单:
/openapi.json 或文件路径)source_path)以启用 AST 路由发现git clone https://github.com/your-org/lui-for-all.git
cd lui-for-all
# 创建并激活 Conda 环境
conda create -n lui python=3.11 -y
conda activate lui
# 安装依赖
pip install -r backend/requirements.txt
# 复制配置文件(macOS/Linux)
cp backend/.env.example backend/.env
# Windows PowerShell 可用:
# Copy-Item backend/.env.example backend/.env
配置说明(重要):
backend/.env:用于 LUI 全局配置(LUI_*),例如 LUI_DB_PATH、LUI_MCP_API_TOKEN。LLM_KEY 不在 backend/.env 中读取。workspace/agent_matchbox/.env 生成并读取 LLM_KEY。AGENT_MATCHBOX_HOME。cd frontend
pnpm install
# 终端 1:启动后端
cd backend
conda run -n lui uvicorn app.main:app --reload --port 6689
# 终端 2:启动前端
cd frontend
pnpm dev
启动后可先做健康检查:
# macOS/Linux
curl http://localhost:6689/health
# Windows PowerShell
Invoke-RestMethod http://localhost:6689/health
打开 http://localhost:5173,点击「新建项目」,优先填写 OpenAPI 地址(如 http://your-app/openapi.json)。
如果目标系统没有暴露 OpenAPI,也可以仅提供源码路径 source_path,系统会自动切换为 AST 语义发现并继续建图。
Docker 部署时:若 LUI 运行在容器中,而目标项目源码位于宿主机或其他容器,需要在 docker-compose.yml 中通过 volumes 将源码目录挂载到 LUI 容器内,例如:
services:
lui-backend:
volumes:
- lui_workspace:/app/workspace
# 挂载目标项目源码(只读即可)
- /path/on/host/my-project:/app/projects/my-project:ro
然后在 source_path 中填写容器内挂载路径 /app/projects/my-project。系统会在验证路径时自动检测容器环境并给出卷挂载提示。
系统将自动完成能力发现与建模,通常耗时 10-30 秒。
完成后,在对话框中直接用自然语言向你的系统提问。
提示:LUI 支持同时管理多个项目。你可以重复「新建项目」流程接入任意数量的后端系统,每个项目拥有独立的能力地图、会话和权限配置。
┌─────────────────────────────────────────────────────────────┐
│ 前端 (Vue 3 + Vite) │
│ ChatPage ProjectsPage SettingsPage │
│ SSE 事件流 ──── AG-UI 协议 ──── UI Block 渲染器 │
└──────────────────────┬──────────────────────────────────────┘
│ HTTP / SSE
┌──────────────────────▼──────────────────────────────────────┐
│ 后端 (FastAPI) │
│ /api/chat /api/sessions /api/projects /api/settings │
│ │ │ │
│ LangGraph 编排器 Project Modeler │
│ ┌────────────┐ ┌──────────────────────────┐ │
│ │ 意图解析节点│ │ OpenAPI + AST 路由发现 │ │
│ │ 能力路由节点│ │ 能力建模与语义聚类 │ │
│ │ 规划节点 │ │ 能力地图持久化 │ │
│ │ 安全裁定节点│ └──────────────────────────┘ │
│ │ HTTP执行节点│ │
│ │ 汇总渲染节点│ ←── Agent Matchbox (多模型网关) │
│ └────────────┘ │
│ │ │
│ SQLite (lui.db + checkpoints.db) │
└─────────────────────────────────────────────────────────────┘
lui-for-all/
├── backend/
│ ├── app/
│ │ ├── api/ # FastAPI 路由层 (chat, projects, sessions, settings)
│ │ ├── graph/ # LangGraph 状态机定义
│ │ ├── orchestrator/ # 任务编排状态与节点
│ │ ├── discovery/ # OpenAPI 摄取与能力建模
│ │ ├── runtime/ # SSE 事件发射器
│ │ ├── llm/ # Agent Matchbox 网关 + 提示词
│ │ ├── models/ # SQLAlchemy ORM 模型
│ │ └── schemas/ # Pydantic 数据契约
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── views/ # ChatPage, ProjectsPage
│ │ ├── stores/ # Pinia 状态 (session, project)
│ │ ├── components/ # UI Block 渲染组件
│ │ └── api/ # HTTP / SSE 客户端
│ └── package.json
├── workspace/ # 运行时隔离沙箱(自动生成)
│ ├── lui.db
│ └── checkpoints.db
└── LUI-for-all_Execution_Plan.md
| LUI-for-All 是什么 | LUI-for-All 不是什么 |
|---|---|
| ✅ 自然语言操作层 | ❌ 简易API to MCP |
| ✅ 接口能力编排器 | ❌ RPA / GUI 点选自动化 |
| ✅ 只读安全默认,写操作需审批 | ❌ 无安全界限 CRUD 的系统 |
| ✅ 声明式 UI Block 增强回答 | ❌ 前端重写器 / 低代码生成器 |
| ✅ 零侵入挂靠在已有系统旁 | ❌ 替换、侵入已有系统 |
本项目采用 Apache License 2.0,详见 LICENSE。
Copyright (c) 2026 Mournight (AIdeaStudio)
让语言成为界面。
Python
72.8%
Vue
15.8%
TypeScript
8.6%
JavaScript
1.8%