乐于分享
好东西不私藏

AI智能体工作空间:让模型在受控环境里干活

AI智能体工作空间:让模型在受控环境里干活

架构师之道

 AI · LLM · Agents | Enterprise Architecture | Digital Transformation

1 引言

AI 智能体不是因为提示词写得更长就变得好用。它好用的前提,是有一个合适的工作场所:能查看的文件、能调用的工具、能恢复的状态、以及不能越过的边界。

这是当下许多开发者正在感受到的转变。聊天机器人负责回答,智能体负责执行。但如果你只给智能体一条系统提示和几个 API 工具就把它扔进产品,很快就会撞上同样的问题:上下文混乱、权限不清、工具调用难以调试、成本在后台悄悄攀升。

解决之道不是“更放任”,而是“工作空间架构”。

一个好的 AI 智能体工作空间,为模型提供一个受控环境,让它能够探索、规划、执行、暂停,并留下可追溯的痕迹。本文会讲清楚:面向真实客户场景,你应该存什么、暴露什么、限定什么、审核什么、追踪什么。

2 什么是 AI 智能体工作空间?

AI 智能体工作空间,是智能体执行任务时的运行时环境。

它通常包含:

  • 任务说明
  • 用户或租户上下文
  • 文件、文档或结构化记录
  • 工具和 API
  • 记忆或运行历史
  • 权限
  • 预算
  • 追踪信息
  • 审批关卡
  • 输出产物

打个比方:给外包人员发一条模糊的 Slack 消息,和给他一个项目文件夹、访问规则、检查清单、以及提交成果供审核的流程——两者效果截然不同。

工作空间决定了模型能看到什么、改动什么、恢复什么、以及证明什么。

3 为什么工作空间设计现在很重要

最近的 AI 工具趋势指向同一个方向:智能体正在从聊天框走向工作环境。

新闻和搜索信号显示,以下方向关注度在上升:

  • 能在模型和工具之间切换的智能体应用
  • 面向应用开发者的嵌入式智能体框架
  • 具备持久状态的企业级智能体工作空间
  • 浏览器和桌面端的智能体运行环境
  • 需要权限、追踪和成本控制的 AI 工作流
  • 原生集成 AI 能力的开源自动化工具

开发者的关注点不再只是“该用哪个模型?”,而是“智能体该在哪里工作?”

这很重要,因为生产环境中的很多故障,其实是环境故障,而不单纯是模型故障。

故障现象
工作空间层面的根因
智能体忘记目标
没有持久化的任务状态
智能体在不同客户间泄漏数据
上下文共享或租户过滤器失效
智能体调错 API
工具缺少明确的调用契约
智能体消耗大量词元
没有预算限制或进度检查
智能体给出看似合理实则错误的结果
缺乏来源证据或审核关卡
智能体无法恢复执行
没有步骤日志、产物或重试方案

如果你正在为客户构建 AI 功能,工作空间不是锦上添花,而是控制平面

“Control Plane”(控制平面)是系统架构中的标准术语,特指负责策略制定、配置下发和全局调度的管理层,与“Data Plane”(数据平面)相对。

4 核心工作空间分层

一个可用于生产的工作空间,包含五个层次。

4.1 任务层

任务层定义智能体要做什么。

它应当包含:

  • 用户请求
  • 成功标准
  • 约束条件
  • 预期输出格式
  • 截止时间或预算
  • 风险等级
  • 允许使用的数据来源
  • 是否需要人工审批

不要只把原始用户提示词丢给模型。用户提示词往往模糊、带有情绪、或缺失关键背景。你应该把请求转成一个任务对象,让系统能够检查。

示例:

{
  "task_id": "task_481",
  "tenant_id": "tenant_acme",
  "goal": "根据已批准的产品说明,创建一封入职邮件草稿序列。",
  "success_criteria": [
    "只使用已批准的产品说明",
    "创建 5 封邮件",
    "包含主题行",
    "不实际发送邮件"
  ],
  "risk_level": "draft_only",
  "max_model_cost_usd": 1.25,
  "requires_human_approval": false
}

