过去在 Azure Logic Apps 里做数据处理,要么靠内置的几十个 connector 拼凑,要么写一个外部函数挂上去。现在 Microsoft 给 Logic Apps 加了沙箱代码解释器——工作流中的 agent 可以直接生成并执行 Python、JavaScript、C#、PowerShell 代码,跑在 Hyper-V 隔离的沙箱会话里。这意味着集成工作流不再只是"编排",而是真正具备了"计算"能力。
为什么这件事值得关注
Logic Apps 一直定位是低代码集成平台:拖 connector、设条件、转发数据。但当 agent 被引入工作流后,问题来了——agent 需要动态计算。比如一个审批 agent 收到报销单,想按规则算一下税后金额再决定走哪条分支,传统做法要么调外部 API,要么硬编码表达式,都不够灵活。
沙箱代码解释器解决了这个问题:agent 在运行时生成一段代码,丢进 Hyper-V 沙箱执行,拿到结果继续往下走。四种语言覆盖了大多数集成场景——Python 做数据清洗和计算,JavaScript 处理 JSON 变换,C# 适合复杂业务逻辑,PowerShell 则是运维侧的瑞士军刀。
Hyper-V 隔离:不是容器,是真正的虚拟化边界
Microsoft 选择 Hyper-V 隔离而非普通容器隔离,这点值得细看。容器隔离共享内核,恶意代码理论上可以影响宿主。Hyper-V 隔离每个会话跑在独立轻量 VM 里,内核都不共享。对于"agent 动态生成代码然后执行"这种场景,安全边界必须够硬——你不知道 agent 会生成什么,用户输入也可能被注入进代码。
代价是冷启动延迟和资源开销。每个沙箱会话启动需要几秒,比容器慢。所以这个能力更适合"偶尔算一下"的集成节点,而不是高频调用的热路径。
模型选择权在架构师手里
另一个关键设计:每个工作流可以独立选择使用的模型。不是平台替你选一个 GPT-4o 然后所有 agent 都用它,而是架构师根据工作流的复杂度和成本要求,逐个配置。
这很重要。一个简单数据格式转换的 agent 用小模型就够了,成本可控;一个需要理解自然语言指令再生成复杂代码的 agent 才需要大模型。混在一起用大模型,账单会教你做人。
实战:在 Logic Apps 里用代码解释器处理 CSV 数据
下面是一个具体场景:工作流收到邮件附件(CSV 格式的销售数据),agent 需要用 Python 计算每行的利润率,然后按阈值分流。
先看 Logic Apps 工作流定义的核心片段(JSON 格式,可直接粘贴到 Logic Apps 设计器):
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"收到邮件附件": {
"type": "ApiConnection",
"inputs": {
"body": {
"path": "/datasets/mail/messages/@{triggerBody()?['id']}/attachments/@{triggerBody()?['attachments']?[0]?['id']}/content"
},
"method": "get",
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
}
},
"runAfter": {}
},
"Agent_计算利润率": {
"type": "CodeInterpreter",
"inputs": {
"language": "python",
"code": "import csv\nimport io\n\nraw = parameters('csv_content')\nreader = csv.DictReader(io.StringIO(raw))\nresults = []\n\nfor row in reader:\n revenue = float(row['revenue'])\n cost = float(row['cost'])\n margin = (revenue - cost) / revenue if revenue != 0 else 0\n row['margin'] = round(margin, 4)\n row['decision'] = 'approve' if margin >= 0.3 else 'review'\n results.append(row)\n\noutput = results",
"parameters": {
"csv_content": "@body('收到邮件附件')"
},
"modelConfiguration": {
"model": "gpt-4o-mini",
"temperature": 0.1
}
},
"runAfter": {
"收到邮件附件": ["Succeeded"]
}
},
"分流处理": {
"type": "Switch",
"cases": {
"自动审批": {
"actions": {
"发送审批通知": {
"type": "ApiConnection",
"inputs": {
"body": {
"to": "finance-team@company.com",
"subject": "自动审批完成",
"body": "@body('Agent_计算利润率')"
}
}
}
}
},
"人工复核": {
"actions": {
"创建审批任务": {
"type": "ApiConnection",
"inputs": {
"body": {
"title": "利润率低于30%,需复核"
}
}
}
}
}
},
"runAfter": {
"Agent_计算利润率": ["Succeeded"]
}
}
},
"triggers": {
"邮件触发器": {
"type": "ApiConnection",
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['office365']['connectionId']"
}
}
}
}
}
}
}
几个要点:
CodeInterpreter是新增的 action 类型,language字段指定执行语言,code里写具体逻辑。parameters把上游 action 的输出传入代码,这里把 CSV 内容传给 Python。modelConfiguration可以按工作流单独配模型——这个简单计算场景用gpt-4o-mini就够了,成本远低于gpt-4o。- 如果 agent 需要根据自然语言指令动态生成代码而非硬编码,可以把
code字段留空或设为 prompt 模式,让 agent 自行生成。
再看沙箱里实际执行的 Python 代码(可以单独测试逻辑):
import csv
import io
# 模拟输入数据,实际运行时由 Logic Apps 参数注入
raw = """product,revenue,cost
WidgetA,5000,3000
WidgetB,2000,1800
WidgetC,8000,4800
WidgetD,1500,1200"""
reader = csv.DictReader(io.StringIO(raw))
results = []
for row in reader:
revenue = float(row['revenue'])
cost = float(row['cost'])
margin = (revenue - cost) / revenue if revenue != 0 else 0
row['margin'] = round(margin, 4)
row['decision'] = 'approve' if margin >= 0.3 else 'review'
results.append(row)
for r in results:
print(f"{r['product']}: margin={r['margin']} -> {r['decision']}")
运行结果:
WidgetA: margin=0.4 -> approve
WidgetB: margin=0.1 -> review
WidgetC: margin=0.4 -> approve
WidgetD: margin=0.2 -> review
这段代码可以直接在本地 Python 环境跑,验证逻辑后再放进 Logic Apps。
定位:Logic Apps 和 Foundry、Copilot Studio 的分工
Microsoft 现在有三个 agent 平台:Azure AI Foundry 做模型开发与定制,Copilot Studio 做 low-code agent 构建,Logic Apps 做 agent 驱动的集成编排。沙箱代码解释器让 Logic Apps 不再只是"连线",而是能在线上跑代码,补上了集成场景中最缺的那块计算能力。
分工大致是这样:
| 平台 | 核心场景 | 代码执行能力 |
|---|---|---|
| Azure AI Foundry | 模型训练、agent 框架开发 | 完全自定义 |
| Copilot Studio | 业务用户构建对话式 agent | 受限表达式 |
| Logic Apps | 集成工作流中的 agent 编排 | 沙箱解释器(四种语言) |
如果你的需求是"在已有集成流程里插入智能计算节点",Logic Apps + 代码解释器是最直接的路径。
上线前的注意事项
- 冷启动开销:Hyper-V 沙箱首次启动有几秒延迟,高频场景不适合,考虑预热或改用外部函数。
- 代码注入风险:即使有沙箱隔离,agent 生成的代码如果拼接了用户输入,仍可能产生非预期行为。传参时尽量用
parameters注入而非字符串拼接。 - 成本控制:模型选择权是给你的,也是让你自己负责的。简单转换用小模型,复杂推理才用大模型,否则每个工作流跑一次 GPT-4o 的账单会让你重新思考架构。
- 执行时长限制:沙箱会话有超时上限(具体数值随 SKU 不同),长时间运算仍应拆分或外移。
- 调试手段:目前沙箱内的 stdout 输出可以在 Logic Apps 运行历史中查看,但调试体验不如本地 IDE,复杂逻辑建议先本地验证再上线。
Logic Apps 加了代码解释器,本质上是在回答一个问题:集成平台到底要不要有计算能力?Microsoft 的答案是 yes,而且用 Hyper-V 隔离把安全边界画得很硬。对于已经在 Logic Apps 上跑集成流程的团队,这比另起一个 Foundry 项目再写胶水代码要务实得多。