2025.11.12总结

news/2025/11/12 23:35:11/文章来源:https://www.cnblogs.com/zangbotao/p/19215805

今天写完AI儿童故事的项目,调通了三个模型分别是文本生成,语音合成,和ai作画。
其中因为ai作画免费额度低,试错次数少,在刚开始无脑用AI导致试错很多,后面看文档才修改过了错误参数

以下是文本生成,和语音合成示例代码,只需要替换其中api密钥即可生成
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.*;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class QianfanApiTest {

private static final String BASE_URL = "https://qianfan.baidubce.com/v2";
private static final String API_KEY = "";// 配置超时时间的 OkHttpClient
private static final OkHttpClient client = new OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS)  // 连接超时.readTimeout(60, TimeUnit.SECONDS)     // 读取超时.writeTimeout(30, TimeUnit.SECONDS)    // 写入超时.build();private static final ObjectMapper mapper = new ObjectMapper();public static void main(String[] args) {try {// 测试对话 APIString response = testChatCompletion();System.out.println("API 响应: " + response);} catch (Exception e) {System.err.println("错误信息: " + e.getMessage());e.printStackTrace();}
}/*** 测试对话补全 API*/
public static String testChatCompletion() throws IOException {String url = BASE_URL + "/chat/completions";// 构建请求体Map<String, Object> requestBody = new HashMap<>();requestBody.put("model", "ernie-speed-128k");List<Map<String, String>> messages = new ArrayList<>();// 系统消息Map<String, String> systemMessage = new HashMap<>();systemMessage.put("role", "system");systemMessage.put("content", "你是一个有用的助手");messages.add(systemMessage);// 用户消息Map<String, String> userMessage = new HashMap<>();userMessage.put("role", "user");userMessage.put("content", "你好,写一个5000字的儿童故事");messages.add(userMessage);requestBody.put("messages", messages);// 转换为 JSONString jsonBody = mapper.writeValueAsString(requestBody);System.out.println("请求体: " + jsonBody);// 构建请求Request request = new Request.Builder().url(url).post(RequestBody.create(jsonBody, MediaType.parse("application/json"))).addHeader("Content-Type", "application/json").addHeader("Authorization", "Bearer " + API_KEY).build();System.out.println("开始发送请求...");// 发送请求try (Response response = client.newCall(request).execute()) {if (!response.isSuccessful()) {throw new IOException("HTTP错误: " + response.code() + " - " + response.message());}String responseBody = response.body().string();System.out.println("请求成功!");return responseBody;}
}

}
import okhttp3.;
import org.json.JSONObject;
import java.io.
;
import java.net.URLEncoder;
import java.util.concurrent.TimeUnit;