这样就把一条松散的提示,变成了一份可执行的契约。

4.2 上下文层

上下文层决定智能体能读取什么。

这是很多团队最容易踩的第一个大坑:要么给的上下文太少,导致智能体靠猜;要么给得太多,导致响应慢、成本高、且更容易被恶意利用。

请使用“上下文数据包”,而不是“上下文倾泻”。

一个好的上下文数据包应包含:

  • 简短的任务摘要
  • 选定的记录
  • 来源 ID
  • 每个来源的权限
  • 来源更新时间戳
  • 缓存有效期限(TTL)
  • 排除的数据列表
  • 引用规则

示例:

{
  "context_packet": {
    "summary": "客户正在为按使用量计费的套餐配置账单告警。",
    "sources": [
      {
        "id": "doc_17",
        "type": "help_doc",
        "title": "使用量计费告警说明",
        "source_updated_at": 1723795200000,
        "cache_ttl_seconds": 3600,
        "permission": "tenant_read"
      },
      {
        "id": "ticket_3391",
        "type": "support_ticket",
        "permission": "user_visible"
      }
    ],
    "excluded": ["internal_pricing_notes", "other_tenant_tickets"],
    "citation_required": true
  }
}

注意,source_updated_at 和 cache_ttl_seconds 字段将上下文有效性判断从"模型的主观猜测"变成了"系统的确定性断言"。策略引擎会在任务启动前做一道硬校验:如果当前时间减去数据更新时间超过了 TTL,该数据包会被标记为"可能已过期",系统会强制触发一次源数据拉取,或者要求人工确认后才交给智能体。

重点不是把有用的信息藏起来,而是让上下文的提供变得有意图、有章法。

4.3 文件与产物层

智能体如果能创建和修改产物,工作效果会更好。

工作空间应该提供一个轻量级文件系统或产物存储区,让智能体能够:

  • 读取已批准的输入
  • 创建草稿
  • 保存中间笔记
  • 产出最终结果
  • 附加证据
  • 留下变更差异供审核

这对代码生成智能体、报告生成器、入职助手、研究智能体和数据分析工作流尤其有用。

建议按用途分离文件目录:

/workspace
  /input
    product_notes.md
    customer_profile.json
  /scratch
    plan.md
    extracted_claims.json
  /output
    onboarding_sequence.md
  /evidence
    source_map.json
    tool_trace.json

/scratch 目录很重要。智能体需要空间来推演工作,但草稿内容不应自动变成面向客户的最终输出。

在多智能体协作或"人类与智能体协同编辑"的场景下,文件并发问题必须提前考虑。智能体的"读取-修改-写入"操作序列并不是原子的。如果人类审核员在智能体生成草稿的同时修改了同一个文件,后写入的一方会直接覆盖前者的变更。工作空间服务应当对每个文件附带版本号(etag),写入时必须校验版本是否匹配,若不匹配则拒绝本次写入并返回冲突提示,强制智能体重新读取最新内容后再试。如果不想引入并发控制的复杂度,可以退一步,将该工作空间显式设计为"仅智能体可写、人类只读审核"的简化模型。

4.4 工具层

工具层定义智能体能做什么。

每个工具都要封装成一个契约,不要直接暴露原始 API 访问。

工具契约应定义:

  • 名称
  • 用途说明
  • 输入输出结构
  • 所需权限
  • 副作用说明
  • 速率限制
  • 成本预估
  • 风险等级

需要特别指出的是,风险等级不能只依据"读"或"写"这类动作来划分。在实际生产环境中,"读取"个人身份信息或财务核心字段,其合规风险远高于"写入"一张临时调试表。正确的做法是采用"动作类型 + 数据分类"的二维矩阵来确定风险等级。例如,读取公开文档可归为低风险,读取用户手机号则应自动升为高危操作并强制触发审批。工具契约中应显式声明该工具所能接触的最高数据敏感级别。

