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

新媒体与网站建设徐州建立网站

新媒体与网站建设,徐州建立网站,做网站的一个月能赚多少钱,网站建设营销型使用AI4J快速接入OpenAI大模型 本博文给大家介绍一下如何使用AI4J快速接入OpenAI大模型#xff0c;并且如何实现流式与非流式的输出#xff0c;以及对函数调用的使用。 介绍 由于SpringAI需要使用JDK17和Spring Boot3#xff0c;但是目前很多应用依旧使用的JDK8版本…使用AI4J快速接入OpenAI大模型 本博文给大家介绍一下如何使用AI4J快速接入OpenAI大模型并且如何实现流式与非流式的输出以及对函数调用的使用。 介绍 由于SpringAI需要使用JDK17和Spring Boot3但是目前很多应用依旧使用的JDK8版本所以使用可以支持JDK8的AI4J来接入OpenAI大模型。 AI4J是一款JavaSDK用于快速接入AI大模型应用整合多平台大模型如OpenAi、智谱Zhipu(ChatGLM)、深度求索DeepSeek、月之暗面Moonshot(Kimi)、腾讯混元Hunyuan、零一万物(01)等等提供统一的输入输出(对齐OpenAi)消除差异化优化函数调用(Tool Call)优化RAG调用、支持向量数据库(Pinecone)并且支持JDK1.8为用户提供快速整合AI的能力。 AI4J-GitHub 快速使用 目前较多的应用场景为Spring应用而AI4J接入SpringBoot应用也是非常简单的本篇博文先带着大家为SpringBoot应用集成OpenAI服务后续会介绍如何再非Spring项目中搭建。 创建SpringBoot项目 这里以JDK1.8为例创建SpringBoot2项目当然你也可以创建JDK17、SpringBoot3。 引入AI4J依赖 !-- Spring应用 -- dependencygroupIdio.github.lnyo-cly/groupIdartifactIdai4j-spring-boot-stater/artifactIdversion0.5.2/version /dependency如果你使用阿里源无法引入可能是阿里云镜像还没有同步。 配置application.yml 给大家两种配置方法 第一种使用官网的url自己有代理 第二种使用中转代理地址或第三方中转平台 如https://api.openai-proxy.com 上面任意配置一种即可。 搭建聊天服务Controller 下面是一个小的demo演示 RestController public class OpenAiController {// 注入Ai服务Autowiredprivate AiService aiService;GetMapping(/chat)public String getChatMessage(RequestParam String question) throws Exception {// 获取OpenAi的聊天服务IChatService chatService aiService.getChatService(PlatformType.OPENAI);// 创建请求参数ChatCompletion chatCompletion ChatCompletion.builder().model(gpt-4o-mini).message(ChatMessage.withUser(question)).build();System.out.println(chatCompletion);// 发送chat请求ChatCompletionResponse chatCompletionResponse chatService.chatCompletion(chatCompletion);// 获取聊天内容和token消耗String content chatCompletionResponse.getChoices().get(0).getMessage().getContent();long totalTokens chatCompletionResponse.getUsage().getTotalTokens();System.out.println(总token消耗: totalTokens);return content;} }实现stream流式输出(打字机效果) 编写stream.html !DOCTYPE html html headmeta charsetUTF-8titleStream Example/title /head body input idquestion typetext placeholder输入需要提问的问题/button idstartButton开始/buttondiv idoutput/divscriptconst input document.getElementById(question);const outputDiv document.getElementById(output);const startButton document.getElementById(startButton);async function getResponse(){const question input.value;const resp await fetch(/chatStream ?question question,{method: GET})const reader resp.body.getReader();const textDecoder new TextDecoder();while (1){const { done , value } await reader.read()if(done) break;const str textDecoder.decode(value);outputDiv.innerText str;console.log(str)}}startButton.addEventListener(click, getResponse) /script /body /html向controller中添加stream接口 GetMapping(/chatStream)public void getChatMessageStream(RequestParam String question, HttpServletResponse response) throws Exception {// 中文乱码问题response.setCharacterEncoding(UTF-8);// 获取OpenAi的聊天服务IChatService chatService aiService.getChatService(PlatformType.OPENAI);// 创建请求参数ChatCompletion chatCompletion ChatCompletion.builder().model(gpt-4o-mini).message(ChatMessage.withUser(question)).build();PrintWriter writer response.getWriter();// 发送chat请求SseListener sseListener new SseListener() {Overrideprotected void send() {writer.write(this.getCurrStr());writer.flush();System.out.println(this.getCurrStr());}};chatService.chatCompletionStream(chatCompletion, sseListener);writer.close();System.out.println(sseListener.getOutput());}注意上面只是一个简单的示例你也可以使用其它方法比如 GetMapping(/chatStream)public ResponseBodyEmitter getChatMessageStream(RequestParam String question) {ResponseBodyEmitter emitter new ResponseBodyEmitter();// 获取OpenAi的聊天服务IChatService chatService aiService.getChatService(PlatformType.OPENAI);// 创建请求参数ChatCompletion chatCompletion ChatCompletion.builder().model(gpt-4o-mini).message(ChatMessage.withUser(question)).build();Executors.newSingleThreadExecutor().submit(() - {try {SseListener sseListener new SseListener() {Overrideprotected void send() {try {emitter.send(this.getCurrStr());System.out.println(this.getCurrStr()); // 打印当前发送的内容} catch (IOException e) {emitter.completeWithError(e);}}};// 发送流式数据chatService.chatCompletionStream(chatCompletion, sseListener);// 完成后关闭连接emitter.complete();} catch (Exception e) {emitter.completeWithError(e);}});return emitter;}实现函数调用 首先我们需要编写一个函数以天气预报为例子 FunctionCall(name queryWeather, description 查询目标地点的天气预报) public class QueryWeatherFunction implements FunctionQueryWeatherFunction.Request, String {Overridepublic String apply(Request request) {final String key abcdefg;// https://api.seniverse.com/v3/weather/hourly.json?keyyour_api_keylocationbeijingstart0hours24// https://api.seniverse.com/v3/weather/daily.json?keyyour_api_keylocationbeijingstart0days5String url String.format(https://api.seniverse.com/v3/weather/%s.json?key%slocation%sdays%d,request.type.name(),key,request.location,request.days);OkHttpClient client new OkHttpClient();okhttp3.Request http new okhttp3.Request.Builder().url(url).get().build();try (Response response client.newCall(http).execute()) {if (response.isSuccessful()) {// 解析响应体return response.body() ! null ? response.body().string() : ;} else {return 获取天气失败 当前天气未知;}} catch (Exception e) {// 处理异常e.printStackTrace();return 获取天气失败 当前天气未知;}}DataFunctionRequestpublic static class Request{FunctionParameter(description 需要查询天气的目标位置, 可以是城市中文名、城市拼音/英文名、省市名称组合、IP 地址、经纬度)private String location;FunctionParameter(description 需要查询未来天气的天数, 最多15日)private int days 15;FunctionParameter(description 预报的天气类型daily表示预报多天天气、hourly表示预测当天24天气、now为当前天气实况)private Type type;}public enum Type{daily,hourly,now} }其中有三个核心注解 FunctionCall标识这个类为一个函数FunctionRequest标识为该类为函数的请求类FunctionParameter标识为函数的具体参数 接下来稍微修改下刚刚编写的Stream实现函数 GetMapping(/chatStream)public void getChatMessageStream(RequestParam String question, HttpServletResponse response) throws Exception {// ......// 创建请求参数ChatCompletion chatCompletion ChatCompletion.builder().model(gpt-4o-mini).message(ChatMessage.withUser(question)).functions(queryWeather) // 这里传入刚刚我们定义的函数名称即可.build();// ......}如果想要知道函数调用的参数只需要在刚刚的代码中添加下面这一行即可 sseListener.setShowToolArgs(true);更换其它平台 细心的你可能已经发现我们在创建chatService的时候传入了PlatformType.OPENAI如果我们想要更换其它平台只需要更换PlatformType即可。如果你不懂那下篇博文再详细的说说 IChatService chatService aiService.getChatService(PlatformType.OPENAI);其它功能 篇幅有限其它功能使用下篇再讲
http://www.tj-hxxt.cn/news/231681.html

