springboot+vue项目接入文心一言API
2025-06-24 11:57:53 | 来源:人民网

参考文心一言ERNIE-Bot 4.0模型流式和非流式API调用(SpringBoot+OkHttp3+SSE+WebSocket) - autunomy - 博客园 (cnblogs.com)
后端
- 引入依赖
com.squareup.okhttp3 okhttp 4.9.3 com.alibaba fastjson 1.2.79
- 配置okHttp,创建OkHttpConfiguration.java
import okhttp3.ConnectionPool;import okhttp3.OkHttpClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration; import javax.net.ssl.*;import java.security.*;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.concurrent.TimeUnit; @Configurationpublic class OkHttpConfiguration { @Value("${ ok.http.connect-timeout}") private Integer connectTimeout; @Value("${ ok.http.read-timeout}") private Integer readTimeout; @Value("${ ok.http.write-timeout}") private Integer writeTimeout; @Value("${ ok.http.max-idle-connections}") private Integer maxIdleConnections; @Value("${ ok.http.keep-alive-duration}") private Long keepAliveDuration; @Bean public OkHttpClient okHttpClient() { return new OkHttpClient.Builder() .sslSocketFactory(sslSocketFactory(), x509TrustManager()) // 是否开启缓存 .retryOnConnectionFailure(false) .connectionPool(pool()) .connectTimeout(connectTimeout, TimeUnit.SECONDS) .readTimeout(readTimeout, TimeUnit.SECONDS) .writeTimeout(writeTimeout,TimeUnit.SECONDS) .hostnameVerifier((hostname, session) -> true) // 设置代理// .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888))) // 拦截器// .addInterceptor() .build(); } @Bean public X509TrustManager x509TrustManager() { return new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }; } @Bean public SSLSocketFactory sslSocketFactory() { try { // 信任任何链接 SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{ x509TrustManager()}, new SecureRandom()); return sslContext.getSocketFactory(); } catch (NoSuchAlgorithmException | KeyManagementException e) { e.printStackTrace(); } return null; } @Bean public ConnectionPool pool() { return new ConnectionPool(maxIdleConnections, keepAliveDuration, TimeUnit.SECONDS); }}
- 配置全局变量,创建WenXinConfig.java
package com.pet.common;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import okhttp3.MediaType; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import java.io.IOException; import java.util.Date;@Configuration@Slf4jpublic class WenXinConfig { @Value("${ wenxin.apiKey}") public String API_KEY; @Value("${ wenxin.secretKey}") public String SECRET_KEY; @Value("${ wenxin.accessTokenUrl}") public String ACCESS_TOKEN_URL; @Value("${ wenxin.ERNIE_Bot.URL}") public String ERNIE_Bot_4_0_URL; //过期时间为30天 public String ACCESS_TOKEN = null; public String REFRESH_TOKEN = null; public Date CREATE_TIME = null;//accessToken创建时间 public Date EXPIRATION_TIME = null;//accessToken到期时间 /** * 获取accessToken * @return true表示成功 false表示失败 */ public synchronized String flushAccessToken(){ //判断当前AccessToken是否为空且判断是否过期 if(ACCESS_TOKEN != null && EXPIRATION_TIME.getTime() > CREATE_TIME.getTime()) return ACCESS_TOKEN; //构造请求体 包含请求参数和请求头等信息 RequestBody body = RequestBody.create(MediaType.parse("application/json"),""); Request request = new Request.Builder() .url(ACCESS_TOKEN_URL+"?client_id="+API_KEY+"&client_secret="+SECRET_KEY+"&grant_type=client_credentials") .method("POST", body) .addHeader("Content-Type", "application/json") .addHeader("Accept", "application/json") .build(); OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build(); String response = null; try { //请求 response = HTTP_CLIENT.newCall(request).execute().body().string(); } catch (IOException e) { log.error("ACCESS_TOKEN获取失败"); return null; } //刷新令牌以及更新令牌创建时间和过期时间 JSONObject jsonObject = JSON.parseObject(response); ACCESS_TOKEN = jsonObject.getString("access_token"); REFRESH_TOKEN = jsonObject.getString("refresh_token"); CREATE_TIME = new Date(); EXPIRATION_TIME = new Date(Long.parseLong(jsonObject.getString("expires_in")) + CREATE_TIME.getTime()); return ACCESS_TOKEN; }}
- 配置application.yml
okhttp: connect-timeout: 30 # 连接超时时间,单位通常为秒 read-timeout: 30 # 读取超时时间,单位通常为秒 write-timeout: 30 # 写入超时时间,单位通常为秒 max-idle-connections: 200 # 连接池中整体的空闲连接的最大数量 keep-alive-duration: 300 # 连接空闲时间最多为多少秒wenxin: apiKey: #你的apikey secretKey: #你的secretkey accessTokenUrl: https://aip.baidubce.com/oauth/2.0/token ERNIE_Bot: URL: https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-lite-8k#改成你用的
- 创建TestController.java
package com.pet.controller;import com.alibaba.fastjson.JSON;import com.pet.common.WenXinConfig; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;@RestController@Slf4j@RequestMapping("/test")public class TestController { @Resource private WenXinConfig wenXinConfig; //历史对话,需要按照user,assistant List
- postman测试
前端 创建advice.vue (使用了elment-ui)
获取建议 重置 建议:
(责编:人民网)
分享让更多人看到
热门排行
- 1Web⾃动化测试及常用函数
- 2详细解释KML格式,Javascript写入和读取KML示例
- 3Spark大数据分析与实战笔记(第四章) Spark SQL结构化数据文件处理
- 4steam有mac游戏吗? mac电脑可以玩的游戏 Steam游戏支持crosover 2024最热游戏
- 5【MySQL】复合查询
- 6红米K80 限时优惠5G手机2409元起抢购
- 7SSM整合(Spring+SpringMVC+MyBatis)
- 8品牌组构建类 下载Rogue游戏 十大必玩品牌组构建类 推荐Rogue游戏
- 9Redis 如何保证数据一致性:从原理到实践的综合分析
- 10调用百度大模型API接口实现AI对话!手拉手教程!