DeerFlow AIGC 街拍实战:结构化 Prompt 工程如何复现"徕卡大师之眼"
【免费下载链接】deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.项目地址: https://gitcode.com/GitHub_Trending/de/deer-flow
本文以 DeerFlow 演示线程中一篇真实的 Agent 交付物——《The Leica Master's Eye: Capturing the Decisive Moment in the Age of AI》为主体,完整还原"研究 Leica 摄影美学 → 编写结构化 JSON Prompt → 调用图像生成技能 → 产出生成照片与图文文章"的全链路流程。读完你将掌握:Leica 摄影风格的四个可量化特征、一套可直接复制的结构化 Prompt 字段模板,以及 DeerFlow 图像生成技能(image-generation skill)的 CLI 用法与底层 Provider 实现细节。
这篇文章并非人工撰写,而是 DeerFlow Agent 在演示会话(thread id 为7f9dc56c-e49c-4671-a3d2-c492ff4dce0c)中自主完成的研究 + 创作任务产物,原始 Markdown 保存在 leica-master-photography-article.md,配套的会话回放数据在 thread.json。下文在完整继承原文档内容的基础上,结合仓库源码补充了每个环节的实现证据与可复现步骤。
一、任务背景:一条会话指令如何变成一篇图文文章
在 thread.json 中可以看到用户的原始请求:
"Can you conduct a research on Leica master photos, then generate 2-3 truly authentic AIGC street photos that captures the spirit of a Leica master photographer? And finally, write an article which includes these photos"
从回放数据的消息序列看,Agent 的执行链非常清晰:
- 加载技能:先读取
/mnt/skills/public/image-generation/SKILL.md(对应仓库中的 skills/public/image-generation/SKILL.md),理解结构化 Prompt 与生成脚本的调用约定; - 联网研究:多轮 web 检索,覆盖 "Leica master photographers street photography style characteristics"、"Henri Cartier-Bresson decisive moment"、"'Leica look' film grain bokeh color rendering" 等关键词,归纳出 Leica 街拍的核心特征(手动对焦、安静快门、35/50mm 定焦、胶片颗粒、奶油般虚化、环境叙事等);
- 任务拆解:维护了四步 TODO——研究风格 → 编写结构化 Prompt → 生成图片 → 撰写文章,逐步推进状态;
- 产出 Prompt 文件:用
write_file写入三个 JSON Prompt(leica-paris-decisive-moment.json、leica-tokyo-night.json、leica-nyc-candid.json); - 执行生成:三次调用
generate.py,均使用--aspect-ratio 3:2(35mm 胶片的经典比例); - 撰写成文:将研究结论与三张生成图组织为 Markdown 文章,最后通过
present_files交付 4 个产物(1 篇文章 + 3 张图片)。
这条线程被 DeerFlow 前端登记为静态演示线程之一:在 static-demo.ts 中,DEMO_THREAD_IDS包含该 thread id,且STATIC_DEMO_ARTIFACTS精确列出了它的 4 个交付物路径。前端通过resolveStaticDemoArtifact做路径白名单校验后,才允许从/demo/threads/{threadId}/...访问这些产物——这也解释了为什么原始文章里的图片链接是/demo/threads/7f9dc56c-.../user-data/outputs/...形式(见下一节的引用方式)。
二、Leica 美学:不只是器材,而是四个可拆解的特征
原文档的核心贡献,是把"Leica Look"这种玄学审美拆解成四条可被 Prompt 语言描述的工程特征。这也是整篇文章最值得继承的骨架:
1. 决定性瞬间(The Decisive Moment)
Henri Cartier-Bresson 将摄影定义为"在一秒钟内同时认识到事件意义与视觉形式的过程"。这一哲学强调完美时机——所有视觉元素在瞬间对齐,产生超越字面场景的意义。注意"决定性瞬间"不只是抓拍时机,而是多重元素(人物动作、路人位置、水面倒影、光线方向)的同步对齐。
2. 旁轴相机的隐蔽性(Rangefinder Discretion)
Leica 紧凑的旁轴设计让摄影师成为场景的一部分,而非 bulky 设备背后的观察者。安静的快门声与手动对焦鼓励审慎、有意识的构图——这一点在 AI 生成中翻译为not posed or staged、authentic street photography, not staged之类的负向约束。
3. 镜头个性(Lens Character)
Leica 镜头以"奶油般虚化"(creamy bokeh)、自然色彩还原和三维"立体感"(pop)著称,且不同镜头个性分明:Summicron 的临床式锐利,Noctilux 全开时的梦幻质感。
4. 胶片质感(Film-Like Aesthetic)
即便是数码 Leica,摄影师也常模拟胶片特性:自然颗粒、细微色偏、一种避免"数码无菌完美"的有机质感。
三、三幅 AIGC 作品:风格特征的落地验证
三张图片的仓库路径均在frontend/public/demo/threads/7f9dc56c-e49c-4671-a3d2-c492ff4dce0c/user-data/outputs/下(原始文章中使用站点根路径/demo/threads/...引用,仓库内对应以下相对路径)。
图 1:巴黎——决定性瞬间
该图对应 leica-paris-decisive-moment.jpg。红衣女子跃过水洼,自行车手恰好同步经过,构图遵循三分法,主体位于网格线交点。模拟 Leica M11 + 35mm Summicron 于 f/2.8 拍摄,浅景深、自然胶片颗粒、温暖而克制的色板。"决定性瞬间"在此体现为多重元素对齐:女子的跃动、自行车手位置、水洼倒影、清晨侧光在湿润鹅卵石上拉长的阴影。
图 2:东京——夜景反射
该图对应 leica-tokyo-night.jpg。场景移至东京新宿,探索 Leica 传奇 Noctilux 镜头的大光圈氛围潜力:模拟 Leica M10-P + 50mm f/0.95 Noctilux 全开,霓虹招牌在湿漉路面反射成圆形光斑。西装男在发光的汉字招牌下等候,拉面店蒸汽升腾;构图以前景反射、中景人物、背景霓虹三层叠加出纵深;色彩以冷蓝、品红搭配暖黄便利店灯光——经典的东京夜景美学。
图 3:纽约——街头纪实名场面
该图对应 leica-nyc-candid.jpg。唐人街场景展示 Leica Q2 固定 28mm Summilux 的纪实力量:广角保留环境上下文,同时与主体保持亲密距离。鱼贩递鱼给顾客,游客在旁拍照——文化对比与真实市井同框。28mm 视角呈现多层结构(前景交易、中景游客、背景招牌),午后的斑驳树影与街头小吃的蒸汽增加大气纵深,色彩强调红色招牌与自然肤色。
四、技术解析:风格特征如何映射到 Prompt 参数
原文档把生成方法归纳为四组参数化维度,这正是"把审美知识编译成 Prompt"的关键。
相机与镜头规格(精确到型号与光圈)
| 场景 | 机身 | 镜头 | 光圈 |
|---|---|---|---|
| 巴黎 | Leica M11 | 35mm f/2 Summicron | f/2.8 |
| 东京 | Leica M10-P | 50mm f/0.95 Noctilux | f/0.95 |
| 纽约 | Leica Q2 | 28mm f/1.7 Summilux(固定) | f/2.8 |
胶片模拟(每幅图一款底片)
- 巴黎:Kodak Portra 400(自然肤色、细腻颗粒)
- 东京:Cinestill 800T(光晕 halation、电影感)
- 纽约:Kodak Ektar 100(色彩鲜明、颗粒细)
构图原则
三分法定位、环境叙事、前景/中景/背景层次、斜线带来动势、负空间留白。
光线特征
自然方向光源、实用光源(霓虹、橱窗)、大气元素(雨、蒸汽、烟)、时段明确(黄金时刻、夜晚、午后)。
从 thread.json 中保存的实际 Prompt 文件内容看,这些维度被结构化进 JSON 的字段里:每个文件含title、description、prompt、negative_prompt、style、composition、lighting、color_palette与technical(后者含camera/lens/aperture/shutter_speed/iso/aspect_ratio/film_simulation)。以巴黎那张为例,technical字段完整记录了aperture: f/2.8、shutter_speed: 1/250s、iso: 400、film_simulation: Kodak Portra 400 film grain,而negative_prompt写入了posed photography、HDR effect、excessive contrast等约束——这正是上文"旁轴隐蔽性"特征在负向提示词中的工程化表达。
五、源码纵深:image-generation 技能的实现细节
以上 Prompt 全部经由 DeerFlow 的 image-generation 技能执行,技能定义见 SKILL.md,执行脚本见 generate.py。
CLI 契约(与 SKILL.md 声明一致)
python /mnt/skills/public/image-generation/scripts/generate.py \ --prompt-file /mnt/user-data/workspace/leica-paris-decisive-moment.json \ --output-file /mnt/user-data/outputs/leica-paris-decisive-moment.jpg \ --aspect-ratio 3:2参数说明(源码argparse定义见 generate.py):
--prompt-file(必填):JSON Prompt 文件绝对路径,文件内容整段作为文本 Prompt 传给模型;--reference-images(可选,空格分隔):参考图路径,用于风格/构图引导;--output-file(必填):输出图片路径,脚本会自动创建父目录(_ensure_output_dir);--aspect-ratio(可选,默认16:9):本演示线程统一使用3:2以贴近 35mm 胶片比例。
Provider 自动选择逻辑
从 generate.py 的_resolve_provider实现看,脚本按三级优先级选择后端:
- 环境变量
IMAGE_GENERATION_PROVIDER=gemini|minimax显式指定时优先生效; - 否则若已有
GEMINI_API_KEY,走 Gemini(默认路径,调用gemini-3-pro-image-preview:generateContent,参考图以inlineDatabase64 形式随 contents 提交,宽高比经generationConfig.imageConfig.aspectRatio传入); - 否则回退到 MiniMax(
MINIMAX_API_KEY),调用/v1/image_generation,模型image-01(可用MINIMAX_IMAGE_MODEL覆盖),宿主机可用MINIMAX_API_HOST覆盖。
两条路径对同一份 JSON Prompt 的处理不同,值得注意:
- Gemini 路径接收完整结构化 JSON 文本;参考图会先经 Pillow
verify()校验,损坏的参考图被跳过并打印告警; - MiniMax 路径只消费 JSON 中的
prompt字段(无该字段则回退为原文),开启prompt_optimizer由服务端扩展提示词,参考图以subject_reference(type: character)提交;由于image-01的 1500 字符上限(见 generate.py 的MINIMAX_PROMPT_MAX_CHARS),超长时脚本直接返回错误而不请求 API,并建议"缩短 prompt、用参考图找回细节"。
技能侧的最佳实践
SKILL.md 还给出两条与本案例强相关的工程约定:
- 先用
image_search找参考图再生成:人物肖像、具体物件、建筑环境、服装时尚四类场景推荐先检索下载参考图,再以--reference-images传入,"用具体视觉引导代替纯文本描述"可显著提升质量; - Prompt 一律用英文、用 JSON 保证结构化可解析,角色类场景需同时提供
characters明细对象与整合后的prompt字段。
此外,该技能支持模板扩展机制(如 templates/doraemon.md),只有当请求匹配模板时才读取——仓库中另一个演示线程(21cfea46)产出的哆啦 A 梦漫画即走了该模板,可见 Leica 案例是"无模板通用路径"的产物。
六、可复现路径:在 DeerFlow 中重走这条链路
若要在 DeerFlow 中复现"研究 + 生成 + 成文"的完整流程,前提是具备沙箱中的技能挂载与对应 Provider 凭据(GEMINI_API_KEY或MINIMAX_API_KEY)。步骤与演示线程完全一致:
- 在会话中提出与 thread.json 相同结构的请求(研究某摄影风格 → 生成 2–3 张图 → 写图文文章);
- Agent 会先读取 image-generation 技能,再执行联网检索,归纳风格特征为
style/composition/lighting/color_palette/negative_prompt字段; - 每个场景落盘一个 JSON Prompt 到
/mnt/user-data/workspace/,technical字段写死相机、镜头、光圈、快门、ISO、胶片模拟与3:2比例; - 逐张调用
generate.py输出到/mnt/user-data/outputs/; - 最后汇总为 Markdown 文章并
present_files交付。
前端侧可直接通过静态演示线程回放该次会话的全部消息与工具调用;产物访问受 static-demo.ts 的白名单约束,仅STATIC_DEMO_ARTIFACTS中登记的 4 个文件可被解析为/demo/threads/7f9dc56c-.../...路径。
七、边界讨论:AI 做对了什么,什么仍属于人类
原文档结尾给出了清晰的边界划分,本文完整保留这一判断:
AI 做得对的:技术性还原(虚化、景深、颗粒)、构图原则、光线模拟、环境叙事。
仍属于人类的:意图与概念发展、与拍摄对象的情感连接、街头摄影的伦理考量、"在场"的物理体验。
这一划分实际上点出了结构化 Prompt 工程的本质:AI 学习的是审美原则(principles behind the aesthetics),而非表面特征的复制——镜头型号、光圈值、胶片型号都是把"原则"锚定到可参数化坐标的手段。正如原文档结语:Leica 大师摄影从来不只是器材,而是视野、时机与人的连接;AI 生成影像提供了一种新的探索方式,"决定性瞬间"既存在于物理世界,也存在于数字想象之中。
(原文档注:所有图片均基于 Leica 摄影研究的结构化 Prompt 工程生成。)
【免费下载链接】deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.项目地址: https://gitcode.com/GitHub_Trending/de/deer-flow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考