消息渲染适配
Message Rendering Adapter
将 Agent 输出统一渲染为各渠道可发送的格式
子问题
1.渠道能力声明(markdown/emoji/code)
2.工具调用结果格式化
3.多媒体内容转换
4.文本截断与预览
5.工具参数/输出的分级截断策略(200/500 字符阈值)
6.Base64 内联数据与 URL 引用的统一处理
7.平台 Markdown 渲染怪癖的隔离修复
各项目的解法1 solutions
Signals
横向对比
| 维度 | CoPaw |
|---|---|
| 能力声明方式 | RenderStyle dataclass 4 布尔标志声明渠道能力 |
| 渲染架构 | 单 MessageRenderer + Style 驱动,BaseChannel 委托 |
| 内容中间表示 | Union[TextContent, ImageContent, ...] 6 类型联合 |
| 工具调用格式化 | 4 级降级:markdown+emoji → markdown → code_fence → 纯文本 |
| 多媒体处理 | URL/Base64 双源解析,send_media 钩子渐进覆写 |
| 平台怪癖隔离 | 独立模块处理(如 dingtalk/markdown.py 3 步修复) |
| 渠道扩展方式 | 继承 BaseChannel + 覆写 send_content_parts/send_media |
最佳实践
1.RenderStyle 声明渠道能力,Renderer 据此适配输出格式
2.用独立模块隔离平台特有的 Markdown 修复逻辑
3.send_media 钩子默认 no-op,子类按需覆写发送真实附件
4.工具调用格式化按能力标志 4 级降级,避免 if/else 渠道分支