示例工具定义:

type AgentTool<I, O> = {
  name: string;
  description: string;
  risk: "read" | "draft" | "write" | "external";
  data_classification: "public" | "internal" | "confidential" | "pii" | "financial";
  inputSchema: unknown;
  requiresApproval: boolean;
  validateInput: (input: I) => boolean;
  run: (input: I, ctx: ToolContext) => Promise<O>;
};

const createDraftEmail: AgentTool<
  { customerId: string; subject: string; body: string },
  { draftId: string; status: "created" }
> = {
  name: "create_draft_email",
  description: "创建邮件草稿。不会实际发送。",
  risk: "draft",
  data_classification: "pii",
  inputSchema: {
    customerId: "string",
    subject: "string",
    body: "string"
  },
  requiresApproval: false,
  validateInput(input) {
    // 对 subject 和 body 做 XSS 注入检查
    return !/<script|javascript:|on\w+=/i.test(input.subject + input.body);
  },
  async run(input, ctx) {
    await ctx.policy.assertTenant(input.customerId);
    return ctx.email.createDraft(input);
  }
};

注意描述中的"不会实际发送"。工具描述要消除歧义。如果某个工具会写入、发送、删除、支付、邀请、导出或更改权限,一定要说清楚,并设置相应的审批关卡。

另外,所有涉及可执行字符串类型的工具参数,必须实施输入合法性校验。智能体生成的字符串有可能被上游用户通过提示词注入攻击,夹带 "'; DROP TABLE users; --" 或 "$(rm -rf /)" 之类的内容。不能把模型输出的原始字符串直接拼接到 SQL、Shell 命令或 GraphQL 变量中。凡是未定义输入净化规则的工具,一律禁止注册到生产环境。

4.5 状态与追踪层

状态层让智能体能恢复执行,追踪层则让人能够调试。

需要记录:

  • 任务状态
  • 当前步骤
  • 模型调用
  • 工具调用
  • 工具输入及脱敏后的输出
  • 每一步的成本
  • 审批记录
  • 错误信息
  • 最终产物
  • 面向用户的摘要

不需要把所有词元都永久保留,但必须保留足够证据来回答:

  • 智能体当时知道什么?
  • 它做了什么决策?
  • 调用了哪个工具?
  • 谁批准的?
  • 改了什么?
  • 花了多少钱?
  • 能重放或修复吗?

没有追踪,每个线上问题都会变成谜团。

除了记录信息,工作空间还必须具备智能体行为异常检测能力。生产环境中一个常见故障是智能体陷入"工具调用死循环"——反复用相同或高度相似的输入调用同一个工具,却没有实质性的进度推进。仅靠最大调用次数这类硬上限,无法区分复杂长链推理和原地空转。

建议引入进度单调性检查:每次工具调用结束后,对比调用前后的工作空间状态,特别是 /scratch 目录下的文件哈希值或内容增量。如果连续三轮调用后,工作空间既没有产生新的有效产出,也没有标记任何待办事项的完成,则判定为疑似卡死,主动触发告警并转入人工接管流程。同时,对相邻轮次的模型输入计算语义相似度,若连续多轮高度相似(如 > 0.95),同样视为循环迹象,立即暂停执行。

5 一个简单的参考架构

下面是一个实际的 AI 智能体工作空间流程:

用户请求
   ↓
任务构建器
   ↓
策略检查 —— 拒绝不安全或不支持的任务
   ↓
上下文数据包构建器(含时效性校验)
   ↓
创建工作空间
   ↓
智能体浏览文件和工具
   ↓
生成计划(v1)
   ↓
风险检查(二维矩阵:动作 × 数据分类)
   ↓
执行工具 / 创建产物草稿
   ↓
