尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OpenHuman Presentation Agent 深度解析:基于证据生成 .pptx 演示文稿的专业子代理

OpenHuman Presentation Agent 深度解析:基于证据生成 .pptx 演示文稿的专业子代理 OpenHuman Presentation Agent 深度解析基于证据生成 .pptx 演示文稿的专业子代理【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhumanOpenHuman 是一个面向 Mac、Windows 与 Linux 的开源个人 AI 助手内置了本地优先的记忆、Agent 编排与深度研究能力。在它的多代理multi-agent编排体系中presentation_agent演示文稿代理是一个专门负责从用户提供的资料或检索到的证据生成.pptx演示文稿的专业 worker 子代理。本文将以 presentation_agent/prompt.md 为骨架结合其 agent.toml 配置、系统提示词构建器 以及底层的generate_presentation工具实现完整讲解该代理的职责边界、Grounding证据锚定契约、图片与引用校验规则、输出格式以及与之配套的工具参数与限制让你能透彻理解 OpenHuman 中从证据到演示文稿的完整调用链。一、Presentation Agent 的定位与职责1.1 角色定义presentation_agent的完整系统提示词定义在 src/openhuman/agent/registry/agents/presentation_agent/prompt.md其中第一句即给出角色定位You are the presentation specialist. Create.pptxdecks from supplied or retrieved evidence.即该代理是演示文稿专家其核心产物是.pptx格式的演示文稿文件且所有幻灯片内容必须建立在用户提供的素材或检索到的证据之上。它不负责生成图片那是image_agent的职责、不负责深度网络调研那是researcher的职责而是聚焦于把证据组织成结构化的幻灯片。1.2 配置清单agent.tomlagent.toml 给出了该代理在注册表中的完整配置配置项值含义idpresentation_agent注册表中的唯一标识display_namePresentation Agent对外展示名称delegate_namemake_presentation父代理orchestrator通过它触发的委托工具名when_to_usePresentation specialist: builds decks from supplied or retrieved evidence...触发路由描述处理 make-slides / build-a-deck / pitch-deck 类请求temperature0.2低采样温度保证输出确定性max_iterations10单次任务最多 10 轮迭代agent_tierworkerworker 层级区别于 orchestrator 的chat层omit_identitytrue跳过身份IdentitySection注入omit_memory_contextfalse保留廉价的每轮记忆召回per-turn recallomit_safety_preamblefalse保留安全前置说明omit_profiletrue跳过用户画像注入omit_memory_mdtrue不加载 MEMORY.md 长时记忆摘要[model] hintagentic模型提示为 agentic工具调用型[tools] namedgenerate_presentation、web_search_tool、web_fetch、http_request允许使用的四个工具其中关于记忆的注释非常关键该代理通过omit_memory_context false保留廉价的逐轮记忆召回用于把演示文稿锚定在先前对话上下文而深度的记忆树遍历memory-tree walk则留给 orchestrator 按需通过delegate_retrieve_memory触发避免每次建稿都做一次沉重的记忆检索。1.3 在编排体系中的位置在 orchestrator/agent.toml 的[subagents] allowlist中presentation_agent被明确登记并附有一条注解Deck specialist. Owns presentation grounding, citations, image verification, and generate_presentation warning handling.这意味着 orchestratorMaster Agent收到 帮我做一份 XX 的演示文稿 / 做 slides / 做 pitch deck 之类的请求时会在工具选择层生成一个delegate_make_presentation委托工具其名字来自delegate_name make_presentation描述来自when_to_use把整条建稿链路交给该 worker 全权负责。值得强调的是orchestrator 自己的[tools] named列表中刻意不包含generate_presentation参见 orchestrator/agent.toml 的注释因为演示文稿的 grounding、引用、图片校验策略属于presentation_agent的领域直接在 orchestrator 层暴露该工具会被测试 orchestrator_presentation_wiring.rs 所禁止——这是典型的职责下放 能力收敛设计。从注册机制看loader.rs 通过include_str!(presentation_agent/agent.toml)将配置编译进全局注册表而 prompt.rs 通过include_str!(prompt.md)把提示词作为ARCHETYPE常量加载再依次拼接用户文件、工具渲染结果与工作区信息最终生成完整系统提示词。二、Grounding证据锚定是建稿的第一原则提示词中## Grounding一节定义了演示文稿内容的事实边界这是该代理与普通内容生成最大的区别建稿前必须先建立 grounding对于事实型或主题型演示文稿在调用generate_presentation之前必须完成证据收集。可用的证据来源用户粘贴的素材、当前线程prior-thread中的素材、检索到的记忆、以及实时网页/文档证据。记忆的定位记忆只作为历史背景使用除非用户明确要求历史材料否则不得作为主要事实来源。禁止编造不得从先验知识priors中凭空捏造统计数据、引文、日期、人名或主张。豁免声明如果用户明确放弃 grounding例如要求一个空白模板或纯结构稿必须在返回结果的Evidence used使用的证据字段中明确说明。这套契约与底层工具的输入校验是一一对应的。在 types.rs 的validate_input中输入必须包含非空的title和至少一个slides条目且每张幻灯片必须满足title / body / bullets至少其一非空——纯结构稿同样需要提供最小化的结构信息而空标题、空幻灯片、空白子弹都会返回结构化InvalidInput错误让代理能够自我修正而不是得到含糊的引擎报错。从测试角度prompt_tests.rs 中的build_returns_grounding_contract用例直接断言了构建出的提示词包含 Presentation Agent、Do not invent statistics 与 image_warnings 等关键契约文本说明 grounding 与图片警告处理是作为可测试的硬性契约被固化的而非一句口号。三、图片管理只嵌入已验证内容的图片## Images一节对图片使用做了严格约束来源限定只允许附加三类图片——用户提供的、先前工具产出的如之前的图表 artifact、或经检索验证过的。禁止臆测不得仅凭文件名或预期用途声称图片内容。也就是说代理不能因为一个文件叫growth.png就说它展示了增长曲线。警告透传如果generate_presentation返回image_warnings必须原样保留到Failed tool calls失败的工具调用或Open uncertainties待确认事项中并明确告知父代理哪些图片被丢弃或跳过。在实现层面mod.rs 的resolve_images方法将坏图跳过设计为部分成功而非整体失败每张图在异步边界被逐一解析与校验MIME 嗅探、字节大小、像素尺寸失败的图片生成一条形如slide 2 image 1: ...的警告其余图片照常嵌入最终所有警告通过image_warnings字段返回给代理。这正是提示词要求向父代理报告丢弃了哪些图片的底层支撑。四、引用Citations事实必须可溯源## Citations一节要求幻灯片内容必须附带引用来源可以是源 URL、记忆节点 id / 来源引用memory node ids/source refs、文件路径、artifact id、或工具输出 id。幻灯片正文与演讲者备注speaker notes中不得出现未被所引证据支持的陈述。也就是说演示文稿中的每一个事实点都应能通过引用链追溯到具体证据这与第二节的 grounding 契约共同构成证据驱动建稿的完整闭环先收集证据 → 再组织内容 → 逐条标注引用 → 最后生成。五、输出契约向父代理返回紧凑结果建稿完成后presentation_agent必须向父代理orchestrator返回一个紧凑的结构化结果包含六个字段Answer回答——本次任务的结论摘要Evidence used使用的证据——实际引用了哪些证据Actions taken已采取的行动——执行了哪些工具调用Open uncertainties待确认事项——遗留的不确定点Failed tool calls失败的工具调用——包括被跳过的图片等Recommended next step建议的下一步——给父代理的后续建议这套紧凑结构让 orchestrator 不必深入 worker 的冗长中间过程就能准确判断结果质量、发现遗漏并决定下一步动作例如图片缺失是否要重新生成、证据不足是否要补充调研。六、底层工具generate_presentation 的参数与限制要让上面的提示词契约真正落地必须理解generate_presentation工具本身的输入输出。该工具定义在 src/openhuman/tools/impl/presentation/mod.rs工具名稳定为generate_presentation是一套纯 Rust 实现的.pptx生成器基于ppt-rs无 Python 运行时、无子进程整体生成过程被包裹在spawn_blocking 30 秒超时GENERATION_TIMEOUT中既不会阻塞异步执行器也不会卡死代理循环。6.1 输入结构JSON-Schema顶层输入GeneratePresentationInput包含字段类型说明titlestring必填演示文稿标题显示在标题页并作为 artifact 的可读名称authorstring可选标题页署名themestring可选预留的模板选择字段当前仅作信息用途引擎使用默认模板slidesarray必填≥1按显示顺序排列的幻灯片规格数组每张幻灯片SlideSpec支持title幻灯片标题可省略但 title/body/bullets 至少其一非空body段落正文纯文本bullets项目符号列表speaker_notes演讲者备注images附加图片数组每张图需指定source{type:artifact, artifact_id}或{type:file, path}与可选caption6.2 硬性限制定义于 types.rstypes.rs 定义了保证生成时间与输出体积可控的一组常量常量值约束对象MAX_SLIDES64单次调用最多 64 页更长的文稿需拆分为多次调用MAX_TEXT_CHARS2000每个文本字段title/body/单条 bullet/备注最大字符数MAX_BULLETS_PER_SLIDE32每页最多 32 条 bulletMAX_IMAGES_PER_SLIDE6每页最多 6 张图v1 单列布局下每张图需保持可读MAX_IMAGES_PER_DECK8全稿最多 8 张图限制内嵌媒体体积MAX_IMAGE_BYTES5 MB单张图片字节上限与多模态管线图像上限对齐6.3 图片来源与安全校验SlideImageSource目前仅支持两种来源Artifact { artifact_id }从工作区 artifact例如代理先前用其他工具生成的图表读取字节经由read_artifact_bytes解析File { path }从本地可读文件路径读取但必须先通过SecurityPolicy::validate_path校验允许位置、符号链接逃逸、禁用目录等检查与所有文件读取工具一致随后先stat判断大小再读入内存。值得注意Url来源在 v1 中被刻意延后——生成时抓取代理提供的 URL 是一个 SSRF 攻击面需要单独设计 allow/deny-list 机制。这一设计取舍在 types.rs 的类型注释中有明确说明。6.4 执行流程与产物execute的完整流程是见 mod.rs反序列化输入失败返回结构化错误validate_input提前校验让代理拿到可自我修正的InvalidInput在异步边界解析并校验每页图片坏图跳过并收集警告通过create_artifact创建Pending状态的 artifact中断不会误报为 Ready将原始参数持久化到args.json保证失败卡片的重试可确定性重放#3162调用纯 Rust 引擎engine::generate生成字节写盘、统计大小、通过finalize_artifact翻转状态为Ready失败时通过fail_artifact标记为Failed供 UI 展示原因。最终输出GeneratePresentationOutput包含artifact_id、artifact_path绝对路径、slide_count不含标题页、size_bytes与image_warnings默认空数组。工具权限级别为PermissionLevel::Write写入工作区 artifact 目录无子进程与网络访问。七、质量保证测试如何固化契约presentation_tests.rs 展示了工具层契约的测试方式——不依赖 mock直接运行真实引擎parameters_schema_shape_matches_contract断言参数 Schema 的required为[title, slides]、additionalPropertiesfalse、slides.minItems1、maxItemsMAX_SLIDES等permission_level_is_write验证权限级别文档注释还提到引擎层engine.rs自带SlideSpec → ppt-rs映射、OOXML 往返与超时处理的专项测试工具层则覆盖输入校验拒绝分支、schema 契约、router 规则与 artifact 管线。而 prompt_tests.rs 从提示词侧断言 grounding 与 image_warnings 契约的存在。两者结合意味着证据锚定 → 图片校验 → 警告透传 → 结构输出整条链路都被自动化测试锁定。八、典型使用方式与注意事项在实际使用中你只需要用自然语言向 OpenHuman 的主代理Master Agent / orchestrator提出类似帮我把这些数据做成一份 10 页的 pitch deck或基于我的项目文档生成一份演示文稿的请求主代理就会通过delegate_make_presentation把任务路由给presentation_agent该代理调用web_search_tool/web_fetch/http_request补充证据或在用户素材/记忆中建立 grounding调用generate_presentation生成.pptx产物以 artifact 形式保存在工作区返回包含 Answer / Evidence used / Actions taken / Open uncertainties / Failed tool calls / Recommended next step 的紧凑结果由主代理转述给你。需要注意的限制单次最多 64 页文本字段单条不超过 2000 字符每页 bullet 不超过 32 条全稿图片不超过 8 张且单张不超过 5 MB仅支持 PNG/JPEG当前仅输出.pptx格式PDF/Keynote/Google Slides 导出不在范围内且代理不会凭空编造统计、引文、日期与人名——如果需要空白模板这类非事实型文稿请显式说明代理会在Evidence used中如实声明未做证据锚定。总结presentation_agent是 OpenHuman 多代理编排中证据驱动内容生产的典型样本它在编排层通过delegate_name暴露为make_presentation委托工具在提示词层固化了 Grounding / Images / Citations / Output 四大契约在工具层由纯 Rust 的generate_presentation含 6 组硬性上限、安全图片校验、部分成功语义提供落地能力最终以紧凑的六字段结果向父代理交付。理解这一整条链路也就理解了 OpenHuman 如何把不编造、可溯源、可校验的原则从提示词贯彻到每一次工具调用与每一行测试代码。【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhuman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表