mcpField
U
uipath-api-workflow

uipath-api-workflow

github.com/uipath开发17554 次安装今天更新
代码仓库

关于 uipath-api-workflow

用于创建、编辑、运行、验证和打包 API Workflow 的 UiPath 技能,工作流采用 CNCF Serverless Workflow DSL 1.0.0 和 UiPath 扩展。还涵盖连接器活动、触发器,以及通过 Solutions 发布。

主要功能

  1. 01创建和编辑工作流 JSON
  2. 02运行并验证工作流
  3. 03构建和打包项目
  4. 04发现连接器活动
  5. 05配置事件触发器

适用场景

  1. 01使用 HTTP 或连接器活动构建工作流
  2. 02在本地测试工作流
  3. 03通过连接器事件启动工作流

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/uipath/skills --skill uipath-api-workflow

安装后在 Claude Code 中输入/uipath-api-workflow确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/templates/
api-workflow-template.json
conditional-workflow-example.json
connector-call-example.json
file-base64-roundtrip-example.json
loop-aggregation-example.json
nested-control-flow-example.json
solution-connection-resource-template.json
trigger-workflow-template.json
vendor-curated-call-example.json
references/
cli-reference.md
connector-activity-discovery.md
control-flow-patterns.md
expressions-and-context.md
files-and-base64.md
http-retry-config.md
operating-published-workflows.md
task-types.md
testing-and-evals.md
trigger-authoring-guide.md
troubleshooting.md
workflow-file-format.md

详细介绍

UiPath API Workflow 助手

构建、运行和发布 UiPath API 工作流:符合 CNCF Serverless Workflow DSL 1.0.0 并包含 UiPath 活动扩展的 JSON。工作流通过 @uipath/api-workflow-executor 和 uip api-workflow run 运行,并通过 uip solution pack 打包为 Type: "Api" 项目。

TDD 闸门——请先阅读(规则 22)。 对于创建或编辑请求,请检查 Workflow.json 同级的 <project>/evals/,不要检查工作区或解决方案根目录。如果该目录不存在,则关闭 Evaluations:不要询问测试或循环模式,照常编写。如果该目录存在,则先暂停编写,并询问是保留/更改现有行,还是添加空测试;还要询问是运行/重试直到全部通过,还是只编写一次。得到这两个回答后,声明架构,先编写/更新 evals,然后再编写工作流。用户要求不提问时,只跳过这些问题,不代表已同意运行时操作;仅在用户请求时运行各行测试。之后如果行为发生变化,需询问是否应更改受影响的预期结果。

何时使用此技能

用于创建/编辑 API 工作流 JSON,以及处理 Sequence、Assign、JavaScript、Log Message、If、ForEach、DoWhile、Break、TryCatch、Wait、Response、HTTP Request 和连接器活动。对于 Studio Web 连接器工作流和项目 evals/ 布局,请参考连接器和测试相关文档。

  • 本地运行、验证、构建/打包、发布

  • 用户想在 API 工作流中处理文件——接收文件输入、将文件作为 base64 发送到 API、将 base64 负载转换回文件,或询问 JobAttachment、$helpers.file、serializeData()、--input-file / --output-dir。请参阅 references/files-and-base64.md

  • 从连接器事件启动工作流(点击 Slack 按钮、新建 Outlook 日历条目),或检查/更改现有触发器(call: "UiPath.IntSvcEvent")。请参阅 references/trigger-authoring-guide.md

  • 操作已发布的工作流

不要将此技能用于 .flow Maestro 流程(uipath-maestro-flow)、.xaml 或代码化 RPA(uipath-rpa)、代码化 Agent(uipath-agents)或代码化 Web 应用(uipath-coded-apps)。API 工作流 evals 仅适用于与 Workflow.json 同级的 evals/,并使用 evals/<scope>/eval-sets/;evals/eval-sets/ 用于低代码 Agent,Flow evals 用于 uipath-maestro-flow。

核心原则

  1. 构建前先处理需要判断的分支。 如果连接不可用、没有精选活动、需要使用未记录的 HTTP 后备方案、缺少假定的输入,或存在结构不同的可行工作流,则只进行共通的探索,然后停下并说明权衡及建议。不要构建所有分支。机械性选择无需升级处理。

  2. 先了解,再编写。 编辑前先阅读现有工作流;创建前先阅读相关模板。

  3. 从最小实现开始,逐步迭代至正确。 一次添加一个活动。每次添加后使用 --no-auth --output json 运行。修复出错之处,然后重复。

  4. 运行前先验证。 uip api-workflow validate 是自主/离线操作。run 是运行时验证,可能访问 HTTP 或连接,并且需要获得同意。

  5. 按类别修复: 结构 > 表达式 > 活动配置 > 逻辑。