进度评估与重规划
   ├─ 进度正常 → 继续
   └─ 停滞或信息缺失 → 生成计划差异更新(v2),不覆盖 v1
   ↓
如有需要,进入审批关卡
   ↓
最终输出 + 证据摘要
   ↓
存储追踪信息,用于审计和改进

这个流程特别强调了规划与执行之间的解耦。一次性规划对于复杂任务几乎永远不够用。智能体在调用工具后往往会发现新的上下文,或遭遇预期之外的错误,此时必须允许它动态调整剩余步骤。

但"调整"不等于"推倒重来"。工作空间应当以差异更新的方式来记录每次规划的变更:保留原始计划的完整快照,每次修改只记录"新增了哪些步骤、删除了哪些步骤、修改了哪些步骤的前置条件"。这样做有两个好处:第一,审计人员能清晰追溯智能体的意图演变过程;第二,当最终结果出错时,调试者可以定位到哪一次重规划引入了错误方向,而不会迷失在混乱的工具调用堆栈中。

这个流程不绑定任何特定框架。你可以用自定义编排器、工作流引擎、智能体 SDK、Serverless 函数、队列或后台任务来实现。

关键在于边界:智能体不能在你的产品里随意游荡,它必须在一个有规则的工作空间内运行。

6 如何限定文件访问,又不损害实用性

文件访问应该做到‘朴素且明确’——即规则简单清晰,不玩花样。

遵循以下原则:

  1. 默认拒绝。
     除非任务构建器明确包含,否则智能体看不到任何文件。
  2. 区分输入、草稿、输出和证据。
     不要把原始数据和生成结果混在一起。
  3. 给文件附加权限。
     支持工单、发票和内部笔记的可见性不应相同。
  4. 让写操作可逆。
     先出草稿,再正式应用。
  5. 让工作空间过期失效。
     敏感临时上下文不要保留超过必要时间。

常见做法是按任务创建工作空间:

/workspaces/{tenant_id}/{task_id}/

然后所有读写操作都通过工作空间服务来执行。模型永远不应该直接拿到原始存储桶路径或不受限的文件浏览器。

7 如何设计工具权限

工具权限的判定依据,不应仅仅是"用户是谁",也不该是"动作是什么",而应是"谁 + 对什么数据 + 做什么"的三元组。用户本人可能有删除记录的权限,但不代表智能体可以在任意任务上下文中继承该权限。

我们建议采用二维风险模型:

操作类型 \ 数据分类
公开
内部
机密
个人身份信息
财务核心
读取
放行
放行
审计
审计+通知
审批
草稿
放行
放行
审计
审计
审批
写入
审计
审计
审批
审批
审批+双重确认
外部发送
审批
审批
审批
审批
禁止
删除
审批
审批
审批+备份
审批+备份
禁止

这种矩阵式模型比单纯按动作定级要严谨得多,能兼顾灵活性与安全性。

另外,为工具设置预算也是一种有效防护:

{
  "tool_budget": {
    "max_calls_total": 25,        // 总调用次数上限
    "max_search_calls": 5,        // 搜索类调用上限
    "max_write_calls": 2,         // 写入类调用上限
    "max_runtime_seconds": 180,   // 最大运行时间(秒)
    "max_cost_usd": 2.00          // 最大花费(美元)
  }
}

预算不仅控制成本,还能用来发现卡住的工作流。但注意,预算只是辅助手段,核心的卡死检测还是要靠上一节提到的进度单调性检查。

8 工作空间记忆:哪些该记,哪些该忘

智能体记忆很有用,但不应该什么都存。建议分成三类:

  • 运行记忆:
     当前任务临时状态
  • 用户记忆:
     用户期望你记住的稳定偏好
  • 系统记忆:
     产品规则、策略和工作流指令

不要让运行记忆悄悄变成用户记忆。如果智能体学到了某些可长期保留的信息,那应当作为一个显式的产品决策来处理。基本原则:运行记忆设短 TTL,用户记忆需用户同意,默认不存敏感字段,不跨租户共享记忆。

