智谱大模型API接入
·
注册及登录
网址:https://open.bigmodel.cn/
1、注册账号
2、复制API key
智谱API接入
使用模型:文生视频:CogVideoX-Flash
- 前端JS代码
const handleGenerate = async () => {
// 前置校验
if (!prompt.trim()) {
setErrorMsg('视频描述不能为空!');
return;
}
// 重置状态
setLoading(true);
setGeneratedVideo('');
setIsPlaying(false);
setErrorMsg('');
try {
// 1. 拼接请求参数
const params = new URLSearchParams();
params.append('prompt', prompt); // 视频描述
params.append('model', selectedModel); // 选中的模型
params.append('duration', duration); // 视频时长
// 2. 调用后端GET接口
const response = await fetch(
`http://localhost:8080/large/model/textToVideo?${params.toString()}`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
// 若后端需要额外鉴权头,可添加
// 'Authorization': `Bearer ${apiKey}`
},
}
);
// 3. 处理响应
if (!response.ok) {
throw new Error(`请求失败:${response.status} ${response.statusText}`);
}
const result = await response.json();
// 4. 校验后端返回结果(假设后端返回 { code: 200, data: { videoUrl: 'xxx' }, msg: '成功' })
if (result.code !== 200) {
throw new Error(result.msg || '视频生成失败');
}
// 设置生成的视频URL
setGeneratedVideo(result.data);
} catch (error) {
// 错误处理
const err = error as Error;
setErrorMsg(`生成失败:${err.message}`);
console.error('Generation failed:', err);
} finally {
setLoading(false); // 结束加载
}
};
- 后端controller
/**
* 文生视频
*/
@GetMapping("/textToVideo")
@Anonymous
public R<String> textToVideo(String model, String prompt, Integer duration)
{
return R.ok(iLargeModelIntegrationService.textToVideo(model, prompt, duration));
}
- 后端service
/**
* 跟据提示词生成视频
* @param model 模型
* @param prompt 提示词
* @param duration 持续时间
* @return 视频URL
*/
String textToVideo(String model, String prompt, Integer duration);
- 后端serviceImpl
private static final String PREFIX_PROMPT = "将以下文字翻译成英文: ";
//经过测试,将文字描述转化成英文,效果更好
@Override
public String textToVideo(String model, String prompt, Integer duration) {
prompt = textGeneration("qwen-plus", PREFIX_PROMPT + prompt);
return LargeModelIntegration.generationZhiPuCogVideoX(prompt, duration);
}
- 后端LargeModelIntegration工具方法
/**
* 简化版同步生成(使用默认轮询参数)
* @param prompt 正向提示词
* @return 视频URL
*/
public static String generationZhiPuCogVideoX(String prompt, Integer duration) {
return syncZhiPuCogVideoX(prompt, duration, size, false, 50, 3000);
}
/**
* CogVideoX-Flash 同步生成视频(提交任务+自动轮询,直到返回结果)
* @param prompt 正向提示词
* @param duration 视频时长(1-10秒)
* @param size 分辨率(720p/1080p)
* @param withAudio 是否添加AI音效
* @param maxPollCount 最大轮询次数(默认30次)
* @param pollInterval 轮询间隔(毫秒,默认3000ms)
* @return 视频URL
*/
public static String syncZhiPuCogVideoX(String prompt, Integer duration, String size, Boolean withAudio,
int maxPollCount, long pollInterval) {
// 1. 兜底轮询参数
int finalMaxPollCount = maxPollCount <= 0 ? 30 : maxPollCount;
long finalPollInterval = pollInterval <= 0 ? 3000 : pollInterval;
// 2. 提交异步任务
String taskId = zhiPuCogVideoXFlash(prompt, duration, size, withAudio);
int pollCount = 0;
String result = "";
// 3. 轮询查询结果
while (pollCount < finalMaxPollCount) {
try {
Thread.sleep(finalPollInterval);
result = queryZhiPuCogVideoXResult(taskId);
// 任务仍在处理中,继续轮询
if ("PROCESSING".equals(result)) {
pollCount++;
log.info("CogVideoX-Flash轮询第{}次,任务状态:{}", pollCount, result);
} else {
// 任务完成(成功/失败),退出轮询
break;
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
log.error("CogVideoX-Flash轮询中断", e);
throw new RuntimeException("轮询中断", e);
}
}
// 4. 轮询超时判断
if (pollCount >= finalMaxPollCount) {
throw new RuntimeException("CogVideoX-Flash轮询超时,任务仍在处理中");
}
return result;
}
/**
* 文生视频结果查询
* @param taskId 任务ID
* @return 视频URL/任务状态(SUCCEEDED/FAILED/RUNNING/PENDING)
*/
public static String queryZhiPuCogVideoXResult(String taskId) {
// 1. 参数校验
Assert.isTrue(StringUtils.isNotBlank(taskId), "taskId不能为空");
// 2. 构建请求头
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + ZHIPU_API_KEY);
headers.put("Content-Type", "application/json");
// 3. 拼接查询URL
String finalQueryUrl = String.format(COGVIDEOX_QUERY_URL, taskId);
log.info("任务查询URL:{}", finalQueryUrl);
try {
// 发起查询请求
String result = HttpUtil.get(finalQueryUrl, headers);
log.info("查询结果:" + result);
// 解析响应
JSONObject resultJson = JSONObject.parseObject(result);
if (resultJson.containsKey("error")){
log.info("查询失败:" + resultJson.getJSONObject("error").getString("message"));
throw new RuntimeException("查询文生视频结果异常");
}
List<JSONObject> video_result = resultJson.getList("video_result", JSONObject.class);
String taskStatus = resultJson.getString("task_status");
log.info("任务状态:{}", taskStatus);
// 按状态返回结果
switch (taskStatus) {
case "SUCCESS":
// 生成成功,返回视频URL
return video_result.get(0).getString("url");
case "FAILED":
throw new RuntimeException("文生视频任务失败");
case "PROCESSING":
log.info("文生视频任务处理中...状态:{}", taskStatus);
return taskStatus;
default:
log.warn("未知任务状态:" + taskStatus);
return taskStatus;
}
} catch (Exception e) {
log.error("查询结果异常", e);
throw new RuntimeException("查询文生视频结果异常", e);
}
}
/**
* CogVideoX-Flash 文生视频(异步提交任务,POST请求)
* @param prompt 正向提示词(必填,≤1000字符)
* @param duration 视频时长(可选,1-10秒,默认8秒)
* @param size 视频分辨率(可选,如720p/1080p,默认720p)
* @param withAudio 是否添加AI音效(可选,默认false)
* @return taskId 任务ID
*/
public static String zhiPuCogVideoXFlash(String prompt, Integer duration, String size, Boolean withAudio) {
// 1. 参数校验(与原有风格一致)
Assert.isTrue(StringUtils.isNotBlank(prompt) && prompt.length() <= 1000, "正向提示词不能为空且长度≤1000字符");
Assert.isTrue(duration == null || (duration >= 1 && duration <= 10), "视频时长需为1-10秒");
// 2. 参数兜底处理
int finalDuration = duration == null ? 5 : duration;
String finalSize = StringUtils.isBlank(size) ? "720p" : size;
boolean finalWithAudio = withAudio != null && withAudio;
// 3. 构建请求头(智谱AI认证方式)
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + ZHIPU_API_KEY);
headers.put("Content-Type", "application/json; charset=utf-8");
// 4. 封装请求参数(适配CogVideoX-Flash API规范)
JSONObject param = new JSONObject();
param.put("model", ZHIPU_COGVIDEOX_FLASH_MODEL_ID); // CogVideoX-Flash固定模型ID
param.put("prompt", prompt); // 视频描述提示词
param.put("duration", finalDuration); // 视频时长(秒)
param.put("size", finalSize); // 分辨率
param.put("with_audio", finalWithAudio); // 是否添加AI音效
param.put("response_format", "url"); // 返回视频URL格式
try {
// 5. 日志打印(与原有风格一致)
log.info("请求入参:prompt:{}", URLDecoder.decode(prompt, StandardCharsets.UTF_8));
// 发起异步任务提交请求
String result = HttpUtil.postJson(COGVIDEOX_CREATE_URL, headers, param.toJSONString());
log.info("请求出参:" + result);
// 解析响应获取taskId
JSONObject resultJson = JSONObject.parseObject(result);
if (resultJson.containsKey("id")) {
return resultJson.getString("id");
} else {
log.error("文生视频返回无request_id:" + result);
throw new RuntimeException("文生视频任务提交失败,未返回request_id");
}
} catch (Exception e) {
log.error("调用异常", e);
throw new RuntimeException("调用异常", e);
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)