文章插图
Spring AI,作为行业领导者,通过其强大、灵活的API和先进的功能,为各种行业提供了颠覆性的解决方案 。在本专题中,我们将深入探讨Spring AI在各领域的应用示例 。每个案例都将展示Spring AI如何满足特定需求 , 实现目标,并将这些LESSONS LEARNED扩展到更广泛的应用 。希望这个专题能对你有所启发,更深入地理解和利用Spring AI的无限可能 。 Open AI和Spring AI简介
当OpenAI发布ChatGPT时,它引起了全球的关注 。那是语言模型第一次能够生成类似人类的响应 。自那时以来 , OpenAI又发布了其他几款模型 , 包括可以根据文本提示生成图像的DALL-E 。
Spring AI是一个JAVA库,提供了一个简单易用的接口,可以与LLM模型进行交互 。Spring AI提供了更高级的抽象,可以与Open AI, Azure Open AI, Hugging Face, google Vertex, Ollama, Amazon Bedrock等各种LLM进行交互 。
在本文中,我们将探讨如何使用Spring AI与Open AI进行交互 。
首先,我们需要在OpenAI中创建一个账户并获取API密钥 。
前往OpenAI平台并创建一个账户 。
在仪表板中,点击左侧导航菜单中的API Keys,然后创建一个新的API密钥 。
如果您正在创建一个新账户 , 您将获得一些免费的额度来使用OpenAI的APIs 。否则 , 您需要购买额度才能使用OpenAI的APIs 。
一旦您拥有API密钥,将环境变量OPENAI_API_KEY设置为API密钥 。
export OPENAI_API_KEY=<your-api-key>
创建Spring AI项目让我们使用Spring Initializr创建一个新的Spring Boot项目 。
前往Spring Initializr https://start.spring.io/
选择Web,并且选择OpenAI starters
使用ChatClient与Open AI进行交互
Spring AI提供了ChatClient抽象,能够与不同类型的LLM进行交互,而无需与实际的LLM模型耦合 。
例如,我们可以使用ChatClient与OpenAI进行如下交互:
@RestControllerclass ChatController {private final ChatClient chatClient;ChatController(ChatClient chatClient) {this.chatClient = chatClient;}@GetMApping("/ai/chat")Map<String, String> chat(@RequestParam String question) {String response = chatClient.call(question);return Map.of("question", question, "answer", response);}}
在上面的代码中 , 没有任何东西与OpenAI耦合 。我们可以通过在 application.properties 文件中提供 API 密钥和其他参数来配置 ChatClient 以使用OpenAI 。
spring.ai.openai.api-key=${OPENAI_API_KEY}spring.ai.openai.chat.model=gpt-3.5-turbospring.ai.openai.chat.temperature=0.7
现在,我们可以运行应用并测试聊天API 。首先,启动你的Spring Boot应用程序 。然后,你可以使用 Postman 或者任何其他的 API 测试工具来发送 POST 请求到你的服务 。记住 , 你应该在你的请求正文中包含一个消息体,这将使得 ChatClient 能够与 OpenAI 进行交互 。你将在响应中看到自由形式的答复 。此答复是 OpenAI 模型根据你的消息生成的 。curl --location 'http://localhost:8080/ai/chat?question=Tell%20me%20about%20SpringBoot'//OUTPUT:{"question":"请介绍下SpringBoot框架","answer":"Spring Boot是一个开源的基于Java的框架,用于构建和部署独立的、生产就绪的应用程序 。它是更大的Spring生态系统的一部分 , 提供了更简单、更快捷的方式来设置和配置Spring应用程序 。Spring Boot消除了手动配置的需要,通过为大多数Spring项目提供默认设置,让开发人员能够快速开始他们的应用程序开发 。它还提供了一系列的特性 , 如内嵌服务器、度量、健康检查和安全性,这些都是预配置的,可以开箱即用 。"}
使用提示词模板我们可以使用提示词模板为ChatClient提供一组预定义的提示词 。
@RestControllerclass ChatController {private final JokeService jokeService;ChatController(JokeService jokeService) {this.jokeService = jokeService;}@GetMapping("/ai/chat-with-prompt")Map<String,String> chatWithPrompt(@RequestParam String subject) {String answer = jokeService.getJoke(subject);return Map.of("answer", answer);}}@Serviceclass JokeService {private final ChatClient chatClient;JokeService(ChatClient chatClient) {this.chatClient = chatClient;}String getJoke(String subject) {PromptTemplate promptTemplate = new PromptTemplate("告诉我一个关于{subject} 的笑话"");Prompt prompt = promptTemplate.create(Map.of("subject", subject));ChatResponse response = chatClient.call(prompt);return response.getResult().getOutput().getContent();}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 关于TypeScript中的泛型,希望这篇文章能让你彻底理解泛型
- 终于理解金庸了,如果是这个演员出演杨过,黄晓明就不会被骂了
- 1990年十月哪里粮食批发市场开业并引入期货交易机制
- 谭竹“出轨”对象发声:并不知情她有男友,分手后才知自己是小三!
- 五一档首个悲剧,亏损超7000万,导演含泪致歉并且宣布撤档离场
- 谭竹上百科并被曝光照片,网友呼吁尊重个人隐私
- 王小利二儿子北京完婚,豪宅三千万红包用箱装!网友:理解王亮了
- 《九龙城寨》票房达3亿,洪金宝终于“理解”周星驰
- ps怎么合并指定的图层,ps咋得才可以分开合并的图层
- 汪小菲未婚妻和未来婆婆同桌吃饭,还主动敬茶,张兰并不那么热情