关键规则

  1. 工作流 JSON。 顶层包含 document(其 dsl: "1.0.0")、evaluate(其 language: "javascript" 和 mode: "strict"),以及包含一个根序列的 do。根序列名称可以不同;请阅读文件。请参阅 references/workflow-file-format.md。

  2. WorkflowStart。 它是根序列中的第一个活动,会将变量默认值填充到 $context.variables,将输入转发到 $input,且不得删除、重命名或修改。只有它使用 isTransparent: true。

  3. 活动对象和键。 do 数组中的每个活动都是一个单键对象。键必须全局唯一,包括 #Wrapper、#Then、#Else 和 #Body 等包装器后缀。

  4. 导出。 除 Log Message 外,每个活动都应导出输出。Assign 使用 { ...$context, variables: { ...$context.variables, ...$output } };其他活动使用 { ...$context, outputs: { ...$context?.outputs, "<ActivityKey>": $output } }。请参阅 references/expressions-and-context.md。

  5. 字面量表达式。 在 Assign set、Response、If when 和变量上下文中,字符串字面量必须写成 "${'literal'}" 这样的表达式,因为 Studio Web 保存时会将裸写的 "literal" 改写为 "${literal}",导致运行时失败;数字、布尔值和引用无需包装。Connector 的 bodyParameters、queryParameters 和 pathParameters 则使用裸字面量;引用仍使用表达式。请参阅 references/connector-activity-discovery.md 和 references/troubleshooting.md。

  6. Assign。 每个 Assign 只设置一个变量。Studio Web 会折叠包含多个键的 set;请使用连续的 Assign 活动,并通过变量导出合并每个单键。

  7. If。 使用包含 If_N、If_N#Then 和 If_N#Else 的 If_N#Wrapper。两个分支都以 then: "exit" 结束;when 使用 ${...} 包装。请参阅 references/control-flow-patterns.md。

  8. 循环。 ForEach 和 DoWhile 都需要 #Body。ForEach 使用带索引的累积方式,并在迭代 0 时重置;DoWhile 使用简单累积方式。each 和 at 是普通名称,不是表达式。

  9. DoWhile。 for.in 始终为 "${ [1] }";重复执行由 doWhile 控制。循环体必须更新条件变量,否则循环可能无限执行。

  10. 嵌套循环。 为每个循环使用不同的迭代器名称和索引名称。

  11. 循环/catch 绑定。 声明 for.each、for.at 和 catch.as 时不要加 $,但在表达式/脚本中引用时要加 $:"row" 绑定 $row,"idx" 绑定 $idx,"err" 绑定 $err。省略 $ 会导致名称未定义错误。

  12. Break。 它只退出最内层循环,且仅在 #Body 内有效。将其放在 If 内;break 必须是字符串 "true",并使用 then: "exit" 和 set: "${$input}"。要退出嵌套循环,请设置一个标志,并在外层循环中检查该标志。请参阅 references/control-flow-patterns.md。

  13. 工作流输入。 使用 $workflow.input.<name>;在非首个活动中,切勿使用 $input.<name>;$input 是当前任务输入,可能是先前活动的输出。

  14. JavaScript。 脚本将 $context、$workflow 和 $input 作为全局变量读取,并且必须返回一个值。保留标准的 Studio Web run.script.arguments 框架:"${{ \"$context\": $context, \"$workflow\": $workflow, \"$input\": $input }}";运行时会忽略它。记录日志时使用 Log Message,切勿在脚本中使用 console.*;其代码必须严格为 console.log|warn|error(<message>),不得包含 return、export 或结尾的 ;。请参阅 references/task-types.md。

  15. Response。 markJobAsFailed 与 response 同级。始终使用 then: "end";then: "exit" 用于分支/循环。对象响应使用一个表达式,例如 "${{ key: $context.variables.value }}",而不是分别插值各个字段。单个值可以使用 "${$context.outputs.Activity}" 或 "${'done'}"。${ { ... } } 和 ${{ ... }} 都有效;请保持一致。切勿混用:${{ { ... } }} 虽能通过 validate,但运行时会因 Unexpected token '{' 而失败。

    • 以磁盘文件为准。 Studio Web 保存后,以磁盘文件为准;重新应用所需的规避方案后,再运行 uip api-workflow run --no-auth。
  16. 连接器和 HTTP 只能通过注册表生成。 运行 uip api-workflow registry resolve,然后运行 stub;切勿猜测 uiPathActivityTypeId、metadata.configuration、活动类型、端点、SlotKey 或 ExportBucketKey;原样使用 stub 输出。

  • 关键词 resolve 未匹配到结果,并不能证明没有精选活动,因为它会对令牌进行 AND 匹配。使用 uip is connectors list --filter 确定产品/供应商,然后在回退前使用 uip is activities list <connector-key> 枚举活动。

  • IntSvc/供应商活动要求 uip is connections ping <uuid> 成功。如果列表为空或失败,尝试不带筛选条件的列表,然后尝试 --all-folders,并 ping 另一个匹配的连接。

  • 如果没有任何连接 ping 成功,请停止并询问用户是同意使用明确的占位符继续,还是等待修复连接。切勿擅自选择。

  • 切勿在 with.connectionId、connectionResourceId 或 HTTP URL 中使用替代哨兵值。写入前,使用真实值重新生成 stub。

  • 每次生成 stub 后,都要根据资源描述或 stub 输入检查必填字段;如有需要,使用 --inputs 重新生成 stub。

  • 连接器参数使用扁平的点分隔键和不加引号的字面值;不要使用 ${'literal'}。

  • 不要将 UiPath.Http 与供应商连接 UUID 一起使用。IntSvc 结果会被包装;读取 $context.outputs.<ExportBucketKey>.content.<field>。

  • 接受 nextPage 参数的 IntSvc 列表和搜索活动每次调用只返回一页。当 stub 的 with.method 为 GET 且 .content 是数组时,在 stub 的 with 中添加 "maximumRecordsReturned": -1(或一个正数上限),并且不要编写循环:运行时会获取各页内容,并在达到上限前将其合并到一个 .content 列表中。手动将其添加为数字字面值;stub 会省略它,--inputs 会将其丢弃,而其中的表达式不会被求值。对于其他方法,或需要单独处理每一页的情况,请循环处理活动的 .page 输出,并在 .page 不存在或 .page.hasMorePages 为 false 时停止。切勿根据原始的 elements-next-page-token 标头判断:每一页(包括最后一页)都会包含该标头。请参阅 references/connector-activity-discovery.md。

  • 在 Solutions 模式下,使用 uip api-workflow bindings sync --workflow <Workflow.json> 同步 IntSvc 绑定,并使用 uip solution resources refresh --solution-folder <path> 刷新。HTTP、非连接器和独立项目不需要执行这些操作。

  • 有关发现流程、字段格式规则、分页和 multipart,请参阅 references/connector-activity-discovery.md。

