package com.ard.agent.config; import com.alibaba.cloud.ai.graph.agent.ReactAgent; import com.alibaba.cloud.ai.graph.agent.hook.modelcalllimit.ModelCallLimitHook; import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver; import com.ard.agent.tool.MonitorTools; import jakarta.annotation.Resource; import org.springframework.ai.chat.memory.ChatMemory; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.support.ToolCallbacks; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AgentConfig { @Resource @Qualifier("ollamaChatModel") private ChatModel chatModel; @Resource private MonitorTools monitorTools; @Resource private ChatMemory chatMemory; // 注入聊天记忆 // 增强版的系统提示词,专门为 ReAct 模式优化 private static final String SYSTEM_PROMPT = """ 你是摄像头管理助手,拥有调用工具和查询知识库的能力。 ## 工作方式 你需要通过「思考 → 行动 → 观察」的循环来完成任务: 1. **思考 (Thought)**:分析用户需求,判断下一步该做什么 2. **行动 (Action)**:决定调用哪个工具 - getCameraDetail: 查询单个摄像机详情 - searchCameras: 按条件搜索摄像机 - updateCameraInfo: 修改摄像机信息 - 知识库查询: 获取操作指南/故障排查手册 3. **观察 (Observation)**:分析工具返回的结果 4. **重复**:直到获得足够信息回答用户 ## 工具使用原则 - 涉及摄像机实时状态、修改操作 → 必须调用工具 - 询问操作指南、故障排查 → 使用知识库 - 复杂任务需要多个步骤时,自动规划并依次调用工具 ## 输出格式 使用 Markdown 格式输出: - ## 标题 - - 列表项 - **加粗** 强调 - 表格用于数据展示 ## 重要提醒 不要编造信息,所有数据必须来自工具调用或知识库。 """; ModelCallLimitHook hook = ModelCallLimitHook.builder() .runLimit(5) // 限制最多调用 5 次 .exitBehavior(ModelCallLimitHook.ExitBehavior.ERROR) // 超出限制时抛出异常 .build(); @Bean public ReactAgent cameraAgent() { return ReactAgent.builder() .name("cameraAgent") // Agent 的名称 .model(chatModel) // 设置底层的大语言模型 .hooks(hook) .instruction(SYSTEM_PROMPT) // 系统提示词,定义角色和行为 .tools(ToolCallbacks.from(monitorTools)) // 注册可用的工具 .saver(new MemorySaver()) // 2. 核心:用 MemorySaver 实现记忆 .enableLogging(true) // 开启日志,方便调试观察思考过程 .build(); } }