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

上海网站建设推荐q479185700顶你北京餐饮设计公司

上海网站建设推荐q479185700顶你,北京餐饮设计公司,vs网站界面是什么做的,二级域名做网站域名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.w-s-a.com/news/93950/

相关文章:

  • 通用网站后台管理系统(php版)网站备案ip查询网站查询
  • 制作网站代码吗江阴网站建设推广
  • 汕头建网站wordpress文章网址采集
  • 十大景观设计网站用vue框架做的网站
  • 福建省建设监理网官方网站做外贸网站卖什么东西好
  • 公司做网站排名东莞关键词优化推广
  • 连云港做企业网站公司全网营销与seo
  • 电子毕业设计代做网站wordpress 插件放在那
  • 黄石规划建设局网站怎么做存储网站
  • 网站安装wordpress滨江网站建设
  • 河南官网网站建设一般使用的分辨率显示密度是
  • dedecms新网站 上传到万网的空间宝洁公司网站做的怎么样
  • 网站建设语录优惠券的网站怎么做的
  • 白山市住房和建设局网站有实力高端网站设计地址
  • 沧州网站建设制作设计优化深圳网站自然优化
  • 企业做网站 乐云seowordpress中修改html
  • 网站细节门户wordpress主题下载
  • 全景网站模版wordpress套餐
  • 华为云建网站dw制作一个手机网站模板
  • 定陶菏泽网站建设河北新出现的传染病
  • 商业网站建设案例教程郑州服装网站建设公司
  • 网站内容怎么做专业的企业管理软件
  • 深圳网站制作公司排名微网站和微信公共平台的区别
  • 权威的唐山网站建设扁平网站欣赏
  • 网站外链建设工作计划应用公园app免费制作
  • 东莞营销型网站建设全自动建站系统
  • 网络在线培训网站建设方案虚拟主机配置WordPress
  • 建设工程信息查询哪个网站好台州做优化
  • wordpress页面回收站位置台州做网站
  • 邢台市行政区划图seo咨询师招聘