16a. 连接器事件触发器属于单独的目录,使用单独的活动结构,并且需要第二个产物。 当工作流必须由事件启动时(例如 Slack 按钮被点击、新建 Outlook 日历条目),运行 uip api-workflow registry resolve "<keyword>" --kind trigger,然后运行 registry stub——切勿手动编写。将 stub 放入且只放入一个位置:根 Sequence 的 do 数组中,紧接 WorkflowStart 之后(do[0].Sequence_1.do[1])——切勿放在 If/ForEach/TryCatch 内、其他活动之后,也不要放置第二个触发器。validate 会拒绝位置错误或多出的触发器。GenericTrigger 需要 --object-name。完整流程、筛选语法和反模式请参阅 references/trigger-authoring-guide.md。

- **每次添加或编辑触发器后都要运行 `uip api-workflow bindings sync`。** 此命令会在 `bindings_v2.json` 中写入 `EventTrigger` 条目,以便在部署时注册 Orchestrator 事件触发器。**如果不运行此命令,工作流仍可通过验证、打包、发布和部署,却永远不会触发。** 没有任何检查机制会捕获这一问题。在 Solutions 模式下,随后还要运行 `uip solution resources refresh`(规则 16)。
- **`webhooks` 触发器无法在本地无输入运行。** `uip api-workflow run` 仅会为 `polling` 重放实时事件(根据规则 21,这会产生副作用);对于任一模式,使用事件负载格式的 `--input-arguments` 都可以离线测试工作流的其余部分。

