Agent Script 开发指南

简介: 深入学习 Agent Script —— Salesforce 专为 Agentforce Builder 设计的 Agent 构建语言。涵盖语言特性(编译型、确定性+推理、声明式/过程式)、脚本块(System/Config/Variables/Subagent)、模型配置、控制流程、以及完整的代码示例。将自然语言的灵活性与程序化指令的可靠性完美结合。

Agent Script 入门

什么是 Agent Script?

Agent Script 是用于在 Agentforce Builder 中构建 Agent 的语言。它将自然语言指令处理对话任务的灵活性与程序化表达式处理业务规则的可靠性相结合。在 Script 中,你可以使用表达式定义 if/else 条件、转换和其他逻辑;设置、修改和比较变量;以及选择子代理(subagent)和动作(action)。你可以构建可预测、上下文感知的 Agent 工作流,而不是仅仅依赖 LLM 的解释。

注意:从 2026 年 4 月开始,Agent 的 topics 现已更名为 subagents(子代理),功能上没有变化。

Agent Script 是什么

编写 Agent Script 的多种方式

Agentforce Builder 提供了多种编写 Agent Script 的方式:

  • 与 Agentforce 对话 —— 用自然语言解释你想让 Agent 做什么(例如"If the order total is over $100, then offer free shipping"),Agentforce 会自动将请求转换为子代理、动作、指令和表达式

  • Canvas 视图 —— Agent Script 被总结为易于理解的块,可以展开查看底层脚本。输入 / 添加常见模式的表达式,输入 @ 添加资源

  • Script 视图(高级) —— 直接编写和编辑脚本,支持语法高亮、自动补全和验证

  • Agentforce DX(VS Code) —— 生成或获取脚本文件到本地 Salesforce DX 项目,在 VS Code 中使用完整的扩展支持进行开发

编写 Agent Script 的方式

Agent Script 能做什么?

Agent Script 保留了来自自然语言提示的对话技能和复杂推理能力,同时增加了程序化指令的确定性。在 Agent Script 中,你可以定义:

  • 推理指令(Reasoning Instructions) —— 定义 LLM 可以自由做出推理决策的特定领域,以及 Agent 必须确定性执行的特定领域

  • 变量(Variables) —— 可靠地存储有关 Agent 当前状态的信息,而不依赖 LLM 的上下文记忆

  • 条件表达式(Conditional Expressions) —— 根据变量值确定 Agent 的执行路径或 LLM 的表述方式

  • 子代理转换(Subagent Transitions) —— 确定性地转换到新子代理,或将子代理转换作为工具暴露给 LLM,让 LLM 决定何时切换

  • 动作控制(Action Control) —— 根据变量值确定性地指定要运行的动作

Agent Script 的能力

Agent Script 示例

这是一个简单的 Agent Script 示例,展示了条件逻辑(->)与 LLM 提示(|)的结合使用:

`system:
instructions: "You are a friendly and empathetic agent that helps customers with their questions."
messages:
error: "Sorry, something went wrong."
welcome: "Hello! How are you feeling today?"

config:
agent_name: "HelloWorldBot"
default_agent_user: "hello@world.com"

variables:
isPremiumUser: mutable boolean = False
description: "Indicates whether the user is a premium user."

start_agent hello_world:
description: "Respond to the user."
reasoning:
instructions: ->
if @variables.isPremiumUser:
| ask the user if they want to redeem their Premium points
else:
| ask the user if they want to upgrade to Premium service`


这个示例展示了 Agent Script 的核心优势:确定性逻辑(`->` 后)与 LLM 推理(`|` 后)可以在同一个工作流中共存,既保证了可预测的执行,又保留了 LLM 处理自然对话的能力。

