SpringAI入门示例

AI编程简介

纯Prompt模式

纯Prompt模式是AI编程中最基础的交互架构。用户通过输入自然语言文本(即Prompt)向AI模型发出指令,模型依据自身预训练所积累的知识和语言理解能力,直接生成相应的文本响应。其工作原理是,用户的Prompt作为输入触发模型的推理过程,模型在预训练形成的语义空间中进行模式匹配和内容生成,无需额外的外部工具或复杂的流程调用。

Agent+function Calling模式

Agent+function Calling模式引入了"Agent"(智能代理)的概念,结合函数调用机制,使AI能够更灵活地处理复杂任务。在该模式中,Agent充当决策者的角色,它首先对用户的需求进行分析和理解,然后根据需求判断需要调用哪些外部工具或函数来完成任务,最后将工具的返回结果进行整合并生成最终响应。

Rag模式

Rag模式,即检索增强生成(Retrieval-Augmented Generation)模式,结合了信息检索和文本生成技术。其核心思想是在生成内容之前,先从外部知识库或数据库中检索相关的信息,然后基于检索到的信息进行内容生成,从而使生成的内容更具针对性和准确性,尤其是在处理需要依赖最新数据或特定领域知识的任务时表现出色。

Fine-tuning模式

Fine-tuning模式是基于预训练模型进行进一步优化的架构。预训练模型通常在大规模通用数据集上进行训练,具备一定的通用语言理解或任务处理能力,但在特定领域或特定任务上的表现可能不够理想。Fine-tuning模式就是利用特定领域或任务的小规模数据集,对预训练模型进行微调,通过调整模型的部分或全部参数,使其更好地适应目标任务。

示例Demo

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.wdz</groupId>
    <artifactId>spring-ai</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-ai</name>
    <description>spring-ai</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
        <spring-ai.version>1.0.0-M7</spring-ai.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-model-ollama</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置ChatClient

package com.wdz.springai.configer;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OllamaConfigure {
    @Bean
    public ChatClient chatClient(OllamaChatModel ollamaModel, ChatMemory chatMemory) {
        return ChatClient.builder(ollamaModel)
                .defaultSystem("你是一个安全顾问,从安全角度回答问题")
                .defaultAdvisors(new SimpleLoggerAdvisor(),new MessageChatMemoryAdvisor(chatMemory))
                .build();
    }
}

配置ChatMemory

package com.wdz.springai.configer;

import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ChatMemoryConfigure {
    @Bean
    public ChatMemory chatMemory(){
        return  new InMemoryChatMemory();
    }
}

配置信息

spring.application.name=spring-ai
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=deepseek-r1:1.5b

logging.level.org.springframework.ai=debug

调用chat

package com.wdz.springai.controller;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

@RestController
public class ChatController {
    @Autowired
    private ChatClient client;
    /**
     * chat接口
     */
    @RequestMapping("/chat")
    public String chat(String content) {
        return client.prompt().user(content).call().content();
    }

    /**
     * stream chat接口
     */
    @RequestMapping(value = "/streamChat",headers = "Accept=text/html;charset=utf-8")
    public Flux<String> streamChat(String content) {
        return client.prompt().user(content).stream().content();
    }
}
### Spring Framework 中的人工智能集成与代理实现 Spring 是一种流行的 Java 开发框架,主要用于构建企业级应用程序。然而,在人工智能领域中,Spring 并未提供专门针对 AI 的模块或工具包。尽管如此,开发者可以通过多种方式将 AI 功能集成到基于 Spring 的应用中。 #### 集成方法概述 为了在 Spring 应用程序中引入 AI 能力,通常采用以下几种策略: 1. **调用外部 API 或服务** 许多云平台提供了强大的机器学习和强化学习模型作为 RESTful API 提供的服务。通过 `RestTemplate` 或者更现代的 `WebClient` 组件,可以轻松地从 Spring 应用程序中访问这些服务[^1]。 2. **嵌入本地 ML 模型** 如果希望减少对外部依赖或者提高性能,可以选择加载本地训练好的模型文件并执行推理操作。例如,TensorFlow 和 PyTorch 均支持导出可序列化的模型格式(如 `.pb`, `.h5`, 或 ONNX),并通过 JNI 接口或其他绑定库将其嵌入至 JVM 环境下运行的应用之中[^2]。 3. **利用消息队列解耦复杂流程** 对于某些涉及大量计算资源消耗的任务来说,直接在线程池内完成可能不是最佳实践;此时应该考虑借助 Kafka/RabbitMQ 等中间件来异步处理请求,并允许后台工作者节点负责耗时较长的工作负载——比如图像识别、自然语言理解等高级功能实现过程中的数据预处理阶段以及最终预测结果返回之前所需经历的一系列转换步骤等等[^3]。 以下是有关如何创建一个简单的 Spring Boot 控制器以触发远程 NLP 分析的一个例子: ```java @RestController @RequestMapping("/ai") public class AiController { @Autowired private RestTemplate restTemplate; @GetMapping("/analyzeText/{text}") public String analyzeText(@PathVariable String text){ ResponseEntity<String> responseEntity = restTemplate.getForEntity( "http://example.com/api/nlp?query=" + URLEncoder.encode(text, StandardCharsets.UTF_8), String.class); return responseEntity.getBody(); } } ``` 上述代码片段展示了怎样定义了一个接受路径参数名为 'text' 的 GET 请求映射规则,并且当接收到匹配该模式下的 HTTP 查询之后便会自动转发给指定的目标 URL 地址进行进一步加工后再原样反馈回去给客户端用户端看到的结果字符串形式表示而已啦! --- ### 强化学习基础概念简介 虽然本主题主要围绕 spring framework 展开讨论,但是既然提到了 reinforcement learning 这么重要的子领域,这里也简单介绍一下其核心思想以便更好地理解后续相关内容的发展方向吧! 强化学习是一种让计算机系统自主探索环境从而找到最优行为策略的学习范式。它不同于监督学习那样依靠标注样本指导调整权重系数直至收敛为止的过程,而是强调试错机制的重要性:即通过对不同动作产生的即时奖励信号加以累积评估进而优化长期收益期望值最大化目标函数求解问题解决方案的方法论体系结构设计原则等方面的知识要点总结如下所示列表项逐一列举出来供大家参考查阅使用哦~ - Credit Assignment Problem: 如何分配功劳给各个时间点上的决策?这是早期研究面临的主要挑战之一. - Temporal-Difference Learning Rule: 由 Ian H. Witten 在论文中首次提出的 TD(0) 更新法则奠定了后来许多算法的基础理论依据. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庄隐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值