当前位置: 首页 > news >正文

佛山网站建设排名建设直播平台网站软件

佛山网站建设排名,建设直播平台网站软件,找回老网站,asp网站后台密码破解Spring Boot 集成国内AI#xff0c;包含文心一言、通义千问和讯飞星火平台实战教程 一、项目结构二、添加Maven依赖三、配置API密钥 (application.yml)四、配置类1. AI配置类 (AiProperties.java)2. 启用配置类 (AiConfig.java) 五、服务层实现1. 文心一言服务 (WenxinService… Spring Boot 集成国内AI包含文心一言、通义千问和讯飞星火平台实战教程 一、项目结构二、添加Maven依赖三、配置API密钥 (application.yml)四、配置类1. AI配置类 (AiProperties.java)2. 启用配置类 (AiConfig.java) 五、服务层实现1. 文心一言服务 (WenxinService.java)2. 通义千问服务 (QianwenService.java)3. 讯飞星火服务 (XinghuoService.java) 六、统一控制器 (AiController.java)七、安全增强配置1. 添加API密钥保护自定义Filter2. 添加Rate Limiting使用Resilience4j 八、应用入口 (AiIntegrationApplication.java)九、测试示例十、最佳实践建议 Spring Boot集成国内主流AI平台的详细实现方案包含文心一言、通义千问和讯飞星火的对接代码助力快速构建智能应用。 一、项目结构 ai-integration-demo/ ├── src/main/java │ ├── com/example/ai │ │ ├── config # 配置类 │ │ ├── controller # API控制器 │ │ ├── service # 服务层 │ │ │ ├── impl # 服务实现 │ │ ├── dto # 数据传输对象 ├── resources │ ├── application.yml # 配置文件二、添加Maven依赖 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- HTTP客户端 --dependencygroupIdcom.squareup.okhttp3/groupIdartifactIdokhttp/artifactIdversion4.11.0/version/dependency!-- JSON处理 --dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactId/dependency!-- 配置处理 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional/dependency /dependencies三、配置API密钥 (application.yml) ai:wenxin:api-key: YOUR_WENXIN_API_KEYsecret-key: YOUR_WENXIN_SECRET_KEYapi-url: https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completionsqianwen:api-key: YOUR_QIANWEN_API_KEYapi-url: https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generationxinghuo:api-key: YOUR_XINGHUO_API_KEYsecret: YOUR_XINGHUO_SECRETappid: YOUR_XINGHUO_APPIDapi-url: https://spark-api.xf-yun.com/v3.5/chat四、配置类 1. AI配置类 (AiProperties.java) ConfigurationProperties(prefix ai) Data public class AiProperties {private Wenxin wenxin;private Qianwen qianwen;private Xinghuo xinghuo;Datapublic static class Wenxin {private String apiKey;private String secretKey;private String apiUrl;}Datapublic static class Qianwen {private String apiKey;private String apiUrl;}Datapublic static class Xinghuo {private String apiKey;private String secret;private String appid;private String apiUrl;} }2. 启用配置类 (AiConfig.java) Configuration EnableConfigurationProperties(AiProperties.class) public class AiConfig {Beanpublic OkHttpClient okHttpClient() {return new OkHttpClient();} }五、服务层实现 1. 文心一言服务 (WenxinService.java) Service RequiredArgsConstructor public class WenxinService {private final AiProperties aiProperties;private final OkHttpClient okHttpClient;// 获取AccessTokenprivate String getAccessToken() {String url https://aip.baidubce.com/oauth/2.0/token? grant_typeclient_credentials client_id aiProperties.getWenxin().getApiKey() client_secret aiProperties.getWenxin().getSecretKey();Request request new Request.Builder().url(url).get().build();try (Response response okHttpClient.newCall(request).execute()) {String responseBody response.body().string();ObjectMapper objectMapper new ObjectMapper();JsonNode rootNode objectMapper.readTree(responseBody);return rootNode.get(access_token).asText();} catch (Exception e) {throw new RuntimeException(获取文心一言Token失败, e);}}public String chatCompletion(String prompt) {String accessToken getAccessToken();String url aiProperties.getWenxin().getApiUrl() ?access_token accessToken;JSONObject body new JSONObject();body.put(messages, new JSONArray().put(new JSONObject().put(role, user).put(content, prompt)));Request request new Request.Builder().url(url).post(RequestBody.create(body.toString(), MediaType.get(application/json))).build();try (Response response okHttpClient.newCall(request).execute()) {if (!response.isSuccessful()) {throw new RuntimeException(文心一言API请求失败: response);}String responseBody response.body().string();JSONObject jsonResponse new JSONObject(responseBody);return jsonResponse.getJSONObject(result).getString(content);} catch (Exception e) {throw new RuntimeException(调用文心一言API出错, e);}} }2. 通义千问服务 (QianwenService.java) Service RequiredArgsConstructor public class QianwenService {private final AiProperties aiProperties;private final OkHttpClient okHttpClient;public String generateText(String prompt) {JSONObject body new JSONObject();body.put(model, qwen-turbo);JSONObject input new JSONObject();input.put(prompt, prompt);body.put(input, input);JSONObject parameters new JSONObject();parameters.put(temperature, 0.85);parameters.put(top_p, 0.8);parameters.put(max_tokens, 1500);body.put(parameters, parameters);Request request new Request.Builder().url(aiProperties.getQianwen().getApiUrl()).header(Authorization, Bearer aiProperties.getQianwen().getApiKey()).post(RequestBody.create(body.toString(), MediaType.get(application/json))).build();try (Response response okHttpClient.newCall(request).execute()) {if (!response.isSuccessful()) {throw new RuntimeException(通义千问API请求失败: response);}String responseBody response.body().string();JSONObject jsonResponse new JSONObject(responseBody);return jsonResponse.getJSONObject(output).getString(text);} catch (Exception e) {throw new RuntimeException(调用通义千问API出错, e);}} }3. 讯飞星火服务 (XinghuoService.java) Service RequiredArgsConstructor public class XinghuoService {private final AiProperties aiProperties;private final OkHttpClient okHttpClient;public String chat(String prompt) {try {// 构造鉴权URLString authUrl generateAuthUrl();// 构造请求体JSONObject body new JSONObject();JSONObject header new JSONObject();header.put(app_id, aiProperties.getXinghuo().getAppid());JSONObject parameter new JSONObject();JSONObject chat new JSONObject();chat.put(domain, generalv3.5);chat.put(temperature, 0.5);chat.put(max_tokens, 4096);parameter.put(chat, chat);JSONObject payload new JSONObject();JSONObject message new JSONObject();JSONArray text new JSONArray();text.put(new JSONObject().put(role, user).put(content, prompt));message.put(text, text);payload.put(message, message);body.put(header, header);body.put(parameter, parameter);body.put(payload, payload);// 发送请求Request request new Request.Builder().url(authUrl).post(RequestBody.create(body.toString(), MediaType.get(application/json))).build();try (Response response okHttpClient.newCall(request).execute()) {if (!response.isSuccessful()) {throw new RuntimeException(讯飞星火API请求失败: response);}String responseBody response.body().string();JSONObject jsonResponse new JSONObject(responseBody);return extractContent(jsonResponse);}} catch (Exception e) {throw new RuntimeException(调用讯飞星火API出错, e);}}// 生成带鉴权信息的URLprivate String generateAuthUrl() throws ParseException, InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException {String apiUrl aiProperties.getXinghuo().getApiUrl();String host new URL(apiUrl).getHost();String path new URL(apiUrl).getPath();// 创建日期对象SimpleDateFormat sdf new SimpleDateFormat(EEE, dd MMM yyyy HH:mm:ss z, Locale.US);sdf.setTimeZone(TimeZone.getTimeZone(GMT));String date sdf.format(new Date());// 构造签名String signatureOrigin host: host \n;signatureOrigin date: date \n;signatureOrigin POST path HTTP/1.1;Mac mac Mac.getInstance(hmacsha256);SecretKeySpec secretKeySpec new SecretKeySpec(aiProperties.getXinghuo().getSecret().getBytes(UTF-8), hmacsha256);mac.init(secretKeySpec);byte[] signatureSha mac.doFinal(signatureOrigin.getBytes(UTF-8));String signature Base64.getEncoder().encodeToString(signatureSha);// 构造授权头String authorization String.format(api_key\%s\, algorithm\%s\, headers\%s\, signature\%s\,aiProperties.getXinghuo().getApiKey(), hmac-sha256, host date request-line, signature);return apiUrl ?authorization Base64.getEncoder().encodeToString(authorization.getBytes(UTF-8)) date URLEncoder.encode(date, UTF-8) host URLEncoder.encode(host, UTF-8);}// 提取响应内容private String extractContent(JSONObject response) {JSONObject payload response.getJSONObject(payload);JSONObject message payload.getJSONObject(message);JSONArray text message.getJSONArray(text);StringBuilder result new StringBuilder();for (int i 0; i text.length(); i) {JSONObject textObj text.getJSONObject(i);if (textObj.has(content)) {result.append(textObj.getString(content));}}return result.toString();} }六、统一控制器 (AiController.java) RestController RequestMapping(/api/ai) RequiredArgsConstructor public class AiController {private final WenxinService wenxinService;private final QianwenService qianwenService;private final XinghuoService xinghuoService;PostMapping(/wenxin)public ResponseEntityString wenxinChat(RequestBody Valid AiRequest request) {return ResponseEntity.ok(wenxinService.chatCompletion(request.getPrompt()));}PostMapping(/qianwen)public ResponseEntityString qianwenGenerate(RequestBody Valid AiRequest request) {return ResponseEntity.ok(qianwenService.generateText(request.getPrompt()));}PostMapping(/xinghuo)public ResponseEntityString xinghuoChat(RequestBody Valid AiRequest request) {return ResponseEntity.ok(xinghuoService.chat(request.getPrompt()));}Datastatic class AiRequest {NotBlank(message 提示语不能为空)private String prompt;} }七、安全增强配置 1. 添加API密钥保护自定义Filter Component RequiredArgsConstructor public class ApiKeyFilter extends OncePerRequestFilter {private final AiProperties aiProperties;Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {String clientId request.getHeader(X-API-CLIENT-ID);String clientSecret request.getHeader(X-API-CLIENT-SECRET);// 验证客户端凭证if (!isValidCredentials(clientId, clientSecret)) {response.sendError(HttpStatus.UNAUTHORIZED.value(), 无效的API凭证);return;}filterChain.doFilter(request, response);}private boolean isValidCredentials(String clientId, String clientSecret) {// 这里应该是从数据库或配置中读取验证信息// 简化示例使用配置中的文心API密钥做演示return clientId ! null clientSecret ! null clientId.equals(demo-app) clientSecret.equals(aiProperties.getWenxin().getApiKey());} }2. 添加Rate Limiting使用Resilience4j Configuration public class RateLimiterConfig {Beanpublic RateLimiter wenxinRateLimiter() {return RateLimiter.of(wenxin-limiter, RateLimiterConfig.custom().limitRefreshPeriod(Duration.ofSeconds(10)).limitForPeriod(5).timeoutDuration(Duration.ofSeconds(5)).build());} }// 在控制器中使用 RestController RequestMapping(/api/ai) public class AiController {private final RateLimiter wenxinRateLimiter;PostMapping(/wenxin)RateLimiter(name wenxin-limiter)public ResponseEntityString wenxinChat(RequestBody AiRequest request) {// ...} }八、应用入口 (AiIntegrationApplication.java) SpringBootApplication public class AiIntegrationApplication {public static void main(String[] args) {SpringApplication.run(AiIntegrationApplication.class, args);} }九、测试示例 使用cURL测试 # 通义千问测试 curl -X POST http://localhost:8080/api/ai/qianwen \-H Content-Type: application/json \-d {prompt: 用100字介绍Spring Boot}# 文心一言测试 curl -X POST http://localhost:8080/api/ai/wenxin \-H Content-Type: application/json \-d {prompt: 用Java写一个快速排序算法}# 讯飞星火测试 curl -X POST http://localhost:8080/api/ai/xinghuo \-H Content-Type: application/json \-d {prompt: 如何做好电商运营}十、最佳实践建议 异步处理使用Async注解异步调用AI接口避免阻塞缓存结果对常见问题的结果进行缓存减少API调用错误重试实现指数退避重试机制处理临时错误流量控制针对不同AI平台设置不同的QPS限制统一接口创建统一的AI门面服务提供平台无关的调用 Service public class AiFacadeService {private enum AiProvider { WENXIN, QIANWEN, XINGHUO }private final WenxinService wenxinService;private final QianwenService qianwenService;private final XinghuoService xinghuoService;public String unifiedChat(String prompt) {// 简单轮询策略AiProvider[] providers AiProvider.values();AiProvider provider providers[(int)(System.currentTimeMillis() % providers.length)];switch (provider) {case WENXIN: return wenxinService.chatCompletion(prompt);case QIANWEN: return qianwenService.generateText(prompt);case XINGHUO: return xinghuoService.chat(prompt);default: throw new IllegalStateException(未知的AI提供商);}} }本项目提供了完整的企业级Spring Boot集成国内主流AI平台的实现方案可根据实际需求进行扩展和优化。
http://www.hkea.cn/news/14491135/

