素材调用能力评估 · 2026-07-30

58.55 GiB 素材
怎样被精准调出来

R2 里的资料、效果图与视频,如何被企业微信视频产线更高效地调用——盘完代码后的结论是:能力已建约七成,卡在最后一公里,而且不需要训练任何模型。

// 实测 + 代码盘点口径 · 未核实项在页尾明确挂账

R2 · 63,429 对象 台账漂移 4.8× PGVECTOR · 建完未启用 效果图 11,265 张 结构化过滤 > 多模态向量 不需要训练模型
SCROLL / 向下滚动
01
Inventory · Ledger Drift

家底实测,和台账不符

今天用 Cloudflare API 直接查了 akke-kb 桶的用量,和项目文档里记的家底差了近 5 倍。这不是谁没维护——而是人工维护的清单追不上一个天天在写入的对象存储

0
对象数
2026-07-30 实测
58.55GiB
桶体积
同日实测
4.8×
对象数漂移
相对文档记载
0
效果图张数
07-26 口径
文档记载
07-18 / 07-26 快照
13,130 obj
今日实测
Cloudflare API
63,429 obj

// 桶在两周内长了近 5 万个对象,体积从 22.21 G 到 58.55 GiB。那份「素材家底与调用口径」是 07-26 更新的,四天就失真

Impact

三个真实后果:① 运营答不准客户「你们有什么资料」;② AI 回复可能承诺一份实际不存在的素材(编造的一种);③ 「R2 里的视频」这件事,用现有台账无法确认——文档明确写着 13130 个文件里只有 1 个 mp4、「不构成视频库」,但那是 07-26 的快照,而桶此后又长了 4.8 倍。视频可能就在新增的那批里。

本报告未能独立核实的一项

要按类型分解那 63429 个对象需要 R2 的 S3 密钥。本机 .env.local 里没有,Cloudflare API token 只能拿总量、列不了对象,wrangler 也没有 r2 object list 子命令。所以「视频有多少、在哪个前缀下」这条不下结论。补齐凭据后一条命令即可核实:

aws s3api list-objects-v2 --bucket akke-kb \
  --endpoint-url https://<account-id>.r2.cloudflarestorage.com \
  --query 'Contents[].Key' --output text | tr '\t' '\n' \
  | awk -F. '{print tolower($NF)}' | sort | uniq -c | sort -rn

// 已知素材构成(07-26 口径,量级参考非现状):第三方资料 314 份 · 效果图 11265 张 · 知识图集 726 张 · 原创图文 48 篇 · 官方海报 11 张。

02
Existing Channels · 70% Built

调用能力其实已经有三套

盘完代码,「把素材调出来」已经有三套机制,成熟度差别很大——缺的不是能力,是把它们接通

通路机制覆盖状态
海报确定性投递 enterprise_posters.triggers[] + GIN 索引,客户话里命中词 → 取 public_url 发图 11 张 生产在跑
唯一真正在服务客户的图片投递
pgvector 语义检索 kb_entries 362 条 / kb_chunks 482 块 · bge-small-zh-v1.5 · 512 维 314 文档精要
+ 48 图文
建完没开
线上 0 次调用
关键词 → 资料投递 L1 确定性词典 + L2 LLM 判断题兜底 + 投递状态机防重发 设计覆盖全量 spec 定稿未实施
07-13 设计稿
效果图图集站 风格(源目录标签)× 空间(视觉补标)二维筛选 11265 张 人工可用
AI 侧未接
03
The Switch · Highest ROI

那套检索不是效果不好,是根本没开

2026-07-20 有人做过一次很扎实的验证。结论值得重复,因为它意味着一笔已经付过的投入正躺着不产出

检索命中
相似度 0.60–0.72
7 / 20
正确未命中
寒暄 / 无关话
13 / 20
线上实际注入
Langfuse 近 24h / 97 次
0

// 命中的全是真问题:「我预算就 3 万,110 平全屋柜子能做下来吗」0.666 · 「两万九只是基础价吧」0.719 · 「你们是什么牌子的板子」0.602。寒暄类全部正确未命中——闸门是准的

Reasoning

「0 命中」本身不算证据——开着但没命中同样是 0。按 35% 命中率,97 次里本应约 34 次带注入,实际 0 次 ⇒ 不是没命中,是没开。缺的就是 Vercel 上一个 KB_RETRIEVAL 环境变量。

