SpringAI的Agent-构建
在传统Java Web开发里Agent就是一个“带自循环和动态路由的微服务组合处理器”。1. 核心大脑LLM 超级“动态路由转发器”Controller传统Web里请求来了走if/else或RequestMapping硬编码路由。Agent的大脑则不同它不是写死的switch-case而是一个能根据用户输入“现场写正则生成路由”的调度中心。System Prompt就相当于application.yml里的核心配置参数规定了“如果用户说A倾向调ServiceA如果说B倾向调ServiceB”。2. 工具接口Tools 你熟悉的 Service 层Service这就是你写的那些业务实现类UserService、OrderService、PaymentService。关键区别以前前端调哪个接口是前端定的现在Agent的大脑会看每个Service的Swagger接口文档描述自己决定下一步调哪个Service。你只需要把UserService.getUserById(Long id)用注解描述清楚比如“根据用户ID查询收货地址”大脑就会在需要地址时主动调用它。3. 记忆与状态Memory HttpSession Redis缓存Agent需要记住“刚才干了啥”这在Java里就是会话管理短期记忆上下文窗口 当前这次会话的HttpSession。里面存着当前轮次的用户问题、上一步执行结果。因为Session内存有限对应大模型的Token限制你得写个拦截器当对话太长时把旧历史压缩成摘要存进去。长期记忆RAGRedis或MySQL。当Agent发现自己知识不够比如问公司内部文档它会先去外挂的向量数据库类似Elasticsearch里查资料塞进上下文再回答。4. 规划与编排Planner 工作流引擎类似Activiti/状态机以前处理复杂订单流程我们写状态机待支付 - 已支付 - 发货中 - 已签收。Agent里的规划器就是动态生成这个状态流转图。比如用户说“帮我订外卖要微辣放门口”规划器会现场生成步骤清单[查附近商家] - [筛选支持微辣的] - [下单] - [备注放门口]。这相当于你代码里动态往ListStep里添加任务而不是写死在xml配置文件里。5. 执行循环与终止器Loop while循环 超时熔断Hystrix这是Agent最像“传统后端线程”的地方。执行循环Agent运行时就是一个while(true)或for(int i0; imax; i)的轮询线程。每轮循环做三件事思考调大脑- 执行调Service- 观察拿结果然后把结果存回Session进入下一轮。终止器Max Steps这就好比你在Feign调用上设置了TimeOut和熔断降级。这个必须写否则Agent脑子抽风会死循环疯狂调你的Service把数据库连接池打满。一般设置最多循环5次5次没出结果直接抛出RuntimeException并返回“系统繁忙”。唯一的技术难点不在Java代码而在于怎么写System Prompt让大模型准确理解你这几个Service是干嘛的。简单流程如下详细的 System Prom- 获得更好的 agent 行为创建工具- 与外部数据集成模型配置- 获得一致的响应结构化输出- 获得可预测的结果对话记忆- 实现类似聊天的交互创建和运行 agent- 创建一个功能完整的 agentSystem Prompt 设计清单要素说明示例角色定义明确 AI 的身份和职责你是菜鸟教程 RUNOOB 的学习顾问行为准则约束回复的风格和边界回答简洁每次不超过 3 句话工具使用指引告诉模型何时使用哪些工具查询课程时优先使用 search_course 工具边界约束明确什么不能做不知道的就说不知道不要编造格式要求指定回复的格式可选回复使用 Markdown 格式