AI 时代下,Java程序员需与时俱进掌握下面的知识:
AI 应用平台的使用
接入 AI 大模型
AI 开发框架(Spring AI + LangChain4j)
AI 大模型本地部署
Prompt 工程和优化技巧
多模态特性
Spring AI 核心特性:如自定义拦截器、上下文持久化、结构化输出
RAG 知识库和向量数据库
Tool Calling ️工具调用
MCP 模型上下文协议和服务开发
AI 智能体 Manus 原理和自主开发
AI 服务化和 Serverless 部署
AI大模型接入
接入 AI 大模型
使用大模型
1、云服务特点:
提供纯净的大模型能力和构建应用(智能体)的工具
按需付费,无需前期大量基础设施投入
随时可用,维护成本低
自动更新到最新版本的模型
通常具有更完善的安全措施和合规保障
2、自部署特点:
完全控制数据流,更高的数据隐私保障
可根据特定需求微调和定制模型
无网络延迟,适合对响应速度有严格要求的场景
一次性成本较高,需要专业的技术团队维护
适合企业级应用和对数据安全有严格要求的场景
接入大模型
1、AI 应用平台接入
通过云服务商提供的 AI 应用平台来使用 AI 大模型。
以 阿里云百炼 为例,这是一站式的大模型开发及应用构建平台,它提供了从模型调用到应用构建的全流程支持。
不论是开发者还是业务人员,都可以通过简单的界面操作,在 5 分钟内开发出一款大模型应用,或在几小时内训练出一个专属模型,从而将更多精力专注于应用创新。
此外,还提供了知识库管理、应用评测、应用观测等功能,能够帮企业快速构建智能客服等应用。
模型服务灵积(DashScope),旨在通过灵活、易用的 模型 API 接口,让开发者能够快速调用丰富的大模型能力,面向技术开发同学,更底层。
利用阿里云百炼平台,可以轻松体验 AI 大模型和构建 AI 应用。
2、AI 软件客户端接入
除了平台之外,还可以通过 AI 软件客户端来使用大模型能力。
Cherry Studio:一款集多模型对话、知识库管理、AI 绘画、翻译等功能于一体的全能 AI 助手平台。Cherry Studio 提供高度自定义的设计、强大的扩展能力和友好的用户体验。
Cursor:以 AI 为核心的编程开发工具,可以快速生成项目代码、理解整个代码库并提供智能建议。
3、程序接入
可以通过编程的方式在自己的项目中调用 AI 大模型,又可以分为 2 种方式:
直接调用 AI 大模型,比如调用 DeepSeek(更原生)
调用 AI 大模型平台创建的应用或智能体(更方便)
对于第 1 种方式,可以使用特定平台提供的 SDK 或 API,参考平台的文档来接入;也可以使用 AI 开发框架,比如 Spring AI、Spring AI Alibaba、LangChain4j 等自主选择大模型进行调用,可以灵活切换使用的大模型而几乎不用修改代码。
对于第 2 种方式,一般只能使用特定平台提供的 SDK 或 API,参考 平台的文档 来接入,每个大模型服务平台的代码都不一样。
程序调用 AI 大模型
SDK 接入:使用官方提供的软件开发工具包,最直接的集成方式
HTTP 接入:通过 REST API 直接发送 HTTP 请求调用模型
Spring AI:基于 Spring 生态系统的 AI 框架,更方便地接入大模型
LangChain4j:专注于构建 LLM 应用的 Java 框架,提供丰富的 AI 调用组件
Spring AI
Spring AI 是 Spring 生态系统的新成员,旨在简化 AI 功能与 Spring 应用的集成。Spring AI 通过提供统一接口、支持集成多种 AI 服务提供商和模型类型、各种 AI 开发常用的特性(比如 RAG 知识库、Tools 工具调用和 MCP 模型上下文协议),简化了 AI 应用开发代码,使开发者能够专注于业务逻辑,提高了开发效率。
Spring AI 默认没有支持所有的大模型(尤其是国产的),更多的是支持兼容 OpenAI API 的大模型的集成,参考 官方的模型对比。因此,如果想要调用阿里系大模型(比如通义千问),推荐直接使用阿里自主封装的 Spring AI Alibaba 框架,它不仅能直接继承阿里系大模型,用起来更方便,而且与标准的 Spring AI 保持兼容。
AI应用开发
Prompt 优化技巧
常用技巧:
基础提示技巧
1、明确指定任务和角色
2、提供详细说明和具体示例
3、使用结构化格式引导思维
4、明确输出格式要求
进阶提示技巧
1、思维链提示法(Chain-of-Thought)
2、少样本学习(Few-Shot Learning)
3、分步骤指导(Step-by-Step)
4、自我评估和修正
5、知识检索和引用
6、多视角分析
7、多模态思维
提示词调试与优化
1、迭代式提示优化
2、边界测试
3、提示词模板化
4、错误分析与修正
AI 应用需求分析
技术并不是产品成功的决定性因素,而是在于有没有把握住用户的需求、解决用户的痛点。
AI应用需求分析关键点:
参考其他项目需求
用AI细化需求
MVP 最小可行产品策略
AI 应用方案设计
核心:多轮对话实现
ChatClient 特性
如何使用对话记忆能力呢?参考 Spring AI 的官方文档,了解到 Spring AI 提供了 ChatClient API 来和 AI 大模型交互。
ChatClient 支持更复杂灵活的链式调用(Fluent API)
ChatClient 支持多种响应格式,比如返回 ChatResponse 对象、返回实体对象、流式返回
可以给 ChatClient 设置默认参数,比如系统提示词,还可以在对话时动态更改系统提示词的变量,类似模板的概念
还支持指定默认对话选项、默认拦截器、默认函数调用等等
Advisors
Spring AI 使用 Advisors(顾问)机制来增强 AI 的能力,可以理解为一系列可插拔的拦截器,在调用 AI 前和调用 AI 后可以执行一些额外的操作,比如:
前置增强:调用 AI 前改写一下 Prompt 提示词、检查一下提示词是否安全
后置增强:调用 AI 后记录一下日志、处理一下返回的结果
Chat Memory Advisor
想要实现对话记忆功能,可以使用 Spring AI 的 ChatMemoryAdvisor,它主要有几种内置的实现方式:
MessageChatMemoryAdvisor:从记忆中检索历史对话,并将其作为消息集合添加到提示词中
PromptChatMemoryAdvisor:从记忆中检索历史对话,并将其添加到提示词的系统文本中
VectorStoreChatMemoryAdvisor:可以用向量数据库来存储检索历史对话
Chat Memory
上述 ChatMemoryAdvisor 都依赖 Chat Memory 进行构造,Chat Memory 负责历史对话的存储,定义了保存消息、查询消息、清空消息历史的方法。
Spring AI 内置了几种 Chat Memory,可以将对话保存到不同的数据源中,比如:
InMemoryChatMemory:内存存储
CassandraChatMemory:在 Cassandra 中带有过期时间的持久化存储
Neo4jChatMemory:在 Neo4j 中没有过期时间限制的持久化存储
JdbcChatMemory:在 JDBC 中没有过期时间限制的持久化存储
多轮对话 AI 应用开发
1)首先初始化 ChatClient 对象。使用 Spring 的构造器注入方式来注入阿里大模型 dashscopeChatModel 对象,并使用该对象来初始化 ChatClient。初始化时指定默认的系统 Prompt 和基于内存的对话记忆 Advisor。
2)编写对话方法。调用 chatClient 对象,传入用户 Prompt,并且给 advisor 指定对话 id 和对话记忆大小。
3)编写单元测试,测试多轮对话
RAG知识库
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索技术和 AI 内容生成的混合架构,可以解决大模型的知识时效性限制和幻觉问题。
从技术角度看,RAG 在大语言模型生成回答之前,会先从外部知识库中检索相关信息,然后将这些检索到的内容作为额外上下文提供给模型,引导其生成更准确、更相关的回答。
通过 RAG 技术改造后,AI 就能:
准确回答关于特定内容的问题
在合适的时机推荐相关服务
用特定的语气和用户交流
提供更新、更准确的建议
RAG 工作流程/核心特性
RAG 技术实现主要包含以下 4 个核心步骤:
文档收集和切割 - ETL
文档收集:从各种来源(网页、PDF、数据库等)收集原始文档
文档预处理:清洗、标准化文本格式
文档切割:将长文档分割成适当大小的片段(俗称 chunks)
基于固定大小(如 512 个 token)
基于语义边界(如段落、章节)
基于递归分割策略(如递归字符 n-gram 切割)
详解:
对知识库文档进行处理,然后保存到向量数据库中。这个过程俗称 ETL(抽取、转换、加载),Spring AI 提供了对 ETL 的支持
在 Spring AI 中,对 Document 的处理通常遵循以下流程:
读取文档:使用 DocumentReader 组件从数据源(如本地文件、网络资源、数据库等)加载文档。
转换文档:根据需求将文档转换为适合后续处理的格式,比如去除冗余信息、分词、词性标注等,可以使用 DocumentTransformer 组件实现。
写入文档:使用 DocumentWriter 将文档以特定格式保存到存储中,比如将文档以嵌入向量的形式写入到向量数据库,或者以键值对字符串的形式保存到 Redis 等 KV 存储中。
抽取(Extract)
Spring AI 通过 DocumentReader 组件实现文档抽取,也就是把文档加载到内存中。
DocumentReader 接口实现了 Supplier<List<Document>> 接口,主要负责从各种数据源读取数据并转换为 Document 对象集合。
实际开发中,可以直接使用 Spring AI 内置的多种 DocumentReader 实现类,用于处理不同类型的数据源
转换(Transform)
Spring AI 通过 DocumentTransformer 组件实现文档转换。
文档转换是保证 RAG 效果的核心步骤,也就是如何将大文档合理拆分为便于检索的知识碎片,Spring AI 提供了多种 DocumentTransformer 实现类
加载(Load)
Spring AI 通过 DocumentWriter 组件实现文档加载(写入)。
DocumentWriter 接口实现了 Consumer<List<Document>> 接口,负责将处理后的文档写入到目标存储中
向量转换和存储
向量转换:使用 Embedding 模型将文本块转换为高维向量表示,可以捕获到文本的语义特征
向量存储:将生成的向量和对应文本存入向量数据库,支持高效的相似性搜索
详解:
Spring AI 官方 提供了向量数据库接口 VectorStore 和向量存储整合包,帮助开发者快速集成各种第三方向量存储,比如 Milvus、Redis、PGVector、Elasticsearch 等。
向量存储的工作原理
在向量数据库中,查询与传统关系型数据库有所不同。向量库执行的是相似性搜索,而非精确匹配。
嵌入转换:当文档被添加到向量存储时,Spring AI 会使用嵌入模型(如 OpenAI 的 text-embedding-ada-002)将文本转换为向量。
相似度计算:查询时,查询文本同样被转换为向量,然后系统计算此向量与存储中所有向量的相似度。
相似度度量:常用的相似度计算方法包括:
余弦相似度:计算两个向量的夹角余弦值,范围在-1到1之间
欧氏距离:计算两个向量间的直线距离
点积:两个向量的点积值
过滤与排序:根据相似度阈值过滤结果,并按相似度排序返回最相关的文档
文档过滤和检索
查询处理:将用户问题也转换为向量表示
过滤机制:基于元数据、关键词或自定义规则进行过滤
相似度搜索:在向量数据库中查找与问题向量最相似的文档块,常用的相似度搜索算法有余弦相似度、欧氏距离等
上下文组装:将检索到的多个文档块组装成连贯上下文
Spring AI 官方声称提供了一个 “模块化” 的 RAG 架构,用于优化大模型回复的准确性。
简单来说,就是把整个文档过滤检索阶段拆分为:检索前、检索时、检索后,分别针对每个阶段提供了可自定义的组件。
在预检索阶段,系统接收用户的原始查询,通过查询转换和查询扩展等方法对其进行优化,输出增强的用户查询。
在检索阶段,系统使用增强的查询从知识库中搜索相关文档,可能涉及多个检索源的合并,最终输出一组相关文档。
在检索后阶段,系统对检索到的文档进行进一步处理,包括排序、选择最相关的子集以及压缩文档内容,输出经过优化的相关文档集。
查询增强和关联
提示词组装:将检索到的相关文档与用户问题组合成增强提示
上下文融合:大模型基于增强提示生成回答
源引用:在回答中添加信息来源引用
后处理:格式化、摘要或其他处理以优化最终输出
生成阶段是 RAG 流程的最终环节,负责将检索到的文档与用户查询结合起来,为 AI 提供必要的上下文,从而生成更准确、更相关的回答。
RAG 相关技术
Embedding 和 Embedding 模型
Embedding 嵌入是将高维离散数据(如文字、图片)转换为低维连续向量的过程。这些向量能在数学空间中表示原始数据的语义特征,使计算机能够理解数据间的相似性。
Embedding 模型是执行这种转换算法的机器学习模型,如 Word2Vec(文本)、ResNet(图像)等。不同的 Embedding 模型产生的向量表示和维度数不同,一般维度越高表达能力更强,可以捕获更丰富的语义信息和更细微的差别,但同样占用更多存储空间。
举个例子,“鱼皮” 和 “鱼肉” 的 Embedding 向量在空间中较接近,而 “鱼皮” 和 “帅哥” 则相距较远,反映了语义关系。
向量数据库
向量数据库是专门存储和检索向量数据的数据库系统。通过高效索引算法实现快速相似性搜索,支持 K 近邻查询等操作。
注意,并不是只有向量数据库才能存储向量数据,只不过与传统数据库不同,向量数据库优化了高维向量的存储和检索。
AI 的流行带火了一波向量数据库和向量存储,比如 Milvus、Pinecone 等。此外,一些传统数据库也可以通过安装插件实现向量存储和检索,比如 PGVector、Redis Stack 的 RediSearch 等。
召回
召回是信息检索中的第一阶段,目标是从大规模数据集中快速筛选出可能相关的候选项子集。强调速度和广度,而非精确度。
精排和 Rank 模型
精排(精确排序)是搜索 / 推荐系统的最后阶段,使用计算复杂度更高的算法,考虑更多特征和业务规则,对少量候选项进行更复杂、精细的排序。
比如,短视频推荐先通过召回获取数万个可能相关视频,再通过粗排缩减至数百条,最后精排阶段会考虑用户最近的互动、视频热度、内容多样性等复杂因素,确定最终展示的 10 个视频及顺序。
Rank 模型(排序模型)负责对召回阶段筛选出的候选集进行精确排序,考虑多种特征评估相关性。
现代 Rank 模型通常基于深度学习,如 BERT、LambdaMART 等,综合考虑查询与候选项的相关性、用户历史行为等因素。举个例子,电商推荐系统会根据商品特征、用户偏好、点击率等给每个候选商品打分并排序。
混合检索策略
混合检索策略结合多种检索方法的优势,提高搜索效果。常见组合包括关键词检索、语义检索、知识图谱等。
比如在 AI 大模型开发平台 Dify 中,就为用户提供了 “基于全文检索的关键词搜索 + 基于向量检索的语义检索” 的混合检索策略,用户还可以自己设置不同检索方式的权重。
RAG 最佳实践和调优
文档收集和切割
文档的质量决定了 AI 回答能力的上限,其他优化策略只是让 AI 回答能力不断接近上限。
因此,文档处理是 RAG 系统中最基础也最重要的环节。
优化原始文档
文档切片
元数据标注
向量转换和存储
向量转换和存储是 RAG 系统的核心环节,直接影响检索的效率和准确性。
向量存储配置
需要根据费用成本、数据规模、性能、开发成本来选择向量存储方案
选择合适的嵌入模型
文档过滤和检索
这个环节是开发者最能大显身手的地方,在技术已经确定的情况下,优化这个环节可以显著提升系统整体效果。
多查询扩展
查询重写和翻译
检索器配置
查询增强和关联
经过前面的文档检索,系统已经获取了与用户查询相关的文档。此时,大模型需要根据用户提示词和检索内容生成最终回答。然而,返回结果可能仍未达到预期效果,需要进一步优化。
错误处理机制
工具调用
需求分析
之前通过 RAG 技术让 AI 应用具备了根据外部知识库来获取信息并回答的能力,但是直到目前为止,AI 应用还只是个 “知识问答助手”。现在可以利用 工具调用 特性,实现更多需求。如:
1)联网搜索
2)网页抓取
3)资源下载
4)终端操作
5)文件操作
6)PDF 生成
如果 AI 能够完成上述需求,就不再只是一个有知识的 “大脑”,而是有手有脚,会利用工具完成任务的 “智能体” 了。
工具调用
工具调用(Tool Calling)可以理解为让 AI 大模型 借用外部工具 来完成它自己做不到的事情。
跟人类一样,如果只凭手脚完成不了工作,那么就可以利用工具箱来完成。
工具可以是任何东西,比如网页搜索、对外部 API 的调用、访问外部数据、或执行特定的代码等。
比如用户提问 “帮我查询上海最新的天气”,AI 本身并没有这些知识,它就可以调用 “查询天气工具”,来完成任务。
工具调用的工作原理
其实,工具调用的工作原理非常简单,并不是 AI 服务器自己调用这些工具、也不是把工具的代码发送给 AI 服务器让它执行,它只能提出要求,表示 “我需要执行 XX 工具完成任务”。而真正执行工具的是自己的应用程序,执行后再把结果告诉 AI,让它继续工作。
工具调用的流程
工具定义:程序告诉 AI “你可以使用这些工具”,并描述每个工具的功能和所需参数
工具选择:AI 在对话中判断需要使用某个工具,并准备好相应的参数
返回意图:AI 返回 “我想用 XX 工具,参数是 XXX” 的信息
工具执行:我们的程序接收请求,执行相应的工具操作
结果返回:程序将工具执行的结果发回给 AI
继续对话:AI 根据工具返回的结果,生成最终回答给用户
Spring AI 工具开发
通过 Spring AI 官方 提供的图片来理解 Spring AI 在实现工具调用时都帮我们做了哪些事情?
工具定义与注册:Spring AI 可以通过简洁的注解自动生成工具定义和 JSON Schema,让 Java 方法轻松转变为 AI 可调用的工具。
工具调用请求:Spring AI 自动处理与 AI 模型的通信并解析工具调用请求,并且支持多个工具链式调用。
工具执行:Spring AI 提供统一的工具管理接口,自动根据 AI 返回的工具调用请求找到对应的工具并解析参数进行调用,让开发者专注于业务逻辑实现。
处理工具结果:Spring AI 内置结果转换和异常处理机制,支持各种复杂 Java 对象作为返回值并优雅处理错误情况。
返回结果给模型:Spring AI 封装响应结果并管理上下文,确保工具执行结果正确传递给模型或直接返回给用户。
生成最终响应:Spring AI 自动整合工具调用结果到对话上下文,支持多轮复杂交互,确保 AI 回复的连贯性和准确性。
工具定义模式
在 Spring AI 中,定义工具主要有两种模式:基于 Methods 方法或者 Functions 函数式编程。
定义工具
Spring AI 提供了两种定义工具的方法 —— 注解式 和 编程式。
使用工具
定义好工具后,Spring AI 提供了多种灵活的方式将工具提供给 ChatClient,让 AI 能够在需要时调用这些工具。
总结一下,在使用工具时,Spring AI 会自动处理工具调用的全过程:从 AI 模型决定调用工具 => 到执行工具方法 => 再到将结果返回给模型 => 最后模型基于工具结果生成最终回答。这整个过程对开发者来说是透明的,我们只需专注于 实现工具 的业务逻辑即可。
工具生态
首先,工具的本质就是一种插件。能不自己写的插件,就尽量不要自己写。可以直接在网上找一些优秀的工具实现,比如 Spring AI Alibaba 官方文档 中提到了社区插件。
虽然文档里只提到了屈指可数的插件数,但可以在 GitHub 找到官方提供的更多 工具源码,包含大量有用的工具!比如翻译工具、网页搜索工具、爬虫工具、地图工具等
如果社区中没找到合适的工具,就要自主开发。需要注意的是,AI 自身能够实现的功能通常没必要定义为额外的工具,因为这会增加一次额外的交互,应该将工具用于 AI 无法直接完成的任务。
MCP协议
MCP概念
MCP(Model Context Protocol,模型上下文协议)是一种开放标准,目的是增强 AI 与外部系统的交互能力。MCP 为 AI 提供了与外部工具、资源和服务交互的标准化方式,让 AI 能够访问最新数据、执行复杂操作,并与现有系统集成。
根据 官方定义,MCP 是一种开放协议,它标准化了应用程序如何向大模型提供上下文的方式。可以将 MCP 想象成 AI 应用的 USB 接口。就像 USB 为设备连接各种外设和配件提供了标准化方式一样,MCP 为 AI 模型连接不同的数据源和工具提供了标准化的方法。
增强 AI 的能力,通过 MCP 协议,AI 应用可以轻松接入别人提供的服务来实现更多功能,比如搜索网页、查询数据库、调用第三方 API、执行计算。
MCP 的三大作用:
轻松增强 AI 的能力
统一标准,降低使用和理解成本
打造服务生态,造福广大开发者
MCP 架构
1、宏观架构
MCP 的核心是 “客户端 - 服务器” 架构,其中 MCP 客户端主机可以连接到多个服务器。客户端主机是指希望访问 MCP 服务的程序,比如 Claude Desktop、IDE、AI 工具或部署在服务器上的项目。
2、SDK 3 层架构
如果要在程序中使用 MCP 或开发 MCP 服务,可以引入 MCP 官方的 SDK,比如 Java SDK。先通过 MCP 官方文档了解 MCP SDK 的架构,主要分为 3 层:
分别来看每一层的作用:
客户端 / 服务器层:McpClient 处理客户端操作,而 McpServer 管理服务器端协议操作。两者都使用 McpSession 进行通信管理。
会话层(McpSession):通过 DefaultMcpSession 实现管理通信模式和状态。
传输层(McpTransport):处理 JSON-RPC 消息序列化和反序列化,支持多种传输实现,比如 Stdio 标准 IO 流传输和 HTTP SSE 远程传输。
3、MCP 客户端
MCP Client 是 MCP 架构中的关键组件,主要负责和 MCP 服务器建立连接并进行通信。它能自动匹配服务器的协议版本、确认可用功能、负责数据传输和 JSON-RPC 交互。此外,它还能发现和使用各种工具、管理资源、和提示词系统进行交互。
除了这些核心功能,MCP 客户端还支持一些额外特性,比如根管理、采样控制,以及同步或异步操作。为了适应不同场景,它提供了多种数据传输方式,包括:
Stdio 标准输入 / 输出:适用于本地调用
基于 Java HttpClient 和 WebFlux 的 SSE 传输:适用于远程调用
客户端可以通过不同传输方式调用不同的 MCP 服务,可以是本地的、也可以是远程的。
4、MCP 服务端
MCP Server 也是整个 MCP 架构的关键组件,主要用来为客户端提供各种工具、资源和功能支持。
它负责处理客户端的请求,包括解析协议、提供工具、管理资源以及处理各种交互信息。同时,它还能记录日志、发送通知,并且支持多个客户端同时连接,保证高效的通信和协作。
和客户端一样,它也可以通过多种方式进行数据传输,比如 Stdio 标准输入 / 输出、基于 Servlet / WebFlux / WebMVC 的 SSE 传输,满足不同应用场景。
这种设计使得客户端和服务端完全解耦,任何语言开发的客户端都可以调用 MCP 服务。
使用 MCP
3 种使用 MCP 的方式:
云平台使用 MCP
软件客户端使用 MCP
程序中使用 MCP
无论是哪种使用方式,原理都是类似的,而且有 2 种可选的使用模式:本地下载 MCP 服务端代码并运行(类似引入了一个 SDK),或者 直接使用已部署的 MCP 服务(类似调用了别人的 API)。
到哪里去找别人开发的 MCP 服务呢?
MCP 服务大全
目前已经有很多 MCP 服务市场,开发者可以在这些平台上找到各种现成的 MCP 服务:
MCP.so:较为主流,提供丰富的 MCP 服务目录
GitHub Awesome MCP Servers:开源 MCP 服务集合
阿里云百炼 MCP 服务市场
Spring AI Alibaba 的 MCP 服务市场
Glama.ai MCP 服务
其中,绝大多数 MCP 服务市场仅提供本地下载 MCP 服务端代码并运行的使用方式,毕竟部署 MCP 服务也是需要成本的。
了解 Spring AI MCP 客户端的基本使用方法。建议参考 Spring AI Alibaba 的文档
MCP 调用的本质就是类似工具调用,并不是让 AI 服务器主动去调用 MCP 服务,而是告诉 AI “MCP 服务提供了哪些工具”,如果 AI 想要使用这些工具完成任务,就会告诉后端程序,后端程序在执行工具后将结果返回给 AI,最后由 AI 总结并回复。
Spring AI MCP 开发模式
Spring AI 在 MCP 官方 Java SDK 的基础上额外封装了一层,提供了和 Spring Boot 整合的 SDK,支持客户端和服务端的普通调用和响应式调用。
MCP 客户端开发
客户端开发主要基于 Spring AI MCP Client Boot Starter,能够自动完成客户端的初始化、管理多个客户端实例、自动清理资源等。
MCP 服务端开发
服务端开发主要基于 Spring AI MCP Server Boot Starter,能够自动配置 MCP 服务端组件,使开发者能够轻松创建 MCP 服务,向 AI 客户端提供工具、资源和提示词模板,从而扩展 AI 模型的能力范围。
MCP 工具类
Spring AI 还提供了一系列 辅助 MCP 开发的工具类,用于 MCP 和 ToolCallback 之间的互相转换。
也就是说,开发者可以直接将之前开发的工具转换为 MCP 服务,极大提高了代码复用性
MCP 开发最佳实践
1)慎用 MCP:MCP 不是银弹,其本质就是工具调用,只不过统一了标准、更容易共享而已。如果自己开发一些不需要共享的工具,完全没必要使用 MCP,可以节约开发和部署成本。我个人的建议是 能不用就不用,先开发工具调用,之后需要提供 MCP 服务时再将工具调用转换成 MCP 服务即可。
2)传输模式选择:Stdio 模式作为客户端子进程运行,无需网络传输,因此安全性和性能都更高,更适合小型项目;SSE 模式适合作为独立服务部署,可以被多客户端共享调用,更适合模块化的中大型项目团队。
3)明确服务:设计 MCP 服务时,要合理划分工具和资源,并且利用 @Tool、@ToolParam 注解尽可能清楚地描述工具的作用,便于 AI 理解和选择调用。
4)注意容错:和工具开发一样,要注意 MCP 服务的容错性和健壮性,捕获并处理所有可能的异常,并且返回友好的错误信息,便于客户端处理。
5)性能优化:MCP 服务端要防止单次执行时间过长,可以采用异步模式来处理耗时操作,或者设置超时时间。客户端也要合理设置超时时间,防止因为 MCP 调用时间过长而导致 AI 应用阻塞。
6)跨平台兼容性:开发 MCP 服务时,应该考虑在 Windows、Linux 和 macOS 等不同操作系统上的兼容性。特别是使用 stdio 传输模式时,注意路径分隔符差异、进程启动方式和环境变量设置。比如客户端在 Windows 系统中使用命令时需要额外添加 .cmd 后缀。
MCP 部署方案
由于 MCP 的传输方式分为 stdio(本地)和 SSE(远程),因此 MCP 的部署也可以对应分为 本地部署 和 远程部署,部署过程和部署一个后端项目的流程基本一致。
除了部署到自己的服务器之外,由于 MCP 服务一般都是职责单一的小型项目,很适合部署到 Serverless 平台上。使用 Serverless 平台,开发者只需关注业务代码的编写,无需管理服务器等基础设施,系统会根据实际使用量自动扩容并按使用付费,从而显著降低运维成本和开发复杂度。
百炼提供了详细的 使用和部署 MCP 服务指南,可以将自己的 MCP 服务部署到阿里云函数计算平台,实现 Serverless 部署。
提交至平台
你还可以把 MCP 服务提交到各种第三方 MCP 服务市场,类似于发布应用到应用商店,让其他人也能使用你的 MCP 服务。
AI智能体构建
什么是智能体?
智能体(Agent)是一个能够感知环境、进行推理、制定计划、做出决策并自主采取行动以实现特定目标的 AI 系统。它以大语言模型为核心,集成 记忆、知识库和工具 等能力为一体,构造了完整的决策能力、执行能力和记忆能力,就像一个有主观能动性的人类一样。
与普通的 AI 大模型不同,智能体能够:
感知环境:通过各种输入渠道获取信息(多模态),理解用户需求和环境状态
自主规划任务步骤:将复杂任务分解为可执行的子任务,并设计执行顺序
主动调用工具完成任务:根据需要选择并使用各种外部工具和 API,扩展自身能力边界
进行多步推理:通过思维链(Chain of Thought)逐步分析问题并推导解决方案
持续学习和记忆过去的交互:保持上下文连贯性,利用历史交互改进决策
根据环境反馈调整行为:根据执行结果动态调整策略,实现闭环优化
AI 会像人类一样先思考后回答,让答案更准确:
智能体的分类
跟人的生长阶段一样,智能体也是可以不断进化的。按照自主性和规划能力,智能体可以分为几个层次:
1)反应式智能体:仅根据当前输入和固定规则做出反应,类似简单的聊天机器人,没有真正的规划能力。23 年时的大多数 AI 聊天机器人应用,几乎都是反应式智能体。
2)有限规划智能体:能进行简单地多步骤执行,但执行路径通常是预设的或有严格限制的。鉴定为 “能干事、但干不了复杂的大事”。24 年流行的很多可联网搜索内容、调用知识库和工具的 AI 应用,都属于这类智能体。比如 ChatGPT + Plugins
3)自主规划智能体:也叫目标导向智能体,能够根据任务目标自主分解任务、制定计划、选择工具并一步步执行,直到完成任务。
比如 25 年初很火的 Manus 项目,它的核心亮点在于其 “自主执行” 能力。据官方介绍,Manus 能够在虚拟机中调用各种工具(如编写代码、爬取数据)完成任务。其应用场景覆盖旅行规划、股票分析、教育内容生成等 40 余个领域,所以在当时给了很多人震撼感。
但其实早在这之前,就有类似的项目了,比如 AutoGPT,所以 Manus 大火的同时也被人诟病 “会营销而已”。甚至没隔多久就有小团队开源了 Manus 的复刻版 —— OpenManus,这类智能体通过 “思考-行动-观察” 的循环模式工作,能够持续推进任务直至完成目标。
需要注意,自主规划能力是智能体发展的重要方向,但并非所有应用场景都需要完全的自主规划能力。在某些场景中,限制智能体的自主性反而能提高效率和安全性。
智能体实现关键技术
在自主开发智能体前,要先了解一下智能体的关键实现技术,也就是方案设计阶段做的事情。
CoT 思维链
CoT(Chain of Thought)思维链是一种让 AI 像人类一样 “思考” 的技术,帮助 AI 在处理复杂问题时能够按步骤思考。对于复杂的推理类问题,先思考后执行,效果往往更好。而且还可以让模型在生成答案时展示推理过程,便于我们理解和优化 AI。
CoT 的实现方式其实很简单,可以在输入 Prompt 时,给模型提供额外的提示或引导,比如 “让我们一步一步思考这个问题”,让模型以逐步推理的方式生成回答。还可以运用 Prompt 的优化技巧 few shot,给模型提供包含思维链的示例问题和答案,让模型学习如何构建自己的思维链。
Agent Loop 执行循环
Agent Loop 是智能体最核心的工作机制,指智能体在没有用户输入的情况下,自主重复执行推理和工具调用的过程。
在传统的聊天模型中,每次用户提问后,AI 回复一次就结束了。但在智能体中,AI 回复后可能会继续自主执行后续动作(如调用工具、处理结果、继续推理),形成一个自主执行的循环,直到任务完成(或者超出预设的最大步骤数)。
ReAct 模式
ReAct(Reasoning + Acting)是一种结合推理和行动的智能体架构,它模仿人类解决问题时 ”思考 - 行动 - 观察” 的循环,目的是通过交互式决策解决复杂任务,是目前最常用的智能体工作模式之一。
核心思想:
推理(Reason):将原始问题拆分为多步骤任务,明确当前要执行的步骤。
行动(Act):调用外部工具执行动作,比如调用搜索引擎、打开浏览器访问网页等。
观察(Observe):获取工具返回的结果,反馈给智能体进行下一步决策。比如将打开的网页代码输入给 AI。
循环迭代:不断重复上述 3 个过程,直到任务完成或达到终止条件。
所需支持系统
除了基本的工作机制外,智能体的实现还依赖于很多支持系统。
1)首先是 AI 大模型,这个就不多说了,大模型提供了思考、推理和决策的核心能力,越强的 AI 大模型通常执行任务的效果越好。
2)记忆系统
智能体需要记忆系统来存储对话历史、中间结果和执行状态,这样它才能够进行连续对话并根据历史对话分析接下来的工作步骤。
3)知识库
尽管大语言模型拥有丰富的参数知识,但针对特定领域的专业知识往往需要额外的知识库支持。通过 RAG 检索增强生成 + 向量数据库等技术,智能体可以检索并利用专业知识回答问题。
4)工具调用
工具是扩展智能体能力边界的关键,智能体通过工具调用可以访问搜索引擎、数据库、API 接口等外部服务,极大地增强了其解决实际问题的能力。当然,MCP 也可以算是工具调用的一种。
综合上面 4 类技术,并且结合 CoT、Agent Loop、ReAct 等机制(可以总称为 “规划执行机制”),就可以构建一个完整的、有自主规划能力的智能体系统。
使用 AI 智能体
有 3 种方式可以使用 AI 智能体。
1、平台中使用
许多 AI 大模型开发平台已经提供了智能体创建和使用功能,最简单的方式就是直接在这些平台上创建和使用智能体。
比如可以在阿里云百炼、Dify 等平台上创建智能体
2、软件中使用
AI 开发工具 Cursor 就集成了 AI 智能体,可以帮我们生成完整的项目代码、或者解释项目代码。选择 Agent 模式就可以直接使用了,建议同时开启 Thinking 深度思考
3、程序中使用
如果使用 AI 大模型开发平台创建了智能体,那么可以直接通过 SDK 或 API 在自己的程序中调用智能体。
当然也可以完全通过编程自主开发智能体,之前我们通过 Spring AI 创建的恋爱大师 APP 就已经是个智能体了,包含了大模型决策、记忆能力、知识库集成和工具调用。
OpenManus 实现原理
AI 智能体核心实现
了解整体架构后,重点学习 Agent 分层代理架构。
1、BaseAgent
BaseAgent 是所有代理的基础,定义了代理状态管理和执行循环的核心逻辑。
2、ReActAgent
ReActAgent 实现了 ReAct 模式,将代理的执行过程分为思考(Think)和行动(Act)两个关键步骤。
3、ToolCallAgent
ToolCallAgent 在 ReAct 模式的基础上增加了工具调用能力,是 OpenManus 最重要的一个层次。
4、Manus
Manus 类是 OpenManus 的核心智能体实例,集成了各种工具和能力。
自主实现 Manus 智能体
虽然 OpenManus 代码量很大,但其实很多代码都是在实现智能体所需的支持系统,比如调用大模型、会话记忆、工具调用能力等。如果使用 AI 开发框架,这些能力都不需要我们自己实现,代码量会简单很多。
AI服务化
AI 服务化是指将原本只能本地运行的 AI 能力转化为可远程调用的接口服务,使更多人能够便捷地访问 AI 能力。
AI 服务 Serverless 部署
什么是 Serverless?
使用 Serverless 平台,开发者只需关注业务代码的编写,无需管理服务器等基础设施,系统会根据实际使用量自动扩容并按使用付费,从而显著降低运维成本和开发复杂度。
因此,Serverless 很适合业务规模不确定的、流量波动大的场景,也很适合快速部署一些小型项目,不用买服务器、不用的时候就停掉,可谓多快好省。
有很多不错的 Serverless 服务平台,比如 微信云托管、腾讯云 serverless 容器服务、腾讯云托管、阿里云 serverless、Railway 等,只需要把自己的项目打包成 Docker 容器镜像(理解为安装包),就能快速在平台上启动和扩缩容了。
后端部署
无论是什么 Serverless 平台,部署项目的方法基本都是一致的。
1、编写生产环境配置文件
2、构建 Docker 容器镜像
3、使用平台部署容器
前端部署
前端部署可以使用专门的前端 Serverless 平台,比如 Vercel、腾讯云 Web 应用托管 等,这些平台往往能够自动识别出项目使用的前端框架和运行方式,无需打包 Docker 镜像,部署成本更低。
1、部署规划
需要在容器中添加 Nginx 来提供网站资源的访问能力;并且为了解决跨域问题,可以采用 Nginx 配置反向代理,将前端请求中的 /api 路径自动转发到后端地址。
2、前端生产环境配置
3、编写 Nginx 配置
4、构建 Docker 容器镜像
5、使用平台部署容器