在天生式人工智能的浪潮中,每个人都希望在一定程度上利用人工智能工具的能力。从这个前景出发,Spring 社区挺身而出,供应了一个名为“Spring AI”的模块,以便与 AI 工具交互并得到期望的结果。Spring AI 旨在简化集成人工智能功能的运用程序的开拓,避免不必要的繁芜性。
Spring AI 供应了作为开拓 AI 运用程序根本的抽象。这些抽象有多种实现,可以通过最少的代码变动轻松进行组件交流。例如,Spring AI 引入了 ChatClient 接口以及 OpenAI 和 Azure OpenAI 的实现。
在本篇 Spring AI 先容中,我们将谈论如何在基于 Spring 的运用程序中添加 AI 以及干系观点。
利用 Spring AI Reference 的条件条件1)你是一名 Spring 开拓者,想要学习 Spring AI
2) 希望将 AI 合并到现有运用程序中
3) ChatGPT 或任何其他类似工具中利用的提示的基本知识
什么是天生人工智能中的提示?在天生人工智能中,“提示(prompt)”是指供应给措辞模型以天生相应或输出的输入。提示充当我们用来天生文本的出发点或查询。它可以是一个句子、一个段落,乃至是一系列指令,辅导我们天生故意义且高下文干系的内容。提示勾引人工智能模型产生特定的输出。编写有效的提示对付提高结果输出至关主要。
什么是提示模板?“提示模板(Prompt templates)”是指天生人工智能中的提示的预定义或可重用构造。这些模板供应了标准化格式或指令集,用户可以遵照这些格式或指令来有效地与措辞模型进行交互。这些模板常日包含占位符或插槽,用户可以在个中插入与其任务干系的特定信息。为此,Spring AI 利用 OSS 库 StringTemplate。
例如,考虑大略的提示模板:
将以下英文文本翻译成汉语:“{text}”
在此模板中,{text} 是一个占位符,用户可以将其更换为他们想要翻译的实际文本。
给我讲一个关于{content}的{adjective}笑话。
在此模板中,{adjective} 和 {content} 是占位符,用户可以将其更换为实际文本以得到所需的结果。
在Spring AI中,提示模板可以比作Spring MVC架构中的“视图(View)”。供应模型工具(常日是 java.util.Map)来添补模板内的占位符。“rendered”字符串成为供应给 AI 模型的提示内容。
Spring AI 中的 ChatClient 是什么?ChatClient 是一个功能接口,简化了与AI 模型的交互。它有助于连接到可能具有不同事情办法的不同人工智能模型。该界面孔前仅适用于文本输入和输出,但我们该当期待将来有更多类型。请记住,某些类和接口可能会在后期发生变革。ChatClient接口构造如下:
@FunctionalInterfacepublic interface ChatClient { default String generate(String message) { // implementation omitted } ChatResponse generate(Prompt prompt);}
ChatClient 接口的紧张目标是:
可移植性:它可以轻松地与不同的人工智能模型集成。开拓职员可以在模型之间切换,而无需变动大量代码。这非常符合 Spring 模块化且易于切换部件的理念。
大略性: ChatClient 界面利用 Prompt 等帮助器类进行输入,ChatResponse 进行输出。这使得与人工智能模型的对话变得更加随意马虎。它处理准备要乞降理解相应的繁芜部分。总的来说,它供应了一种与人工智能模型交互的直接办法。
Spring AI 中的 ChatResponse 是什么?它保存 AI 模型返回的内容,并且每个 Generation 实例都有单个提示的可能输出之一。ChatResponse 类的构造如下:
public class ChatResponse{ private final List<Generation> generations; // other methods omitted }
ChatResponse 类还有一个带有 key-value 映射 的一个 Map。该 Map 供应了有关 AI 模型相应的额外信息。但是,此功能仍在开拓中,官方文档中没有详细解释。
如何在运用程序中利用 Spring AI 模块以下是将 Spring AI 合并到我们现有的基于 Spring 的运用程序中的大略步骤:
1) 利用 IDE 创建一个项目
2) 添加依赖项以利用 Spring AI 的功能
3) 在 application.xml 或 application.yml 文件中添加 openAI 键值属性
4) 创建 RestController
在运用程序中添加 OpenAI 依赖项有两种盛行的方法可以在我们现有的运用程序中包含启动器(依赖组件):
1)利用Spring初始化器
2)利用IDE
由于 Spring AI 还处于不成熟的版本。无法利用 Spring Initializer 或 IDE 将其添加到新创建的项目中。以下是我们须要添加的依赖项:
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>0.8.0-SNAPSHOT</version></dependency>
不才面的demo中,我们利用“0.8.0-SNAPSHOT”。也可以考试测验利用 openAI 依赖项的最新可用版本。
现有的存储库可能无法下载上述依赖项,因此须要添加一个附加存储库才能下载它:
<repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository></repositories>
获取OpenAI秘钥
获取密钥在 application.properties 文件中添加“spring.ai.openai.api-key”的值。
参考:利用 Spring Boot 创建自己的 ChatGPT 运用程序
利用 Spring AI 实现 Hello World 示例让我们利用 Spring AI 实现第一个“Hello World”示例。
把稳: Spring AI 处于开拓阶段,尚未达到成熟状态。因此,我们有可能在未来的版本中看到频繁的 API 变动。因此,建议在利用前查看API文档是否有最新变更。
步骤#1:创建 Spring Boot 入门项目
我们利用 IDE 来开拓这个示例。在创建项目时添加 2 个 boot 模块 “Spring Web”和“Spring Boot DevTools”。
步骤#2:在 pom.xml 中添加 OpenAI 依赖项
按照本文上面提到的办法添加依赖项。
步骤#3:在 application.xml 中添加 OpenAI 密钥值
添加 OpenAI 密钥值,如下所示。
spring.ai.openai.api-key= 你的 OpenAI 密钥
步骤#4:创建 RestController
让我们创建第一个与 OpenAI 交互的示例。
import org.springframework.ai.chat.ChatClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/prompt")public class AIPromptController { private final ChatClient chatClient; public AIPromptController(ChatClient chatClient) { this.chatClient= chatClient; } @GetMapping("/hello") public String testAiPrompt() { String prompt= "Hello! What is Spring Boot?"; return chatClient.generate(prompt); }}
利用 Spring AI 的另一个示例
让我们利用占位符开拓另一个示例来避免硬编码值。
import org.springframework.ai.chat.ChatClient;import org.springframework.ai.chat.ChatResponse;import org.springframework.ai.parser.BeanOutputParser;import org.springframework.ai.prompt.Prompt;import org.springframework.ai.prompt.PromptTemplate;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.example.spring.ai.test.entity.TopLanguage;@RestController @RequestMapping("/prompt")public class AIPromptController { private final ChatClient chatClient; public AIPromptController(ChatClient chatClient) { this.chatClient= chatClient; } @GetMapping("/learn/{topic}") public String getTopic(@PathVariable("topic") String topic) { //'topic'是提示中的占位符 PromptTemplate promptTemplate = new PromptTemplate(""" I just started learning Spring. Can you provide me fundamentals of {topic} to get started? Please provide me short and concise details in simple language. """); promptTemplate.add("topic", topic); return this.chatClient.generate(promptTemplate.create()).getGeneration().getContent(); } @GetMapping("/getLanguage/{year}") public TopLanguage getTopLanguage(@PathVariable("year") int year) { BeanOutputParser<TopLanguage> parser = new BeanOutputParser<>(TopLanguage.class); //'year' 是提示符中的占位符 String prompt= """ Which is the top programming Language in the year {year}? {format} """; PromptTemplate template = new PromptTemplate(prompt); template.add("year", year); template.add("format", parser.getFormat()); template.setOutputParser(parser); System.out.println("Format String: "+parser.getFormat()); Prompt promt= template.create(); ChatResponse chatResponse= chatClient.generate(promt); String text= chatResponse.getGeneration().getContent(); return parser.parse(text); } }
让我们创建 TopLanguage 作为记录:
public record TopLanguage(String language, int year, int percentage) {}
如何测试输出?
为了测试我们示例的输出利用 Postman 测试。
1) 点击 URL https://localhost:8080/prompt/hello 查看第一个方法的预期输出。
2) 点击 URL https://localhost:8080/prompt/learn/spring core 来测试第二种方法的预期输出。
3)点击 URL https://localhost:8080/prompt/getLanguage/2020 来测试第三种方法的输出。在此方法中,我们利用了格式,因此输出应为 json 形式,如下所示:
{"language": "Java","percentage": 75.8,"year": 2020}
参考
利用 Spring Boot 创建自己的 ChatGPT 运用程序
https://docs.spring.io/spring-ai/reference/index.html