class SimpleTextToSpeech {
public static final String API_KEY = "";
public static final String SECRET_KEY = "";
public static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder()
.readTimeout(300, TimeUnit.SECONDS)
.build();

public static void main(String[] args) throws IOException {String text = "哈哈啊啊啊啊啊啊啊啊啊啊啊啊啊啊";String outputFile = "speech_output.mp3";boolean success = textToSpeechSimple(text, outputFile);if (success) {System.out.println("语音合成成功!文件: " + outputFile);} else {System.out.println("语音合成失败!");}
}/*** 简化版文本转语音 - 使用GET请求*/
public static boolean textToSpeechSimple(String text, String outputFilePath) throws IOException {String accessToken = getAccessToken();if (accessToken == null) {return false;}try {// 构建GET请求URLString url = "http://tsn.baidu.com/text2audio?"+ "tex=" + URLEncoder.encode(text, "UTF-8")+ "&lan=zh"+ "&cuid=test_user_123"+ "&ctp=1"+ "&tok=" + accessToken+ "&spd=5"    // 语速+ "&pit=5"    // 音调+ "&vol=5"    // 音量+ "&per=0";   // 发音人Request request = new Request.Builder().url(url).get().build();try (Response response = HTTP_CLIENT.newCall(request).execute()) {System.out.println("响应码: " + response.code());if (!response.isSuccessful()) {System.out.println("请求失败: " + response.code());String errorBody = response.body().string();System.out.println("错误信息: " + errorBody);return false;}// 检查响应类型String contentType = response.header("Content-Type");System.out.println("响应类型: " + contentType);if (contentType != null && contentType.contains("audio")) {// 保存音频文件try (InputStream inputStream = response.body().byteStream();FileOutputStream outputStream = new FileOutputStream(outputFilePath)) {byte[] buffer = new byte[4096];int bytesRead;long totalBytes = 0;while ((bytesRead = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, bytesRead);totalBytes += bytesRead;}System.out.println("音频文件大小: " + totalBytes + " 字节");}return true;} else {// 读取错误信息String errorResponse = response.body().string();System.out.println("API返回错误: " + errorResponse);// 尝试解析错误信息try {JSONObject errorJson = new JSONObject(errorResponse);System.out.println("错误码: " + errorJson.optInt("err_no"));System.out.println("错误信息: " + errorJson.optString("err_msg"));} catch (Exception e) {System.out.println("无法解析错误信息");}return false;}}} catch (Exception e) {System.out.println("请求异常: " + e.getMessage());e.printStackTrace();return false;}
}/*** 获取访问令牌*/
static String getAccessToken() throws IOException {try {MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");RequestBody body = RequestBody.create(mediaType,"grant_type=client_credentials&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY);Request request = new Request.Builder().url("https://aip.baidubce.com/oauth/2.0/token").method("POST", body).addHeader("Content-Type", "application/x-www-form-urlencoded").build();try (Response response = HTTP_CLIENT.newCall(request).execute()) {String responseBody = response.body().string();System.out.println("Token获取响应: " + responseBody);JSONObject jsonResponse = new JSONObject(responseBody);return jsonResponse.getString("access_token");}} catch (Exception e) {System.out.println("获取token异常: " + e.getMessage());return null;}
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala基础学习day01

今天学习了Scala基础操作 1.注释和Java操作一样 2.常量和变量(重点) 其中var是变量类型,val是常量类型。在Scala中能用常量最好用常量,与Java相反 变量声明时,必须要有初始值 在声明/定义一个变量时,可以用var或…

以太坊的测试网络 - all-in

此水龙头不需要主网内有ETH,每24小时可以领取0.05Sepolia ETH:https://cloud.google.com/application/web3/faucet/ethereum/sepolia 如图所示:此次交易的哈希值:0x2689de30e418af10ac60194dcb594311feee50f6df7b5…

洛谷 P11965:[GESP202503 七级] 等价消除 ← 位运算(异或) + STL map

​【题目来源】https://www.luogu.com.cn/problem/P11965【题目描述】小 A 有一个仅包含小写英文字母的字符串 S。对于一个字符串,如果能通过每次删去其中两个相同字符的方式,将这个字符串变为空串,那么称这个字符串…

*题解:P6617 查找 Search

原题链接 解析 考虑对于每个位置 \(i\) 维护最大的位置 \(pre_i < i\) 满足 \(a_i+a_{pre_i}=w\),这样区间 \([l,r]\) 内存在编号和为 \(w\) 的充要条件就为 \(\max_{i=l}^rpre_i \ge l\),可以使用线段树来维护。…

时序数据库的基本概念与原理:从核心到应用场景解析

一、时序数据库的核心概念 时序数据库( Time Series Database, TSDB ) 是一种专门用于存储、 管理和分析时间序列数据的数据库系统。 时间序列数据是指按时间顺序记录的数据点集合,通常具有以下特点: 时间维度为主…

C 指针数组函数之间的关联

可能经常会听到:指针常量、常量指针、指针数组、数组指针、指针函数、函数指针;函数指针数组,等这些听起来感觉向绕口令似的词汇; 可见数组、指针、函数之间是有很多联系的。比如看下面一段代码: #include<std…

2025.11.12 测试

2025.11.12 测试额 今天比较简单 感觉是 csp- 第一题,用线段树模拟贪心即可 当然也可以用三次单调队列,但没必要 第二题 额,线性基(模版?) 考虑答案是前面元素构成的线性空间 用 $ 2^{num} $ 即可 大样例是 \(2^…

13. 罗马数字转化为字符串

https://leetcode.cn/problems/roman-to-integer/ 难度:简单 题目说:I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。C 可以放在 D (500) 和 M (1000) …

逻辑回归(随笔)

核心思想:从回归到分类 想象一下,我们有一个简单的二分类问题(比如,根据肿瘤大小判断它是良性[0]还是恶性[1])。线性回归的困境:如果我们直接用线性回归 y = wx + b 来拟合,我们会用一条直线来拟合这些点。对于…

解析到本地127的神奇域名

作为一名 Web 开发者,我的日常工作就是在本地进行开发,实现各种功能。过去几年,我一直使用 127.0.0.1 作为本地服务的访问地址。当需要同时开发多个项目时,我会用不同端口来区分,例如:项目A:127.0.0.1:8080 项目…

这封邮件写得真好,是你自己写的吗? 不,是AI写的

本文通过一个真实职场场景,引出了职场中邮件写作的重要性和困难点,详细介绍了专门的AI邮件写作指令,通过实际案例展示了AI生成邮件的效果,并提供了使用技巧和注意事项,帮助职场人士快速提升邮件写作能力。昨晚11点…

FFmpeg 官方汇编课程:写出快 5 倍的视频处理代码

你的视频处理程序能跑通就行了? 同一个算法,有人用汇编优化后性能提升 5 倍。这不是天赋问题,而是技术盲区。FFmpeg 团队把内部汇编培训资料开源了,手把手教你写工业级高性能代码。这个项目教什么 asm-lessons 是 …

P14364 [CSP-S 2025] 员工招聘

考虑设 \(f_{i, j}\) 为前 \(i\) 个人死了 \(j\) 个,由于不知道哪些人选了所以无法转移。原因是前面的决策会影响后面的决策,所以考虑贡献延后计算。 会发现一个事情,对于当前 \(c_x \leq j\) 的东西之后不会再决策…

完整教程:【RabbitMQ】架构原理、消息丢失、重复消费、顺序消费、事务消息

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ai元人文:尊严

这是一个极其精彩且深刻的问题。“尊严”恰恰是那种最抽象、最神圣,也最容易被空谈的价值。用价值原语来回答这个问题,能完美展现其方法论的力量。 当别人问“价值原语如何表示尊严?”时,您可以这样回答:“尊严”…

灵活用工-连续劳务-计算器工具类,拿走不谢

灵活用工-连续劳务-计算器工具类,拿走不谢新法令及对灵工行业的影响 国务院810号令及配套的国税总局15号、16号公告,共同构建了互联网平台税收治理的新框架,对灵活用工行业影响深远。这套组合拳旨在引导灵活用工行业…

四、中断(基于北京迅为电子)

一、概述中断上半部分和下半部分,中断上半部分处理紧急且需要快速响应的部分,中断下半部分处理耗时操作。 GIC控制器的四种中断类型,软件中断、私有外设中断、全局共享中断、特定的局部外设中断二、重要函数与中断申…

四、中断(基于北京迅为电子)

一、概述中断上半部分和下半部分,中断上半部分处理紧急且需要快速响应的部分,中断下半部分处理耗时操作。 GIC控制器的四种中断类型,软件中断、私有外设中断、全局共享中断、特定的局部外设中断二、重要函数与中断申…

List执行Dispose时可释放子元素逻辑占用的List写法

1、声明新的List类CanDisposeList/// <summary>/// 可释放子元素逻辑占用的List/// </summary>/// <typeparam name="T"></typeparam>public class CanDisposeList<T> : Obse…

Sora 后思考:从 AI 工具到 AI 平台,产业 AGI 又近了一步 - 指南

Sora 后思考:从 AI 工具到 AI 平台,产业 AGI 又近了一步 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…