相关文章:

  • 网站开发不用框架?工业企业网络推广方案
  • 做网站 江门网站建设合同中的违约责任
  • 建网站要多少钱网站选项卡图标
  • 博物馆建设网站的目的及功能广州网站制作选哪家
  • 可以做机械设计接单的网站河南天丰建设工程有限公司网站
  • 建设部招标网 官方网站做网站的新闻
  • 想开个网站卖衣服的怎么做建设网站需要申请报告
  • 家居网站建设方案大兴网站建设优化seo
  • 网站结构优化重庆新闻联播今天
  • 电子信息工程系部网站建设方案网站内外链怎么做
  • 建站网站图片不显示开发公司会计工作职责
  • 网站建设安全性原则wordpress 管理后台
  • dedecms怎么部署网站免费网站友情链接
  • 孝感网站开发优搏快广州seo推广系统
  • dw做网站链接电脑如何下载网页视频文件
  • html网站首页设计注册城乡规划师成绩查询2021
  • 淘宝客网站设计wordpress区别
  • 做网站架构的软件.net空网站做九九乘法表
  • 金融网站设计欣赏在线教育网站建设公司
  • 上海网站建设zj kt网站的要素是什么
  • 做的新网站网上搜不到阳山做网站
  • 桂林网站建设服务平面设计是什么专业学的
  • 为什么网站的备案号在备案网站查询不到WordPress阿里云超标
  • 潍坊网站优化排名百度推广收费多少
  • 如何做防水网站青岛宣传片制作公司
  • 中企动力免费做网站wordpress模板怎么写
  • 网站建设推广选stso88效果好项目外包和人力外包的区别
  • 网站名称和网址个人网页设计模板网站
  • 网站建设代理哪个好做民宿要给网站多少钱
  • 做网站软件下载seort什么意思