ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OpenAlice file-delivery:在 Connector 会话回复中通过 `[[relative/path.ext]]` 附件交付 Workspace 文件

OpenAlice file-delivery:在 Connector 会话回复中通过 `[[relative/path.ext]]` 附件交付 Workspace 文件 【免费下载链接】OpenAliceYour one-person Wall Street. An AI trading agent covering equities, crypto, commodities, forex, and macro — from research through position entry, ongoing management, to exit.项目地址https://gitcode.com/gh_mirrors/op/OpenAlice点击查看免费下载本指南讲解 OpenAlice 的file-delivery技能default/skills/file-delivery/SKILL.md如何在 Connector 会话Telegram、Discord、Slack、飞书的最终回复中用双括号引用把 Workspace 内的文件作为附件直接发送给人类用户并阐明它何时应该使用 Inbox 通知alice inbox push而非普通回复。读完本文你将掌握附件引用的完整语法与约束、Connector 服务端的解析与上传链路、附件的媒体类型推断规则以及回复附件与Inbox 报告两种交付方式的准确取舍。核心机制在最终回复中用[[relative/path.ext]]引用文件file-delivery技能的核心是一条极简约定在 Connector 对话的最终回复中把文件相对当前 Workspace 的路径用双括号包裹Connector 服务即会在回复的对应位置把解析成功的文件作为附件上传。文件必须先创建或先验证存在再在回复中引用。示例Here is the report. [[reports/summary.pdf]] The chart shows the comparison. [[reports/chart.png]]这条语法有四个必须遵守的要点引用必须写在代码区之外。把[[...]]放进行内代码backtick或代码围栏fenced code block后它会被解析器视为讨论语法而不触发上传——这正是只想说明语法、不实际发文件时的标准做法。保持文本与附件的相对顺序。Connector 会在回复中引用所在的位置上传解析成功的文件文本段落与附件的先后关系被原样保留服务端实现见下文文本与附件按位置分片。不产生 Inbox 条目。通过回复发送文件不会在 Inbox 中留下任何通知记录Inbox 是独立于对话的另一个交付面。路径指向回复该会话所属的 Workspace。若要发送**对等工作区peer Workspace**的文件必须先把它复制进当前 Workspace 再引用不允许跨界直接引用。路径书写格式是严格的白名单式约束直接用相对路径和扩展名即可禁止使用file:前缀、绝对路径、..上级目录跳转、以及|label标签后缀。任何缺失、不可读或不支持的引用都会原样保留为字面文本Connector 不会把未能解析的引用替换成占位符因此写了引用本身不等于文件已送达交付结果需要以实际收到的附件为准。交付限额当前版本限额项数值说明每次回复唯一文件数最多5个相同路径重复引用只上传一次去重单个文件大小最多1 MiB超过则引用无法解析为附件字节完整性文件字节原样保留不重编码、不缩放但编码归一化的报告例外见下服务端的硬性约束与这两条完全一致MAX_CONNECTOR_ATTACHMENT_BYTES 1024 * 1024、MAX_CONNECTOR_ATTACHMENTS 5定义在 packages/connector-protocol/src/types.ts且connectorAttachmentSchema用sizeBytes: z.number().int().min(0).max(MAX_CONNECTOR_ATTACHMENT_BYTES)在协议层就拒绝超限附件。连接器在回复里实际解析时也按最多 5 个截断resolved.size 5即停止解析后续引用services/connector/src/core/delivery-manager.ts。各平台的呈现方式TelegramPNG / JPEG / WebP 以**图片photo形式发送其余受支持的文件类型以文档document**形式发送。GUI 聊天界面OpenAlice 的 web 会话界面渲染预览并在右侧面板打开文档点击图片时弹出预览对话框。终端Terminal只显示文本、不执行上传——终端会话没有附件通道引用只会以字面文本展示。注意Telegram 发送图片还是文档取决于 reply-directives.ts 中的媒体类型推断而非 Telegram 侧的魔数判断见下文媒体类型推断。贴纸Sticker交付sticker/*.png与sticker/*.webp路径走贴纸交付通道在支持贴纸的平台上按贴纸发送而非普通图片。可用的贴纸包及其用法以**已安装的贴纸技能sticker Skill**为准——OpenAlice 仓库内置了alice-color与alice-ink两套贴纸包default/stickers每套含 20 张 PNG 与一张 JSON 清单引用的路径要与已安装贴纸包中的实际文件名匹配。解析与交付的源码级链路回复附件的完整链路在Connector Service的DeliveryManager.deliverOwnerChat中实现services/connector/src/core/delivery-manager.ts核心步骤解析引用parseReplyDirectives(message.text)扫出文本中所有合法的[[path]]引用来自 packages/connector-protocol/src/content-references.ts 的parseContentReferencesConnector 侧重导出为parseReplyDirectives。解析文件对每个去重后的路径优先尝试readWorkspaceFile(workspaceId, path)从回复会话所属的 Workspace读取若路径命中市场图表引用market/...则走renderMarket渲染见 reply-directives.ts 对parseMarketReference的优先判断。任何解析失败如文件不存在、不可读都被静默吞掉引用保持字面文本。文本与附件按位置分片把回复按引用位置切分为{text}与{path, attachment}交替的片段序列先发送首段文本transport 的实时回复再按顺序依次sendOwnerText/sendOwnerFile——这就是回复中文本与附件顺序被保留的实现来源delivery-manager.ts。媒体类型推断replyMedia(path)决定附件以file/image/sticker哪种呈现方式上传规则见下文。字节与哈希校验附件携带contentSha256与sizeBytesreply-media.spec.ts明确测试了损坏媒体哈希不符在上传前被拒绝services/connector/src/adapters/reply-media.spec.ts避免把坏字节发给用户。媒体类型推断规则来自 services/connector/src/core/reply-directives.ts判断顺序是优先级条件呈现类型1命中市场引用parseMarketReference(path)如market/okx|BTC/USDT:USDT/4himage渲染图表2sticker/目录下且扩展名为.png/.webp大小写不敏感sticker3扩展名为.png/.jpg/.jpeg/.webp大小写不敏感image4其余一切路径file这套规则与测试完全一致report/chart.PNG→ image、report/weekly.pdf→ file、sticker/notes.txt→ file因为不满足贴纸扩展名条件services/connector/src/core/reply-directives.spec.ts。平台适配sendOwnerFile 的实现差异各 Connector 适配器都实现了sendOwnerFile(attachment, presentation)但对presentation的利用程度不同Telegram最完整地利用ReplyMediaimage按 photo、sticker按贴纸发送Discord / Slack在 discord.ts 与 slack.ts 中把_presentation参数忽略_前缀表明未使用一律按普通文件上传——它们的消息体系本身就把图片作为附件展示飞书在 feishu.ts 中接收presentation参数参与上传分发。三个平台的通用约束reply-media.spec.ts只向已关联的 owner发送未关联 owner 时先抛错、不产生上传上传失败会记录delivery.failed并把适配器健康状态降级为degraded同时向用户回发Could not send file: path. Upload failed; please try again.delivery-manager.ts。解析器的语法豁免escape 与代码区parseContentReferences的正则扫描content-references.ts会对以下形式整体跳过代码围栏 与~~~、行内代码...、反斜杠转义\[[...]]。content-references.spec.ts用一整段样例验证了这些豁免[[inline.md]] md [[fenced.md]][[escaped.md]] [[NVDA]] [[../private.md]] [[/absolute.pdf]] [[https://example.com/a.pdf]] [[./README]]其中 [[../private.md]]、[[/absolute.pdf]]、[[https://example.com/a.pdf]] 都不会被当作文件引用isFileReference 拒绝以 / 开头、含 .. 段、以协议前缀开头的路径见 [content-references.ts](https://link.gitcode.com/i/23a14d45cc4719806f0f034af035fa25)——这正是 SKILL.md 中禁止绝对路径、..约束的底层实现。行内代码与围栏内的引用则被解析器跳过、永远保持字面文本。 ## 什么时候该用 Inbox回复附件 vs 通知报告 **Inbox 是 OpenAlice 面向人类的外部通知与报告面**警报、发现、报告、或需要人类关注并**应有独立交付记录**的内容才使用 Inbox。而当前对话中用户索要的文件直接在回复里发送即可——**它不会仅仅因为是一个文件就需要一条 Inbox 记录**。 三条职责边界与 [default/skills/alice/references/collaboration.md](https://link.gitcode.com/i/e30269a1d35e219c2a9e9e932504e998) 的命令模型表一致 | 交付面 | 职责 | 不负责 | |---|---|---| | 回复[[...]] | 当前会话内给人类的即时回复附件 | 独立通知、报告记录 | | Inboxalice inbox push | 面向人类的通知、报告、后续跟进 | 通用对等聊天、文件存储 | | 对等会话alice conversation | Agent 到 Agent 的手递手 | 人类通知 | **避免重复投递**除非确实需要一条独立的通知或报告交接不要把回复内容再复制进 Inbox。文件与 Git 承载工作产物Inbox 负责把结果告知人类对等会话负责 Agent 间交接——三者各司其职。 ### 用 Inbox 推送带附件的报告 需要给人类发一条**独立通知**例如无人值守任务的结果、需要专门关注度的报告时用 alice inbox push bash # 方式一body 内联引用——Markdown 正文 活文件引用 alice inbox push --body See [[report/summary.pdf]] # 方式二--body-file 把 Markdown 文件本身发布为通知正文 alice inbox push --body-file report/summary.md两处的语义细节来自 default/skills/alice/references/collaboration.md 与 src/tool/inbox-push.ts 的实现--body-file发布的是该 Markdown 文件本身而--body中内联的[[relative/path.ext]]引用是活引用它们相对发布方 Workspace 根目录解析且保持活着——读者之后仍能跟随引用打开对应文件。发布时正文被冻结frozen正文文本在发布那一刻定稿但文件引用保持动态解析每个被引用的文件会计算sha256:前缀的发布哈希作为该文件版本的标识写入fileRevisionsinbox-push.ts。若希望 Git 保存发布内容请先提交文件再发布。代码示例中的引用与缺失路径在 Inbox 正文中同样保持字面文本。每条附件在alice inbox read的files[]中返回可直接使用的absolutePath、原始relativePath、以及可用时的发布revision若absolutePath为 nullWorkspace 不可用或路径不安全不要猜测补全可用alice peer path --id workspaceId解析对等 Workspace 根目录后用 Agent 原生的 Read/Search/Glob/Git 能力检查。查看近期投递alice inbox read --limit 5 # 最近 5 条 alice inbox read --self # 只看本 Workspace 自己的推送inbox push/inbox read/inbox ask在aliceCLI 中是顶层inbox组的动词src/server/cli-commands.tsinbox_push同时以 Workspace 工具tool的形式暴露给 Agent其工具描述明确写着body 是 Markdown用[[report/file.pdf]]指向相对此 Workspace 根的活文件CLI--body-file把 Markdown 文件读作发布正文普通回复用于会话内响应Inbox 不是文件存储也不是 Agent 间通道来源origin自动记录。src/tool/inbox-push.ts——工具会自动为推送条目盖上来源run / session戳供alice provenance show --kind inbox追溯。常用协作命令速查与 file-delivery 直接相关alice --help # 发现研究/协作命令组 alice inbox push --body Finished — see [[research/report.md]] for evidence. alice inbox push --body-file research/report.md alice inbox read --limit 5 alice inbox read --self alice inbox ask --id entryId --prompt Why did you send this result? --await alice conversation create --ws-id workspaceId --prompt ... # Agent 间会话非 Inbox alice peer path --id workspaceId # 解析对等 Workspace 根目录注意Inbox 只通知人类Agent 到 Agent 的完成通知没有主动推送总线普通对等交流必须走alice conversation配合--await/await/read/collect拉取回复。常见误区与排错清单结合 SKILL.md 的约束与解析器实现最容易踩的坑如下引用写在代码区里→ 被解析器豁免永远不触发上传。想发送文件引用必须位于正文想讨论语法引用放进行内代码或代码围栏。路径写错格式file:前缀、绝对路径/开头、..段、|label后缀都会被isFileReference拒绝 → 引用保持字面文本不会交付。文件不在回复会话的 Workspacepeer Workspace 的文件必须先复制进当前 Workspace再引用。超限超过 5 个唯一文件、或单个文件超过 1 MiB → 超出的引用无法解析协议层connectorAttachmentSchema直接拒绝超限附件。写了引用 ≠ 已送达缺失/不可读/不支持的引用保持字面文本Connector 不会提示你失败仅在上传阶段失败时才回发Could not send file提示。交付后应通过收到的附件确认而不是看回复文本。混淆交付面会话内索要的文件直接用回复发送不要机械地再复制一条 Inbox需要独立通知/报告记录时才用alice inbox push避免重复投递。贴纸路径只有sticker/*.png、sticker/*.webp且与已安装贴纸包实际文件名匹配时才走贴纸通道reply-directives.ts用错扩展名或路径会退化为file或保持字面。延伸阅读技能原文default/skills/file-delivery/SKILL.mdalice协作命令全貌peer / conversation / inbox / issue / provenance 等default/skills/alice/references/collaboration.md共享引用解析器与文件引用白名单packages/connector-protocol/src/content-references.tsConnector 回复解析与附件限额packages/connector-protocol/src/types.ts回复分片、上传与媒体推断services/connector/src/core/delivery-manager.ts、services/connector/src/core/reply-directives.ts多平台附件上传行为测试services/connector/src/adapters/reply-media.spec.tsInbox 推送工具实现src/tool/inbox-push.tsInbox 数据与文件语义docs/inbox-content.md、docs/connector-service.md赞分享【免费下载链接】OpenAliceYour one-person Wall Street. An AI trading agent covering equities, crypto, commodities, forex, and macro — from research through position entry, ongoing management, to exit.项目地址https://gitcode.com/gh_mirrors/op/OpenAlice点击查看免费下载相关推荐GitHub Copilot SDK 图像输入Image Input完整指南通过 file / blob 附件向 Copilot 会话发送图片GitHub Copilot SDK 图像输入Image Input完整指南通过 file / blob 附件向 Copilot 会话发送图片 导读 本文人工智能AI AgentAgent 框架工具调用ClawX 基于 OpenClaw message 工具交付记录的生成文件附件恢复机制recover-message-tool-file-attachments 实现解析ClawX 基于 OpenClaw message 工具交付记录的生成文件附件恢复机制recover message tool file attachment人工智能AI 应用桌面应用交互助手DeepSeek Harness 对话式 Schedule 交付用普通会话轮次替代持久回执的设计取舍DeepSeek Harness 对话式 Schedule 交付用普通会话轮次替代持久回执的设计取舍 导读 DeepSeek HarnessEveryth人工智能AI AgentAgent 框架DeepSeek上一篇Raspberry Pi 常驻自托管 Runner 搭建指南让 Opencode Triage 与 AI 工具免重复认证opencode-antigravity-auth 实战下一篇Capistrano 服务器过滤Filtering机制完全指南On-Filters 与 Property-Filters 实战解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表