大家好我是Java1234_小锋老师最近更新《2027版本 Spring AI 2.0 开发Java Agent智能体 视频教程》专辑感谢大家支持。本课程主要介绍和讲解Spring AI 2.0简介Spring AI 2.0 HelloWorld搭建Advisors — 拦截器模式增强AI能力对话与提示词工程Prompt工具调用 (Function Calling / Tools) RAG(检索增强生成)MCP(模型 上下文协议)和多模态支持。等这个Spring AI2.0基础课程录制完成接下来要发布2个 企业级Java AI实战课程RAG企业知识库系统和AI智能客服系统。大家可以点点关注后面更精彩。视频教程课件源码打包下载链接https://pan.baidu.com/s/1o-zRfndo1HHrS_uFroOiCw?pwd1234提取码0000Spring AI 2.0 开发Java Agent智能体 - 对话与提示词工程Prompt一、核心概念总览Spring AI 2.0 提供了统一、易用的对话与提示词工程 API核心组件包括组件作用关键特性Message封装对话内容支持SYSTEM、USER、ASSISTANT、TOOL四种类型SpringPrompt模型输入容器包含消息列表和模型配置选项PromptTemplate提示词模板引擎支持变量替换、外部文件加载、自定义分隔符SpringChatClient对话 API 入口流畅链式调用简化提示词构建与响应处理SpringChatModel底层模型接口统一抽象不同大模型OpenAI、Anthropic、Ollama 等Spring二、核心知识点详解1. 消息类型Message TypeSpring AI 定义了四种标准消息类型用于构建结构化对话SYSTEM设定 AI 角色、行为准则和能力边界如 你是一位 Java 开发专家只回答编程相关问题USER用户输入的问题或指令ASSISTANTAI 的历史回复用于多轮对话上下文TOOL工具调用的结果如函数执行返回值2. 提示词工程基础原则有效提示词应包含三要素角色设定明确 AI 身份和能力范围上下文信息提供必要背景知识清晰指令明确任务目标和输出格式提示词优化技巧使用分隔符如 、---区分不同内容块设定输出格式如 JSON、Markdown控制模型参数temperature0~1越低越确定maxTokens最大输出长度Spring3. 提示词模板PromptTemplate解决硬编码提示词的复用性和维护性问题支持变量替换使用{}占位符外部文件加载从 resources 读取模板自定义渲染器如修改分隔符为系统提示词模板SystemPromptTemplate专门用于角色设定4. ChatClient 流畅 APISpring AI 2.0 推荐使用 ChatClient 进行对话开发特点链式调用代码简洁内置提示词构建器支持流式响应FluxString统一处理不同模型的响应格式Spring三具体应用实例1PromptTemplate提示词模版我们如果不用提示词模版很多时候写代码是这样的// 不用模板手写相同的逻辑重复且难以维护 GetMapping(/chat/java) public String java() { return chatClient.prompt().user(介绍下Java).call().content(); } ​ GetMapping(/chat/python) public String python() { return chatClient.prompt().user(介绍下Python).call().content(); }我们现在用提示词模版简化系统设计/** * 使用模板一套代码应对所有场景 * param topic * return */ RequestMapping(value /ask,produces text/html;charsetutf-8) public FluxString ask(String topic) { PromptTemplate template new PromptTemplate(介绍下{topic}); Prompt prompt template.create(Map.of(topic, topic)); return chatClient.prompt(prompt) .stream() .content(); }测试浏览器输入http://localhost:8080/ask?topicjava再测试浏览器输入http://localhost:8080/ask?topicpython2使用ChatClient的流式 API 可以最快速地组装提示词我们看下代码/** * 使用 ChatClient 的流式 API 可以最快速地组装提示词 * param topic * return */ RequestMapping(value /ask2,produces text/html;charsetutf-8) public FluxString ask2(String topic) { return chatClient.prompt() .system(你是一个专业的书评助手) // 设置系统提示 .user(u-u.text(请给我三本关于{topic}的书籍).param(topic, topic)) .stream() .content(); }测试浏览器输入http://localhost:8080/ask2?topicpython再测试浏览器输入http://localhost:8080/ask2?topicjava3系统提示词工程 —— defaultSystem通过defaultSystem构建专家角色将其作为 AI 的行动纲领确保所有对话都有统一的行为准则。我们先在AiConfiguration配置类里加一个ChatClient实例/** * 创建一个 ChatClient 对象用于处理聊天请求。 * * param model OpenAiChatModel 对象用于处理聊天请求。 * return ChatClient 对象用于处理聊天请求。 */ Bean public ChatClient chatClient3(OpenAiChatModel model){ // System Prompt 工程清晰定义 AI 的角色、任务、约束和输出格式 String systemPrompt 你是一个资深的 Java 技术顾问。 禁止回答任何非技术类问题例如天气或娱乐八卦。 代码示例必须符合 Java 17 规范。 回答需要符合以下格式首先一句话概括问题的核心然后提供代码示例最后补充注意事项。 如果自己不确定可以说关于这个问题我目前没有确切的信息禁止编造内容。 ; return ChatClient .builder(model) // 创建 ChatClient 对象并设置模型为 model .defaultSystem(systemPrompt) .defaultAdvisors(new SimpleLoggerAdvisor()) // 添加一个 SimpleLoggerAdvisor记录请求日志 .build(); // 构建 ChatClient 对象 }接下来MyAiChatController里加下chatClient3实例以及定义一个新接口方法Autowired private ChatClient chatClient3 ;/** * param question * return */ RequestMapping(value /ask3,produces text/html;charsetutf-8) public FluxString ask3(String question) { return chatClient3.prompt() // 创建一个 Prompt 对象用于构建聊天请求。 .user( question) // 设置用户输入的文本。 .stream() // 调用 ChatClient 对象的 call() 方法发送聊天请求给大模型并获取响应。 .content(); // 获取响应的文本内容。 }我们来测试下浏览器输入http://localhost:8080/ask3?question写一个java起泡法排序算法