相关文章:

  • 医院设计网站建设阿里云服务器做网站安全吗
  • 学院网站建设实例什么网站可以做投资
  • 国内手机网站建设企业安全文化的建设方案
  • 电商网站简单html模板下载百度推广手机版
  • 如何做律所网站沙元埔做网站的公司
  • 诗人做的网站wordpress 观点评价插件
  • 网站设计 珠海南浔做网站
  • 青岛电子商务的网站建设做僾免费观看网站
  • 合肥建站软件网站的建站方案
  • 海南省建设注册中心网站有必要 在线 网页 代理
  • 营销网站有哪些工程建设是什么
  • 义乌网站制作是什么怎么描述网站主页做的好
  • 衡水做网站报价兰州企业网络优化服务
  • 大连企业招聘网站徐州百度搜索网站排名
  • 网站开发建设价格曲周县建设局网站
  • 孝感网站建设做网站哪个服务器好
  • 机器配件做外贸上什么网站洛阳网络公司排名
  • 洛阳网站建设好做不frontpage做的网站好不好
  • 网站建设推广书籍建筑企业网站源码
  • 网站一般用什么软件做页游传奇
  • 生成图片的网站网站设计培训班如何
  • 做科技申报看什么网站兴安盟老区建设促进会网站
  • 餐饮营销型网站案例厦门网站建设 孚珀科技
  • 查询工具类网站制作网站建设艾金手指六六12
  • 网站开发外文参考文献wordpress云落主题
  • 西安网站建设方案优化logo生成
  • 济南做网站优化公司做网站销售怎么开发客户
  • 大连地区做网站做视频网站有什么
  • 展示系统 网站模板电子商务网站建设的规划
  • 做盗版电影网站犯法不公益环保网站建设