文档版本:v1.2
基线日期:2026-07-28
Agent 定位:老年受众高潜抖音视频发现 Agent
本文只描述 find_agent 本身:
本文不描述 SupplyAgent 的整体业务流程,不涉及需求分级、日批调度、跨 Agent 协作、 下游生产发布、业务里程碑或平台级建设。
当前实现依据:
find_agent 根据一条明确的内容需求,从抖音候选中寻找同时满足以下条件的视频:
Agent 对搜索词生成、候选补证、评分解释和最终分池负责。它不生产或改写视频,也不负责 需求优先级、任务调度、内容发布及其他 Agent 的行为。
当前版本明确不使用视频画面、语音、字幕或多模态理解。相关性与分享动机仅依据标题、 描述、话题、详情文本、互动数据和受众画像判断。
| 字段 | 必需性 | 含义 |
|---|---|---|
demand_word |
必需 | 本次找片的需求词和意图边界 |
seed_video_title |
可选 | 已知相关视频标题,用于消除需求歧义 |
relevant_points |
可选 | 参考视频中与需求相关的灵感、目的或关键点 |
reference_videos |
可选 | 多个参考视频及各自相关点 |
run_id |
可选 | 已创建的发现运行标识;存在时必须复用 |
输入信息不足时,Agent 可以继续搜索,但必须降低意图判断的置信度,不能用模型常识补全 未提供的业务要求。
Agent 最终输出以下内容:
primary 主推荐;rejected 淘汰候选及淘汰原因;每条主推荐至少包含:
aweme_id;R / E / S / V 整数分、置信度和主要限制。最终分池只允许 primary / rejected。pending_evaluation 仅是处理中的临时状态,不得
出现在最终结果中。
demand_word;aweme_id 去重;当前没有以下证据:
Agent 对每个候选独立判断:
R:需求相关性;E:老年受众倾向;S:分享价值。综合价值为:
V = 100 × R^0.40 × E^0.35 × S^0.25
V 用于保持排序一致,不替代证据判断。只有 R / E / S 三项均成立的候选才能进入
primary;任一项不成立时进入 rejected。
当前分池由模型根据提示词和证据作出,保存工具只保存结果,不重新计算分数或改变分池。
run_id;搜索页已保存 → 证据已获取 → 评估已保存 → 审计通过 → 查询最终状态 → 输出报告
最终报告只读取数据库最终状态,不通过文字反向修改候选分池。报告中的主推荐和淘汰 候选必须与数据库状态一致。
当 Agent 结合任务上下文、替代方案和工具反馈判断任务已经无法继续时,应停止无效重试,
输出以 任务未完成(工具故障) 开头的失败摘要。完成守卫只识别该声明,不解析工具
返回结构或错误文案,也不替 Agent 判断错误是否可恢复。
证据优先级为:
第 4 类不能单独支持老年倾向。视频画像与作者画像冲突时,以视频画像为主并降低置信度。 明确覆盖 50 岁及以上的年龄桶才属于直接老年信号;只有 40 岁以上数据时,只能表述为 成熟人群代理信号。
share_count 说明传播规模,不说明分享者年龄;| 工具 | 当前用途 | 关键限制 |
|---|---|---|
douyin_search |
内部关键词召回 | 搜索结果不是最终事实 |
douyin_search_tikhub |
TikHub 搜索与分页 | 翻页必须复用供应方分页参数 |
douyin_user_videos |
扩展作者作品 | 作品仍需逐条补证和判断 |
douyin_detail |
批量核验视频详情 | 单次最多 8 条 |
get_content_fans_portrait |
获取单条视频点赞用户画像 | 不是分享用户画像 |
get_account_fans_portrait |
获取作者粉丝画像 | 只代表账号受众先验 |
batch_fetch_portraits |
批量获取视频和作者画像 | 单次最多 8 条 |
normalize_age_portraits |
标准化年龄桶 | 不负责业务评分 |
create_video_discovery_run |
创建或复用运行状态 | 传入 run_id 时必须复用 |
record_video_search_page |
保存搜索页并合并候选 | 每次搜索后均需调用 |
batch_save_video_candidate_evaluations |
保存证据、评分和分池 | 只接受 primary / rejected |
audit_video_discovery_run |
审计 Agent 最终状态 | can_finish=true 才能完成 |
query_video_discovery_state |
恢复或读取最终状态 | 最终查询必须晚于成功审计 |
qwen_video_analyze 未注册,不属于当前 Agent 能力。
| 项目 | 当前设置 |
|---|---|
| 模型 | 固定为 google/gemini-3-flash-preview |
| 最大迭代轮次 | 60 |
| 温度 | 0.2 |
| 搜索工具预算 | 10 次 |
| 详情工具预算 | 2 次 |
| 画像工具预算 | 3 次 |
| 候选保存预算 | 6 次 |
| 审计预算 | 4 次 |
| 状态查询预算 | 8 次 |
| 单批详情/画像候选数 | 最多 8 条 |
create_find_agent(..., model=...) 和 run_find_agent(..., model=...) 虽然暴露了模型参数,
当前工厂仍固定使用上述模型,传入参数不会生效。
| 能力 | 状态 | 当前判断 |
|---|---|---|
| 需求理解 | 可用 | 能结合需求词、参考标题和相关点形成搜索假设 |
| 多源搜索 | 可用 | 内部搜索、TikHub 和作者作品均已注册 |
| 候选去重 | 可用 | 支持跨词、跨页和跨来源按 aweme_id 合并 |
| 详情与画像 | 可用但有缺口 | 支持详情、双侧画像和年龄标准化,画像可能缺失 |
| 内容理解 | 受限 | 仅使用文本、互动和画像,不使用视频理解 |
| 评分与分池 | 部分可用 | 规则完整,但主要依赖模型遵守长提示词 |
| 状态保存 | 可用 | 可保存运行、搜索页和候选状态 |
| 完成审计 | 已接入 | 可校验完成顺序、审计新鲜度和报告分池 |
| 故障终止 | 已接入 | Agent 明确声明工具故障时允许失败结束 |
| 最终一致性 | 部分可用 | 报告只读并接受校验,尚无单一事务性最终化入口 |
| 运行恢复 | 部分可用 | 能查询旧状态,但缺少执行代次和自动恢复机制 |
| 可观测性 | 不完整 | 有日志和基础计数,缺少 Agent 级质量与成本指标 |
增加事务性最终化
finalize_video_discovery_run 能力;将关键约束从长提示词下沉到程序
结构化模型输出
R / E / S 取值、必填证据、置信度和分池;V,避免模型计算漂移;修复模型配置
model 参数真正生效;补齐 Agent 契约测试
优化搜索前沿选择
优化候选预筛与补证
建立评分评测集
R / E / S,避免只看最终分池;primary / rejected 混淆情况;增强 Agent 可观测性
改进运行恢复
run_id 增加执行代次;一次 find_agent 运行满足以下条件,才视为 Agent 自身完成:
run_id;aweme_id 去重;pending_evaluation 或其他非法分池;can_finish=true;primary / rejected 完全一致;若工具故障导致任务无法继续,则不适用上述成功条件,但必须满足:
任务未完成(工具故障);