自定义TuriX动作:Registry装饰器与动态Pydantic模型扩展桌面操作的完整教程
自定义TuriX动作Registry装饰器与动态Pydantic模型扩展桌面操作的完整教程【免费下载链接】TuriX-CUAThis is the official website for TuriX Computer-use-Agent项目地址: https://gitcode.com/gh_mirrors/tu/TuriX-CUATuriX-CUATuriX Computer-Use-Agent是一款开源的桌面自动化 AI 智能体让大模型直接上手操作你的电脑点击、输入、滚动、打开应用。它的动作系统基于Registry 装饰器与动态 Pydantic 模型构建你只需几行 Python 代码就能为 TuriX 注册一个全新的桌面动作让 AI 学会执行它原本不会的操作。本教程带你完整走一遍读懂动作注册机制 → 注册第一个自定义动作 → 利用动态 Pydantic 模型自动生成参数校验 → 运行验证。无需深入源码也能上手。一、先认识 TuriX 的动作执行链路 TuriX 采用多模型分工架构brain决策大脑、actor动作执行、planner规划、memory记忆各司其职通过 examples/config.json 自由切换模型。其中动作Action是 AI 与桌面之间的双手执行链路如下注册用controller.action()装饰器把 Python 函数登记进ActionRegistry建模系统为每个动作生成/绑定一个 Pydantic 参数模型用于校验 AI 输出的参数提示get_prompt_description()把所有动作的名称、描述、参数汇总成文字注入 planner 提示词让模型知道自己会哪些动作执行AI 输出结构化动作后execute_action()校验参数并真正调用你的函数。理解这条链路你就理解了为什么注册一个动作 给 AI 教会一个新技能。二、动作系统的三个核心文件路径导航文件职责src/controller/registry/service.pyRegistry类装饰器action()、同步函数自动转异步、动态参数模型生成src/controller/registry/views.pyActionRegistry、ActionModel、RegisteredAction数据结构src/controller/service.pyController注册全部内置动作点击、输入、滚动、打开 App 等src/controller/views.py内置动作的 Pydantic 参数模型如InputTextAction、DragActionsrc/mac/actions.pymacOS 底层操作函数left_click_pixel、type_into、press等内置动作都在 src/controller/service.py 的_register_default_actions()中注册例如左键点击像素、组合快捷键、运行 AppleScript等。三、准备工作克隆仓库与配置环境git clone https://gitcode.com/gh_mirrors/tu/TuriX-CUA cd TuriX-CUA conda create -n turix_env python3.12 conda activate turix_env pip install -r requirements.txt⚠️ macOS 用户记得在系统设置 → 隐私与安全性 → 辅助功能中授权你的终端/IDE否则动作无法执行详见 README.md。四、Step 1看懂一个内置动作是怎么注册的以 src/controller/service.py 中的输入文本动作为例关键就三行self.registry.action( Type, # 给 LLM 看的动作描述越清晰调用越准 param_modelInputTextAction) # Pydantic 参数模型 async def input_text(text: str): ... return ActionResult(extracted_contentSuccessfully input text)其中 src/controller/views.py 里的InputTextAction就是text: str一个字段的 Pydantic 模型——这就是参数校验的来源。五、Step 2注册你的第一个自定义动作在 examples/main.py 中创建Controller后即可用controller.action()装饰器注册新动作它是Registry.action()的直接代理见 src/controller/service.pyfrom src.controller.service import Controller, NoParamsAction from src.agent.views import ActionResult controller Controller() controller.action(Open TextEdit and type a custom greeting) async def open_textedit(greeting: str): import subprocess script ftell application TextEdit to activate subprocess.run([osascript, -e, script], checkTrue) return ActionResult(extracted_contentfOpened TextEdit: {greeting})然后把controller传入Agent(...)参考 examples/main.py 的controllercontroller参数。几个自动发生的魔法源码src/controller/registry/service.py✨没写param_model系统会读取函数签名的类型注解用 Pydantic 的create_model()动态生成参数模型_create_param_modelsrc/controller/registry/service.py——所以greeting: str会自动变成greeting: str字段写了同步函数会被asyncio.to_thread自动包装成异步不阻塞事件循环想隐藏某个内置动作构造时传Controller(exclude_actions[Click])即可跳过注册。六、Step 3动态 Pydantic 模型到底做了什么Registry.create_action_model()src/controller/registry/service.py会把所有已注册动作动态拼成一个大模型例如ActionModel( open_textedit Optional[Open_texteditParameters], # 你的自定义动作 Click Optional[LeftClickPixel], done Optional[NoParamsAction], ... )执行时execute_action()src/controller/registry/service.py会用action.param_model(**params)先校验参数再调用函数类型错误会在到达你的函数前就被拦截AI 也会收到明确的报错记忆从而自我修正。 想让参数带说明在 Pydantic 模型字段上用Field(..., description...)描述会一并进入提示词示例见 src/controller/views.py。七、避坑清单让 AI 准确调用你的新动作 ✅常见坑正确做法描述写得含糊描述是 LLM 判断何时调用的唯一依据写清做什么 何时用参考 src/agent/planner_service.py 中注入的action_descriptions忘记返回值统一返回ActionResult(extracted_content...)出错的分支同时填error字段可让智能体记住并换策略坐标用错类型内置动作统一使用归一化坐标position: List[float]src/controller/views.py自定义动作保持一致需要 UI 树上下文注册时加requires_mac_builderTrue函数末尾参数声明mac_tree_builder即可接收见 src/controller/service.py八、运行验证一句话让 AI 用上你的新动作修改 examples/config.json 中的任务例如{ agent: { task: 使用 open_textedit 动作向 TextEdit 发送一句问候 } }然后启动python examples/main.py观察日志中 actor 模型输出的结构化动作里出现open_textedit即代表自定义动作已被 AI 正确识别并执行 九、小结Registry 装饰器controller.action(description, param_model...)一行完成动作注册同步/异步都支持动态 Pydantic 模型不传参数模型时从函数类型注解自动生成传了则严格校验提示词自动注入动作描述与参数会汇入 planner 提示词描述质量直接决定调用准确率想继续深挖可看 src/controller/registry/ 的完整实现以及 src/agent/service.py 中create_action_model()的接入位置。给 TuriX 教会第一个新技能只需十几行代码——接下来让它操作你的桌面吧【免费下载链接】TuriX-CUAThis is the official website for TuriX Computer-use-Agent项目地址: https://gitcode.com/gh_mirrors/tu/TuriX-CUA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Windows 远程连接方案(快速助手、远程协助、远程桌面 RDP)对比与配置

