Spring AI核心基于Spring AI Alibaba Agent Framework通过ReAct范式工作流编排对话记忆Function Calling四大核心能力完整实现Agent的多轮对话、上下文记忆、工具自动调用与工作流编排。下面从工作流编排、多轮对话、上下文记忆、工具自动调用四个维度分别讲清原理、核心组件、实现方式与代码示例。一、Agent工作流编排如何组织多Agent/多步骤执行核心原理基于ReActReasoningActing推理-行动循环 内置编排模式顺序/并行/路由/循环 基于图的工作流实现复杂任务的分步拆解、动态路由、迭代执行。核心组件ReactAgent基础Agent单元负责单轮思考-行动-观察循环是编排的最小执行单元编排Agent工作流容器SequentialAgent顺序执行多个子Agent适合流水线任务如查天气→查景点→生成计划ParallelAgent并行执行多个子Agent适合独立任务并发如同时查机票酒店LlmRoutingAgentLLM动态决策路由根据用户问题选择对应Agent如用户问天气→路由到天气Agent问旅游→路由到攻略AgentLoopAgent循环执行Agent直到满足终止条件如工具调用失败重试、多轮推理直到答案完整GraphWorkflow基于有向无环图DAG的复杂编排支持条件分支、嵌套、状态管理适合企业级复杂流程State/OverAllState全局状态对象在工作流各步骤间传递上下文、工具结果、对话历史实现数据共享实现示例顺序工作流// 1. 定义多个原子AgentReactAgentweatherAgentReactAgent.builder().name(weather).model(chatModel).tools(List.of(weatherTool))// 天气查询工具.instruction(查询指定城市天气).build();ReactAgentplanAgentReactAgent.builder().name(travel_plan).model(chatModel).instruction(基于天气生成旅游计划).build();// 2. 构建顺序工作流先查天气→再生成计划SequentialAgenttravelWorkflowSequentialAgent.builder().name(travel_workflow).subAgents(List.of(weatherAgent,planAgent))// 顺序执行.build();// 3. 执行工作流传入用户问题会话ID关联上下文OverAllStateresulttravelWorkflow.invoke(UserMessage.builder(6月去青海旅游帮我做计划).build(),RunnableConfig.builder().threadId(user_1001).build());二、多轮对话如何实现连续交互、上下文连贯核心原理LLM本身无状态多轮对话的本质是每次请求都把历史对话用户问题AI回复作为上下文一起发给LLM让模型感知对话历史实现连贯交互。核心组件ChatMemory对话记忆管理器负责存储、追加、截断、格式化对话历史Spring AI提供多种实现InMemoryChatMemory内存存储适合开发/单实例RedisChatMemoryRedis持久化适合分布式、跨实例MongoChatMemoryMongoDB存储适合长期记忆Message/Conversation统一消息模型区分UserMessage、AssistantMessage、ToolResponseMessage按轮次有序存储ChatClient/Agent自动将Memory中的历史消息注入到每次LLM请求的Prompt中实现流程用户发起第1轮提问 → 保存UserMessage到MemoryAgent调用LLM传入当前问题空历史→ 返回AssistantMessage → 保存到Memory用户发起第2轮提问 → 保存新UserMessage → Agent自动读取Memory中前2轮历史当前问题→ 发给LLM → 生成连贯回复循环往复实现多轮对话关键配置自动历史注入// 初始化带记忆的ChatClientChatClientchatClientChatClient.builder(chatModel).defaultSystem(你是旅游助手记住对话历史).chatMemory(redisChatMemory)// 绑定Redis记忆.build();// 多轮对话调用自动携带历史ChatResponseresponse1chatClient.prompt().user(青海6月天气).call();ChatResponseresponse2chatClient.prompt().user(那适合穿什么衣服).call();// 自动带上上一轮历史三、上下文记忆如何持久化、管理短期/长期记忆核心原理记忆分为短期会话记忆多轮对话历史和长期记忆跨会话知识/用户偏好通过MemoryStateCheckpointStore四层管理实现上下文的自动传递、持久化、检索与截断防止Token溢出。核心能力与实现1. 短期会话记忆多轮对话上下文作用单会话内保存用户与AI的每一轮交互保证对话连贯实现ChatMemory ThreadId会话唯一标识每个会话分配唯一threadIdMemory按threadId隔离存储历史自动截断超过Token上限时自动保留最近N轮历史丢弃最早历史避免LLM上下文溢出持久化Redis/Mongo实现重启/扩容不丢失会话2. 长期记忆跨会话/全局知识作用保存用户偏好、历史任务结果、知识库跨会话可用实现VectorStore向量存储 RAG检索将长期知识如用户常去城市、历史计划向量化存入向量库Agent每次执行时自动检索相关长期记忆注入上下文3. 工作流状态记忆跨步骤数据作用在工作流的多个Agent/步骤间共享工具结果、中间变量、全局状态实现OverAllState CheckpointSaverState存储所有中间数据如天气结果、景点列表CheckpointSaverRedisSaver/MongoSaver持久化State支持断点续跑、故障恢复代码示例Redis会话记忆状态持久化// 1. 配置Redis会话记忆短期BeanpublicChatMemoryredisChatMemory(RedisConnectionFactoryfactory){returnRedisChatMemory.builder().redisTemplate(redisTemplate).maxHistorySize(10)// 保留最近10轮对话.build();}// 2. 配置状态持久化工作流记忆CheckpointSaversavernewRedisSaver(redisTemplate);ReactAgentagentReactAgent.builder().model(chatModel).chatMemory(redisChatMemory).saver(saver)// 持久化工作流状态.build();// 3. 按threadId关联记忆实现跨请求上下文agent.invoke(userMsg,RunnableConfig.builder().threadId(user_1001).build());四、工具自动调用如何让Agent自主选择、执行外部工具核心原理基于LLM Function Calling函数调用能力向LLM注册可用工具函数名、参数、描述LLM推理判断是否需要调用工具、调用哪个、传什么参数Spring AI自动解析LLM返回的工具调用指令 → 执行对应Java方法 → 获取结果将工具结果作为新上下文再次发给LLM → LLM整合结果生成最终回答或继续调用工具ReAct循环核心组件Tool/FunctionCallback工具定义接口将Java方法封装为LLM可调用的工具包含名称、描述告诉LLM工具用途输入参数JSON SchemaLLM按格式传参执行逻辑Java业务代码如查天气、查数据库、调APIToolCallingAgent/ReactAgent自动处理工具调用流程无需手动解析ToolExecutor工具执行器负责参数解析、方法调用、异常捕获实现步骤自动调用天气工具1. 定义工具Java方法→Tool// 定义天气查询工具实现FunctionCallbackComponentpublicclassWeatherToolimplementsFunctionCallbackWeatherRequest,WeatherResponse{OverridepublicStringgetName(){returnget_weather;// 工具名LLM调用时使用}OverridepublicStringgetDescription(){return查询指定城市的实时天气参数city城市名;// 描述LLM判断是否调用}OverridepublicTypeReferenceWeatherRequestgetInputTypeReference(){returnnewTypeReferenceWeatherRequest(){};}OverridepublicWeatherResponseapply(WeatherRequestrequest){// 实际调用天气API/数据库returnweatherService.getWeather(request.getCity());}}// 工具入参DTOpublicrecordWeatherRequest(Stringcity){}2. 注册工具到Agent开启自动调用// 构建支持自动工具调用的ReactAgentReactAgentagentReactAgent.builder().model(chatModel).tools(List.of(weatherTool))// 注册可用工具.instruction(你可以调用get_weather工具查询天气必要时自主调用).chatMemory(redisChatMemory)// 绑定上下文记忆.build();3. 自动调用流程用户问天气用户“青海西宁6月天气怎么样”Agent将问题工具列表发给LLMLLM推理需要调用get_weather参数{“city”:“西宁”}Spring AI自动执行WeatherTool → 返回天气结果Agent将天气结果原问题再次发给LLMLLM整合结果生成自然语言回答“西宁6月平均温度15-25℃适合出行…”五、四大能力整合完整Agent工作流一句话总结工作流编排用Sequential/Parallel/Graph组织多个ReactAgent按步骤/条件执行任务多轮对话通过ChatMemory保存历史每次请求自动注入上下文实现连贯交互上下文记忆ThreadId隔离会话、State共享步骤数据、VectorStore存储长期知识持久化不丢失工具自动调用注册Tool→LLM决策调用→Spring AI执行→结果回传→LLM整合完成ReAct循环