![Agent Script 示例](https://sfdcvideotest.oss-cn-beijing.aliyuncs.com/media/ADG001/slide_51/image.png)

## 语言特性

### 编译型语言

Agent Script 是一种编译型语言。当你保存 Agent 的一个版本时,脚本会编译为推理引擎使用的底层元数据。

### 确定性 + 推理的混合模式

Agent Script 在单个工作流中结合了确定性逻辑和 LLM 推理:


- 逻辑指令(`->`)—— 每次确定性地运行。用于业务规则、运行动作、设置变量和条件分支

- 提示指令(`|`)—— 发送给 LLM 的自然语言。LLM 解释这些指令并决定如何回应客户

![语言特性](https://sfdcvideotest.oss-cn-beijing.aliyuncs.com/media/ADG001/slide_53/image.png)

![编译型和确定性推理](https://sfdcvideotest.oss-cn-beijing.aliyuncs.com/media/ADG001/slide_54/image.png)

### 声明式与过程式的结合


- 声明式 —— 直接声明你想要什么,无需担心逐步的详细流程。基本的 Agent Script 块类似于声明式语言

- 过程式 —— 指定按特定顺序执行命令。推理指令中的逻辑类似于过程式语言

### 面向属性(Property-Based)

Agent Script 由一组属性组成,每个属性以 `key: value` 的形式呈现。顶层属性称为"块"(blocks),例如 config 块:

`config:
    developer_name: "Demo_Agent_1"
    default_agent_user: "digitalagent.demo@salesforce.com"
    agent_label: "Demo Agent"
    description: "This is my demo agent"`

声明式和属性化

缩进和格式化

Agent Script 对空白敏感,类似于 Python 或 YAML。缩进用于指示结构和属性之间的关系。必须选择一种缩进方法(至少 2 个空格或 1 个 Tab)并在整个脚本中保持一致,混合使用会导致解析错误。

  • 箭头符号(->)—— 用于逻辑指令,后跟缩进的指令

  • 管道符号(|)—— 用于多行字符串和从逻辑切换到提示模式

缩进和格式化

访问资源

使用 @ 符号访问资源:

  • @actions.<action_name> —— 引用动作

  • @subagent.<subagent_name> —— 引用子代理

  • @variables.<variable_name> —— 引用变量

  • @outputs.<output_name> —— 引用动作输出

使用 run 命令执行动作,with 提供输入,set 存储输出。在提示文本中引用变量需使用 {!@variables.<variable_name>} 语法。

表达式和注释

Agent Script 使用熟悉的流程控制语法(if/else)、数学表达式(+-)、比较表达式(==!=><)以及空值检查(is Noneis not None)。

使用 # 符号添加注释,脚本会忽略 # 之后的任何内容。

表达式和注释

Agent Script 块

脚本由多个块组成,每个块包含一组属性。以下是各块类型的高层理解。

Agent Script 块结构图

Agent Script 块

System 块

包含 Agent 的通用指令和消息提示。必需的 welcomeerror 消息支持多行(使用 |)和链接变量({!@variables.xxx})来动态注入内容。

Config 块

包含定义 Agent 的配置参数:developer_name(唯一 API 名称)、default_agent_useragent_labeldescriptionenable_enhanced_event_logs 等。

Variables 块

包含 Agent 和脚本可以使用的全局变量列表。使用 variable_name: mutable type = default_value 定义,通过 @variables.<variable_name> 引用。

System、Config 和 Variables 块

Language 块

定义 Agent 支持的语言,设置 default_localeadditional_locales

Connection 块

描述 Agent 如何与外部连接(如 Enhanced Chat)交互,包括升级消息、出站路由配置等。与 @utils.escalate 命令配合使用。

Start Agent 块(Agent Router)

使用 start_agent 前缀代替 subagent。每次客户发言时,Agent 从此块开始执行。通常用于子代理分类、过滤和路由,可包含条件转换(如 available when @variables.verified == True)。

Language、Connection 和 Start Agent 块

Subagent 块

指定子代理的指令、逻辑和动作。核心属性包括:

  • name —— snake_case 命名的子代理标识

  • description —— 帮助 Agent 根据用户意图确定何时使用此子代理

  • system.instructions(可选)—— 覆盖系统级指令,避免冲突指令或更改语气

  • reasoning —— 包含发送给推理引擎的 instructions(可组合逻辑和提示)和 actions(可用的工具列表)

  • actions —— 定义从此子代理可用的 Agent 动作,包含描述、输入、输出和目标位置

Subagent 块

Connected_Subagent 块(Beta)

定义到 Salesforce 组织中另一个 Agentforce Agent 的连接。关键属性包括 target(外部 Agent 的 URI)、inputs(传递给连接子代理的值)、可选的 labeldescriptionloading_text。使用 @connected_subagent.Name 作为推理动作。

Connected Subagent 块

在 Agent Script 中配置模型

默认情况下,Agentforce 使用在设置中选择的模型。你可以使用 model_config 为特定 Agent 或其子代理覆盖组织的默认模型。

model_config: model: "model://sfdc_ai__DefaultBedrockAnthropicClaude45Sonnet"


![配置模型](https://sfdcvideotest.oss-cn-beijing.aliyuncs.com/media/ADG001/slide_63/image.png)

### 模型配置层级


- Agent 级别 —— 在顶层使用 `model_config` 覆盖组织默认模型

- Subagent 级别 —— 在子代理内使用 `model_config` 覆盖 Agent 级别模型

- Agent Router 级别 —— 在 `start_agent` 中使用 `model_config`

优先级:子代理特定模型 > Agent 特定模型 > 组织默认模型。

### EinsteinHyperClassifier 模型

由 Salesforce 开发的专用于子代理分类的模型。优势:分类速度显著更快、对特殊分类约束和否定指令的准确率更高。限制:不能使用 `before_reasoning` 或 `after_reasoning`,只能使用 `@utils.transition` 工具。

![模型配置层级](https://sfdcvideotest.oss-cn-beijing.aliyuncs.com/media/ADG001/slide_64/image.png)

## Agent Script 控制流程

理解执行顺序和控制流程有助于设计更好的 Agent。Agentforce 有三个主要执行路径:

### 1. 首次请求

所有请求(包括首次请求)都从 `start_agent` 块(Agent Router)开始。通常用于设置变量的初始值并执行子代理分类,让 LLM 根据当前上下文选择子代理。

### 2. 处理子代理

Agentforce 使用子代理的文本指令、变量、if/else 条件和其他程序化指令来创建 LLM 提示词。推理指令按从上到下的顺序依次处理。LLM 只在接收已解析提示词后才开始推理,而不是在 Agentforce 解析过程中。

如果推理指令中包含转换命令,Agentforce 会立即转换到指定子代理,丢弃任何现有的已解析提示词。最终提示词只包含从第二个子代理解析的指令。

![控制流程](https://sfdcvideotest.oss-cn-beijing.aliyuncs.com/media/ADG001/slide_66/image.png)

![首次请求和处理子代理](https://sfdcvideotest.oss-cn-beijing.aliyuncs.com/media/ADG001/slide_67/image.png)

### 示例:Agentforce 如何创建提示词

假设一个 `Order_Management` 子代理,订单 ID 为 1234,当前交付日期为 2026 年 2 月 10 日,包裹已延迟。Agentforce 逐行处理:递增变量、运行动作、评估条件并拼接提示文本。最终发送给 LLM 的提示词可能为:

`Tell the user that the expected delivery date for order number 1234 is February 10, 2026.
Apologize to the customer for the delay in receiving their order.`

提示词创建示例

3. 子代理之间的转换

转换(使用 @utils.transition to)是单向的,控制不会返回到之前的子代理。Agentforce 丢弃前一个子代理的任何提示指令,然后从头到尾读取第二个子代理。第二个子代理完成后,Agentforce 等待下一次客户发言,然后返回到 start_agent

子代理转换

管理、下载和示例

配置和部署

你可以从 Salesforce 组织或通过命令行使用 Agentforce DX 来配置、部署和测试 Agent。有多种测试方法可供选择,发布后务必再次测试。

下载 Agent Script 文档

可以将 Agent Script 文档下载为 Markdown 文件,用作编码 Agent 的关联上下文。文档包每周四晚上(PST)更新,包含:语言概述、脚本块、模型配置、控制流程、参考语法、模式和完整示例。

Agent Script 示例

  • 客户支持 —— 验证身份并提供订单信息

  • 面试 Agent —— 基于步骤变量的面试流程控制

  • 术语关联 —— 处理不断演变的术语而不更新信息源

管理、下载和示例

Agent Script Recipes 和开发技能

访问 https://developer.salesforce.com/sample-apps/agent-script-recipes Agent Script Recipes 获取更多交互式示例。使用 https://github.com/forcedotcom/afv-library/tree/main/skills/developing-agentforce Agentforce Development Skill 来构建、修改、调试和部署 Agent。

Agent Script Recipes

感谢阅读本指南。Agent Script 为你提供了两全其美的能力 —— LLM 推理的灵活性加上确定性程序化控制的可预测性。

发布来源:https://www.salesforcecrm.cn/article/agentforce/agent-script-guide.html

相关文章
|
12天前
|
运维 安全 Shell
网站建设数据安全-编写自动化脚本实现网站源码与数据库异地备份
在高度重视稳定运行的企业级网站搭建与维护中,**数据备份** 就像是汽车的“安全气囊”,你可能永远不想用到它,但必须要保证它在关键时刻能够 100% 成功弹开。 业内有一句名言:“世界上只有两种运维,一种是做备份的,另一种是准备做备份的。”而比本地备份更安全的,则是 **异地灾备(Offsite Backup)**。如果你的备份数据和生产环境放在同一台物理主机或同一个数据中心,一旦遭遇机房断电、火灾或者高级持久性威胁(APT)物理删除,本地备份也将一同覆灭。
|
Kubernetes 负载均衡 网络协议
详解 Kubernetes 的稳定性和可用性
大家好,我叫杨朝乐,来自才云科技基础设施部门。今天给大家分享一个平时可能接触得较少的话题:关于 Kubernetes 的稳定性和可用性。 下面是今天分享以下 5 个主题: 认识稳定性 认识异常 Kubernetes 里面的高可用方案 如何处理异常 我的经验分享 认识稳定性 Kubernetes 集群的稳定性和众多因素相关。
3294 1
|
5月前
|
存储 缓存 固态存储
2026年阿里云服务器2核8G、4核16G、8核32G最新收费标准和活动价格参考
阿里云服务器提供2核8G、4核16G、8核32G配置,适合中小型数据库、缓存、搜索集群及企业办公等场景。收费标准包括按量付费、包月及多年付费,价格因实例规格和购买时长而异。文中列举了详细价格,如2核8G配置年付701.40元起,4核16G配置年付1291.80元起,8核32G配置年付7551.94元起。用户可根据需求选择,并通过阿里云活动页面获取实时优惠,领券购买可额外减免。
2026年阿里云服务器2核8G、4核16G、8核32G最新收费标准和活动价格参考
|
1月前
|
人工智能 JSON 搜索推荐
# AI聊天记录如何批量导出?6种主流方案详解(附Word/PDF解决方案)
本文系统介绍六种AI聊天记录导出方案:官方导出(完整备份)、浏览器插件(轻量便捷)、Markdown归档(结构化长期保存)、Obsidian/Logseq知识库(深度管理)、Pandoc批量转换(开发者高效)、DS随心转(一键办公交付),助你科学归档、高效复用AI产出。
808 0
|
3月前
|
人工智能 弹性计算 小程序
OpenClaw怎么部署?阿里云三种一键部署方案详解
OpenClaw(原Clawdbot/Moltbot)是开源AI智能体,突破问答局限,可直接操控本地设备,执行文件处理、代码编写、浏览器自动化等任务。阿里云提供轻量服务器、计算巢、无影云电脑三种一键部署方案,适配个人、企业与技术用户,零代码快速启用专属AI助理。
522 1
|
5月前
|
数据采集 人工智能 前端开发
2026年:大规模为Agent构建基础设施(API、数据、环境) 这不是简单的技术迭代,而是整个产业重心的转移
今天目睹AI Agent“巨硬”私有化部署奇迹:它自主打开浏览器、登录12306、查询深圳→宜春高铁票并关闭页面!这背后是2026年AI新范式——以Cloudflare“Markdown for Agents”降本增效,MiniMax M2.5以1美元/小时实现普惠智能。AI正从“能说会写”迈向“真干实事”,基础设施革命已来。
|
6月前
|
人工智能
87%的案例学习都停留在"看热闹"——用这套AI指令把案例变成你的决策资产
87%的案例学习只停留在看热闹。分享一套案例分析AI指令,通过结构化分析框架,帮你从案例中提炼可迁移的决策模型,提升学习效率。
521 14
|
应用服务中间件 nginx
Nginx nginx: [emerg] bind() to 0.0.0.0:8083 failed (48: Address already in use)
Nginx nginx: [emerg] bind() to 0.0.0.0:8083 failed (48: Address already in use)
1017 1
|
SQL 分布式计算 安全
抓个包看下 kerberos的 pre-authentication是如何工作的 2
抓个包看下 kerberos的 pre-authentication是如何工作的
|
索引
封装vuetify3中v-time-picker组件,并解决使用时分秒类型只能在修改秒之后v-model才会同步更新的问题
封装vuetify3中v-time-picker组件,并解决使用时分秒类型只能在修改秒之后v-model才会同步更新的问题
296 2