openJiuwen agent-core-java 视频生成响应封装:VideoGenerationResponse 字段解析与完整调用链实践
发布时间:2026/10/13 1:46:53 锦皓数字建站

人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习【免费下载链接】agent-core-javaopenJiuwen agent core Java是 openJiuwen Core的 Java版本提供AI Agent开发、运行、调优与演进相关的全套SDK能力。项目地址https://gitcode.com/openJiuwen/agent-core-java点击查看免费下载导读本文围绕 openJiuwen agent-core-javacom.openjiuwen.core.foundation.llm.schema包中的VideoGenerationResponse类展开剖析它是如何封装大模型视频生成接口文本转视频 / 图片转视频的响应数据的包括其继承体系、六个核心字段的语义与默认值、Jackson 序列化行为以及从Model.generateVideo到底层DashScopeModelClient的完整调用链路。读完本文你将掌握该响应类的每个字段在真实请求-响应流程中的来源并能在自己的 Agent 应用中正确读取视频生成结果、判断各模型客户端的能力边界。一、类定位视频生成接口的统一响应模型VideoGenerationResponse位于com.openjiuwen.core.foundation.llm.schema包定义于 VideoGenerationResponse.java类声明如下public class VideoGenerationResponse extends GenerationResponse从源码注释可以确认它是 Python 版openjiuwen/core/foundation/llm/schema/generation_response.py中同名类的 Java 镜像用于封装视频生成接口的响应数据。其父类GenerationResponse定义于 GenerationResponse.java是整个多模态生成响应体系的公共基类目前包含一个字段声明说明private String model实际执行生成所用的模型名称用于标记该视频由哪个模型产出VideoGenerationResponse与同包下的ImageGenerationResponse、AudioGenerationResponse共同组成了 openJiuwen 的多模态生成响应家族——它们均继承GenerationResponse并各自扩展与模态相关的字段。二、字段详解六个字段的语义、来源与默认值VideoGenerationResponse在父类model字段之上新增了五个字段完整字段清单如下声明说明private String model继承自GenerationResponse实际生成视频的模型名称private String videoUrl生成的视频文件 URLprivate byte[] videoData视频二进制数据可选通常与videoUrl二选一使用private Double duration视频时长秒private String resolution视频分辨率如1920x1080、1080Pprivate String format mp4视频封装格式默认值为mp4其中format字段带有Builder.Default注解默认值为mp4。这意味着即使构建响应时未显式指定格式使用 Builder 方式构建出的对象也会携带formatmp4的默认值而直接使用无参构造或字段赋值路径时不会自动填充该默认值由 LombokSuperBuilder的默认值机制决定这一点在使用时值得留意。2.1 字段与 JSON 键名的映射该类对两个字段显式声明了 Jackson 序列化/反序列化时的 JSON 键名JsonProperty(video_url) private String videoUrl; JsonProperty(video_data) private byte[] videoData;即videoUrl与 JSON 中的video_url对应videoData与 JSON 中的video_data对应。这一命名策略与 DashScope 等厂商返回的响应结构保持一致下文第 4 节的调用链中会看到video_url正是服务端响应体output中的键名。2.2 空值字段的序列化控制类级注解JsonInclude(JsonInclude.Include.NON_NULL)意味着当这些字段为null时序列化结果中不会出现对应的 JSON 键。这在实际使用中非常关键——例如videoData通常为null视频以 URL 形式返回若不控制则每个响应都会输出一个巨大的video_data字段徒增负载而该注解配合 Lombok 的Data使响应对象天然具备空字段自动省略的能力。三、构建方式Builder 与全参构造类上标注了Data、SuperBuilder、NoArgsConstructor、AllArgsConstructor、EqualsAndHashCode(callSuper true)因此支持以下构建方式// 方式一链式 Builder推荐SuperBuilder 支持继承父类的 model 字段 VideoGenerationResponse response VideoGenerationResponse.builder() .model(wan2.6-t2v) .videoUrl(https://example.com/video.mp4) .duration(6.0) .resolution(1080P) .build(); // format 自动取默认值 mp4 // 方式二全参构造 VideoGenerationResponse response2 new VideoGenerationResponse( wan2.6-t2v, // model https://example.com/video.mp4, // videoUrl null, // videoData 6.0, // duration 1080P, // resolution mp4 // format );EqualsAndHashCode(callSuper true)表示 equals/hashCode 会连同父类model字段一起参与比较这在测试断言和结果缓存场景下可避免仅比较子类字段带来的漏判。四、调用链从 Model 门面到底层客户端VideoGenerationResponse是视频生成流程的终点产物其完整产生链路为Model.generateVideo(...) → ModelClient.generateVideo(ListUserMessage, VideoGenerationOptions) → BaseModelClient.generateVideo(12 个参数的重载) → 具体客户端实现如 DashScopeModelClient → 解析厂商 API 响应 → VideoGenerationResponse.builder()...build()4.1 Model 门面参数与默认值在 Model.java 中Model提供了两个generateVideo重载// 最简调用除消息外全部使用默认参数 public CompletionStageVideoGenerationResponse generateVideo(ListUserMessage messages) { return generateVideo(messages, null, null, null, null, null, 5, true, false, null, null, null); }最简重载对应的默认参数为duration55 秒、promptExtendtrue提示词扩写开启、watermarkfalse不加水印其余参数为null。完整重载则把全部选项打包为Model.VideoGenerationOptionsrecord定义于 Model.javapublic record VideoGenerationOptions( String imgUrl, // 首帧图片 URL传入则为图片转视频 String audioUrl, // 背景音频 URL String model, // 指定模型名为 null 时使用 ModelRequestConfig 中配置的模型 String size, // 画幅如 1280*720 String resolution, // 分辨率如 1080P int duration, // 时长秒 boolean promptExtend, // 是否扩写提示词 boolean watermark, // 是否加水印 String negativePrompt, // 反向提示词 Integer seed, // 随机种子 MapString, Object extraFields) { // 透传给厂商的额外参数 }Model门面将ListUserMessage经safeUserMessages处理后委托给内部持有的ModelClientModelClient接口中的默认实现Model.java会在客户端不支持视频生成时返回一个携带IllegalStateException(Model client lacks generate_video support)的失败CompletionStage。4.2 BaseModelClient抽象方法与异步包装BaseModelClient.java 定义了 12 参数版本的抽象方法并提供基于它的异步适配public abstract VideoGenerationResponse generateVideo( ListUserMessage messages, String imgUrl, String audioUrl, String model, String size, String resolution, int duration, boolean promptExtend, boolean watermark, String negativePrompt, Integer seed, MapString, Object kwargs) throws Exception; Override public CompletionStageVideoGenerationResponse generateVideo( ListUserMessage messages, Model.VideoGenerationOptions options) { try { return CompletableFuture.completedFuture(generateVideo( messages, options.imgUrl(), options.audioUrl(), options.model(), options.size(), options.resolution(), options.duration(), options.promptExtend(), options.watermark(), options.negativePrompt(), options.seed(), options.extraFields())); } catch (Exception exception) { return CompletableFuture.failedFuture(exception); } }所有具体模型客户端只需实现抽象版本异步能力由基类统一提供。五、DashScope 实现VideoGenerationResponse 的真实生产者在所有模型客户端中只有DashScopeModelClient完整实现了视频生成逻辑DashScopeModelClient.java其余客户端的行为见第 6 节。其内部流程可概括为参数组装 → 接口调用 → 响应解析 → 构建响应对象四步消息校验requireSingleUserMessageForVideo强制要求messages恰好包含一条且为UserMessageDashScopeModelClient.java该消息的文本内容必须非空否则抛出校验错误Video generation requires non-empty text content.。参数组装以api_key、model、prompt、prompt_extend、watermark为基础参数按需追加duration、negative_prompt、seed、audio_url随后根据是否传入imgUrl分支处理图片转视频传入imgUrl追加img_url并优先使用resolution、其次size文本转视频未传imgUrl优先使用size、其次resolution最后的putKwargs(apiParams, kwargs)允许透传任意额外参数。接口调用与校验调用DashScopeApi.VIDEO_SYNTHESIS对应路径/services/aigc/video-generation/video-synthesis见 DashScopeModelClient.java 与第 726 行的 API 映射并对响应做ensureOkResponse状态码校验。响应解析与响应对象构建extractVideoPayloadDashScopeModelClient.java从响应中提取三部分数据videoUrl读取output.video_urlduration读取usage.duration或usage.output_video_durationresolution读取usage.size随后通过 Builder 组装响应对象return VideoGenerationResponse.builder() .model(resolvedModel) // 显式传入了 model未用默认 .videoUrl(videoPayload.videoUrl()) .duration(videoPayload.duration()) .resolution(videoPayload.resolution()) .format(mp4) // 显式指定 mp4 .build();可见VideoGenerationResponse的字段与 DashScope 响应体是一一对应的video_url → videoUrl、时长/分辨率来自usage区段。若服务端未返回video_url客户端会抛出No video URL returned from DashScope API.错误videoData字段在这一实现中保持null为自行下载/注入二进制内容预留了扩展位。六、各模型客户端的能力边界从源码结构看generateVideo的支撑情况因客户端而异调用前应确认目标 provider 的能力模型客户端行为DashScopeModelClient完整实现文本/图片转视频返回填充后的VideoGenerationResponseOpenAIModelClientgenerateVideo返回null见 OpenAIModelClient.javaSiliconFlowModelClient返回null见 SiliconFlowModelClient.javaDeepSeekModelClient返回null仅通过 OpenAI 委托支持对话能力见 DeepSeekModelClient.javaInferenceAffinityModelClient返回null见 InferenceAffinityModelClient.javaIntelliRouterModelClient直接抛出MODEL_CALL_FAILEDIntelliRouter does not support video generation见 IntelliRouterModelClient.java因此在实际应用中视频生成能力目前主要由 DashScope 客户端承担使用其他 provider 时应先判空避免空指针。七、测试验证字段行为有据可依仓库测试对VideoGenerationResponse的字段与参数映射做了完整断言是理解其行为的权威参考。以 DashScopeModelClientTest.java 为例图片转视频分支传入imgUrl、audioUrl、resolution1080P等参数后断言响应对象model为配置默认模型、videoUrl与 mock 返回一致、duration为 6.0、resolution为1080P、format为mp4同时断言请求参数中包含img_url、audio_url、resolution、prompt_extend、watermark、negative_prompt、seed及透传的style且不含size键——印证了有imgUrl时优先 resolution 而非 size的分支逻辑。文本转视频分支不传imgUrl指定modelwan2.6-t2v、resolution720P断言请求参数携带resolution与model。此外 ModelTest.java 展示了最简用法VideoGenerationResponse.builder().videoUrl(video).build()即可构造一个最小响应用于 stub。八、使用建议与注意事项优先读取videoUrlDashScope 链路返回的均为 URL 形式videoData默认保持null如需二进制数据应基于videoUrl自行下载后注入。format默认值依赖 Builder默认mp4由Builder.Default保证若通过其他方式构建且不关心格式建议显式设置以免与预期不符。空值字段自动省略得益于JsonInclude(NON_NULL)将VideoGenerationResponse直接序列化给下游如 Web 接口返回时未填充字段不会出现在 JSON 中这既减小了体积也要求下游解析时按可选字段处理。调用前确认 provider 能力目前仅 DashScope 客户端真正支持视频生成其余客户端返回null或抛异常可先用Model门面统一调用再对返回结果做空值防护。签名以源码为准该类的公开构造器、Builder 与字段签名最终均以仓库中 VideoGenerationResponse.java 的实际 Java 源码为准。小结VideoGenerationResponse是 openJiuwen agent-core-java 多模态生成体系中对视频生成响应的标准化封装它通过继承GenerationResponse复用model字段以五个子类字段完整刻画视频结果URL/二进制、时长、分辨率、格式并以 Jackson 注解保证了与厂商响应键名的兼容和空字段省略。在调用链上它由Model门面统一出口、BaseModelClient定义抽象、DashScopeModelClient完成真实生产并有成体系的测试用例背书。开发者只需面向Model.generateVideo编程即可在支持视频生成的 provider 上获得统一、类型安全的响应模型。赞分享人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习【免费下载链接】agent-core-javaopenJiuwen agent core Java是 openJiuwen Core的 Java版本提供AI Agent开发、运行、调优与演进相关的全套SDK能力。项目地址https://gitcode.com/openJiuwen/agent-core-java点击查看免费下载相关推荐openJiuwen agent-core-java 语音生成响应封装AudioGenerationResponse 详解openJiuwen agent core java 语音生成响应封装AudioGenerationResponse 详解 导读 AudioGeneratio人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习agent-core-java 图像生成响应模型解析ImageGenerationResponse 字段、序列化与调用链深度剖析agent core java 图像生成响应模型解析ImageGenerationResponse 字段、序列化与调用链深度剖析 导读 本文聚焦 openJi人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习openJiuwen agent-core-java 中 DashScopeModelClient 的图像/语音/视频生成实现全解openJiuwen agent core java 中 DashScopeModelClient 的图像/语音/视频生成实现全解 DashScopeModel人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习上一篇Immich Kiosk 使用指南下一篇SVGEdit数据存储终极指南本地与云存储完整实现方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。