一、模型读不了二进制文件?用「格式桥接」消化掉
很多 Agent 的 read 工具会直接拒绝二进制文件 ,导致 .docx / .xlsx 这类常见文档无法被模型读取。一个务实的解法是不引入重型依赖(MS Office / MCP 服务器),而是用纯 Python 脚本做格式桥接:
.docx → Markdown (docx2md.py)
.xlsx → CSV (xlsx2csv.py,每 sheet 一个文件)
Markdown → .docx (md2docx.py)
CSV → .xlsx (csv2xlsx.py,每个 CSV 一个 sheet)
关键设计取舍:
- 读取方向 :先转成纯文本/Markdown,让模型用普通
read工具读,绕开二进制限制。 - 写入方向 :让模型先产出
.md/.csv,再脚本转回 Office 格式。 - 诚实标注有损 :这类转换是 lossy 的------复杂样式、内嵌图片、宏都不保留;编号列表会被 Markdown 渲染器重新编号而非保留原值;CSV 转 xlsx 时
007会丢前导零、16 位以上 ID 会撞 Excel 的 15 位精度。需要高保真往返时,应明确指向更重的方案(如 MCP 文档服务器)。 - 遗留格式兜底 :
.doc/.xls老格式脚本不处理,但可提供通过 Word/Excel COM 先转.docx/.xlsx的兜底路径。
核心思路:把「模型读不了二进制」这个硬约束,用一层薄薄的转换脚本消化掉,而不是让 Agent 每次去猜怎么处理。
二、视觉模型的两个硬限制与「切图」解法
处理视觉输入时,很多模型有两个硬性限制:
- 拒绝 PDF 输入------只接受 JPEG/PNG/GIF/WebP,PDF 必须先栅格化成 PNG。
- 每张图会被降采样到约 800×800 的像素预算------大图里的小字会糊到认不出。
第二个限制尤其反直觉:很多框架本身会做自动 resize(如 2000×2000 / 5MiB),所以上传超大图不是真问题,真正的坑是模型内部的 800×800 降采样。
解法是切图(tiling) :把大图切成 N×N 的带重叠网格,让每一块 tile 各自拥有一个 800×800 的预算:
PDF → PNG 页面 (pdf2png.py,--zoom 控制分辨率)
大图 → 重叠 tiles (tile.py,--grid NxN,--overlap 0.10)
配套的决策表很清晰:
| 输入 | 动作 |
|---|---|
| 小图(长边 < ~1600px) | 直接发,无需预处理 |
| 大图 / 密集小字 | 切成 2×2(或更细)网格 |
| 网格大小 | N = ceil(长边 / 800),保证每块 ≤ ~800px |
| 先栅格化成 PNG,页面大再切 |
10% 的重叠是为了防止文字正好跨在切割线上被截断。关键洞察是:「切图」解决的是可读性,不是文件大小------这是很多人会搞反的地方。
三、按模型成本差异化压缩上下文
当系统里有多个成本差异很大的模型时,上下文压缩策略可以按模型差异化。逻辑很直接:
贵的模型(如 pro)输入成本可能是便宜模型(如 flash)的 3 倍 ,所以贵模型的会话应该更早压缩,缩短昂贵的上下文窗口。
实现上,压缩工具支持按 providerID/modelID 精确覆盖阈值:
jsonc
"modelMaxLimits": { "deepseek/deepseek-v4-pro": 55000 },
"modelMinLimits": { "deepseek/deepseek-v4-pro": 26000 }
贵的模型在 55K 就触发压缩(全局默认 77K),便宜的保持 77K/38K 基线。这是把「成本」这个维度显式编码进上下文管理策略------不是一刀切,而是让贵的模型更早瘦身。
四、配套的细节打磨
同一批工作里还有几处值得记录的工程细节:
- 图片 token 成本上界:给视觉模型加图片附件配置------超过一定尺寸/字节数先自动 resize。因为模型内部会降采样,超大上传只是浪费 base64 字节。
- 共享词汇表(glossary):为「模块 / 接口 / 深度 / 接缝」这类架构术语建立精确的共享词汇,让设计讨论更具体,而不是各说各话。
- 调试纪律 :先建一个「能变红」的反馈回路再理论化------没有能复现失败的命令,任何假设都不值得验证;调试日志用
[DEBUG-<hex>]标签,方便一次 grep 清理。 - 易变区纪律:时间戳、随机 ID、动态文件列表这类易变内容要放在 payload 尾部,避免破坏 prompt-cache 的前缀命中。
- 验证预算:明确「能通过 typecheck」不等于行为变更的 QA,要为变更预先设定最小非重复的验证证据。
小结
这些技巧背后有几条可复用的方法论:
- 模型硬约束要用工程手段消化,而不是让 Agent 硬扛------二进制文档用转换脚本桥接,800×800 降采样用切图破解。
- 成本要显式编码进策略------按模型差异化压缩阈值,贵的模型更早瘦身。
- 诚实标注能力边界------有损转换就明说,需要高保真时指向更重的方案。
- 先建反馈回路再调试------没有能复现失败的「红灯」命令,就不要开始猜根因。