17. CLI 输入。 将 JSON 作为字符串传入:--input-arguments '{"key":"value"}';JSON 无效时以状态码 1 退出。

  1. CLI 输出。 使用 --output json 解析。成功:{ "Result": "Success", "Code": "WorkflowRun", "Data": {...} };失败:{ "Result": "Failure", "Message": "...", "Instructions": "..." },并以状态码 1 退出。

  2. 项目创建与发布。 使用 uip api-workflow init <name> 搭建项目框架;不要手动拼装项目文件。项目命令包括 build <projectDir> 和 pack <projectDir> <outputDir>。使用 uip solution pack 和 uip solution publish;不存在 uip api-workflow publish。解决方案类型为 "Api"。

19a. 初始化结构与注册。 在解决方案目录中运行 uip api-workflow init <name> --output json。此命令会创建 project.uiproj、Workflow.json、entry-points.json 和 bindings_v2.json,并在最近的 .uipx 中注册该项目。仅在明确要求创建独立 CLI/本地项目时使用 --skip-solution-registration。始终创建完整项目,不要只创建单个工作流文件。在项目和解决方案文件夹之外(例如 /tmp 下)构建临时探测工作流,例如仅用于检查连接器数据的工作流,并在完成前将其删除;不要在解决方案中留下额外项目。不要使用解决方案项目的 add/remove 命令,也不要更改现有项目 ID。对于旧版 project.json,请初始化一个新的同级项目并将内容移入其 Workflow.json,或在原处转换;请参阅 references/troubleshooting.md。运行时成功并不能证明与 Studio Web 兼容;由 init 生成的结构才能证明。

  1. 静态验证。 在每次创建/编辑周期中,将 uip api-workflow validate <Workflow.json> --output json 作为最后一条自主执行的命令。如果 Result: "Failure",请读取 Instructions,修复其 JSON 路径所指向的活动,并重复验证,直到 Data.Status: "Valid"。优先处理语义尾部错误,而不是重复的 oneOf 噪声。

    验证可以发现格式错误的 JSON、未知类型、必填字段错误、错误的 evaluate 设置、重复/空变量以及空任务列表;但无法发现已损坏的连接、错误的资源 ID、运行时表达式错误、未包装的字面量或包含多个键的 Assign 集合——这些需要在用户同意后使用 uip api-workflow run。

  2. 运行时授权。 未经明确同意,绝不运行 uip api-workflow run。验证完成后,询问用户是跳过、使用 --no-auth 运行,还是使用身份验证运行。对于仅涉及控制流的工作流以及使用 ImplicitConnection 的 HTTP,建议使用 --no-auth;仅在确认真实副作用后,才建议对 IntSvc 进行身份验证执行。经过身份验证的调用可能会发送电子邮件、创建工单或上传文件。循环模式的授权允许使用 --no-auth 执行 eval 行,但经过身份验证的连接器运行仍需明确授权。此限制仅适用于 uip api-workflow run,不适用于 uip solution pack/publish:用户要求构建/打包/发布时,无需询问是否运行;本地运行属于单独的请求,只有用户提出时才执行。

  3. TDD 门禁。 每次创建或编辑时都检查 <project>/evals/。如果不存在,不要提供测试、创建该目录或提及循环模式。如果存在,在修改 Workflow.json 或 evals 之前暂停,并询问是要更改现有用例还是添加新用例,以及要运行/重试直至全部通过,还是只编写一次。如果已有用例,报告数量并逐一概述;如果为空,提出 2–3 个用例。得到答复后,声明 input.schema 和 output.schema,更新 evals,然后编写;仅在循环模式下运行用例,或在仅编写一次模式下交接。行为变更需要指出受影响的用例,并询问是否要更改预期结果。用户要求不要询问时,保留现有测试,且不代表授权运行。参见 references/testing-and-evals.md §3。

  4. 文件是引用,而非字节——base64 也是文件。 文件输入和输出是指向 Orchestrator blob 的 JobAttachment 引用({ ID, FullName, MimeType, Metadata? });$workflow.input.<file> 从来不是文件字节。

    • 两个活动。 两者都是由其 $helpers.file.* 调用标识的 run.script 任务(validate 会检查此调用):File to Base64 返回包含 base64 文本的新引用;Base64 to File 返回二进制引用。脚本必须且只能包含一个 return 表达式。Studio Web 会静默丢弃前置/尾随语句、第二个参数或额外的选项键;validate 只会捕获额外语句,因此额外参数或键仍可能导致活动出错。将预处理放在单独的 JavaScript 活动中。准确格式和示例参见 references/files-and-base64.md。
    • 读取结果。 使用 $context.outputs.<Key>.output。
    • 内嵌内容。 在 HTTP 请求体或 Response 字段中直接使用 <ref>.serializeData();它是延迟读取标记,因此不要存储它或在脚本逻辑中使用它。在 JSON 请求体中嵌套时,它仅适用于 base64 引用(File to Base64 的输出);嵌套二进制文件的标记或裸引用会在发送时出错。将二进制文件作为整个请求体发送,或先转换它。
    • 命名。 fileName 和 mimeType 仅适用于原始 base64 字符串。引用会保留其名称,引擎则根据字节推断类型;因此,.txt 往返转换后可能变成无扩展名。
    • 运行。 这两个 helper 都需要 Orchestrator blob 存储:

    uip api-workflow run --no-auth 会在运行前拒绝此类工作流;请在登录状态下运行(使用 uip login,不要使用 --no-auth)——但仍需获得规则 21 中的“是”。使用 --input-file <name>=<path> 传入本地文件(上传后会以 $workflow.input.<name> 形式到达),使用 --output-dir <dir> 收集返回的文件(输出中的每个引用都会新增一个 LocalPath),如果租户的 Attachments API 要求指定文件夹,则使用 --folder-key <guid>。CLI 在打印的输出中会将键转换为 PascalCase(ID → Id)。

    格式、完整示例和注意事项:references/files-and-base64.md。

