网站关键词代码怎么做,seo运营招聘,广告营销策划案,专门做招商的网站是什么情况文章目录 JAVA实现人工智能,采用框架SpringAISpring AI介绍使用介绍项目前提项目结构第一种方式采用openai1. pom文件#xff1a; 2. application.yml 配置3.controller 实现层 项目测试 JAVA实现人工智能,采用框架SpringAI
Spring AI介绍 Spring AI是AI工程师的一个应用框架… 文章目录 JAVA实现人工智能,采用框架SpringAISpring AI介绍使用介绍项目前提项目结构第一种方式采用openai1. pom文件 2. application.yml 配置3.controller 实现层 项目测试 JAVA实现人工智能,采用框架SpringAI
Spring AI介绍 Spring AI是AI工程师的一个应用框架它提供了一个友好的API和开发AI应用的抽象旨在简化AI应用的开发工序例如开发一款基于ChatGPT的对话应用程序。 目前该项目已经集成了OpenAI、Azure OpenAI、Hugging Face、Ollama等API。不过对于集成了OpenAI接口的项目只要再搭配One-API项目就可以调用目前主流的大语言模型了。 使用介绍 在介绍如何使用Spring AI开发一个对话接口之前我先介绍下ChatGPT应用的开发原理。 首先ChatGPT是OpenAI推出的一款生成式人工智能大语言模型OpenAI为了ChatGPT能够得到广泛应用向开发者提供了ChatGPT的使用接口开发者只需使用OpenAI为开发者提供的Key向OpenAI提供的接口地址发起各种形式的请求就可以使用ChatGPT。因此开发一款ChatGPT应用并不是让你使用人工智能那套技术进行训练和开发而是作为搬运工通过向OpenAI提供的ChatGPT接口发起请求来获取ChatGPT响应基于这一流程来开发的。 项目前提
本人已经本地部署chatglm3-6boneapi 项目环境
项目结构
第一种方式采用openai
1. pom文件
SpringAI 官网 新版本由于我本地chatglm3-6b openai 接口实现暂不支持请求体解析所以使用0.8.1-SNAPSHOT 版本进行集成
dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion1.0.0-SNAPSHOT/versiontypepom/typescopeimport/scope
/dependencyproject xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.4/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.lvyuanj.core/groupIdartifactIdmicro-open-ai/artifactIdversion1.0-SNAPSHOT/versionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion0.8.1-SNAPSHOT/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-openai/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-openai-spring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-ollama-spring-boot-starter/artifactId/dependency/dependenciesrepositoriesrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/urlsnapshotsenabledfalse/enabled/snapshots/repositoryrepositoryidspring-snapshots/idnameSpring Snapshots/nameurlhttps://repo.spring.io/snapshot/urlreleasesenabledfalse/enabled/releases/repository/repositoriesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build
/project2. application.yml 配置
spring:ai:openai:api-key: XXXXXXXXXXXXXXXXXXXXXXbase-url: XXXXXXXXXXXXXXXXXXXXXXXchat:enabled: trueoptions:model: chatglm3-6btemperature: 0.3F # 温度越高回答得比较有创新性但是准确率会下降温度越低回答的准确率会更好#ollama模型ollama:api-key: XXXXXXXXXXXXXXXXXXXXbase-url: XXXXXXXXXXXXXXXXXXXXXXXXXchat:enabled: falseoptions:model: chatglm3-6b
3.controller 实现层
package com.lvyuanj.core.ai.controller;import jakarta.annotation.Resource;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;RestController
RequestMapping(open-ai)
class OpenAiController {Resourceprivate OpenAiChatClient openAiChatClient;/*** 调用OpenAI的接口-默认参数* param msg* return*/GetMapping(/chat)public String completion(RequestParam(msg) String msg) {return openAiChatClient.call(msg);}/*** 调用OpenAI的接口-默认参数* param msg-输入的文本* return*/RequestMapping(value /chat2)public Object chat2(RequestParam(value msg) String msg) {ChatResponse chatResponse openAiChatClient.call(new Prompt(msg));return chatResponse.getResult().getOutput().getContent();}/*** 调用OpenAI的接口-自定义参数* param msg-输入的文本* return*/RequestMapping(value /chat3)public Object chat3(RequestParam(value msg) String msg) {//可选参数在配置文件中配置了在代码中也配置了那么以代码的配置为准也就是代码的配置会覆盖掉配置文件中的配置ChatResponse chatResponse openAiChatClient.call(new Prompt(msg, OpenAiChatOptions.builder()//.withModel(gpt-4-32k) //gpt的版本32k是参数量.withTemperature(0.4F) //温度越高回答得比较有创新性但是准确率会下降温度越低回答的准确率会更好.build()));return chatResponse.getResult().getOutput().getContent();}/*** 调用OpenAI的接口-流式接口* param msg-输入的文本* return*/RequestMapping(value /chat4)public Object chat4(RequestParam(value msg) String msg) {//可选参数在配置文件中配置了在代码中也配置了那么以代码的配置为准也就是代码的配置会覆盖掉配置文件中的配置FluxChatResponse flux openAiChatClient.stream(new Prompt(msg, OpenAiChatOptions.builder()//.withModel(gpt-4-32k) //gpt的版本32k是参数量.withTemperature(0.4F) //温度越高回答得比较有创新性但是准确率会下降温度越低回答的准确率会更好.build()));flux.toStream().forEach(chatResponse - {System.out.println(chatResponse.getResult().getOutput().getContent());});return flux.collectList(); //数据的序列一序列的数据一个一个的数据返回}/*** 字转向量进行数据查询**/PostMapping(/embedding)public void pgQuery(RequestBody ListString wordList) {EmbeddingRequest embeddingRequest new EmbeddingRequest(wordList, OpenAiEmbeddingOptions.builder().build());EmbeddingResponse response openAiEmbeddingClient.call(embeddingRequest);ListDouble wordVectors response.getResult().getOutput();ListFloat vectors wordVectors.stream().map(o - o.floatValue()).collect(Collectors.toList());Object[] neighborParams new Object[] { new PGvector(vectors) };ListMapString, Object rows jdbcTemplate.queryForList(SELECT * FROM modeldata ORDER BY embedding - ? LIMIT 5, neighborParams);if (Objects.nonNull(rows) rows.size() 0) {for (MapString, Object row : rows) {for (Map.EntryString, Object entry : row.entrySet()) {String key entry.getKey();Object value entry.getValue();System.out.println(key:key ,value: value);}}}}}项目测试 接下来继续接入文字、图片、视频对接实现