个人简介
作者简介:全栈研发,具备端到端系统落地能力,专注大模型的压缩部署、多模态理解与 Agent 架构设计。 热爱“结构”与“秩序”,相信复杂系统背后总有简洁可控的可能。
我叫观熵。不是在控熵,就是在观测熵的流动
个人主页:观熵
个人邮箱:[email protected]
座右铭:愿科技之光,不止照亮智能,也照亮人心!
观熵系列专栏导航:
AI前沿探索:从大模型进化、多模态交互、AIGC内容生成,到AI在行业中的落地应用,我们将深入剖析最前沿的AI技术,分享实用的开发经验,并探讨AI未来的发展趋势
AI开源框架实战:面向 AI 工程师的大模型框架实战指南,覆盖训练、推理、部署与评估的全链路最佳实践
计算机视觉:聚焦计算机视觉前沿技术,涵盖图像识别、目标检测、自动驾驶、医疗影像等领域的最新进展和应用案例
国产大模型部署实战:持续更新的国产开源大模型部署实战教程,覆盖从 模型选型 → 环境配置 → 本地推理 → API封装 → 高性能部署 → 多模型管理 的完整全流程
TensorFlow 全栈实战:从建模到部署:覆盖模型构建、训练优化、跨平台部署与工程交付,帮助开发者掌握从原型到上线的完整 AI 开发流程
PyTorch 全栈实战专栏: PyTorch 框架的全栈实战应用,涵盖从模型训练、优化、部署到维护的完整流程
深入理解 TensorRT:深入解析 TensorRT 的核心机制与部署实践,助力构建高性能 AI 推理系统
Megatron-LM 实战笔记:聚焦于 Megatron-LM 框架的实战应用,涵盖从预训练、微调到部署的全流程
AI Agent:系统学习并亲手构建一个完整的 AI Agent 系统,从基础理论、算法实战、框架应用,到私有部署、多端集成
DeepSeek 实战与解析:聚焦 DeepSeek 系列模型原理解析与实战应用,涵盖部署、推理、微调与多场景集成,助你高效上手国产大模型
端侧大模型:聚焦大模型在移动设备上的部署与优化,探索端侧智能的实现路径
行业大模型 · 数据全流程指南:大模型预训练数据的设计、采集、清洗与合规治理,聚焦行业场景,从需求定义到数据闭环,帮助您构建专属的智能数据基座
机器人研发全栈进阶指南:从ROS到AI智能控制:机器人系统架构、感知建图、路径规划、控制系统、AI智能决策、系统集成等核心能力模块
人工智能下的网络安全:通过实战案例和系统化方法,帮助开发者和安全工程师识别风险、构建防御机制,确保 AI 系统的稳定与安全
智能 DevOps 工厂:AI 驱动的持续交付实践:构建以 AI 为核心的智能 DevOps 平台,涵盖从 CI/CD 流水线、AIOps、MLOps 到 DevSecOps 的全流程实践。
C++学习笔记?:聚焦于现代 C++ 编程的核心概念与实践,涵盖 STL 源码剖析、内存管理、模板元编程等关键技术
AI × Quant 系统化落地实战:从数据、策略到实盘,打造全栈智能量化交易系统
大模型运营专家的Prompt修炼之路:本专栏聚焦开发 / 测试人员的实际转型路径,基于 OpenAI、DeepSeek、抖音等真实资料,拆解 从入门到专业落地的关键主题,涵盖 Prompt 编写范式、结构输出控制、模型行为评估、系统接入与 DevOps 管理。每一篇都不讲概念空话,只做实战经验沉淀,让你一步步成为真正的模型运营专家。
从 OpenAI Function Calling 到 DeepSeek Tool 使用,智能体系统的工具能力日趋成熟。但真正让智能体拥有“执行力”的关键能力,不是调用接口,而是“看见界面,理解结构,并做出精准操作”**。本篇文章将围绕智能体的 Action Space 接口设计展开,系统拆解 Manus 架构中的动作感知层(Perception Layer)与动作控制层(Control Layer),并结合浏览器控制、API 控制、文件操作三类典型动作通路,设计通用的 Action Schema 协议。最终目标,是帮助你构建一个支持多端行为联动、可感知、可控制、可扩展的智能操作系统。
如果你正在构建一个 Agent 系统,无论是“自动写周报”、“对接网页表单”、“处理本地文件”还是“驱动 API 自动化任务”,你一定会遇到这样的问题:
这些问题并不是提示词的问题,而是系统层面缺失了感知能力与动作控制机制。
我们常说的 GPT、Claude、DeepSeek 本质是语言模型(LLM),它们只擅长在给定上下文中进行生成,但无法主动“看见”或“操控”外部世界:
模型能力 | 是否具备 |
---|---|
理解语义 | ✅ 很强 |
规划任务 | ✅ 可用 |
执行行为 | ❌ 仅依赖外部系统实现 |
感知界面结构 | ❌ 无法识别 DOM 或 API 字段 |
控制真实操作 | ❌ 只能输出文本,无法真正操作按钮/API/File |
所以,仅靠语言模型做不到 Agent 的系统级闭环。
真正具备执行力的 Agent 系统,必须具备三层能力:
也就是说,“看见”是前提,“操作”是路径,“回写状态”才是闭环。
框架 | 感知能力 | 控制能力 | 闭环程度 |
---|---|---|---|
OpenAI Function Calling | ❌ 需要手动注册函数 | ✅ 调用函数本身 | ❌ 无状态反馈 |
AutoGPT | ❌ 语言生成模拟操作 | ❌ 控制力弱 | ❌ 黑箱链路 |
LangGraph | ❌ 状态流有,界面结构无感知 | ✅ 函数驱动强 | ✅ 状态支持 |
OpenAgents | ✅ 可识别浏览器 DOM(基于 Playwright) | ✅ 真实网页操作 | ❌ 无状态建模 |
Manus | ✅ UI + API 感知统一建模 | ✅ 动作桥接器多通路封装 | ✅ 全状态追踪闭环 |
可以看出,感知能力 + 控制能力 + 状态系统三者缺一不可,而 Manus 正是在这三点上完成了系统闭环。
在传统的 Agent 系统中,开发者往往只关注一件事:“模型如何调用函数?”但当你开始尝试自动控制网页、填表、下载文档、上传文件、触发脚本……你会发现,仅仅注册一个函数是不够的。
你需要的是:
这就是从“函数调用”进化到“行为建模”的关键。
维度 | 函数调用 | 通用动作建模(Action Space) |
---|---|---|
感知 | 需要人手注册函数 | 自动感知界面 / API / 文件结构 |
意图生成 | 模型生成 JSON 调用结构 | 模型生成结构化 Action Plan |
控制通道 | 单一函数入口 | 多通路(网页 / API / Shell)桥接器 |
也就是说,传统函数调用是“控制单一动作”的封装,Action Space 是“为智能体描述一个完整可操作世界”的行为结构图。
是一种面向“行为决策”的空间建模方式,定义了“Agent 在某个状态下,所有可用操作的集合”。
和强化学习中的概念一致,它不只描述做什么,还包括在哪做、怎么做、能不能做。
每一个动作都应是一个结构化描述对象(通常为 JSON / Protobuf / YAML 等),包含如下字段:
字段 | 类型 | 说明 |
---|---|---|
action_type |
string | 动作类别,如 click、fill、get、post、upload、run 等 |
target |
object | 动作作用目标,如 DOM 元素、API 路径、本地路径等 |
payload |
object / null | 传入数据,例如输入内容、上传文件 |
conditions |
list / null | 前置条件,例如 DOM 必须出现、状态为 ready 等 |
priority |
int / optional | 优先级控制,便于并发调度或打断 |
retry |
int | 失败重试次数设置 |
trace_id |
string | 用于链路追踪和日志一致性标记 |
{
"action_type": "click",
"target": {
"type": "button",
"selector": "#submit-btn",
"text": "提交"
},
"payload": null,
"conditions": ["element_exists"],
"trace_id": "trace_20250422_001"
}
这个结构比“模型生成 click(‘#submit-btn’)”更安全、可控,也更易于追踪、调试、复现。
问题 | 原因 | Action Space 的解决方案 |
---|---|---|
模型选错操作对象 | 不知道有哪些按钮 | 显式提供候选对象列表 |
模型调用参数错 | prompt 中没有参数说明 | 每个动作都有参数 Schema |
执行后无法调试 | 无法复现上下文 | 每个动作结构都被日志记录 |
多通道调用混乱 | Web 和 API 执行方式不同 | 每类动作绑定对应执行器(Adapter) |
总结一句话:动作空间是智能体行为的“地图 +接口 +协议”。没有它,智能体再聪明也只会乱点乱填。
类型 | 感知能力 | 多通路控制 | 状态写回 | 行为调度 |
---|---|---|---|---|
OpenAI Tool Calling | ❌ 无界面感知 | ❌ 单路调用 | ❌ 需手动管理 | ❌ 模型决定顺序 |
LangChain Tool | ❌ 函数注册为主 | 部分支持 | 手动插入日志 | ✅ 可组合 |
AutoGPT | ❌ 靠大模型推测调用方式 | ❌ 多数 hardcode | ❌ 调用即结束 | ❌ 线性执行 |
Manus Action Space | ✅ 自动感知结构 | ✅ 多通路控制器桥接 | ✅ 写入状态图谱 | ✅ 支持 DAG、条件与多轮计划 |
一个真正可控的智能体系统,必须首先具备“可交互对象发现能力”——它需要知道哪里能点击、哪里能填内容、哪里能触发操作。这背后就是**感知层(Perception Layer)**的任务。
将任意 UI(网页、桌面、接口)中可执行动作的“目标对象”提取为结构化可调用项(ActionCandidate),并提供上下文属性供模型参考或系统决策。
我们从三个典型场景切入:网页、桌面应用、API 接口。
推荐工具:
button
, input
, select
, a
, textarea
)tag
(元素类型)textContent
(可视文本)placeholder
id
/ class
aria-label
xpath
/ css selector
enabled
/ visible
状态from playwright.sync_api import sync_playwright
def extract_interactive_elements(url):
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto(url)
elements = page.query_selector_all("button, input, select, textarea, a")
structured = []
for el in elements:
structured.append({
"tag": el.evaluate("e => e.tagName.toLowerCase()"),
"text": el.inner_text(),
"selector": el.evaluate("e => e.id || e.className || e.name || e.outerHTML.slice(0,100)"),
"type": el.get_attribute("type"),
"aria_label": el.get_attribute("aria-label"),
"visible": el.is_visible(),
"enabled": el.is_enabled()
})
browser.close()
return structured
[
{
"tag": "button",
"text": "提交",
"selector": "#submitBtn",
"type": "submit",
"visible": true,
"enabled": true
},
{
"tag": "input",
"placeholder": "请输入手机号",
"type": "text",
"selector": "#phone"
}
]
该结构可直接供模型生成 JSON 调用计划,也可展示为 UI 按钮供用户选择。
UIAutomation
/ pywinauto
AppleScript + UI Scripting
/ Accessibility API
AT-SPI
(Assistive Technology Service Provider Interface)pywinauto.Application().connect()
连接应用窗口{
"control_type": "Edit",
"automation_id": "username",
"name": "用户名输入框",
"bounding_box": [110, 220, 320, 240],
"actions": ["set_value"],
"is_enabled": true
}
该结构可被注册为 Action Candidate,在后续 Agent 执行层通过 pywinauto
控制该窗口对象。
推荐工具:
{
"endpoint": "/user/create",
"method": "POST",
"params": {
"username": {
"type": "string",
"required": true,
"description": "用户名称"
},
"email": {
"type": "string",
"required": false,
"default": null
}
},
"auth_required": true
}
✅ 可用于生成 ActionPlan、函数模板、甚至用作模型输入中的工具选择依据。
无论是网页、桌面还是 API,感知层的目标都是将“可交互目标”抽象为如下结构:
{
"object_id": "string",
"object_type": "button/input/api",
"display_name": "string",
"location": "css/xpath/apiPath",
"capabilities": ["click", "fill", "submit"],
"constraints": ["visible", "enabled"],
"metadata": { ... }
}
所有这些结构都将成为智能体的 Action Space 候选项,输入到模型或执行计划中,是后续 “选动作” 与 “做动作” 的基础。
在上一章中,我们完成了“看见”:构建了一个结构化的 Action Space,智能体已经知道有哪些按钮、输入框、接口字段可以被操作。
但下一步,系统必须回答更关键的问题:
✅ 我该怎么操作它?在哪执行?谁来调?执行完如何记录?
这就进入了**控制层(Control Layer)**的设计范畴,它是整个 Action 系统中真正驱动行为执行、落地到“现实世界”的引擎模块。
构建一个支持多通路(浏览器、接口、Shell、本地文件等)、可追踪、可插拔、可扩展的行为执行桥接器体系(Executor Adapter System),核心能力包括:
我们将以三类典型控制通路展开讲解:网页控制、API控制、本地行为控制。
网页是多数智能体“落地场景”最常见的控制目标,例如:
模块职责:
action_type
与 target.selector
def execute_click_action(action):
selector = action["target"]["selector"]
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto(action["context"]["url"])
page.click(selector)
browser.close()
✅ 可扩展为并发执行池、浏览器缓存、页面快照回传等能力
很多任务不是点击按钮,而是调用后端接口:
核心结构:
{
"endpoint": "/submit/task",
"method": "POST",
"headers": {
"Authorization": "Bearer xxx"
},
"body": {
"title": "报告1",
"type": "monthly"
}
}
import requests
def execute_api_action(action):
method = action["method"]
url = action["endpoint"]
headers = action.get("headers", {})
data = action.get("body", {})
response = requests.request(method, url, headers=headers, json=data)
return response.status_code, response.json()
✅ 建议加入错误重试、超时控制、Token 管理、失败回写功能
对于部署在服务器或边缘端的智能体,很多操作是:
关键设计点:
{
"action_type": "run_script",
"target": {
"script_path": "/opt/agents/convert.py"
},
"args": ["--input", "file1.pdf", "--output", "file1.txt"],
"timeout": 10
}
import subprocess
def run_local_action(action):
cmd = [action["target"]["script_path"]] + action["args"]
try:
result = subprocess.run(cmd, capture_output=True, timeout=action["timeout"])
return result.stdout.decode()
except Exception as e:
return str(e)
✅ 可加入执行环境隔离(如 Docker)、权限控制(sudo 限制)等安全扩展。
+-------------------+
| Action Dispatcher|
+--------+----------+
↓
+--------+----------+ +------------------+
| Action Router |─────▶──▶| Web Executor |
| (Match by type) | | (Playwright) |
| └────────▶| API Executor |
| └────────▶| Shell Executor |
| └────────▶| Desktop Executor |
+----------------------------+------------------+
项 | 建议 |
---|---|
模块设计 | 每类动作对应独立执行器,接口统一为 run(action: dict) |
通道封装 | 使用适配器模式(ExecutorAdapter)屏蔽具体库差异 |
日志 | 每次执行必须记录:trace_id + 输入参数 + 输出状态 |
安全控制 | 控制白名单命令 / 接口权限 / 外部路径访问 |
状态更新 | 执行结果写入状态树 / memory / 调度系统 |
“所有行为都应该被结构化表达。”
仅靠 prompt 输出 "点击确认按钮"
是无法驱动真实系统的。我们需要将每个动作转化为结构化、可校验、可追踪、可复用的行为协议单元,这就是 Action Schema 的使命。
进一步地,我们还需要描述多个动作之间的顺序、依赖关系与条件控制,即 Action Plan。
字段 | 含义 | 说明 |
---|---|---|
action_type |
动作类型 | click / fill / run_script / post_api 等 |
target |
操作对象 | DOM 节点 / API 路径 / 本地路径等 |
payload |
操作内容 | 输入的值、参数、文件路径等 |
precondition |
执行条件 | 页面加载完 / 对象存在等 |
retry |
错误重试策略 | 次数、等待时间等 |
trace_id |
日志标识符 | 支持行为链统一追踪 |
{
"action_type": "click",
"target": {
"type": "button",
"selector": "#submit-btn",
"text": "提交"
},
"payload": null,
"precondition": ["document_loaded", "element_visible"],
"retry": 2,
"trace_id": "trace_20250422_091"
}
“单一动作靠执行器,多动作靠编排器。”
ActionPlan 是多个 Action 的组合体,支持:
字段 | 含义 |
---|---|
plan_id |
当前计划唯一 ID |
steps |
动作步骤列表(结构见下) |
meta |
描述、创建者、任务背景等元数据 |
{
"step_id": "step_03",
"action": "fill",
"target": {
"type": "input",
"selector": "#username"
},
"payload": "zhangxin2025",
"depends_on": ["step_01"], // 依赖步骤
"condition": "input_is_empty", // 执行条件
"retry": 1,
"timeout": 10
}
{
"plan_id": "login_sequence",
"steps": [
{
"step_id": "s1",
"action": "fill",
"target": {"selector": "#username"},
"payload": "admin"
},
{
"step_id": "s2",
"action": "fill",
"target": {"selector": "#password"},
"payload": "123456"
},
{
"step_id": "s3",
"action": "click",
"target": {"selector": "#login"},
"depends_on": ["s1", "s2"]
}
],
"meta": {
"agent": "LoginBot",
"created_by": "Manus/PlanCore"
}
}
能力 | 字段设计 | 功能说明 |
---|---|---|
并发执行 | group_id : 同组任务可并发 |
加快任务处理效率 |
条件执行 | condition : 表达式 |
可基于状态、历史结果执行 |
错误跳转 | on_fail : fallback_step_id |
柔性回退 |
回滚机制 | rollback_plan : ActionPlan |
用于事务型任务撤销处理 |
模块 | 建议实现 |
---|---|
Schema 定义 | 使用 JSON Schema 进行标准化约束,支持 VSCode 联想与校验 |
Plan 编排器 | 使用类 LangGraph 的 DAG 实现,支持动态添加节点 |
表达式判断 | 内置 条件表达式解释器 (如 input_is_empty && step2.success ) |
状态同步 | 每一步执行后写入状态树,供下游读取 |
模型接入 | 将 Action Space + 状态输入模型,使用 ToolPicker / FunctionCaller 接入大模型决策流程 |
层级 | 意义 |
---|---|
模型生成层 | 提示词更标准、输出可控、减少 hallucination |
执行调度层 | 可追踪、可调度、可监控、可中断 |
工程协作层 | 多端 Agent 通用协议、跨模型交互、平台化 |
安全控制层 | 可插入权限控制、行为审计、异常阻断机制 |
目前主流 Agent 系统在“动作空间”和“执行机制”上各有取向。很多框架强调 prompt 协作、工具调用、对话控制,但一旦进入“多步骤行为 + 真实系统调用 + 状态同步 + 可观测行为”阶段,差距便逐渐拉开。
我们将从五个维度对比分析:
对比维度 | OpenAgents | AutoGPT | LangGraph | Manus |
---|---|---|---|---|
动作感知能力 | ✅ 浏览器 DOM 感知 | ❌ 基于模型猜测 | ❌ 静态计划 | ✅ 网页/API/UI 多通感知 |
动作协议结构化 | 部分 JSON | 无结构协议 | 基于函数节点 | ✅ ActionSchema + Plan 编排 |
执行控制粒度 | 可控但难定制 | 线性 prompt 调用 | 状态流触发节点 | ✅ 每步动作 + 依赖链可控 |
执行可追踪性 | 日志打印 | 控制台输出 | ✅ Trace 状态流图 | ✅ TraceID + 全日志结构 |
状态写回能力 | ❌ 无显式状态系统 | ❌ 黑盒执行 | ✅ 节点状态流 | ✅ 状态树 + 快照 + 回滚机制 |
优势:
局限:
适用场景:
优势:
局限:
适用场景:
优势:
局限:
适用场景:
优势:
局限:
适用场景:
你要做的 Agent | 推荐方案 |
---|---|
演示网页交互 | OpenAgents |
研究型推理 Agent | AutoGPT |
可配置流程任务 | LangGraph |
操控网页 + 控制接口 + 多步骤计划 + 回写状态 | ✅ Manus Action 架构体系 |
Manus 的设计核心在于:
为大模型智能体补齐感知 + 控制 + 状态三大工程能力,用结构化的执行协议完成从“看得见”到“动得了”的闭环。
而这也正是从“语言智能”向“操作智能”跃迁的必经之路。
✅ 可构建
perception.extract(url)
方法:输入网页地址,输出结构化动作候选集。
# 示例注册执行器
ACTION_EXECUTORS = {
"click": WebClickExecutor,
"fill": WebFillExecutor,
"post_api": ApiRequestExecutor,
"run_script": ShellScriptExecutor
}
✅ 每个执行器类实现标准
run(action: dict)
方法,统一接口方便替换与扩展。
✅ 建议使用 DAG 计划执行器(如 networkx)+ Redis 状态快照缓存 + JSON Log 存储链路
/action_runtime/
├── perception/ # 元素感知器(Web / API / UI)
│ └── extractor.py
├── executor/ # 控制器适配器(Web / API / Shell)
│ ├── base.py
│ ├── web_executor.py
│ ├── api_executor.py
│ └── shell_executor.py
├── plan/ # Plan 编排器
│ └── planner.py
├── controller/ # 执行器调度器(依赖控制 + 重试逻辑)
│ └── controller.py
├── state/ # 状态堆栈与快照
│ └── state_tracker.py
├── trace/ # Trace 日志模块
│ └── trace_logger.py
├── schema/ # ActionSchema / PlanSchema 定义
│ └── action_schema.json
└── config.py # 路径、日志、运行配置等
模块 | 推荐技术栈 |
---|---|
网页感知 | Playwright (支持 Python / Node) |
API 感知 | openapi-typescript-codegen , swagger-parser |
Plan 编排 | networkx (DAG)、jsonschema |
执行器桥接 | 自定义 ExecutorAdapter 类体系 |
状态缓存 | Redis + PostgreSQL 组合 |
日志追踪 | loguru + OpenTelemetry + trace_id |
安全机制 | 动作白名单 + 执行沙箱(subprocess / Docker) |
@app.post("/run_action")
async def run_action(action: dict):
executor = ACTION_EXECUTORS.get(action["action_type"])
if not executor:
raise HTTPException(400, "Unknown action type")
result = executor().run(action)
trace_logger.log(action, result)
return {"status": "ok", "result": result}
步骤 | 建议操作 |
---|---|
本地跑通 | 用 FastAPI + Playwright 写一个“智能网页点击”脚本 |
JSON 标准 | 定义好动作结构(Action Schema),后续全部基于它生成与调用 |
执行抽象 | 每种动作写一个 run() 方法,确保可控、可替换、可测试 |
日志回写 | 每次动作都写入 trace.log ,追踪链路(可用于可视化) |
状态存储 | 每轮动作写入 state.json ,便于恢复与 Debug |
如果说大语言模型擅长“说”,那么 Action Space 就是让它们“动起来”的核心接口。
本篇博客完整介绍了 Manus 执行机制中的感知层、控制层、动作协议、桥接器实现与系统对比,并通过工程实战路径帮你从 0 构建可控、可执行、可复用的 Agent 操作中枢。
不论你是做网页控制、API 处理、流程机器人还是企业智能助手,只要具备以下四层:
可感知(Perception)× 可理解(Plan)× 可控(Execute)× 可复盘(Trace)
你就完成了“让智能体真正动起来”的第一步。
点个赞,给我一些反馈动力
⭐ 收藏起来,方便之后复习查阅
关注我,后续还有更多实战内容持续更新
写系统,也写秩序;写代码,也写世界。
观熵出品,皆为实战沉淀。