工作流阶段

阶段 0:发现

检查项目目录中是否有 evals/,然后在其存在时读取 evals/<scope>/eval-sets/*.json 和评估器。编辑时,读取 Workflow.json、键、变量、架构和导出模式。创建时,按需读取 assets/templates/api-workflow-template.json、最接近的条件/循环/嵌套控制流模板,以及 references/control-flow-patterns.md。编写前应用规则 22。

阶段 1:规划

选择活动、唯一键、变量、输入、输出和嵌套结构。使用 Assign 设置变量,使用 JavaScript/JsInvoke 编写自定义逻辑,使用 Log Message 记录日志,使用 If 进行分支,使用 ForEach 遍历集合,使用 DoWhile 重复执行,使用 TryCatch 处理错误,使用 Wait 暂停,使用 Response 终止,使用 If 中的 Break 跳出循环,并使用注册表生成的 UiPath.Http 或 UiPath.IntSvc 处理 HTTP/连接器。对于文件/base64,File to Base64 会将文件(输入文件或下载的文件)编码为 base64,以便放入内联 API 正文中;Base64 to File 会将 base64 载荷转换回文件(规则 23)。只有在注册表中找不到精选操作时,才使用通用连接器活动。请阅读 references/task-types.md。

阶段 2:生成或编辑

从参考资料中复制最精简的结构。从模板创建,并将活动放在根序列的 WorkflowStart 之后。编辑时,保留既有约定,并使用足够独特的上下文。当规则 22 适用时,在 eval 行之前声明架构。骨架:

{
  "document": { "dsl": "1.0.0", "name": "...", "version": "0.0.1", "namespace": "default", "metadata": { "variables": { "schema": { "format": "json", "document": { "type": "object", "properties": {}, "title": "Variables" } } } } },
  "input": { "schema": { "format": "json", "document": { "type": "object", "properties": {}, "title": "Inputs" } } },
  "output": { "schema": { "format": "json", "document": { "type": "object", "properties": {}, "title": "Outputs" } } },
  "do": [{ "Sequence_1": { "do": [{ "WorkflowStart": {} }] } }],
  "evaluate": { "mode": "strict", "language": "javascript" }
}
阶段 3:验证,然后征得同意后运行
uip api-workflow validate ./<project>/Workflow.json --output json
uip api-workflow run ./<project>/Workflow.json [--no-auth] --output json

自主验证并修复,直到验证通过;然后在运行前询问。问题中要明确说明具体副作用(例如发送邮件、创建工单),然后等待。如果跳过运行,请提供准确的命令。

按 Structure > Expression > Activity Config > Logic 的顺序排查故障;请参阅 references/troubleshooting.md。

阶段 4:打包、发布和运行

打包需要 validate 通过(规则 20),而不需要本地运行——收到构建/打包/发布请求时,立即打包(规则 21 限制的是 run,而非 pack)。确认 init 生成的结构,然后:

uip solution pack <solutionDir> <outputDir> --name <PACKAGE_NAME> --version 1.0.0 --output json
uip solution publish <outputDir>/<package>.zip --tenant <TENANT_NAME> --output json

发布需要 uip login。打包器会检测 Type: "Api",验证并复制工作流,生成部署元数据,并在 .zip 中生成 .nupkg。部署后,通过 Orchestrator/API 触发器、作业、连接、日志和跟踪信息运行;本地 uip api-workflow 动词不再用于运行已发布的工作流。请参阅 references/operating-published-workflows.md,并在适当时将更深入的处理委托给 uipath-platform 或 uipath-troubleshoot。

快速开始(从头开始创建)

uip solution init <SolutionName> --output json
cd <SolutionName>
uip api-workflow init <ProjectName> --output json
# If <ProjectName>/evals/ exists, stop and apply rule 22; otherwise edit after WorkflowStart.
uip api-workflow validate ./<ProjectName>/Workflow.json --output json
# Ask for consent, then run if approved:
uip api-workflow run ./<ProjectName>/Workflow.json --no-auth --output json
uip solution pack . ./build --name <PackageName> --version 1.0.0 --output json
uip login
uip solution publish ./build/<package>.zip --tenant <TenantName> --output json

参考导航

文件用途
references/workflow-file-format.mdJSON 骨架、架构、变量、WorkflowStart、Studio Web 结构
references/http-retry-config.md工作流级别的 HTTP 重试/退避
references/task-types.md活动结构、必需字段、导出、常见错误
references/control-flow-patterns.md嵌套 If、循环、TryCatch、Break、分支、键唯一性
references/connector-activity-discovery.md通过 uip api-workflow registry resolve + stub 编写 HTTP Request / Gmail / Outlook / GitHub / Slack 等活动——发现流程、连接验证、字段结构规则、分页、多部分数据
references/trigger-authoring-guide.md连接器事件触发器:registry resolve --kind trigger + stub、UiPath.IntSvcEvent 结构、必需的 EventTrigger 绑定、JMESPath 过滤器、轮询与 Webhook
references/expressions-and-context.md表达式、上下文、输入、脚本、导出、严格模式
references/files-and-base64.md文件与 base64——JobAttachment 引用、File to Base64 / Base64 to File 活动(准确的 JSON、$helpers.file.*)、用于内联正文/Responses 的 serializeData()、在本地传入文件并从运行中获取文件、注意事项

| references/cli-reference.md | API 工作流、解决方案、登录、构建、打包、验证、发布 |

| references/operating-published-workflows.md | 已发布的触发器、连接、作业、日志、跟踪 |

| references/troubleshooting.md | 运行时、结构、表达式、连接器、响应、打包、发布故障 | | references/testing-and-evals.md | 评估契约、评分、原始输出、测试直至通过的流程 |

模板

反模式

  • 不要使用 call: "http";应使用注册表生成的 UiPath.Http。

  • 不要将连接器参数字面量包装为 ${'literal'}。

  • 不要交付连接或 URL 替换哨兵值。

  • 不要通过 $input.<name> 读取后续工作流输入。

  • 不要将文件输入或 File to Base64 的结果视为字符串——两者都是 JobAttachment 引用。只有在 HTTP 正文 / Response 中才能使用 <ref>.serializeData() 内联文件内容,切勿在 Assign 或脚本中这样做;并且只能在 File to Base64 输出的 JSON 正文字段中使用(在正文中嵌套 $workflow.input.document.serializeData() 会失败,并提示 "Raw bytes cannot be embedded in JSON")。请参阅规则 23。

  • 不要编写 $helpers.fileToBase64(...) / $helpers.base64ToFile(...)——这些辅助函数位于 $helpers.file. 下;validate 会拒绝该任务,运行时则会提示 is not a function。请参阅规则 23。

  • 未经同意,不要自主运行或调用需要身份验证的供应商服务。

  • 不要手动组装旧版项目、生成单独的 Workflow.json,或使用 solution 项目添加 / 移除功能。

  • 不要将运行时、打包或发布成功视为与 Studio Web 兼容的证明。

  • 不要从 PascalCase 格式的 CLI 显示数据中复制预期的 eval 输出;应根据 output.schema 和 Response 推导键,并使用原始输出作为预期值。

  • 如果存在 evals/,不要先编写内容;请遵循规则 22。如果不存在,不要创建或提供 evals。不要仅为满足过时的预期值而更改逻辑。

防止无限循环

如果命令连续两次因相同错误而失败,请先调查,不要重试。每项操作最多尝试三次,然后停止并报告已尝试的内容。

  • 身份验证 / 组织错误:请用户运行 uip login。

  • 找不到文件错误:使用 ls 验证路径。

  • 重复的结构错误:重新阅读工作流和相关参考资料。

评论

支持 Markdown