caoqianming
|
8038fb7491
|
refactor(tools): 媒体工具同构析出 tools/media_common.py + 17 个单测
审查 P1#6:seedance/seedream/gpt_image/look_at_image/read_document 五处
同构(逐字或参数化后逐字)收敛为共享原语:
- quota_gate(每日配额闸,文案逐字保持)/ stamped_path(<ts>-<rand6> 落盘
命名+建目录)/ write_meta(.meta.json)/ record_usage_safe(记账失败不
阻塞)/ ark_chat_with_retry(超时透明重试,业务错误不重试)/
extract_chat_answer(chat 文本+截断标志)/ find_first_url(递归找 URL,
accept 谓词覆盖 seedance 的 video_url 优先语义)
- 五工具各自的 banner 格式 / body 组装 / seedance 轮询刻意保持不动
- tests/test_media_common.py:17 个纯函数/打桩单测(配额文案、重试次序、
业务错误不重试、视频 URL 谓词等)
318 测试全过;真实配置冒烟 32 工具挂载不变、schema 完整。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-23 13:10:32 +08:00 |
caoqianming
|
a1db5756aa
|
feat(tools): 扫描件 PDF 直读 read_document——方舟文档理解 base64 内联(bump 0.58.55)
markitdown 只抽文本层,扫描件(老标准/检测报告/红头指南)转出为空=死路。
探针(scripts/probe_ark_doc.py)验证方舟 chat file 内容块直读 PDF 后落地:
- tools/read_document.py:seed_2_lite 同 variant 同 key,记账走
record_vision_usage;体积/页数双闸(30MB/100 页,pdfminer 软探页数)+
finish_reason=length 截断提示;多页 OCR save_md 全文落盘只返 1500 字预览
(防上下文爆),save_md 与读取侧同款三形态路径解析(相对/宿主绝对/容器
/workspace)+ user_root 边界
- tools/image_ref.py:抽 load_pdf_as_data_url(复用 resolve_in_root;
data:application/pdf;base64, 前缀为方舟硬校验)
- config/media/doubao.yaml:vision 段加 max_pdf_mb / max_pdf_pages /
doc_request_timeout_s(probe 实测口径:~1300 token/页、100 页全覆盖、
17MB 内联可用、单页栅格化 3600 万像素硬限)
- core/agent_builder.py:注册(跟 look_at_image 同 vision 段走)+ 系统提示
_MEDIA_READDOC_SEG(何时调/何时不调,防对有文本层 PDF 重复花钱)
- 六 skill(paper/patent/standard/proposal/rebuttal/ppt)摄取段加扫描件
兜底一行(markitdown 转出空/近空 → read_document OCR)
- 冒烟 scripts/smoke_read_document.py 全过(3 页 ¥0.0066,表格→md 表、
公式→LaTeX,usage_events 记账验证)
选型对比(不接 MinerU 等外部解析 API=新增第三方数据面;不选本地 OCR=
过度投资;不选 file_url/file_id=免认证公网直链/TOS 依赖)见 DESIGN §8.13。
host 侧工具,无需重建沙箱镜像,pull + 重启 web 生效。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-21 16:57:23 +08:00 |