开之前要知道的两件事

一、语气会被稀释。知识块会冲淡人设、输出客服腔——当年就是为此把注入从 3000 字砍到 1500。建议开完当天翻几条真实回复看语气。

二、闸门用 0.6 更稳。会滤掉 0.602 / 0.622 那两条边缘命中。回滚就是删这个 env。

另一个一行代码级的阻塞

buildKbSectionKbHit.file_url 丢掉了——即使检索命中,模型也看不见文件链接,所以它发不出资料

这意味着「问 X 发 X」在当前代码下不可能实现,跟检索质量无关。修法是仿企微 matchPosters 加一个确定性投递分支。src/lib/llm.ts 属高危路径,必须走 PR。

04
Image Retrieval · Metadata Over Vectors

图片这条路,别指望向量

效果图 11265 张、知识图集 726 张,都是纯图片,没有可切块的文本。这里有一条已经用钱和时间买到的教训,不要重犯。

维度视觉打标实测结果该怎么做
空间
客厅 / 卧室 / 厨房…
可用 qwen2.5-vl 给 7679 张补标成功,成本约 $1 已完成,图集站已按此筛选
风格
现代简约 / 新中式…
不可用 判风格全塌成「现代简约」;7 张工业风只对 1 张。缩略图和全分辨率都塌 用源目录标签,别视觉打标
面积 / 户型 未做 核心缺口,支撑「113 平 → ±15 平」
客厅3,522
卧室1,290
餐厅798
厨房509
卫生间434

// 视觉补标出来的空间分布(7679 张「按风格」图)。这是可用的那一半——风格维度同样试过,塌了。

所以图片检索的正确形态

真实调用场景的锚点是「客户报 113 平 → 调 ±15 平的方案图」——这是一个 SQL 范围查询,语义向量帮不上任何忙。同理「只要现代简约的卫生间」是两个标签的交集,不是相似度排序。

把「风格(源目录)× 空间(已补标)× 面积/户型(待补)」做成结构化列 + 索引,检索走 WHERE 过滤。多模态 embedding 当前不值得上——它解决的是「找一张海边日落空镜」这种开放语义检索,而这里的查询维度都是可枚举的。

05
The Missing Input · Cross-System

效果图正是视频产线缺的那个真图

这是本次评估里最有价值的一个连接,目前没人接。

LLM
解构
拆解原片结构 → 重写文稿
生图
即梦
即梦 Seedream 出图 —— 问题就在这一步:喂进下游的是 AI 生成的假图
I2V
可灵
可灵 3.0 无声档图生视频(省配音成本)
TTS
豆包
豆包授权音色配音
合成
ffmpeg
ffmpeg on Fly.io 拼接 + 打 AIGC 标 → 成本 ¥50–120 / 条
归因混淆

产线投产后反馈「可灵效果一般」(画质、真实感、跨镜一致性)。但当时的链路是「AI 生图 → 图生视频」,喂进去的是假图——不能就此给引擎定罪。为此立了 M1 图源对照实验(真图 vs AI 图盲评),脚本 ad-studio/tryout/arm_i2v.py 已就绪但一直没跑,因为 jobs.json 里还是占位 URL,缺真实图源。

The Connection

而 R2 里躺着 11265 张真实效果图,那正是占位 URL 缺的东西。用 xiaoguotu/v2/… 的真图填进 jobs.json,M1 立刻能跑——图已有、脚本已有、零新增采购,就能回答「假图是不是根因」这个决定视频产线走向的问题。

换个角度

效果图不只是「发给客户的素材」,它同时是视频产线的原料。现在这两个系统各自把 R2 当仓库用,但没有共享的素材索引,所以一边缺图、一边有图,互相不知道。考虑到已决定不再为可灵新增花费,先花近乎零的成本把归因搞清楚,明显优于换引擎重试。

06
Blockers · One Admin, One Code

企微链路的两个硬阻塞

ADMIN · 不可绕过ICP 备案主体校验

企微「客服 kf 回调」和「自建应用接收消息 API」都要求回调域名已 ICP 备案、且备案主体 = 企业营业执照主体*.fly.dev / *.vercel.app / 裸 IP 全部被 Domain entity verification failed 拦下,连握手都到不了。

不能绕。.ai 是安圭拉国别域,不在工信部可备案 TLD 名单内——不是没去备,是备不了

CODE · 一个小 PRbuildKbSection 丢 file_url