Windows 远程连接方案(快速助手、远程协助、远程桌面 RDP)对比与配置

Windows 远程连接方案对比与配置 1. 方案定位 Windows 平台常见的远程连接方式可分为三类: 快速助手:临时远程协助,适合帮助他人排查问题。远程协助:传统邀请式远程协助,适合被控端主动请求帮助。远程桌面 RDP&…

2026/10/1 20:00:29 阅读更多 →
Spring Boot整合MyBatis与PostgreSQL实战:避坑指南与核心配置

Spring Boot整合MyBatis与PostgreSQL实战:避坑指南与核心配置

最近重构一个内部资产管理系统时,我把技术栈从 MySQL JPA 换成了 PostgreSQL MyBatis。这套组合看起来不算新,但真正落地的时候,坑比想象中多:驱动版本、JSONB 映射、动态 SQL、批量插入、参数大小写、时区问题,每一…

2026/10/1 20:00:29 阅读更多 →
curl报77 error setting certificate verify locations:CA文件路径、权限与格式排查

curl报77 error setting certificate verify locations:CA文件路径、权限与格式排查

同一条HTTPS命令,终端能访问,放进定时任务却报 curl: (77) error setting certificate verify locations。别急着给网站换证书:这次先检查的是客户端用来验证对端的CA材料。下面以Linux上的OpenSSL后端curl为例,把路径、权限、格式…

2026/9/30 17:36:38 阅读更多 →

最新新闻

大型央国企都适合用什么物资周转材管理系统?基于RFID技术下成功落地是数字化解决方案参考!

大型央国企都适合用什么物资周转材管理系统?基于RFID技术下成功落地是数字化解决方案参考!

在建筑施工领域,周转材也被称为租赁物资、周转料,涵盖脚手架、箱式板房、钢模板、H型钢、临时电缆、项目办公及生活设施等多类物资,是工程项目生产必不可少的资产。 对于集团型建工企业,自有周转材规模庞大,分布在各个…

2026/10/1 20:07:32 阅读更多 →
SpringBoot+Vue+MyBatis+MySQL智能健身房系统实战

SpringBoot+Vue+MyBatis+MySQL智能健身房系统实战

虽然标题写着“智能健身房管理系统”,但真正做过这类项目的朋友都清楚,它背后核心的SpringBoot Vue MyBatis MySQL这套技术栈,才是撑起整个业务的骨架。市面上大部分全栈练手或商用项目,本质上跑的都是这套组合:微服…

2026/10/1 20:07:32 阅读更多 →
技术架构稳底盘:从约束定义到故障设计的关键原则与实战

技术架构稳底盘:从约束定义到故障设计的关键原则与实战

做技术架构这些年,我越来越觉得它像一栋房子的地基和管线——住进去的人看不见,但下水道堵没堵、电路稳不稳、楼上楼下会不会串味,全看这一层。市面上聊架构的文章很多,天天有人讲微服务、讲分布式、讲云原生,但真正把…

2026/10/1 20:07:32 阅读更多 →
平稳随机过程与遍历性:时间平均、自相关与功率谱估计的工程指南

平稳随机过程与遍历性:时间平均、自相关与功率谱估计的工程指南

搞信号处理和通信系统建模的人,基本都绕不开两个词:平稳随机过程和遍历性。我记得读研那会儿,第一次在教材第八章碰到“遍历性”这一节,感觉像在看天书:前面刚把严平稳、宽平稳捋清楚,突然又冒出来一个“时…

2026/10/1 20:07:32 阅读更多 →
AI数据中心算力与电力协同管控:层级化架构与全域风险防控实践

AI数据中心算力与电力协同管控:层级化架构与全域风险防控实践

1. 为什么“算力”和“电力”必须放在一张桌子上谈如果你最近一年在跟AI数据中心的项目,大概率会有一种强烈的撕裂感:做算力调度的团队盯着GPU利用率、训练任务排队时长、集群通信带宽;做基础设施的团队盯着市电容量、柴发响应、UPS续航、PUE…

2026/10/1 20:07:32 阅读更多 →
Mongoose常用语法速查:从Schema到CRUD的TaoToken实战笔记

Mongoose常用语法速查:从Schema到CRUD的TaoToken实战笔记

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 20:06:32 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →