程序
智能体在相关时加载的任务专用指令
概述
程序包含针对某项具体任务的指令。每个程序都有一个触发条件,用于说明何时适用;还有内容,用于说明该怎么做。当对话符合触发条件时,智能体会加载该程序。
当智能体需要处理许多不同任务时,可使用程序。例如,客服智能体可让每个程序处理一种请求:退款、身份验证、账户恢复或连接故障排查。

程序类型
程序分为两类:
同一个智能体可以同时使用两类程序。无论类型如何,智能体都会根据触发条件选择相关程序。
智能体可以使用程序、工作流,或两者兼用。两者同时存在时,工作流中的每个节点都能使用所有程序;无法将程序限制在特定工作流节点中。大多数智能体围绕其中一种方式构建,但两者可以组合使用。
何时使用程序
每个智能体都有系统提示词。程序和工作流是在此基础上添加结构的两种方式,智能体也可以同时使用两者。根据对话可能变化的程度选择起点。
自由形式程序是默认选择。它们编写最快,读起来像文档,非技术团队也能负责维护;当对话偏离预设流程时,智能体也能恢复处理。若漏掉或调换步骤的代价很高,例如身份验证、升级处理或金融交易,请使用结构化程序。若需要两种程序都不提供的路由逻辑或逐步模型控制,请使用工作流。
管理程序
建议在控制台中编写程序。使用 CLI 或 API 以编程方式管理程序,或将其集成到部署工具中。
通过控制台创建
通过 CLI 管理
通过 API 管理
为每次对话选择程序
默认情况下,每次对话都可以使用智能体的所有程序,且只有当对话符合某个程序的触发条件后,智能体才会加载该程序。应用通常在对话开始前就掌握更多信息:用户是谁、所在地区,或来电原因。可在对话初始化客户端数据中传入程序 ID 以利用这些信息。你可以决定智能体可使用哪些程序,以及从第一轮起遵循哪些程序。
start_procedure_ids 中的程序会在用户首次发言时预先加载,因此智能体会跳过原本用于加载它的 LLM 调用。无论由智能体还是应用启动,任何活跃程序都会在每一轮保留在提示词中。对话实际从未需要的已启动程序仍会为每一轮添加内容,因此只启动对话可能会用到的程序。
两个字段都遵循以下规则:
procedure_ids中的每个 ID 都必须属于该智能体。如果所选程序调用子程序,也需包含这些子程序。start_procedure_ids中的每个 ID 都必须是自由形式程序。如果同时传入procedure_ids,每个 ID 也必须在该列表中。procedure_ids仅适用于对话开始时使用的智能体。在智能体转接后不再适用。- 已启动程序会计入限制中的 5 个活跃程序。对话历史会将每个程序记录为一次
start_procedure工具调用。
限制
- 单个程序内容最多 50,000 个字符。
- 智能体会在上下文中保留最近启动的 5 个程序。当一次对话启动了更多程序时,最早的自由形式程序的内容、内联工具和知识库文档会从提示词中移除。请让程序聚焦,并使用子程序,以便同时活跃的程序较少。
- 创建程序后无法更改其类型。如需在自由形式和结构化之间转换,请创建新程序并更新对它的所有引用。
- 程序属于单个智能体,无法跨智能体共享,也不能存储为工作区级资源。
- 复制智能体时会复制其程序,而非共享。副本会获得新的程序 ID,因此复制后智能体中的引用必须使用这些新 ID。
- 无法将程序限制在特定工作流节点中。当智能体同时拥有两者时,每个节点都可使用所有程序。
- 结构化程序无法引用知识库文档。