0


Spring AI 来了,打造Java生态大模型应用开发新框架!

Spring AI 来了,打造Java生态大模型应用开发新框架!

尽管 Python 长期主导 AI 大模型应用开发领域,但 Java 并未熄火!Spring AI 来了,正式告别实验期,迈向广泛应用新阶段!这意味着 Spring 生态体系的广大开发者,迎来 AI 大模型应用开发的新里程。
在这里插入图片描述

Spring AI 开发框架设计理念

Spring AI 是一个 AI 工程师的应用框架,它提供了一个友好的 API 和开发 AI 应用的抽象,旨在简化 AI 大模型应用的开发工作。

Spring AI 吸取了知名 Python 项目的精髓,比如:**

LangChain

** 和 **

 LlamaIndex

**。

Spring AI 是基于这样一个理念创立的:

未来的 AI 大模型应用将不仅限于 Python 开发者,而且会普及到多种编程语言中。Spring AI 的核心是提供了开发 AI 大模型应用所需的基本抽象模型,这些抽象拥有多种实现方式,使得开发者可以用很少的代码改动就能实现组件的轻松替换。

在这里插入图片描述

Spring AI 主要功能特性如下

  • 第一、 对主流 AI 大模型供应商提供了支持,比如:OpenAI、Microsoft、Amazon、Google HuggingFace、Ollama、MistralAI 支持,目前对国内大模型支持还不友好。
  • 第二、 支持 AI 大模型类型包括:聊天、文本到图像、文本到声音,比如:OpenAI with DALL-E、StabilityAI 等。
  • 第三、 支持主流的 Embedding Model 和向量数据库,比如:Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Redis 等。
  • 第四、 把 AI 大模型输出映射到简单的 Java 对象(POJOs)上。
  • 第五、 支持了函数调用(Function calling)功能。
  • 第六、 为数据工程提供 ETL(数据抽取、转换和加载)框架。
  • 第七、 支持 Spring Boot 自动配置和快速启动,便于运行 AI 模型和管理向量库。 当前,Spring AI 最新版本为 0.8.1,具体使用也比较简单,符合 Java 开发者的开发习惯。 更详细的特性在这里:https://spring.io/projects/spring-ai

Spring AI 应用开发案例

接下来我们来看3个具体的开发案例,Spring AI 最新版本为 0.8.1,具体使用也比较简单,符合 Java 开发者的开发习惯。

案例一:基于大模型的对话应用开发

packageorg.springframework.ai.openai.samples.helloworld.simple;importorg.springframework.ai.chat.ChatClient;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importjava.util.Map;@RestControllerpublicclassSimpleAiController{privatefinalChatClient chatClient;@AutowiredpublicSimpleAiController(ChatClient chatClient){this.chatClient = chatClient;}@GetMapping("/ai/simple")publicMap<String,String>completion(@RequestParam(value ="message", defaultValue ="Tell me a joke")String message){returnMap.of("generation", chatClient.call(message));}}

案例二:RAG 检索增强应用开发

packageorg.springframework.samples.ai.azure.openai.rag;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.ai.client.AiClient;importorg.springframework.ai.client.AiResponse;importorg.springframework.ai.client.Generation;importorg.springframework.ai.document.Document;importorg.springframework.ai.embedding.EmbeddingClient;importorg.springframework.ai.loader.impl.JsonLoader;importorg.springframework.ai.prompt.Prompt;importorg.springframework.ai.prompt.SystemPromptTemplate;importorg.springframework.ai.prompt.messages.Message;importorg.springframework.ai.prompt.messages.UserMessage;importorg.springframework.ai.retriever.impl.VectorStoreRetriever;importorg.springframework.ai.vectorstore.VectorStore;importorg.springframework.ai.vectorstore.impl.InMemoryVectorStore;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.core.io.Resource;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;publicclassRagService{privatestaticfinalLogger logger =LoggerFactory.getLogger(RagService.class);@Value("classpath:/data/bikes.json")privateResource bikesResource;@Value("classpath:/prompts/system-qa.st")privateResource systemBikePrompt;privatefinalAiClient aiClient;privatefinalEmbeddingClient embeddingClient;publicRagService(AiClient aiClient,EmbeddingClient embeddingClient){this.aiClient = aiClient;this.embeddingClient = embeddingClient;}publicGenerationretrieve(String message){// Step 1 - Load JSON document as Documents

        logger.info("Loading JSON as Documents");JsonLoader jsonLoader =newJsonLoader(bikesResource,"name","price","shortDescription","description");List<Document> documents = jsonLoader.load();
        logger.info("Loading JSON as Documents");// Step 2 - Create embeddings and save to vector store

        logger.info("Creating Embeddings...");VectorStore vectorStore =newInMemoryVectorStore(embeddingClient);
        vectorStore.add(documents);
        logger.info("Embeddings created.");// Step 3 retrieve related documents to queryVectorStoreRetriever vectorStoreRetriever =newVectorStoreRetriever(vectorStore);
        logger.info("Retrieving relevant documents");List<Document> similarDocuments = vectorStoreRetriever.retrieve(message);
        logger.info(String.format("Found %s relevant documents.", similarDocuments.size()));// Step 4 Embed documents into SystemMessage with the `system-qa.st` prompt templateMessage systemMessage =getSystemMessage(similarDocuments);UserMessage userMessage =newUserMessage(message);// Step 4 - Ask the AI model

        logger.info("Asking AI model to reply to question.");Prompt prompt =newPrompt(List.of(systemMessage, userMessage));
        logger.info(prompt.toString());AiResponse response = aiClient.generate(prompt);
        logger.info("AI responded.");
        logger.info(response.getGeneration().toString());return response.getGeneration();}privateMessagegetSystemMessage(List<Document> similarDocuments){String documents = similarDocuments.stream().map(entry -> entry.getContent()).collect(Collectors.joining("\n"));SystemPromptTemplate systemPromptTemplate =newSystemPromptTemplate(systemBikePrompt);Message systemMessage = systemPromptTemplate.createMessage(Map.of("documents", documents));return systemMessage;}}

案例三:Function Calling Agent 应用开发

Spring AI Function Calling 函数调用工作流程如下图所示:包含了 Prompt 提示词、大模型、业务服务 API、回调、大模型响应等核心模块。
在这里插入图片描述


本文转载自: https://blog.csdn.net/weixin_42081445/article/details/137448683
版权归原作者 一名技术极客 所有, 如有侵权,请联系我们删除。

“Spring AI 来了,打造Java生态大模型应用开发新框架!”的评论:

还没有评论