§14 生成与报告能力
DeerFlow 不只是「聊天 + 搜网页」。它自带一类生成技能,能出图、出视频、出播客、出音乐,还能写结构化研究报告。
四类生成技能
| 技能 | 现有 provider | 端点 |
|---|---|---|
image-generation |
Gemini(gemini-3-pro-image-preview) |
generativelanguage.googleapis.com |
video-generation |
Gemini Veo(veo-3.1) |
长任务轮询 |
podcast-generation |
火山引擎 TTS | openspeech.bytedance.com |
music-generation |
MiniMax(新增) | api.minimaxi.com |
provider 怎么选
每个生成脚本里有 _resolve_provider(),判定顺序很讲理:
- 显式覆盖:环境变量
IMAGE_GENERATION_PROVIDER等设了,直接用。 - 现有 provider 优先:原 provider 密钥齐全 → 用原来的,保证向后兼容。
- 回退 MiniMax:原 provider 没密钥但
MINIMAX_API_KEY有 → 走 MiniMax。 - 都没有 → 抛清晰错误,告诉你两套环境变量怎么配。
默认行为不变——你原来配了 Gemini,一切照旧;只配了 MiniMax 的用户自动走新路。
研究报告与「压缩标记」
DeerFlow 继承了 v1 的 Deep Research 血统,能产出带引用的研究报告。这里有个细节体验很好:当运行中触发了上下文压缩,前端历史里会插入一个 [N messages condensed] 标记卡片,点开能看到被压缩成的摘要。
实现上,它包装了 LangChain 的 SummarizationMiddleware,在每次真正压缩时 adispatch_custom_event("summarization", ...),把 replaced_count 和摘要文本写进 event store,前端再在正确时间线位置渲染这张卡片。这样你不会疑惑「我前面的话怎么没了」。
标叔的结论:生成技能是 DeerFlow「产品感」的来源。你做个内容工作流,直接复用 image-generation / podcast-generation 比自己接 API 省太多事。记得用 <SKILL>_PROVIDER 锁定 provider,别让自动判断在半夜切了供应商。
定时跑任务,是自动化刚需。下一章讲。