
Latch 工作流 UI 与自动化实战指南LatchMetadata、Launch Plans、消息、结果与 Automations 全解析【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills本指南基于 latchbio-integration 技能中 ui-and-automation.md 参考文档系统讲解如何在 LatchSDK 2.76.8上把工作流界面UI当作正确性的一部分来设计从LatchMetadata的表单定义、flow布局编排到 Launch Plans 预置测试数据、任务内消息推送、结果页发布再到数据新增/定时两类自动化触发。读完本文你将能独立为一个生物信息学工作流设计出带校验规则、分层布局、样本表和预设参数的完整用户界面并安全地配置自动触发与可观测性。核心理念接口设计就是工作流正确性的一部分在 Latch 上一个工作流由两部分共同决定用户看到的形态工作流签名signature定义参数的类型LatchMetadata定义用户如何理解并填写这些值。二者缺一不可。签名只回答这个参数是什么类型元数据回答这个参数在科学上意味着什么、该填什么、怎么填才合法。正如 ui-and-automation.md 开篇强调的Treat interface design as part of workflow correctness——把界面设计视为工作流正确性的一部分。一个参数类型正确但缺乏校验、缺少说明、默认值隐含科学假设的表单会让用户在不经意间提交错误分析。配套的 SKILL.md 给出两条贯穿性约束元数据参数键必须与工作流签名参数名一一对应SDK 会拒绝签名中不存在的元数据键workflow-creation.md 也复述了这一点模块导入期保持纯净——不要在 import 时触发网络调用、数据变更或密钥读取元数据对象应在导入期被安全求值。LatchMetadata定义一个完整的科学表单下面是一个完整的元数据定义示例来自 ui-and-automation.md它把Bulk RNA-seq QC工作流包装成一个结构清晰、带校验和分区的表单from latch.types.metadata import ( LatchAuthor, LatchMetadata, LatchParameter, LatchRule, Params, Section, Spoiler, Text, ) metadata LatchMetadata( display_nameBulk RNA-seq QC, authorLatchAuthor( nameWorkflow Team, githubhttps://github.com/example, ), documentationhttps://example.org/docs/rnaseq-qc, repositoryhttps://github.com/example/rnaseq-qc, licenseMIT, tags[RNA-seq, QC], parameters{ reads: LatchParameter( display_nameReads, descriptionFASTQ input files., samplesheetTrue, ), minimum_quality: LatchParameter( display_nameMinimum quality, descriptionMinimum accepted Phred score., rules[ LatchRule( regexr^(?:[0-9]|[1-3][0-9]|40)$, messageChoose an integer from 0 through 40., ) ], ), output_directory: LatchParameter( display_nameOutput directory, descriptionDestination for reports and processed outputs., outputTrue, ), }, flow[ Section( Inputs, Text(Select samples and input reads.), Params(reads), ), Spoiler( Advanced quality settings, Params(minimum_quality), ), Section( Outputs, Params(output_directory), ), ], )关键字段语义如下字段用途display_name/description呈现给用户的科学含义说明samplesheetTrue将参数渲染为表格样本表输入配合 dataclass 承载结构化行数据rules[LatchRule(regex..., message...)]对输入做正则语法校验message是校验失败时的提示outputTrue标记该参数是输出目的地与LatchOutputFile/LatchOutputDir类型呼应hidden隐藏很少改动的值注意是隐藏不是安全见下文参数指南allowed_tables限制 Registry 导入时允许的表batch_table_column标记适合批量运行的高价值字段应用元数据并保持签名一致元数据通过workflow(metadata)挂接到工作流上ui-and-automation.mdfrom dataclasses import dataclass from pathlib import Path from latch import small_task, workflow from latch.types import LatchDir, LatchFile, LatchOutputDir dataclass class SampleRow: sample_name: str reads: LatchFile small_task def run_qc( reads: list[SampleRow], output_directory: LatchOutputDir, minimum_quality: int, ) - LatchDir: local_output Path(/root/rnaseq-qc) local_output.mkdir(parentsTrue, exist_okTrue) (local_output / summary.txt).write_text( fsamples{len(reads)}\nminimum_quality{minimum_quality}\n, encodingutf-8, ) remote output_directory.remote_path if remote is None: raise ValueError(output_directory must have a remote path) return LatchDir(str(local_output), remote) workflow(metadata) def rnaseq_qc( reads: list[SampleRow], output_directory: LatchOutputDir, minimum_quality: int 20, ) - LatchDir: return run_qc( readsreads, output_directoryoutput_directory, minimum_qualityminimum_quality, )注意reads是list[SampleRow]的 dataclass 列表这正是samplesheetTrue的落点用户在 Console 中以表格逐行填写样本。任务内通过output_directory.remote_path拿到远端输出路径再把本地结果目录与远端目标配对成LatchDir返回SDK 会自动上传。三条来自 ui-and-automation.md 的硬性规则元数据参数键必须匹配签名SDK 会为元数据对象中遗漏的签名参数自动补默认元数据about_page_path存在已知缺陷虽然文档仍然描述它但 SDK 2.76.8 在序列化其Path值时会失败应优先使用documentation加一段描述性工作流 docstring直到该缺陷修复不要在表单中依赖隐藏来兜底科学假设见参数指南。flow 元素从默认纵向布局到精心编排flow字段取代默认的自上而下布局让你决定参数出现的顺序、分组和可见性。当前可用的 flow 类ui-and-automation.mdSection(title, *children)带标题的分区Text(markdown)分区内的说明文本Title(markdown_title)标题文本Params(*parameter_names)按名字引用参数Spoiler(title, *children)默认折叠的高级设置分组Fork(parameter_name, display_name, **branches)按某个字符串参数分流ForkBranch(display_name, *children)Fork 的一个分支编排原则让每个可见参数都有意为之——要么明确归属某个 Section要么放进 Spoiler 表明高级选项要么经 Fork 按用户选择动态展示。Fork只能配合签名中存在且匹配的字符串参数使用from latch.types.metadata import Fork, ForkBranch, Params read_type_flow Fork( read_type, Read layout, pairedForkBranch(Paired-end, Params(read1, read2)), singleForkBranch(Single-end, Params(read1)), )这里read_type必须是工作流签名的字符串参数分支键paired/single对应其取值选择 paired 时表单展示read1、read2两个输入选择 single 时只展示read1。这种交互式分流能显著降低误填概率。参数设计指南科学语义优先ui-and-automation.md 给出了一套明确的参数设计取舍应该用display_name和description承载科学含义rules做语法校验如 Phred 分值必须是 0–40 的整数hidden隐藏极少改动的值——但它只是隐藏不是安全机制batch_table_column标记批量运行中的高价值字段samplesheetTrue处理 dataclass 支撑的表格化输入allowed_tables限制 Registry 导入范围outputTrue或LatchOutputFile/LatchOutputDir类型标记新的输出目的地。不应该用不要用表单默认值掩盖科学假设。参考基因组、链特异性strandedness、单位、算法默认值都必须显式声明而不是悄悄塞进默认值里。这一条与 SKILL.md 的Operational Safety一脉相承表单是用户与计算之间唯一的契约含糊的默认值等于把科学决策外包给了平台默认。Launch Plans一键复现的命名参数集LaunchPlan为工作流创建一组命名默认值注册后会显示在 Console 的Test Data下ui-and-automation.mdfrom latch.resources.launch_plan import LaunchPlan from latch.types import LatchFile, LatchOutputDir LaunchPlan( rnaseq_qc, Small public example, { reads: [ SampleRow( sample_nameexample, readsLatchFile(latch:///test-data/example.fastq.gz), ) ], minimum_quality: 20, output_directory: LatchOutputDir( latch:///test-results/rnaseq-qc ), }, descriptionSmall input for interface and integration testing., )构造器签名LaunchPlan( workflow, name, default_params, *, descriptionNone, )使用规则在模块作用域定义 launch plan注册阶段才能发现它们参数键和值必须与工作流签名匹配launch plan 名称不能包含.使用小型公开数据或工作区安全测试数据避免使用会被并发用户共享的输出目的地绝不把密钥放进 launch plan。Launch plan 不只是演示工具它还是 CI 回归的抓手。在 operations-and-debugging.md 的发布清单中运行一个代表性 launch plan、确认结果链接与元数据是--mark-as-release之前的必做步骤而latch_cli.services.launch.launch_v2.launch_from_launch_plan允许 Python 侧直接按 launch plan 名称启动执行该符号在 inspect_latch_sdk.py 的execution组中可被验证。执行消息面向用户的信号而不是原始日志message()用于向用户界面发送简短、可操作的信号不要把它当成日志通道ui-and-automation.mdfrom latch import message, small_task small_task def validate_columns(columns: list[str]) - bool: required {sample_id, condition} missing sorted(required.difference(columns)) if missing: message( typerror, data{ title: Missing required columns, body: , .join(missing), }, ) raise ValueError(fmissing columns: {missing}) message( typinfo, data{ title: Input validated, body: Required sample columns are present., }, ) return True协议约束合法的消息类型只有三种info、warning、errordata字典必须包含title和body不要在消息中放密钥、签名 URL、患者标识符或过量的原始数据。这与 operations-and-debugging.md 的生产可观测性三层模型一致message()负责可操作告警与错误结果链接负责高价值输出结构化日志负责详细诊断——三者各司其职且一律不得记录密钥或签名 URL。结果页把最有价值的产物放到最显眼的位置add_execution_results让你把关键输出路径发布到执行结果页提高可发现性ui-and-automation.mdfrom latch import small_task from latch.executions import add_execution_results from latch.types import LatchOutputDir small_task def publish_results(output_directory: LatchOutputDir) - None: remote output_directory.remote_path if remote is None: raise ValueError(output directory must have a remote path) add_execution_results( [ remote, f{remote.rstrip(/)}/multiqc_report.html, ] )要点结果链接只是增强可发现性——它不会替你上传缺失的输出也不会验证科学有效性对于 Nextflow 参数NextflowParameter.results_paths可以发布输出目录下的指定子路径。结合 operations-and-debugging.md 的监控章节Console 执行监控会呈现执行状态、图与任务节点状态、输入输出、日志、溯源与结果文件、资源监控结果页就是其中结果文件面向用户的门面。把 MultiQC 报告、关键统计表这类高频查看产物提前到结果页顶部能显著缩短用户的验证闭环。Automations让工作流在数据到达时自动跑起来Automations 在 Latch Console 中配置支持两类触发器ui-and-automation.md数据新增触发data-added监控的 Latch Data 目录下任意深度新增了子项定时触发interval按固定时间间隔重复执行。数据新增触发的工作流契约自动化工作流必须恰好有一个参数from latch import small_task, workflow from latch.types import LatchDir small_task def process_new_data(input_directory: LatchDir) - None: children list(input_directory.iterdir()) print(fobserved {len(children)} children) workflow def automation_workflow(input_directory: LatchDir) - None: process_new_data(input_directoryinput_directory)触发语义最后一次新增之后经过配置的 follow-up/update 等待期才触发。仅修改或删除文件不会触发运行——这要求监控目录里放的是只增不改的输入。定时触发的工作流契约定时工作流不能有任何参数from latch import small_task, workflow small_task def run_scheduled_check() - None: print(scheduled check started) workflow def scheduled_workflow() - None: run_scheduled_check()自动化安全清单自动化会把有人点运行变成平台自动运行因此必须把代价与幂等性纳入设计成本自动化可能产生周期性付费计算。启用前审视触发频率、map 宽度与最坏情况成本SKILL.md 同样要求启动付费计算前先获得确认幂等处理逻辑必须可重复执行用 Registry 记录或持久标记防止重复处理——这正是 registry.md 中Account/Project/Table/Record事务化更新的典型场景密钥不要硬编码密钥任务内用get_secret()获取先手动后自动启用触发器前先手动跑通工作流防风暴起始 debounce/update 周期要足够长避免 launch storm契约冻结修改工作流契约前先停用自动化目录隔离确保监控目录不包含自动化自身的输出否则新增输出会再次触发自身形成循环。配套验证工具以安装的 SDK 为准ui-and-automation.md 中所有代码针对Latch SDK 2.76.8Python 3.9–3.12。使用任何版本敏感符号前建议用技能自带的 inspect_latch_sdk.py 对当前安装的 SDK 做本地内省——它只做本地 import不联网、不鉴权uv run --no-project --python 3.12 --with latch2.76.8 \ python scripts/inspect_latch_sdk.py # JSON 输出便于自动化对比 uv run --no-project --python 3.12 --with latch2.76.8 \ python scripts/inspect_latch_sdk.py --json该脚本会逐一检查latch.types.metadata.LatchMetadata、latch.types.metadata.LatchParameter、latch.resources.launch_plan.LaunchPlan见 inspect_latch_sdk.py 的metadata组以及Execution的poll/wait/abort方法是否存在、签名是否变化--strict模式下核心符号缺失时以非零码退出适合接进 CI。这也是官方资料与本地事实冲突时的仲裁方式以安装包及其 changelog 为准。参考文档速查本指南是 latchbio-integration 技能UI 与自动化参考文档的展开版。需要更完整的上下文时可按需阅读同一技能下的其他参考workflow-creation.md任务、工作流、map_task、条件节点、缓存与超时——UI 背后的图编排基础operations-and-debugging.md注册、staging、latch develop、程序化执行与监控——发布前验证 UI 与 launch plan 的配套流程registry.mdRegistry 对象模型与事务化更新——自动化幂等标记与allowed_tables的落点data-management.mdLPath、LatchFile/LatchDir与latch:///路径语义——launch plan 默认值中文件参数的来源resource-configuration.mdCPU/内存/GPU 配置——评估自动化最坏情况成本的依据latch-mcp.md通过 MCP 交互式启动与监控——自动化之外的人工操作通道官方来源方面原文档列出的 UI 定义LatchMetadata、Launch Plans、Messages、Results、Automation 概览、数据新增触发与定时触发示例等主题文档可在 Latch Wiki 的对应工作流章节检索获取并以当前安装的 SDK 与 changelog 为准核对版本差异。【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考