检索结果里的文件链接没进 prompt,模型看不见 → 发不出资料

能修。一个小 PR 即可,属高危路径需走 PR 流程。它是「打开检索」那个动作的收益放大器——不修的话,检索开了也只能「说」不能「发」。

顺序建议

备案是行政前置、周期不可控,不要让它挡住其他事。先把不依赖备案的部分(检索开关、file_url、台账、M1 实验)全部推进,备案通了再接回调。

07
Target Architecture · No New Vendor

建议的三层结构

不新增任何供应商——pgvector 在这个量级远未到瓶颈,多一个向量库就多一份会静默烧钱的账单

L1 台账层 · 缺失

  • R2 里每个对象一行记录
  • key / 类型 / 尺寸 / 所属集合
  • 结构化标签:风格 × 空间 × 面积 × 主题
  • 水印状态 / 授权状态 / 对外可用与否
  • 定时对账 R2,而非人工维护 JSON
  • 这是 4.8 倍漂移的唯一解

L2 检索层 · 已建未启用

  • 文本走 pgvector(已建好)
  • 图片走台账层结构化列过滤
  • 两条路径并存,别用一种覆盖另一种
  • MIN_SIM0.6 更稳
  • 灌全文后必须重标闸门

L3 投递层 · 部分就绪

  • matchPosters 那套确定性套路是对的
  • 扩展它,不要重写
  • 抖音侧只发纯文字(风控红线)
  • 文件链接只在企微侧
  • 投递状态机防重发
08
Actions · Ranked by ROI

按性价比排序的七件事

#动作成本收益
01 打开 pgvector 检索
Vercel 设 KB_RETRIEVAL=on · KB_RETRIEVAL_MIN_SIM=0.6
一个 env 35% 的真实客户消息立刻获得知识注入。已验证过的能力,目前零产出
02 buildKbSection 保留 file_url 小 PR 让「问 X 发 X」从不可能变为可能。是 01 的收益放大器
03 拿真图跑 M1 盲评
xiaoguotu/v2jobs.json 占位 URL
近零 回答「假图是否为可灵效果差的根因」,直接决定视频产线走向
04 建素材台账表 + 定时对账 止住 4.8× 漂移;「有什么素材」可被准确回答;两个系统开始共享素材视图
05 效果图补面积 / 户型标签 小额打标 支撑「113 平 → ±15 平方案图」核心场景。只补可判维度,风格别碰
06 完成 C 方案:抽全文
314 份现在只索引了一句话精要
让「生成清单」有真原料。现状靠一句话精要生成 = 编造发生器
07 企微备案域名 行政 · 不可控 解锁企微回调。并行推进,不要挡住 01–06
06 的四个坑

xlrd 未装,而 67 份 xls 恰恰是清单类内容最密集的,不能跳;② 11 份 pdf 是扫描件(pdftotext 无效),且恰是最像干货书的几本,要么 OCR 要么明确挂账,别静默跳过;③ bge-small-zh-v1.5 上限 512 token,单块正文必须卡在 450 字符内,超了静默截断;④ 灌完全文必须重新标定 MIN_SIM——0.5 / 0.6 是拿摘要块标的,全文块相似度分布不同。

明确不建议做的事

每一条都对应一个已经踩过或算过的坑。

微调 / 训练任何模型。这里没有一个需求是训练能解决的。资料改一次就要重训,事实准确率还不如直接检索。

为图片检索上多模态 embedding。查询维度是可枚举的(风格 / 空间 / 面积),结构化过滤更准更便宜。而且风格维度的视觉打标已实测不可用

新增向量库供应商。pgvector 在这个量级(482 → 预计 4000–6000 chunk)远未到瓶颈。

为可灵新增花费来「再试试」。先用 R2 真图把归因做掉(动作 03),再决定要不要花钱。

在抖音私信发外链或我方微信号。风控红线,现有代码已经守住了,新增投递逻辑不要破坏它。

把「有什么素材」写死在文档里。这次的 4.8 倍漂移已经证明人工快照必然失真——要么查台账,要么别答

一句话总括:调用能力已建约七成,卡在最后一公里。不需要训练模型,也不需要多模态向量库——最高性价比的动作是打开一个已经建完、验完、但生产从未启用的检索开关;最被低估的机会是让效果图同时成为视频产线的原料;最该先修的结构性缺口是一份能自己对账的素材台账