9 把人工审核纳入工作空间

人机协同应当内置于工作空间,而不是后期补丁。当任务越过风险边界时,暂停执行并生成一个审核数据包,包含:请求的操作、精确的工具输入、预期副作用、来源证据,以及批准/拒绝/编辑控件。

糟糕的审核界面说:“智能体想继续,批准吗?”

好的审核界面说:“智能体想把这封邮件发送给这 142 位用户,主题和正文如下,依据来源如下。批准、编辑还是取消?”

审批是信任界面,不是复选框。

10 最小可行工作空间

如果你刚起步,可以从最小可行工作空间开始:

  1. 任务对象
  2. 上下文数据包(带时效校验)
  3. 限定了作用域的文件/产物存储(带并发控制或单写约束)
  4. 工具注册表(含风险等级和数据分类)
  5. 成本与工具调用预算
  6. 追踪日志(含卡死检测)
  7. 外部操作的审批关卡
  8. 最终答案带证据链接

这些足够让你从“酷炫演示”升级到“受控工作流”。

具体代码会因技术栈而异,但结构应该保持不变:创建任务、构建作用域上下文、挂载允许的工具、执行预算、记录追踪,遇到需审批的操作就暂停。

11 常见错误规避

把软性提示当成硬性控制,是削弱智能体工作空间的最快方式。注意这些陷阱:

  • 只靠提示保证安全:
     提示可以说"不要访问私有数据",但工作空间应当让私有数据根本不可见。
  • 完全继承用户权限:
     用户权限应缩减为任务范围的智能体权限,而非全量继承。
  • 没有草稿空间:
     没有草稿区,计划和最终答案就会混在一起。
  • 看不到成本:
     重试、检索和长上下文可能隐藏高昂的运行开销。
  • 无法复现:
     如果无法重放失败的运行,你就无法可靠地改进它。
  • 未净化的工具输入:
     模型生成的参数不可信。把智能体输出直接拼接到 SQL、Shell 或文件路径中,等于给外部攻击者敞开了远程代码执行的大门。

12 最终检查清单

在发布智能体工作空间之前,问自己:

  • 每次运行是否都有任务对象?
  • 上下文是否经过选择、限定范围,并且有明确的时效性校验?
  • 文件是否按输入、草稿、输出和证据分别存放?
  • 文件写入是否考虑了并发冲突(版本校验或单写约束)?
  • 每个工具是否有明确的风险等级和数据分类?
  • 外部操作是否在执行前经过审批?
  • 成本和工具调用预算是否已强制执行?
  • 是否实现了智能体卡死检测(进度单调性检查)?
  • 智能体能暂停并恢复运行吗?
  • 规划是一次性的,还是支持差异化的重规划?
  • 人类能查看追踪记录吗?
  • 失败的运行能安全地重放吗?
  • 记忆是否设有过期时间,或需要用户同意?

如果多个问题的答案是“否”,那这个智能体还没有做好自主投入生产的准备。请让它继续在草稿模式下运行,直到工作空间完善为止。

13 结语

下一代真正有用的 AI 产品,胜出的关键不是提示词,而是给智能体一个安全、有序的工作环境。

AI 智能体工作空间,把一次模型调用变成了一个操作系统式的环境。它给智能体提供了文件、工具、记忆、权限、预算、追踪和人工审核。同时,它也给了你的团队同样重要的东西:一种能力——当智能体成功、失败或请求帮助时,你能清楚地知道发生了什么。

从小处开始:创建任务对象、构建上下文数据包、限定工具范围、存储追踪信息,并在外部操作前要求审批。把基础打牢,再逐步增加智能体的自主权。


架构师之道

架构之道,在于化繁为简,以设计思维驱动技术决策

AILLM智能体企业架构数字化转型云原生

> 关注作者并添加星标,与‘架构师之道’同行