免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Agent Zero _office 插件 Impress 演示文稿技能:ODP/PPTX 幻灯片制品的创建与编辑实战

Agent Zero _office 插件 Impress 演示文稿技能:ODP/PPTX 幻灯片制品的创建与编辑实战 Agent Zero _office 插件 Impress 演示文稿技能:ODP/PPTX 幻灯片制品的创建与编辑实战【免费下载链接】agent-zeroAgent Zero AI framework项目地址: https://gitcode.com/GitHub_Trending/ag/agent-zero本篇以 Agent Zero 中 _office 插件的 impress-presentations 技能定义 为主体,讲清楚 Agent Zero 如何按照ODF 优先原则,通过office_artifact工具创建、编辑 LibreOffice Impress ODP 演示文稿(以及仅在需要兼容时才产出 PPTX),并在完成后不擅自打开文档界面。读完本文,你可以掌握幻灯片制品的完整工具调用范式、ODP 包在底层如何被生成与校验、六种编辑操作的语义,以及桌面 GUI(Desktop/Impress)的使用边界。技能定位与触发机制impress-presentations 技能 是 _office 插件自带的四个格式专项技能之一(另三个是 writer-documents、calc-spreadsheets 和总纲 office-artifacts),其 YAML 头部声明了技能元信息:name: impress-presentations,version: 1.1.0,作者为 Agent Zero Core Team;triggers覆盖了 Impress、ODP、OpenDocument Presentation、PowerPoint、PPTX、presentation、slide deck、slides、deck 等关键词——用户话语中出现这些词时,该技能即会被匹配加载;allowed_tools仅声明office_artifact,即本技能的全部落地动作都收敛到这一个工具上。总纲技能 office-artifacts 明确了一个格式分派规则:对非平凡的演示文稿类工作,应加载与目标格式匹配的技能——impress-presentations for Impress/ODP decks and PPTX compatibility decks。换言之,本技能是格式专项操作手册,而总纲技能提供跨格式的通用调用序列(先 create/open → 再 read → 后 edit → 必要时 version_history/restore_version)。核心格式策略:ODP 是默认,PPTX 仅是兼容出口技能正文第一条就给出了格式选择铁律:Use ODP when the user asks for a presentation, slides, a deck, or an Impress artifact. Use PPTX only when the user asks for PowerPoint/PPTX compatibility or provides an existing.pptx.用户只要提出演示文稿/幻灯片/Impress 制品的需求,默认一律产出 ODP;只有当用户显式要求 PowerPoint/PPTX 兼容,或提供了一个已有的.pptx文件时,才使用 PPTX。PPTX 的定位是兼容性导出/请求,而不是默认演示格式(技能Practical rules一节第三条同样强调了这一点)。这不是单纯的文档约定,工具实现 在代码层面同样落实了该策略:创建制品时,_default_office_format()会在未显式指定format时,按kind自动推断默认格式——kind取值为presentation、slides、deck、impress时默认落到odp,spreadsheet/sheet/calc落到ods,其余落到odt;随后_ensure_office_format()会校验格式必须属于受支持的 Office 扩展名集合,否则抛出Office formats only错误。也就是说,即使 Agent 漏写format字段,kind: presentation也一定得到 ODP,格式策略在工具层被二次兜底。文档 UI 与 Desktop 的用户所有权边界技能第二条规定了行为边界,这一点在 Agent 与用户交互时非常关键:文档 UI 和 Desktop 界面属于用户所有(user-owned)。创建或编辑 ODP/PPTX 时,必须保存文件,但不得自动打开文档模态框或 Desktop 界面;Desktop/Impress 只用于三种场景:用户显式提出 GUI 请求、需要可视化排版打磨、或做最终的视觉确认;回复中不得写 Open document、Download file 这类伪造 UI 操作标签(faux UI action labels),除非用户明确询问 UI 行为,也不要解释画布为何没有自动打开。在工具代码中,这条边界对应 office_artifact.py 的两个意图参数open_in_canvas与open_in_desktop(兼容别名open_canvas/open_document、open_desktop/desktop,经_truthy()归一化为布尔值)。工具提示词 agent.system.tool.office_artifact.md 进一步说明:仅当用户明确要求打开时才使用open动作或这两个true标志;而已打开的 Desktop/Office 界面在工具保存结果后会自动刷新与自动打开 UI是两件不同的事。此外,直接编辑后 artifact_editor.py 的_refresh_open_office_sessions()会尝试刷新已打开的桌面文档会话,且刷新失败被静默吞掉——保证没有任何 Office 界面打开时,编辑动作也不会失败。工作流:创建幻灯片技能给出的创建示例:{ tool_name: office_artifact, tool_args: { action: create, kind: presentation, title: Roadmap, format: odp, content: Title Slide\n\n---\n\nNext Steps } }各参数含义(对照 OfficeArtifact.execute 签名):参数说明actioncreate,默认缺省时按status处理(注意:不传 action 不会创建文件)kindpresentation,决定缺省格式为 odp(见上文格式策略)title演示文稿标题,默认 Untitledformatodp;缺省时按 kind 推断content幻灯片文本;用---分隔行做文本转幻灯片切分open_in_canvas/open_in_desktop可选 UI 意图标志,默认 false,遵循用户所有权边界创建链路:从文本到 ODP 字节包create分支(office_artifact.py)的完整链路是:_default_office_format()确定最终格式;document_store.create_document()生成文档。对 odp,document_store.py 的odp_bytes()先用pptx_writer.slides_from_text(title, content)把content按---分隔行解析成幻灯片列表,再交给odp_bytes_from_slides()组装字节;由于扩展名属于{odt, ods, odp},工具随后调用 libreoffice.validate_odf() 做包校验,校验失败则直接返回create failed错误(不抛异常,break_loopFalse让 Agent 有机会补救);成功则返回包含file_id、path、extension、version等字段的文档元信息(_additional())。ODP 包结构细节odp_bytes_from_slides()最终通过_odf_package()输出 ODF ZIP 包,其中 odf_zip_bytes() 体现了 ODF 规范的硬性要求:第一个 ZIP 条目必须是mimetype,内容为application/vnd.oasis.opendocument.presentation,且以不压缩方式写入(zipfile.ZIP_STORED);其余条目(content.xml、META-INF/manifest.xml等)用 DEFLATE 压缩写入。校验器 validate_odf() 与之一一对应:它打开 ZIP 后检查 ①mimetype是否为第一个条目且未压缩,② 其内容是否与扩展名期望的 MIME 匹配(期望值来自 libreoffice.py 的 ODF_MIMETYPES 字典),③content.xml与META-INF/manifest.xml是否存在。任何一条不满足都会给出明确错误,例如 ODF mimetype must be the first uncompressed package entry.——这意味着即使不安装 LibreOffice,ODP 产物的包结构正确性也能被离线验证。每张幻灯片的版面由 _odp_page() 生成:标题区是presentation:classtitle的draw:frame(24cm × 2cm,位于 1.5cm/1cm 处),正文区是presentation:classoutline的draw:frame(24cm × 12cm,位于 1.5cm/3.5cm 处)。从源码结构看,这是简洁的固定双文本框版式,保证生成的 ODP 在 Impress 中打开即可见标题与要点列表。工作流:编辑幻灯片技能给出的编辑示例:{ tool_name: office_artifact, tool_args: { action: edit, file_id: abc123, operation: set_slides, slides: [ {title: Now, bullets: [Stabilize]}, {title: Next, bullets: [Polish]} ] } }slides的约定格式为[{title: 标题, bullets: [要点1, ...]}],表示整体替换为这份结构化幻灯片列表。file_id可来自上下文文档清单或先前工具输出;若只有路径,可改用path参数(_document_from_input()会先把路径注册进文档库)。ODP 支持的六种编辑操作总纲技能 声明 ODP 与 PPTX 共同支持的操作为:set_slides、append_slide、replace_text、delete_text。落到 ODP 实现,artifact_editor.py 的_edit_odp()接受的合法集合是{set_text, set_slides, append_text, append_slide, replace_text, delete_text},各操作语义如下:set_slides/set_text:整体重写。_normalize_slides()接受slides数组,或在无slides时接受以---分隔的content文本,随后用odp_bytes_from_slides()重建整个文件,返回slides_written计数;append_slide/append_text:先用_odp_text_slides()解析现有字节中的全部幻灯片,再把新增内容扩展进去、整体重建,适合在现有 deck 末尾追加几页;replace_text:要求find参数(缺失即报 find is required for replace_text),把find依次在各幻灯片的title与bullets中替换为replace,并返回replacements计数;可选count参数限制全局替换次数——实现上通过_replace_limited()按剩余配额逐页递减,达到配额后停止;delete_text:等价于replace_text且替换串为空字符串。若某次replace_text没有命中任何文本(count 0),函数直接返回原始字节并附{replacements: 0},外层edit_artifact()检测到字节未变化时会跳过版本写入——即空编辑不会产生新版本。操作名归一化与缺省推断值得注意的是 normalize_operation() 的容错层:它维护一张别名表,例如add_slide → append_slide、set_deck → set_slides、append → append_text、write/set → set_text;若连operation都缺省,则按给了什么参数就推断什么操作的优先级链兜底——有slides推断set_slides,有find推断replace_text,有content推断set_text。这对 LLM 生成工具调用的鲁棒性很关键:Agent 哪怕写错操作名或漏写operation,只要参数形态正确,请求依然能落到正确分支。编辑完成后,edit_artifact()会通过document_store.replace_document_bytes()原子替换字节(actor 标记为office_artifact:edit),更新版本历史,并在响应中附带 4000 字符的preview。读取与检视现有 deck技能虽只展示了 create/edit 两个 JSON,但工具完整支持read、inspect、version_history、restore_version、export、status等 action(action 分派):read对 ODP 走_read_odp():解析幻灯片文本,返回slide_count与最多 40 页的{index, title, lines}结构,整体受max_chars(默认 12000)截断。总纲技能建议内容敏感的编辑前先 read,正是用它拿到当前保存态;inspect返回文档元信息(路径、扩展名、版本、最后修改时间等),不含内容;version_history/restore_version:编辑都会产生版本,可审计、可回滚,restore_version必须提供version_id;status:调用 libreoffice.collect_status(),报告运行时是否找到soffice/libreoffice可执行文件(在PATH中按此顺序探测),state 为healthy或missing,并附带 Desktop 会话状态。导出到 PPTX:LibreOffice 转换路径PPTX 仅作兼容出口在实现上对应exportaction:office_artifact.py 收到target_format(或export_format)且与当前扩展名不同时,调用 convert_document() 执行无头转换:soffice --headless --safe-mode --convert-to pptx --outdir 目录 源.odp细节包括:转换超时 45 秒(CONVERT_TIMEOUT_SECONDS);环境变量强制SAL_USE_VCLPLUGIN缺省为gen(无显示环境也可运行);输出文件名预期为原名.pptx,若该文件不存在则回退为目录中新增的第一个文件;LibreOffice 未安装时直接返回明确错误 LibreOffice is not installed in this runtime.。也就是说,创建与编辑 ODP 不需要 LibreOffice,只有格式互转(ODP↔PPTX)才依赖运行时中的 soffice——可以先用statusaction 探测这一前提。实践规则汇总技能结尾的四条 Practical rules,结合源码后可以这样落地:结构化 deck 用slides数组,简单文本转幻灯片用---分隔。两者最终都汇入_normalize_slides()/slides_from_text()的同一条解析路径,选择哪种取决于内容复杂度——多页带要点的正式 deck 用slides,单段口播式文本用---;保持幻灯片文字简洁、可扫读。这是内容层要求:工具只负责忠实地把标题/要点写进标题框与 outline 框,不会替你精简文案;PPTX 视为兼容性导出/请求,不是默认格式。创建时保持format: odp,需要交给 PowerPoint 用户时再走exporttarget_format: pptx;不要自动打开 Impress/Desktop。保存后的制品由用户自行通过 Open in Desktop 之类的常规 UI 入口检视或打磨,Agent 侧只有用户显式要求时才使用open/open_in_desktop: true。小结impress-presentations 技能看似简短,实则把 Agent Zero _office 插件中一条完整的演示文稿链路收敛成了可执行的 Agent 行为准则:ODF 优先的格式策略由 格式推断函数 兜底,ODP 包的生产与校验分别由 document_store 的 ODF 打包器 与 validate_odf() 保证,六种编辑操作由 _edit_odp() 落实,PPTX 互转交给 LibreOffice 无头转换,GUI 边界则由open_in_canvas/open_in_desktop参数与提示词约束共同守牢。掌握这套技能定义 工具契约 包级实现的三层结构,你就能在 Agent Zero 里可靠地让 Agent 产出、修改并交付可被 Impress 直接打开的演示文稿。【免费下载链接】agent-zeroAgent Zero AI framework项目地址: https://gitcode.com/GitHub_Trending/ag/agent-zero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表