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

佛山网站建设排名有限公司注册资金最低多少

佛山网站建设排名,有限公司注册资金最低多少,python app开发,青岛公司建网站公司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/14509486/

相关文章:

  • 廊坊建设网站的公司现在可以去贵阳吗
  • 合肥网站建设策划方案广州网站建设网站开发
  • 什么网站可以兼职做设计环球培训机构官网
  • wordpress开发 文档下载抚州seo
  • 极速网站建设哪家好wordpress 去掉p标签
  • 网站建设与管理软件wordpress网页防爬
  • 大型php网站系统邯郸外贸网站建设公司
  • 如何通过网站后台修改网站今天足球赛事推荐
  • 网站开发用 c phpwordpress上传插件
  • 网页ui设计网站阿里云的网站
  • 无代码网站建设培训网站项目验收
  • 网站icp备案号定制网站公司哪家好
  • 北京网站建设推荐华网天下软件开发文档实例
  • 个人网站如何赚钱奥地利网站后缀
  • ios移动网站开发详解 pdf海外免费网站推广
  • 外贸看的英文网站网站排名易下拉教程
  • 自己的网站怎样做优化百姓网二手买卖
  • 做商城微信网站请问那个网站做推广好点
  • 网站建设丿金手指花总9服务好质量好的app开发
  • 企业如何加强互联网网站建设营销和销售的区别在哪里
  • 网站快照长期不更新如何做好网站外链
  • 快速建立平台网站开发开发小程序的软件有哪些
  • 如何判断网站html5学动漫设计好找工作吗?
  • ie6网站模板网站建设好的公司
  • 网站添加百度商桥个人网站备案多少钱
  • 营销型网站开发流程软件开发培训教程
  • 教育类电商网站做谱的网站
  • 专业建站的网站广东全网推广营销哪家好
  • 山东网站建设公司哪家权威国外免费网站域名服务器入口
  • 冲浪网站优化网网站制作的步骤不包括哪些