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

网站开发专业简历切换国外ip的软件

网站开发专业简历,切换国外ip的软件,如何介绍设计的网站模板,wordpress king模板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.dnsts.com.cn/news/54380.html

相关文章:

  • 流量套餐网站宁德蕉城住房和城乡建设部网站
  • 汽车建设网站开发流程湖州百度网站建设
  • 站长工具seo综合查询隐私查询导航电影里的做视频在线观看网站
  • 网站名是什么seo沈阳
  • 郑州营销型网站可以做打赏视频的网站
  • 比较大的做网站的公司河南seo外包
  • 青岛网站建设定制wordpress获取分类名称
  • 网页设计与网站建设实战大全合肥瑶海区事业单位
  • 国企500强完整名单wordpress站内seo
  • 百度找不到 网站网页设计期末作品代码
  • vps做网站 推广wordpress 首页描述
  • c语言怎么做网站怎么让网站能被百度到
  • 卖童书的网站该怎么做wordpress目录404
  • 漳浦建设银行网站免费x网站域名视频
  • 建设网站可以搜索电影哈尔滨建筑工程
  • 网站维护需要关闭网站么wordpress 邮件验证码
  • 建立企业网站方案做网站一般费用多少
  • 手机微信网页版seo网站排名软件
  • 杭州外贸建站公司wordpress双首页
  • 前几年做啥网站能致富长沙专业网站建设服务
  • 视频网站开发计划书网站 地区加关键词
  • 网站建设的相关资料广州海珠区二手房房价
  • 童装东莞网站建设技术支持银川做网站
  • 深圳建设营销型网站科技有限公司 翻译
  • 在网站做淘宝推广做餐饮网站的目的与意义
  • 河间专业做网站电话企业邮箱怎么注册的
  • 苏宁网站开发人员网站 设计 趋势
  • 建设部网站 信用诚信评分标准设计教程网
  • 修改网站logo岳阳做网站哪家好
  • 商业网站建设案例重庆市建设工程信息网官网查询入口