
Image-to-Video 生成任务中的 adherence指生成视频在多大程度上忠于输入参考图首帧是否一致、人物身份是否保持、场景结构是否延续、物体细节是否漂移。Agentic Optimization 则是把“生成-评估-调整”的循环交给智能体自动完成让每一次参数变更都有反馈依据。这个思路正在被越来越多的视频生成项目用作调优手段本文用一个最小示例完整拆开这套流程覆盖参数设计、评估指标、核心代码、日志验证和排错路径。视频生成不是“给一张图模型自己会搞定一切”。它背后有采样步数、引导强度、参考条件、运动幅度等多个旋钮。这些旋钮叠加在一起后输出和参考图之间很容易出现偏差。过去最常见的处理方式是肉眼试错改小 CFG换一个 seed加一个负面提示词再生成一版然后比较哪一版更像原图。这个方式在小规模实验里勉强能用但一旦进入批量生成、多模型版本迭代、复杂画面控制等工程场景就会出现三个问题可复现性差、历史结论无法复用、调参经验只能停留在个人脑子里。Agentic Optimization 的目的就是把这个人肉调参过程结构化让程序自动描述“当前生成结果离参考图差在哪”再让智能体决定“下一轮应该怎么改参数”。它不会替代生成模型本身而是替代生成模型之外那层反复试错的调度逻辑。1. 先搞清楚 Image-to-Video 的 adherence 为什么难调1.1 什么是 Image-to-Video adherenceImage-to-Video 任务输入是一张静态参考图输出是一段连续视频。Adherence 描述的是这段视频在多大程度上保留了参考图中的有效信息。最常见的检查点是首帧。生成视频的第一帧是否和参考图保持一致的构图、人物、背景和颜色是最直接的 adherence 信号。如果首帧就已经换了人后面的一切都无从谈起。但 adherence 不只是首帧。它还包括人物身份一致性同一个角色在连续帧中脸型、服装、肤色是否稳定。场景结构一致性参考图的背景布局是否被破坏例如椅子数量变多、窗户位置改变。细节保持文字、标识、物体纹理是否在动态变化中发生漂移。语义一致性参考图里的对象是否仍然是同一个概念比如“一只蓝色的马克杯”不能变成“一个蓝色碗”。从工程角度看adherence 不是一个单一指标而是一组需要分层量化的对齐程度。正因为它是多维度问题单靠人力来回试错很难覆盖全部维度。1.2 手动调参为什么容易陷入 trial-and-error手动调参看起来门槛低实际操作时问题很多。参数空间是连续且高维的。以常见文生视频或图生视频模型为例至少要同时考虑采样步数、CFG scale、seed、负向提示词、参考图控制强度、运动幅度等参数。这些参数之间有交互效应单独把 CFG scale 调高可能提升 prompt 跟随能力但会损失动态自然度单纯降低 controlnet 权重可能让动作更自由但会脱离参考图结构。人的反馈是主观且不连续的。肉眼判断“更接近了”无法退化成具体数值无法告诉下一次实验应该改变哪个方向。连续两次微调人只能得到一个粗略排序很难知道是哪个参数导致了差异尤其是当 seed 也在随机变化时实验结果甚至会反过来。另一个容易被忽视的问题是缓存和复现。手动操作时经常改完某个参数后直接重新生成不会自动记录完整参数组合、模型版本、提示词和参考图预处理方式。等到需要回看“上次那个效果很好的版本是怎么生成的”往往只能从视频文件名反推信息严重不足。这些原因叠加起来导致人肉调参的稳定性很差。它不是说绝对无效而是效率低、不可维护无法支撑批量实验和团队协作。1.3 Agentic Optimization 到底是做什么的Agentic Optimization 是一套让程序自主决定“下一组参数怎么调”的优化方法。它把整个调优过程拆成三个角色生成器接收参考图和参数产出视频。评估器接收参考图和视频产出一组量化分数。优化 Agent接收历史实验记录和当前分数产出下一组参数。核心差异在于“决策者”。传统手动调参时决策者是人网格搜索时决策者是穷举器Agentic Optimization 时决策者是具备历史记忆和推理能力的智能体。它既可以是基于 LLM 的 Agent也可以是基于贝叶斯优化的策略器二者都可以承接“根据反馈调整参数”的任务。这里先使用一个对比表格帮助理解三种方式之间的差异。优化方式决策依据文本参数处理历史使用能力计算开销可解释性手动试错人眼观察擅长但不可记录依赖个人记忆低高网格搜索穷举组合很难处理不利用历史高高Agentic Optimization量化反馈 Agent 推理可以通过 LLM 改写自动积累实验历史中高中高Agentic Optimization 更贴近工程师理解调参过程的思路先看当前结果哪里不对再判断是什么原因最后小步调整少数参数验证后再继续。它把“人肉经验”变成“可描述的反馈回路”。2. 设计一个 Agentic Optimization 最小闭环2.1 整条优化链路由哪几部分组成在动手写代码前先定义清楚闭环里的数据流。一次典型优化实验的主链路如下ref_image params - generator - video video ref_image - evaluator - metrics history metrics - agent - new_params loop这个链路并不复杂但工程上需要明确几个边界。生成器要保证相同参数和 seed 的情况下输出可复现。否则评估器算出分数下降时无法判断是参数变化导致还是模型抽样本身不稳定。评估器要固定输入格式比如参考图的分辨率、视频帧采样间隔、指标计算方式。优化 Agent 要受约束不能无限扩大参数范围也不能每轮把所有参数都改一遍。这样设计之后优化过程才能被观察、被复现、被审计。2.2 参数空间怎么定义哪些参数值得自动搜索Image-to-Video 模型可调参数很多但不是所有参数都适合交给 Agent 去搜。有些参数直接影响生成质量有些参数只影响效率有些参数反复改动没有意义。适合自动搜索的参数通常满足两个条件对输出影响明显取值空间是可理解的。常见可以纳入搜索空间的参数如下表参数含义建议搜索范围对 adherence 的影响guidance_scale引导强度5.0 - 15.0越高越贴近提示词但可能丢失运动自然度num_inference_steps采样步数20 - 60步数过少可能出现噪声过多增加耗时seed随机种子0 - 999999影响生成结果的随机性和部分细节controlnet_weight参考图结构控制权重0.0 - 1.5越高越保持构图但可能限制动态幅度ip_adapter_weight内容特征注入权重0.0 - 1.2越高越保留物体细节和风格motion_strength运动幅度0.0 - 1.0过高时容易脱离参考图结构negative_prompt负面提示词不同文本组合影响崩坏、变形和细节丢失数值型参数适合交给常规搜索策略或 Agent 调整。文本型参数如 negative_prompt普通网格搜索很难处理但 LLM Agent 可以理解语义并生成新的提示词组合。这也是 Agentic Optimization 相比传统自动调参工具的一个重要优势。这里要注意参数空间不是越大越好。每轮调整 2 到 3 个参数比每轮同时改 6 个参数更容易归因。搜索范围也应该参考生成模型的实际能力过宽的范围会导致大量实验浪费在无效区域。2.3 反馈信号如何设计从 CLIP Score 到分层评估Image-to-Video adherence 不能用单一数值完全表达。只用一个平均 CLIP Score容易让 Agent 在数值上过拟合最终得到“分数高但人眼看着很奇怪”的视频。反馈信号至少应该分成四层首帧相似度参考图与生成视频首帧在语义或像素层面的对齐程度。身份保持度人物或主体在整段视频中的一致性。运动自然度光流大小和连续性是否合理是否因为过度贴近参考图而出现“凝固感”。美学质量画面是否出现明显变形、闪烁、噪声。每个维度都可以找到对应计算方式。下面是一个反馈设计示例指标计算方式示例作用clip_simCLIP 对参考图和首帧的特征余弦相似度衡量语义级首帧一致性lpipsLPIPS 或简单 L2 距离衡量像素级结构接近程度identity_simReID 特征向量余弦相似度衡量人物身份保持motion_magnitude相邻帧光流平均幅度衡量运动是否充足aesthetic_score美学评分模型衡量画面观感在实际项目中可以对这些指标做加权合成。示例公式如下composite 0.35 * clip_sim 0.20 * identity_sim - 0.15 * lpips 0.10 * min(motion_magnitude, 1.0) 0.20 * aesthetic_score具体权重取决于业务目标。如果产品更重视“人物不动也要像原图”就要提高 clip_sim 和 identity_sim 的权重如果产品更重视“动起来是否自然”则要保留 motion 指标的正面权重。反馈信号设计得越合理Agent 收到的“原因”越准确后续参数调整的方向性也就越强。3. 环境准备与示例工程结构3.1 运行环境与依赖版本怎么选Agentic Optimization 涉及模型推理、指标计算和 Agent 调用环境依赖比普通脚本多一些。下面是一组示例依赖实际项目落地前需要结合自己的 GPU 驱动和模型版本核对。依赖作用示例版本Python运行环境3.10PyTorch深度学习推理2.2.xDiffusers加载生成模型0.27.xTransformers加载 CLIP 评估模型4.40.xOpenCV读取视频、抽帧4.9.xOpenAI SDK调用 Agent 服务1.xFFmpeg视频抽帧或编码辅助6.x建议使用 16GB 以上显存的 GPU 运行视频生成模型。如果显存不足可以启用enable_model_cpu_offload()但生成速度会明显下降。学习环境可以用较小的模型跑通流程生产环境再替换为更高精度的模型。关键是先把“生成 - 评估 - Agent 调整”的闭环跑起来验证链路设计是否合理。3.2 示例工程目录结构为了让实验可追踪建议把代码和实验产物分开。示例目录如下image2video-agent/ ├── configs/ │ └── optimize_face.yaml ├── src/ │ ├── generator.py │ ├── evaluator.py │ ├── agent.py │ └── main.py ├── inputs/ │ └── ref_face.png ├── experiments/ │ └── run_001/ └── requirements.txtconfigs/存放优化任务配置。src/generator.py封装生成模型。src/evaluator.py封装评估指标。src/agent.py封装智能体决策逻辑。experiments/按 run_id 保存每一轮视频、参数和指标。这种结构的好处是职责划分清楚新增模型或指标时不需要改动主循环。3.3 用配置文件描述一次优化任务配置文件的目的是让实验参数外置化避免每次修改都要改代码。下面是一个 YAML 示例task: ref_image: inputs/ref_face.png output_dir: experiments/run_001 max_trials: 12 early_stop_patience: 3 save_top_k: 3 generator: model_id: stabilityai/stable-video-diffusion-img2vid-xt device: cuda max_frames: 16 search_space: guidance_scale: min: 5.0 max: 15.0 num_inference_steps: min: 20 max: 60 controlnet_weight: min: 0.0 max: 1.5 motion_strength: min: 0.0 max: 1.0 seed: type: categorical values: [0, 42, 123, 888, 1024] evaluator: weights: clip_sim: 0.35 identity_sim: 0.20 lpips: 0.15 motion_magnitude: 0.10 aesthetic_score: 0.20 agent: type: llm model_name: gpt-4o-mini max_text_params_change: 1这个配置明确了三个问题这一次优化任务要跑多少轮允许 Agent 修改哪些参数最终用什么公式综合判断好坏。注意model_id和评估器权重都属于示例配置真实项目要根据所选模型和业务目标调整。比如有些生成模型不支持motion_strength配置里就不应该出现这个字段。4. 核心代码实现生成器、评估器、优化 Agent4.1 用生成器封装底层 image-to-video 模型生成器的任务不是复现模型源码而是把“参考图 参数”变成“视频文件”并保证相同的参数输入能够复现相同结果。下面是一个示例性实现用于表达参数传递逻辑。实际接入不同开源模型时需要根据模型的 API 签名调整。import torch from diffusers import StableVideoDiffusionPipeline from PIL import Image class ImageToVideoGenerator: def __init__(self, model_id: str, device: str cuda): self.device device self.pipe StableVideoDiffusionPipeline.from_pretrained( model_id, torch_dtypetorch.float16, ).to(device) self.pipe.enable_model_cpu_offload() def generate(self, ref_image: Image.Image, params: dict, output_path: str): seed params.get(seed, 0) generator torch.Generator(cuda).manual_seed(seed) result self.pipe( imageref_image, promptparams.get(prompt), negative_promptparams.get(negative_prompt), num_framesparams.get(num_frames, 16), guidance_scaleparams.get(guidance_scale, 6.0), num_inference_stepsparams.get(num_inference_steps, 30), generatorgenerator, ) frames result.frames[0] if isinstance(result.frames, list) else result.frames self._save_video(frames, output_path) return output_path这段代码中有三个关键点需要解释。第一生成器必须显式接收seed否则每次生成结果都会不同后续评估和归因都会失效。第二StableVideoDiffusionPipeline的具体参数名在不同版本中可能不同。比如有的版本支持height和width有的版本通过参考图尺寸自动推导。编写时要先阅读自己所用版本的__call__签名不要照搬。第三enable_model_cpu_offload()能降低显存占用但会增加推理耗时。如果显存充足可以去掉换成.to(device)。4.2 评估器计算参考图与视频的对齐分数评估器接收参考图和视频路径输出一组可比较的指标。下面是一个最小实现重点展示如何使用 CLIP 计算参考图与首帧的相似度。import cv2 import torch from PIL import Image from transformers import CLIPProcessor, CLIPModel class AdherenceEvaluator: def __init__(self): self.model CLIPModel.from_pretrained(openai/clip-vit-base-patch32) self.processor CLIPProcessor.from_pretrained(openai/clip-vit-base-patch32) staticmethod def extract_first_frame(video_path: str): cap cv2.VideoCapture(video_path) ok, frame cap.read() cap.release() if not ok: raise RuntimeError(fread video failed: {video_path}) return cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) def compute(self, ref_image_path: str, video_path: str) - dict: ref_image Image.open(ref_image_path).convert(RGB) first_frame Image.fromarray(self.extract_first_frame(video_path)) inputs self.processor( images[ref_image, first_frame], return_tensorspt, ) features self.model.get_image_features(**inputs) clip_sim torch.nn.functional.cosine_similarity( features[0:1], features[1:2] ).item() return { clip_sim: clip_sim, first_frame_similarity: clip_sim, }这个实现只计算了首帧维度。生产环境中可以继续扩展对多个中间帧计算 CLIP避免只看首帧。用 LPIPS 计算像素级距离。用 ReID 模型计算身份保持度。用光流模型统计运动幅度。引入美学评分模型。评估器返回的指标最好保持为字典结构键名固定。Agent 和主循环都能根据键名统一读取方便后续添加新指标。4.3 优化 Agent 根据反馈生成下一组参数优化 Agent 是整个 loop 的决策核心。它需要把历史实验和当前指标一起放入 prompt让模型输出下一组参数。下面是一个基于 LLM 的最小示例。import json import openai class OptimizationAgent: def __init__(self, model_name: str gpt-4o-mini): self.client openai.OpenAI() self.model_name model_name self.history [] staticmethod def _system_prompt(): return ( 你是一个图像到视频生成参数优化器。 你会收到一组历史实验记录记录包含实验编号、参数和指标。 请分析当前 adherence 分数输出下一组实验参数。 严格要求\n 1. 只输出 JSON 对象\n 2. 不要修改 search_space 之外的字段\n 3. 每轮最多修改 2 个数值参数和 1 个文本参数\n 4. 如果指标已经很高优先微调不要大幅改变参数。 ) def _build_messages(self): messages [{role: system, content: self._system_prompt()}] for item in self.history: messages.append({role: user, content: json.dumps(item, ensure_asciiFalse)}) messages.append({ role: user, content: 请根据以上历史输出下一组参数返回 JSON。, }) return messages def optimize(self, feedback: dict) - dict: self.history.append(feedback) resp self.client.chat.completions.create( modelself.model_name, messagesself._build_messages(), response_format{type: json_object}, ) content resp.choices[0].message.content params json.loads(content) return self._sanitize(params) def _sanitize(self, params: dict) - dict: allowed {guidance_scale, seed, num_inference_steps, controlnet_weight, motion_strength, negative_prompt, prompt} return {k: v for k, v in params.items() if k in allowed}Agent 的关键不是调用 LLM 本身而是如何约束它的输出。第一系统提示词必须明确“只输出 JSON”避免模型输出多余解释文字导致解析失败。第二必须限定修改范围和修改数量。否则 LLM 有时会在所有参数上大幅跳跃导致画面崩塌且无法归因。第三_sanitize只做字段白名单校验生产环境还要加入数值范围 clamp。例如guidance_scale不能小于 0num_inference_steps不能为 0。4.4 主循环多轮迭代与提前停止主循环负责把三个模块串起来并处理日志、缓存、提前停止和最优结果保存。import json import shutil from pathlib import Path from PIL import Image from src.generator import ImageToVideoGenerator from src.evaluator import AdherenceEvaluator from src.agent import OptimizationAgent def combine_metrics(metrics: dict, weights: dict) - float: score 0.0 for name, weight in weights.items(): score metrics.get(name, 0.0) * weight return score def run_optimization(config: dict): ref_path config[task][ref_image] output_dir Path(config[task][output_dir]) output_dir.mkdir(parentsTrue, exist_okTrue) ref_image Image.open(ref_path).convert(RGB) generator ImageToVideoGenerator(config[generator][model_id]) evaluator AdherenceEvaluator() agent OptimizationAgent(config[agent][model_name]) best {score: float(-inf), params: None, video: None} no_improve 0 for trial in range(config[task][max_trials]): round_dir output_dir / ftrial_{trial:03d} round_dir.mkdir(parentsTrue, exist_okTrue) if trial 0: params { guidance_scale: 6.0, num_inference_steps: 30, seed: 42, negative_prompt: blurry, distorted, flicker, } else: feedback { trial: trial, best_so_far: best[score], last_metrics: last_metrics, last_params: params, } params agent.optimize(feedback) video_path str(round_dir / output.mp4) generator.generate(ref_image, params, video_path) metrics evaluator.compute(ref_path, video_path) score combine_metrics(metrics, config[evaluator][weights]) last_metrics metrics with open(round_dir / params.json, w, encodingutf-8) as f: json.dump({params: params, score: score, metrics: metrics}, f, ensure_asciiFalse, indent2) if score best[score]: best {score: score, params: params, video: video_path} no_improve 0 else: no_improve 1 if no_improve config[task][early_stop_patience]: break shutil.copy(best[video], output_dir / best.mp4) return best这段代码把核心逻辑串起来了。首轮使用基础参数后续每一轮都通过 Agent 决策。每轮结果会写入params.json便于回看和复现。只要连续几轮没有提升就提前停止避免计算资源浪费在无效搜索上。生产环境还需要增加两个细节一是生成失败时捕获异常并记录错误而不是直接让整个进程崩溃二是相同参考图和相同参数组合的请求可以走缓存跳过重复生成。5. 运行验证从单轮生成到多轮收敛5.1 单轮生成验证人工观察完成上述代码后先用一次最小运行验证链路是否正常。执行命令python src/main.py --config configs/optimize_face.yaml --max_trials 2首次运行如果成功会在experiments/run_001/trial_000目录下生成output.mp4和params.json。打开output.mp4主要看三点第一帧是否和输入参考图高度一致。后续帧是否保持了人物身份和背景结构。是否有明显崩坏、闪烁或运动僵硬。如果首帧都和第二帧完全错位问题往往出在生成模型配置或参考图预处理上而不是优化 Loop 本身。单轮运行的意义在于确认基础链路没有问题。此时不要急于让 Agent 自动跑 20 轮先把“生成 - 评估 - 保存日志”这条链路固定下来。5.2 多轮迭代结果分析链路稳定后再运行多轮优化。下面是一个示例输出的 CSV 表格用来描述参数和分数变化趋势。这里不是真实实验数据只用于说明常见的收敛模式。trial,guidance_scale,controlnet_weight,motion_strength,clip_sim,composite 0,6.0,0.8,0.5,0.86,0.72 1,8.0,0.9,0.4,0.89,0.78 2,10.0,1.0,0.3,0.91,0.82 3,12.0,1.1,0.2,0.90,0.80 4,9.0,0.95,0.35,0.92,0.85 5,9.5,1.0,0.33,0.93,0.86从趋势上看前两轮 Agent 在逐步提高 guidance_scale 和控制权重提升首帧对齐分数。第三轮继续提高导致分数回落说明参数过冲。Agent 随后把参数回调到中间范围并微调 motion_strength最终在第 5 轮拿到最高分。这就是 Agentic Optimization 的价值它能够从历史反馈中判断方向而不是简单在所有参数网格上穷举。如果多轮运行后分数始终没有变化优先检查配置是否真正传入了生成器。比如seed是否固定、guidance_scale是否被代码覆盖。5.3 日志与中间产物怎么记录实验记录是否完整直接决定了这套优化流程是否可维护。建议每个 trial 目录至少保存以下内容experiments/run_001/ ├── trial_000/ │ ├── output.mp4 │ ├── first_frame.png │ └── params.json ├── trial_001/ │ ├── output.mp4 │ ├── first_frame.png │ └── params.json ├── best.mp4 ├── best_params.json └── metrics_summary.csvparams.json内容建议包含完整参数、评估指标、综合分数、模型版本和运行时间。这样即使几个月后回看也能知道一个视频是怎么生成的。metrics_summary.csv用于横向比较多次试验也可以在 Jupyter 中快速画趋势图。日志越完整后续排查 Agent 决策错误时的速度就越快。6. 常见问题与排查链路6.1 评估分数一直不动怎么办问题现象常见原因检查方式处理建议多轮生成后分数几乎没有变化Agent 返回的参数没有真正传入生成器打印每轮params并核对生成器接收值在生成器入口增加参数日志保证参数一路传递分数不变但视频画面明显变化评估器读取的参考图与输入不一致检查评估器读取路径和预处理统一参考图路径保存为预处理好后的输入分数不变且视频画面完全相同seed没有被真正设置查看日志中的 seed 和生成器实现固定 seed并验证两轮同参数生成结果是否一致Agent 每次返回相同建议prompt 中缺少历史反馈或模型输出被固定 prompt 限制打印 Agent 请求 payload在 prompt 中明确列出最近分数和参数变化方向排查顺序应该从数据流的上游开始先确认输入的参考图正确再确认生成器确实消费了参数最后确认评估器使用的视频就是本轮生成结果。6.2 Agent 总是改大参数导致画面崩坏有些时候Agent 会连续提高guidance_scale或controlnet_weight因为它在数值上看到首帧相似度提升但忽略了画面僵硬、变形等问题。等到分数骤降已经浪费了好几轮实验。这个问题要从约束端解决。第一在_sanitize中做参数范围 clamp。示例def _sanitize(self, params: dict) - dict: params[guidance_scale] min(max(params.get(guidance_scale, 6.0), 5.0), 15.0) params[controlnet_weight] min(max(params.get(controlnet_weight, 0.8), 0.0), 1.5) return params第二在系统提示词中限制每轮修改的参数量要求“没有明确证据不要改动多个参数”。第三在评估器里加入“崩坏惩罚”。例如当lpips超过某个阈值或motion_magnitude过低时直接调低综合分让 Agent 学会避免这种参数方向。这一步很重要Agent 不是万能的它只能根据反馈信号优化。反馈信号如果只包含“越像越好”它自然会忽略“动得太少”的问题。6.3 多轮优化后结果仍不满足要求如果跑完设定的 12 轮甚至 20 轮最终视频仍然不满意不要急着断言 Agent 不行先排查下面几个方向。检查项说明指标是否覆盖业务目标如果只算了 CLIP加入身份和运动指标后再试参数空间是否太窄例如只调guidance_scale但问题出在ip_adapter_weight参考图是否适合不同光照、背景、遮挡条件下生成难度差别很大Agent 是否只看最近一轮需要把完整历史传给 Agent或至少传递 best 参数作为基线模型本身是否已经达到能力上限换更强的基础模型比调参更有效当模型本身已经无法再贴合参考图时任何调参手段都只是在小范围内寻找“相对更好”。Agentic Optimization 解决的是参数搜索效率问题不能凭空提高基础模型的上限。6.4 生产环境部署需要注意什么把这套闭环放到生产环境不能直接照搬学习环境的单进程代码需要补上几个工程能力。并发控制生成视频非常吃 GPU多任务要进入队列限制同时生成的视频数量。缓存对参考图 hash 参数 hash 模型版本做缓存。相同的输入组合不要重复跑。失败重试生成器可能因为显存抖动或模型加载失败退出需要捕获异常并最多重试两次。预先设置最大轮数和超时时间避免一个任务卡住整个队列。监控记录每轮生成耗时、成功率、平均分数方便判断 Agent 是否在收敛。审计保存完整历史包括 Agent 的输入和输出必要时可以回溯是哪一轮决策导致了结果漂移。生产环境的优化目标是“稳定找到可接受的参数组合”而不是“无限提升分数”。要设定可接受的分数阈值达到阈值后提前退出节省算力。7. 最佳实践与扩展方向7.1 参数调优的可复用检查清单在每一次 Image-to-Video adherence 调优实验前建议先过一遍下面的清单。固定生成模型版本和依赖版本并在实验结果中记录版本号。统一参考图分辨率、裁剪方式和预处理逻辑。每一轮实验记录完整params包括 prompt、negative_prompt 和 seed。验证生成器确实使用了传入的每个参数尤其是 seed。评估器使用与生成输入一致的参考图不能后台另外加载一份不同图片。使用至少 2 个评估指标不要只依赖 CLIP Score。为每个 Agent 输出参数做范围校验和 clamp。每轮最多修改 2 到 3 个参数避免无法归因。对相同参考图和相同参数组合开启缓存。设置最大轮数和提前停止条件避免无限试错。每轮保存视频、首帧、参数和指标。设定业务可接受的分数阈值达到后直接终止。这份清单既适用于学习阶段跑通 Demo也适用于生产环境上线前检查。7.2 从离线优化到在线自适应一批实验跑完后得到的结论可以沉淀成“参数基线”。例如人像特写场景适合guidance_scale9.0、controlnet_weight0.95。场景运动较多的片段适合motion_strength0.4但需要提高clip_sim权重。含复杂文字的画面需要更高的ip_adapter_weight。这些基线可以先通过离线优化得到再存到配置中心或规则库。当新的参考图进入产线时不用每次都从零搜索而是先加载对应场景基线再跑 3 到 5 轮微调即可。从“每次全量搜索”变成“按场景微调”能显著降低算力消耗也使优化结果更可控。7.3 后续可以接入的方向Agentic Optimization 是一个框架不是单一算法。后续可以沿着几个方向扩展。第一个方向是接入人类偏好反馈。每轮优化后让人工从几个候选结果中排序把排序结果作为额外指标返回给 Agent。这样可以在自动化优化基础上加入主观质量判断。第二个方向是多目标优化。把 adherence、运动自然度、美学质量拆成多个目标使用 Pareto 前沿搜索让业务方在“更像原图”和“动得更自然”之间做选择。第三个方向是更细粒度的条件控制。比如在生成器里加入 ControlNet 深度图或姿态图然后把 ControlNet 的导引权重也纳入 Agent 搜索空间。第四个方向是策略沉淀。让 Agent 在每次优化结束时输出一段“优化经验”例如“当lpips超过某阈值时应该先降低controlnet_weight”。把这些经验累积到策略库中可以让后续优化更快收敛。从工程角度来看Agentic Optimization 的核心价值不是“自动化”本身而是把原本藏在大脑里的调参经验变成可记录、可量化、可复用的反馈循环。真正落地时最优先要做的事情不是把 Agent 写得多智能而是先把评估指标定义清楚。指标一旦定义错误Agent 优化得再快也只是在错误的方向上跑得更远。