青島專業(yè)網(wǎng)站建設(shè)哪家好cms免費企業(yè)網(wǎng)站
鶴壁市浩天電氣有限公司
2026/01/24 13:58:39
青島專業(yè)網(wǎng)站建設(shè)哪家好,cms免費企業(yè)網(wǎng)站,開發(fā)者社區(qū),網(wǎng)站設(shè)計網(wǎng)站維護什么是Agent#xff1f;
智能體(Agent)是一個能夠感知環(huán)境、進行推理、制定計劃、做出決策并自主采取行動以實現(xiàn)特定目標的 A 系統(tǒng)。它以大語言模型為核心#xff0c;集成 記憶、知識庫和工具 等能力為一體#xff0c;構(gòu)造了完整的決策能力、執(zhí)行能力和記憶能力#xff0c;…什么是Agent智能體(Agent)是一個能夠感知環(huán)境、進行推理、制定計劃、做出決策并自主采取行動以實現(xiàn)特定目標的 A 系統(tǒng)。它以大語言模型為核心集成 記憶、知識庫和工具 等能力為一體構(gòu)造了完整的決策能力、執(zhí)行能力和記憶能力就像一個有主觀能動性的人類一樣。與普通的 AI 大模型不同智能體能夠1.感知環(huán)境通過各種輸入渠道獲取信息(多模態(tài))理解用戶需求和環(huán)境狀態(tài)2.自主規(guī)劃任務(wù)步驟將復(fù)雜任務(wù)分解為可執(zhí)行的子任務(wù)并設(shè)計執(zhí)行順序3.主動調(diào)用工具完成任務(wù)根據(jù)需要選擇并使用各種外部工具和 API擴展自身能力邊界4.進行多步推理通過思維鏈(Chain ofThought)逐步分析問題并推導(dǎo)解決方案5.持續(xù)學(xué)習(xí)和記憶過去的交互保持上下文連貫性利用歷史交互改進決策6.根據(jù)環(huán)境反饋調(diào)整行為根據(jù)執(zhí)行結(jié)果動態(tài)調(diào)整策略實現(xiàn)閉環(huán)優(yōu)化大多數(shù)同學(xué)第一次感受到智能體應(yīng)該是“深度思考功能這是 A逐步智能化的體現(xiàn)。智能體的分類跟人的生長階段一樣智能體也是可以不斷進化的。按照自主性和規(guī)劃能力智能體可以分為幾個層次1)反應(yīng)式智能體僅根據(jù)當前輸入和固定規(guī)則做出反應(yīng)類似簡單的聊天機器人沒有真正的規(guī)劃能力。23 年時的大多數(shù) Al聊天機器人應(yīng)用幾乎都是反應(yīng)式智能體。2)有限規(guī)劃智能體能進行簡單地多步驟執(zhí)行但執(zhí)行路徑通常是預(yù)設(shè)的或有嚴格限制的。鑒定為“能干事、但干不了復(fù)雜的大事”。24 年流行的很多可聯(lián)網(wǎng)搜索內(nèi)容、調(diào)用知識庫和工具的 AI 應(yīng)用都屬于這類智能體。比如ChatGPT Plugins3)自主規(guī)劃智能體也叫目標導(dǎo)向智能體能夠根據(jù)任務(wù)目標自主分解任務(wù)、制定計劃、選擇工具并一步步執(zhí)行直到完成任務(wù)。這類智能體通過“思考-行動-觀察” 的循環(huán)模式工作能夠持續(xù)推進任務(wù)直至完成目標。智能體實現(xiàn)關(guān)鍵技術(shù)在自主開發(fā)智能體前我們要先了解一下智能體的關(guān)鍵實現(xiàn)技術(shù)也就是方案設(shè)計階段做的事情。1、CoT 思維鏈CoT(Chain of Thought)思維鏈是一種讓 A|像人類一樣“思考”的技術(shù)幫助 AI 在處理復(fù)雜問題時能夠按步驟思考。對于復(fù)雜的推理類問題先思考后執(zhí)行效果往往更好。而且還可以讓模型在生成答案時展示推理過程便于我們理解和優(yōu)化 Al。CoT的實現(xiàn)方式其實很簡單可以在輸入Prompt 時給模型提供額外的提示或引導(dǎo)比如“讓我們一步一步思考這個問題”讓模型以逐步推理的方式生成回答。還可以運用 Prompt的優(yōu)化技巧few shot(少樣本學(xué)習(xí))給模型提供包含思維鏈的示例問題和答案讓模型學(xué)習(xí)如何構(gòu)建自己的思維鏈。在 OpenManus 早期版本中可以看到實現(xiàn) CoT的系統(tǒng)提示詞You are an assistant focused on Chain of Thought reasoning. For each question, please follow these steps 1. Break down the problem Divide complex problems into smaller, more manageable parts 2. Think step by step Think through each part in detail, showing your reasoning process 3. Synthesize conclusions Integrate the thinking from each part into a complete solution 4. Provide an answer Give a final concise answer Your response should follow this format Thinking [Detailed thought process, including problem decomposition, reasoning for each step, and analysis] Answer [Final answer based on the thought process, clear and concise] Remember, the thinking process is more important than the final answer, as it demonstrates how you reached your conclusion.2、Agent Loop 執(zhí)行循環(huán)Agent Loop 是智能體最核心的工作機制指智能體在沒有用戶輸入的情況下自主重復(fù)執(zhí)行推理和工具調(diào)用的過程。在傳統(tǒng)的聊天模型中每次用戶提問后AI回復(fù)一次就結(jié)束了。但在智能體中A回復(fù)后可能會繼續(xù)自主執(zhí)行后續(xù)動作(如調(diào)用工具、處理結(jié)果、繼續(xù)推理)形成一個自主執(zhí)行的循環(huán)直到任務(wù)完成(或者超出預(yù)設(shè)的最大步驟數(shù))。Agent Loop 的實現(xiàn)很簡單參考代碼如下public String execute() { ListString results new ArrayList(); while (currentStep MAX_STEPS !isFinished) { currentStep; // 這里實現(xiàn)具體的步驟邏輯 String stepResult executeStep(); results.add(步驟 currentStep stepResult); } if (currentStep MAX_STEPS) { results.add(達到最大步驟數(shù) MAX_STEPS); } return String.join(
, results); }3、ReAct 模式ReAct(Reasoning Acting)是一種結(jié)合推理和行動的智能體架構(gòu)它模仿人類解決問題時思考-行動-觀察的循環(huán)目的是通過交互式?jīng)Q策解決復(fù)雜任務(wù)是目前最常用的智能體工作式之一。核心思想1.推理(Reason)將原始問題拆分為多步驟任務(wù)明確當前要執(zhí)行的步驟比如“第一步需要打開編程導(dǎo)航網(wǎng)站”。2.行動(Act)調(diào)用外部工具執(zhí)行動作比如調(diào)用搜索引擎、打開瀏覽器訪問網(wǎng)頁等。3.觀察(Observe)獲取工具返回的結(jié)果反饋給智能體進行下一步?jīng)Q策。比如將打開的網(wǎng)頁代碼輸入給 Al。4.循環(huán)迭代不斷重復(fù)上述3個過程直到任務(wù)完成或達到終止條件。ReAct 流程如圖示例實現(xiàn)代碼void executeReAct(String task) { String state 開始; while (!state.equals(完成)) { // 1. 推理 (Reason) String thought 思考下一步行動; System.out.println(推理 thought); // 2. 行動 (Act) String action 執(zhí)行具體操作; System.out.println(行動 action); // 3. 觀察 (Observe) String observation 觀察執(zhí)行結(jié)果; System.out.println(觀察 observation); // 更新狀態(tài) state 完成; } }手撕開源框架 OpenManus 的源碼1、整體文件夾組織形式2、agent 目錄agent ?目錄是 OpenManus 實現(xiàn)的核心采用了分層的代理架構(gòu)不同層次的代理負責(zé)不同的功能這樣更利于系統(tǒng)的擴展。OpenManus 的代理架構(gòu)主要包含以下幾層BaseAgent最基礎(chǔ)的代理抽象類定義了所有代理的基本狀態(tài)管理和執(zhí)行循環(huán)ReActAgent實現(xiàn) ReAct 模式的代理具有思考Think和行動Act兩個主要步驟ToolCallAgent能夠調(diào)用工具的代理繼承自 ReActAgent 并擴展了工具調(diào)用能力Manus具體實現(xiàn)的智能體實例集成了所有能力并添加了更多專業(yè)工具還有更多適用于特定領(lǐng)域?的智能體實例比如 DataAnalysis 數(shù)據(jù)分析 Agent、SWE 軟件開發(fā)工程師 Agent、MCP 服務(wù)交互 Agent、Browser 瀏覽器操作 Agent它們都繼承了 ToolCallAgent。3、tool 目錄tool ?目錄定義了各種各樣的工具比如網(wǎng)頁搜索、文件操作、詢求用戶幫助、代碼執(zhí)行器等等4、prompt 目錄promp?t 目錄定義了整個項目中可能會用到的提示詞。從下圖中我們可以看到提示詞寫的比較專業(yè)這塊也是比較值得學(xué)習(xí)的。5、其他支持為了實現(xiàn)完整的智能體功能OpenManus 依賴以下關(guān)鍵組件記憶系統(tǒng)使用 Memory 類存儲對話歷史和中間狀態(tài)LLM 大模型通過 LLM 類提供思考和決策能力工具系統(tǒng)提供 BaseTool和 ToolCollection 類擴展智能體的能力邊界流程控制通過 AgentState 和執(zhí)行循環(huán)管理狀態(tài)轉(zhuǎn)換和任務(wù)流程在 OpenManus 中這些都是自主實現(xiàn)的AI 智能體核心實現(xiàn)了解整體架構(gòu)后我們重點學(xué)習(xí) Agent 分層代理架構(gòu)。1、BaseAgentBaseAgent 是所有代理的基礎(chǔ)定義了代理狀態(tài)管理和執(zhí)行循環(huán)的核心邏輯。查看 base.py 文件關(guān)鍵代碼就是 Agent Loop 的實現(xiàn)通過 while 實現(xiàn)循環(huán)并且定義了死循環(huán)檢查機制class BaseAgent(BaseModel, ABC) async def run(self, request Optional[str] None) - str 執(zhí)行代理的主循環(huán) if self.state ! AgentState.IDLE raise RuntimeError(fCannot run agent from state {self.state}) if request self.update_memory(user, request) results List[str] [] async with self.state_context(AgentState.RUNNING) while (self.current_step self.max_steps and self.state ! AgentState.FINISHED) self.current_step 1 step_result await self.step() # 檢查是否陷入循環(huán) if self.is_stuck() self.handle_stuck_state() results.append(fStep {self.current_step} {step_result}) if self.current_step self.max_steps self.current_step 0 self.state AgentState.IDLE results.append(fTerminated Reached max steps ({self.max_steps})) return
.join(results) if results else No steps executed abstractmethod async def step(self) - str 執(zhí)行單步操作必須由子類實現(xiàn)這里其實使用了模板方法設(shè)計模式父類定義執(zhí)行流程具體的執(zhí)行方法(step)交給子類實現(xiàn)。2、ReActAgentReActAgent 實現(xiàn)了 ReAct 模式將代理的執(zhí)行過程分為思考(Think)和行動(Act)兩個關(guān)鍵步驟。查看react.py 文件class ReActAgent(BaseAgent, ABC) abstractmethod async def think(self) - bool 處理當前狀態(tài)并決定下一步行動 abstractmethod async def act(self) - str 執(zhí)行決定的行動 async def step(self) - str 執(zhí)行單步思考和行動 should_act await self.think() if not should_act return Thinking complete - no action needed return await self.act()上述代碼同樣運用了模板方法設(shè)計模式這種設(shè)計體現(xiàn)了 ReAct 模式的核心思想也就是“程思考-行動-觀察”的循環(huán)過。但是具體怎么思考、怎么行動交給子類去實現(xiàn)。3、ToolCallAgentToolCallAgent 在 ReAct 模式的基礎(chǔ)上增加了工具調(diào)用能力是 OpenManus 最重要的一個層次。查看 toolcall.py文件雖然代碼比較復(fù)雜但原理很簡單就是工具調(diào)用機制的具體實現(xiàn)1.think和 AI 交互思考使用什么工具2.act程序執(zhí)行工具3.observe將結(jié)果返回給 AIclass ToolCallAgent(ReActAgent): 能夠執(zhí)行工具調(diào)用的代理類 available_tools: ToolCollection ToolCollection( CreateChatCompletion(), Terminate() ) tool_choices: TOOL_CHOICE_TYPE ToolChoice.AUTO special_tool_names: List[str] Field(default_factorylambda: [Terminate().name]) async def think(self) - bool: 處理當前狀態(tài)并使用工具決定下一步行動 # 添加下一步提示到用戶消息 if self.next_step_prompt: user_msg Message.user_message(self.next_step_prompt) self.messages [user_msg] # 請求 LLM 選擇工具 response await self.llm.ask_tool( messagesself.messages, system_msgs([Message.system_message(self.system_prompt)] if self.system_prompt else None), toolsself.available_tools.to_params(), tool_choiceself.tool_choices, ) # 處理工具調(diào)用 self.tool_calls tool_calls ( response.tool_calls if response and response.tool_calls else [] ) content response.content if response and response.content else # 添加助手消息到記憶 assistant_msg ( Message.from_tool_calls(contentcontent, tool_callsself.tool_calls) if self.tool_calls else Message.assistant_message(content) ) self.memory.add_message(assistant_msg) # 決定是否應(yīng)該執(zhí)行行動 return bool(self.tool_calls or content) async def act(self) - str: 執(zhí)行工具調(diào)用并處理結(jié)果 if not self.tool_calls: # 返回最后一條消息內(nèi)容如果沒有工具調(diào)用 return self.messages[-1].content or No content or commands to execute results [] for command in self.tool_calls: # 執(zhí)行工具 result await self.execute_tool(command) # 記錄工具響應(yīng)到記憶 tool_msg Message.tool_message( contentresult, tool_call_idcommand.id, namecommand.function.name, base64_imageself._current_base64_image, ) self.memory.add_message(tool_msg) results.append(result) return
.join(results)4、ManusManus 類是 OpenManus 的核心智能體實例集成了各種工具和能力。查看 manus.p文件:class Manus(ToolCallAgent): 多功能通用智能體支持本地和 MCP 工具 name: str Manus description: str A versatile agent that can solve various tasks using multiple tools # 添加各種通用工具到工具集合 available_tools: ToolCollection Field( default_factorylambda: ToolCollection( PythonExecute(), BrowserUseTool(), StrReplaceEditor(), AskHuman(), Terminate(), ) )關(guān)鍵實現(xiàn)細節(jié)學(xué)完了超級智能體的核心實現(xiàn)后我們再學(xué)習(xí)一些項目中比較微妙的實現(xiàn)細節(jié)對我們自己開發(fā)項目也會很有幫助。1、工具系統(tǒng)設(shè)計1)工具抽象層 BaseTool所有工具均繼承自 BaseToo1 抽象基類提供統(tǒng)一的接口和行為:class BaseTool(ABC, BaseModel): name: str description: str parameters: Optional[dict] None async def __call__(self, **kwargs) - Any: 使用給定參數(shù)執(zhí)行工具 return await self.execute(**kwargs) abstractmethod async def execute(self, **kwargs) - Any: 執(zhí)行工具的具體邏輯由子類實現(xiàn) def to_param(self) - Dict: 將工具轉(zhuǎn)換為函數(shù)調(diào)用格式 return { type: function, function: { name: self.name, description: self.description, parameters: self.parameters, }, }這種設(shè)計使得每個工具都有統(tǒng)一的調(diào)用方式同時具有規(guī)范化的參數(shù)描述便于LLM理解工具的使用方法。2)終止工具 TerminateTerminate 工具是一個特殊的工具允許智能體通過 A 大模型自主決定何時結(jié)束任務(wù)避免無限循環(huán)或者過早結(jié)束。class Terminate(BaseTool): name: str terminate description: str Terminate the interaction when the request is met OR if the assistant cannot proceed further with the task. When you have finished all the tasks, call this tool to end the work. parameters: dict { type: object, properties: { status: { type: string, description: The finish status of the interaction., enum: [success, failure], } }, required: [status], } async def execute(self, status: str) - str: 完成當前執(zhí)行 return fThe interaction has been completed with status: {status}在 agent 源碼中有一個 special tool names 變量用于指定終止工具等特殊工具3)詢問工具 AskHumanAskHuman 工具允許智能體在遇到無法自主解決的問題時向人類尋求幫助也就是給用戶一個輸入框讓我們能夠更好地干預(yù)智能體完成任務(wù)的過程。class AskHuman(BaseTool): Add a tool to ask human for help. name: str ask_human description: str Use this tool to ask human for help. parameters: str { type: object, properties: { inquire: { type: string, description: The question you want to ask human., } }, required: [inquire], } async def execute(self, inquire: str) - str: return input(fBot: {inquire}
You: ).strip()這個工具實現(xiàn)雖然簡單但極大地提升了智能體的實用性和安全性。4)工具集合 ToolCollectionOpenManus 設(shè)計了 ToolCollection 類來管理多個工具實例提供統(tǒng)一的工具注冊和執(zhí)行接口:class ToolCollection: A collection of defined tools. def __init__(self, *tools: BaseTool): self.tools tools self.tool_map {tool.name: tool for tool in tools} def to_params(self) - List[Dict[str, Any]]: return [tool.to_param() for tool in self.tools] async def execute(self, *, name: str, tool_input: Dict[str, Any] None) - ToolResult: tool self.tool_map.get(name) if not tool: return ToolFailure(errorfTool {name} is invalid) try: result await tool(**tool_input) return result except ToolError as e: return ToolFailure(errore.message) def add_tools(self, *tools: BaseTool): Add multiple tools to the collection. for tool in tools: self.add_tool(tool) return self智能體工作流當我們面對復(fù)雜任務(wù)時單一智能體可能無法滿足需求。因此智能體工作流(Agent Workflow)應(yīng)運而生通過簡單的編排允許多個專業(yè)智能體協(xié)同工作各司其職。智能體工作流編排的精髓在于 將復(fù)雜任務(wù)分解為連貫的節(jié)點鏈每個節(jié)點由最適合的智能體處理節(jié)點間通過條件路由靈活連接形成一個高效、可靠的執(zhí)行網(wǎng)絡(luò)。Anthropic 曾經(jīng)在一篇 研究報告《Building effective agents》 中提到了多種不同的智能體工作模式大家需要了解每種模式的特點和適用場景。智能體工作模式1)Prompt Chaining 提示鏈工作流Prompt Chaining 是最常見的智能體工作流模式之一。它的核心思想是將一個復(fù)雜任務(wù)拆解為一系列有序的子任務(wù)每一步由 LLM 處理前一步的輸出逐步推進任務(wù)完成。比如在內(nèi)容生成場景中可以先讓模型生成大綱再根據(jù)大綱生成詳細內(nèi)容最后進行潤色和校對。每一步都可以插入校驗和中間檢查確保流程正確、輸出更精準。這種模式結(jié)構(gòu)清晰易于調(diào)試非常適合任務(wù)可以被自然分解為多個階段的場景。2)Routing 路由分流工作流Routing 工作流模式則更像是一個智能的路由器。系統(tǒng)會根據(jù)輸入內(nèi)容的類型或特征將任務(wù)分發(fā)給最合適的下游智能體或處理流程。非常適合多樣化輸入和多種處理策略的場景。比如在客服系統(tǒng)中可以將常見問題、退款請求、技術(shù)支持等分流到不同的處理模塊;在多模型系統(tǒng)中可以將簡單問題分配給小模型復(fù)雜問題交給大模型。這樣既提高了處理效率也保證了每類問題都能得到最優(yōu)解答。3)Parallelization 并行化工作流在 Parallelization 并行化模式下任務(wù)會被拆分為多個可以并行處理的子任務(wù)最后聚合各自的結(jié)果。比如在代碼安全審查場景中可以讓多個智能體分別對同一段代碼進行安全審查最后“投票”決定是否有問題。又比如在處理長文檔時可以將文檔分段每段由不同智能體并行總結(jié)。這種模式可以顯著提升處理速度并通過“投票”機制提升結(jié)果的準確度。4)Orchestrator-Workers 協(xié)調(diào)器-執(zhí)行者工作流對于復(fù)雜的任務(wù)、參與任務(wù)的智能體增多時我們可以引入一位“管理者”會根據(jù)任務(wù)動態(tài)拆解出多個子任務(wù),并將這些子任務(wù)分配給多個工人智能體最后再整合所有工人的結(jié)果。這種中央?yún)f(xié)調(diào)機制提高了復(fù)雜系統(tǒng)的整體效率適合任務(wù)結(jié)構(gòu)不確定、需要動態(tài)分解的復(fù)雜場景。5)Evaluator-Optimizer 評估-優(yōu)化循環(huán)工作流Evaluator-Optimizer 模式模擬了人類“寫 評 改”的過程。一個智能體負責(zé)生成初步結(jié)果另一個智能體負責(zé)評估和反饋二者循環(huán)迭代優(yōu)化輸出。舉個例子在機器翻譯場景中先由翻譯智能體輸出再由評審智能體給出改進建議反復(fù)迭代直到達到滿意的質(zhì)量。這種模式特別適合需要多輪打磨和質(zhì)量提升的任務(wù)。A2A 協(xié)議什么是 A2A 協(xié)議?A2A(Agentto Agent)也是最近很熱門的一個概念簡單來說A2A 協(xié)議 就是為智能體之間如何直接交流和協(xié)作”制定的一套標準。A2A 協(xié)議的核心是讓每個智能體都能像“網(wǎng)絡(luò)節(jié)點“ 一樣擁有自己的身份、能力描述和通信接口。它不僅規(guī)定了消息的格式和傳遞方式還包括了身份認證、能力發(fā)現(xiàn)、任務(wù)委托、結(jié)果回傳等機制。這樣一來智能體之間就可以像人類團隊一樣互相打招呼、詢問對方能做什么、請求協(xié)助??梢园?A2A 類比為智能體世界里的 HTTP協(xié)議HTTP 協(xié)議讓全球不同服務(wù)器和電腦之間能夠交換數(shù)據(jù)A2A 協(xié)議則是讓不同廠商、不同平臺、不同能力的智能體能夠像團隊成員一樣互相理解、協(xié)作和分工。如果說 HTTP 協(xié)議讓互聯(lián)網(wǎng)成為了一個開放、互聯(lián)的世界那么 A2A 協(xié)議則讓智能體世界變得開放、協(xié)作和高效。A2A 協(xié)議的應(yīng)用場景A2A 協(xié)議的應(yīng)用非常廣泛總結(jié)下來4個字就是 開放互聯(lián)。比如在自動駕駛領(lǐng)域不同車輛的智能體可以實時交換路況信息協(xié)同避障和規(guī)劃路線;在制造車間生產(chǎn)線上的各類機器人智能體可以根據(jù)任務(wù)動態(tài)分工互相補位;在金融風(fēng)控、智能客服等場景不同的智能體可以根據(jù)自身專長協(xié)作處理復(fù)雜業(yè)務(wù)流程。我們還可以大膽想象未來開發(fā)者可以像調(diào)用云服務(wù)一樣按需租用或組合不同的智能體服務(wù)甚至實現(xiàn)智能體之間的自動交易和結(jié)算。目前其實就有很多智能體平臺只不過智能體之間的連接協(xié)作甚少。和 MCP 協(xié)議的區(qū)別雖然 A2A 和 MCP 都算是協(xié)議(或者標準)但二者存在本質(zhì)上的區(qū)別。MCP 協(xié)議是 智能體和外部工具之間的標準它規(guī)定了智能體如何安全、規(guī)范地調(diào)用外部的數(shù)據(jù)庫、搜索引擎、代碼執(zhí)行等工具資源。你可以把 MCP 理解為“智能體-工具的 HTTP 協(xié)議。而 A2A 協(xié)議則是 智能體之間的通信協(xié)議。它更像是讓不同的 A 角色之間可以直接對話、協(xié)作和分工。從安全角度看MCP 和 A2A 處理的是不同層面的安全問題MCP 的安全關(guān)注點主要集中在單個智能體與工具之間的安全交互主要防范的是工具濫用和提示詞注入攻擊。A2A 的安全關(guān)注點更關(guān)注智能體網(wǎng)絡(luò)中的身份認證、授權(quán)和信任鏈。A2A 需要解決“我怎么知道我在和誰通信”、“這個智能體有權(quán)限請求這項任務(wù)嗎”、“如何防止惡意智能體竊取或篡改任務(wù)數(shù)據(jù)”等問題。(這些問題也是 HTTP 協(xié)議需要考慮的)顯然A2A 面臨的安全挑戰(zhàn)更加復(fù)雜因為它處理的是跨網(wǎng)絡(luò)、跨平臺、多方協(xié)作的場景。對于一個成熟的智能體系統(tǒng)可能會同時運用 MCP 和 A2AMCP 負責(zé)某個智能體內(nèi)部調(diào)用工具完成任務(wù)A2A負責(zé)智能體之間協(xié)同完成任務(wù)。1)、給智能體添加循環(huán)檢測和處理機制防止智能體陷入無限循環(huán)??梢詤⒖?OpenManus 源碼實現(xiàn)示例代碼如下private int duplicateThreshold 2; /** * 處理陷入循環(huán)的狀態(tài) */ protected void handleStuckState() { String stuckPrompt 觀察到重復(fù)響應(yīng)??紤]新策略避免重復(fù)已嘗試過的無效路徑。; this.nextStepPrompt stuckPrompt
(this.nextStepPrompt ! null ? this.nextStepPrompt ); System.out.println(Agent detected stuck state. Added prompt stuckPrompt); } /** * 檢查代理是否陷入循環(huán) * * return 是否陷入循環(huán) */ protected boolean isStuck() { ListMessage messages this.memory.getMessages(); if (messages.size() 2) { return false; } Message lastMessage messages.get(messages.size() - 1); if (lastMessage.getContent() null || lastMessage.getContent().isEmpty()) { return false; } // 計算重復(fù)內(nèi)容出現(xiàn)次數(shù) int duplicateCount 0; for (int i messages.size() - 2; i 0; i--) { Message msg messages.get(i); if (msg.getRole() Role.ASSISTANT lastMessage.getContent().equals(msg.getContent())) { duplicateCount; } } return duplicateCount this.duplicateThreshold; } // 每一步 step 執(zhí)行完都要檢查是否陷入循環(huán) if (isStuck()) { handleStuckState(); }2)、智能體支持交互式執(zhí)行可以向用戶詢問信息或獲取反饋從而優(yōu)化任務(wù)的完成效果。實現(xiàn)思路可以參考 OpenManus專門定義一個 AskHuman 工具讓 A| 自主決定什么時候需要尋求人類幫助當然也可以通過編寫 Prompt 實現(xiàn)比如 Prompt 中提到“如果你認為需要向人類尋求幫助輸出結(jié)果中需要包含[ASK USER](尋求幫助的具體問題}”并且檢查每一條 A1給出的消息如果包含了 ASK USER 標記就通過系統(tǒng)控制臺和用戶交互。示例代碼如下public boolean think() { boolean shouldAct super.think(); // 獲取最新的助手消息 Message lastMessage getMessageList().get(getMessageList().size() - 1); if (lastMessage instanceof AssistantMessage) { String content lastMessage.getContent(); // 檢查是否包含向用戶詢問的標記 if (content.contains([ASK_USER])) { // 提取問題 String question content.substring(content.indexOf([ASK_USER]) 10); // 向用戶輸出問題 System.out.println(智能體需要你的幫助 question); // 獲取用戶輸入 Scanner scanner new Scanner(System.in); String userAnswer scanner.nextLine(); // 添加用戶回答到消息列表 UserMessage userResponse new UserMessage(用戶回答 userAnswer); getMessageList().add(userResponse); // 需要繼續(xù)思考 return true; } } return shouldAct; }