[{"data":1,"prerenderedAt":53},["ShallowReactive",2],{"content:\u002Farticles:ai-agent-third-party-intergration":3},{"item":4,"md":16,"html":17,"menu":18,"excerpt":51,"related":52},{"title":5,"len":6,"tags":7,"id":10,"customSlug":11,"time":12,"modifyTime":13,"showComments":14,"encrypt":15},"关于AI Agent处理大量第三方集成的思路",4995,[8,9],"ai","agent",2114,"ai-agent-third-party-intergration",1759665839611,1759733903152,true,false,null,"\u003Ch2 data-marked-line=\"1\">\u003Csup class=\"fake-head\" id=\"%E9%97%AE%E9%A2%98%E6%9D%A5%E6%BA%90\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E9%97%AE%E9%A2%98%E6%9D%A5%E6%BA%90\">问题来源\u003C\u002Fa>\u003C\u002Fh2>\u003Cp data-marked-line=\"3\">&emsp;&emsp;在典型的AI Agent系统中，其工作流程是一个迭代循环(\u003Ca href=\"https:\u002F\u002Fcdn.openai.com\u002Fbusiness-guides-and-resources\u002Fa-practical-guide-to-building-agents.pdf\" target=\"_blank\">AI Agent参考\u003C\u002Fa>)：LLM根据任务需求选择并调用一个工具，观察返回结果，然后基于新信息进行下一步思考和决策。\n&emsp;&emsp;随着一个AI Agent的功能(tools)越来越多，便会出现\u003Cstrong>上下文压力\u003C\u002Fstrong>：每一个工具的定义（包括其名称、功能描述、参数列表和格式）都需要在输入（Prompt）中详细说明，以便LLM能够理解和使用。当集成的工具从几个增加到几十甚至上百个时，上下文长度会随着增加，新增的tool还可能会影响现有的已经调优好的tool。\u003C\u002Fp>\n\u003Ch2 data-marked-line=\"6\">\u003Csup class=\"fake-head\" id=\"%E6%80%9D%E8%B7%AF%EF%BC%9A%E7%BB%9F%E4%B8%80%E7%9A%84CLI%E5%B7%A5%E5%85%B7\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E6%80%9D%E8%B7%AF%EF%BC%9A%E7%BB%9F%E4%B8%80%E7%9A%84CLI%E5%B7%A5%E5%85%B7\">思路：统一的CLI工具\u003C\u002Fa>\u003C\u002Fh2>\u003Cp data-marked-line=\"8\">&emsp;&emsp;设计一种基于现有\u003Ccode>command_executor\u003C\u002Fcode>（假设我们的AI Agent具有执行shell命令的工具）的扩展方案。该方案引入一个名为\u003Ccode>agent-magic-tool\u003C\u002Fcode>的&quot;虚拟&quot;命令行工具，将所有第三方集成功能收敛到其子命令中。\u003C\u002Fp>\n\u003Ch3 data-marked-line=\"10\">\u003Csup class=\"fake-head\" id=\"1.%20%E6%A6%82%E8%A6%81\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#1.%20%E6%A6%82%E8%A6%81\">1. 概要\u003C\u002Fa>\u003C\u002Fh3>\u003Cp data-marked-line=\"12\">&emsp;&emsp;我们将原本需要定义为独立Tool Call的各项功能（如\u003Ccode>gmail_search_messages\u003C\u002Fcode>）全部改造为\u003Ccode>agent-magic-tool\u003C\u002Fcode>的子命令。这样，LLM的工具列表中不再包含五花八门的第三方工具，而主要是这个高度统一的cli。LLM通过执行不同的\u003Ccode>agent-magic-tool\u003C\u002Fcode>命令来完成多样化的任务。\u003C\u002Fp>\n\u003Cp data-marked-line=\"14\">&emsp;&emsp;这种设计的关键优势在于，LLM无需在上下文中加载所有工具的完整定义。它只需要知道\u003Ccode>agent-magic-tool\u003C\u002Fcode>的存在以及如何通过它来发现和执行具体的功能即可。\u003C\u002Fp>\n\u003Ch3 data-marked-line=\"16\">\u003Csup class=\"fake-head\" id=\"2.%20%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E8%AF%A6%E8%A7%A3\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#2.%20%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E8%AF%A6%E8%A7%A3\">2. 工作流程详解\u003C\u002Fa>\u003C\u002Fh3>\u003Cp data-marked-line=\"18\">&emsp;&emsp;整个工作流程分为三个关键步骤：工具发现、Agent接管与执行、任务处理与迭代触发。下面我们以一个“在Gmail中搜索特定标签的邮件”的任务为例进行说明。\u003C\u002Fp>\n\u003Ch4 data-marked-line=\"20\">\u003Csup class=\"fake-head\" id=\"%E6%AD%A5%E9%AA%A4%E4%B8%80%EF%BC%9A%E5%B7%A5%E5%85%B7%E5%8F%91%E7%8E%B0\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E6%AD%A5%E9%AA%A4%E4%B8%80%EF%BC%9A%E5%B7%A5%E5%85%B7%E5%8F%91%E7%8E%B0\">步骤一：工具发现\u003C\u002Fa>\u003C\u002Fh4>\u003Cp data-marked-line=\"22\">&emsp;&emsp;当Agent需要执行某项功能时，它首先可以调用\u003Ccode>agent-magic-tool\u003C\u002Fcode>的帮助或列表命令来动态发现可用的工具及其用法。\u003C\u002Fp>\n\u003Cpre data-marked-line=\"24\" data-lang=\"bash\" data-shiki>\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">agent-magic-tool\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> list\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> tools\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> --query=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">\"gmail\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp data-marked-line=\"28\">&emsp;&emsp;\u003Ccode>command_executor\u003C\u002Fcode>在解析这个命令后，返回一个描述可用子工具的JSON对象。这个JSON详细定义了每个工具的输入参数和格式，为LLM提供了足够的信息来构建下一步的执行命令。\u003C\u002Fp>\n\u003Cp data-marked-line=\"30\">\u003Cstrong>示例JSON输出：\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre data-marked-line=\"31\" data-lang=\"json\" data-shiki>\u003Ccode class=\"language-json\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">  \"gmail_search_messages\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">    \"description\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">\"Searches for messages in Gmail based on a query and labels.\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">    \"input\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">      \"type\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">\"object\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">      \"properties\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">        \"search_query\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">          \"type\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">\"string\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">          \"description\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">\"The search query string.\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">        },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">        \"label\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">          \"type\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">\"string\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">          \"description\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: \u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">\"The label to filter messages by.\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">      },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5;--shiki-dark:#E06C75\">      \"required\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">: [\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">\"search_query\"\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">  }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#ABB2BF\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch4 data-marked-line=\"53\">\u003Csup class=\"fake-head\" id=\"%E6%AD%A5%E9%AA%A4%E4%BA%8C%EF%BC%9AAgent%E6%8E%A5%E7%AE%A1%E4%B8%8E%E6%89%A7%E8%A1%8C\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E6%AD%A5%E9%AA%A4%E4%BA%8C%EF%BC%9AAgent%E6%8E%A5%E7%AE%A1%E4%B8%8E%E6%89%A7%E8%A1%8C\">步骤二：Agent接管与执行\u003C\u002Fa>\u003C\u002Fh4>\u003Cp data-marked-line=\"55\">&emsp;&emsp;在理解了\u003Ccode>gmail_search_messages\u003C\u002Fcode>工具的用法后，LLM可以生成并执行具体的调用命令。例如LLM在某一次调用\u003Ccode>command_executor\u003C\u002Fcode>，并且给出如下输入：\u003C\u002Fp>\n\u003Cpre data-marked-line=\"57\" data-lang=\"bash\" data-shiki>\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1;--shiki-dark:#61AFEF\">agent-magic-tool\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> run\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\"> gmail_search_messages\u003C\u002Fspan>\u003Cspan style=\"color:#005CC5;--shiki-dark:#D19A66\"> --input=\u003C\u002Fspan>\u003Cspan style=\"color:#032F62;--shiki-dark:#98C379\">'{\"search_query\": \"年度报告\", \"label\": \"work\"}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp data-marked-line=\"61\">&emsp;&emsp;我们在这里的处理流程是整个设计的核心：\u003C\u002Fp>\n\u003Col data-marked-line=\"63\">\n\u003Cli>\u003Cstrong>创建结果占位符\u003C\u002Fstrong>：\u003Ccode>command_executor\u003C\u002Fcode>识别出\u003Ccode>agent-magic-tool\u003C\u002Fcode>调用后，并不会直接执行任何脚本或者命令。它的首要职责是立即在文件系统中创建一个临时的结果文件（例如 \u003Ccode>\u002Ftmp\u002Fresult-12345.json\u003C\u002Fcode>），并写入一个初始状态，如 \u003Ccode>{&quot;status&quot;: &quot;pending&quot;, &quot;message&quot;: &quot;The tool execution has been delegated to the agent.&quot;}\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>返回文件路径\u003C\u002Fstrong>：\u003Ccode>command_executor\u003C\u002Fcode>的本次执行结果会立即返回给Agent，内容就是这个临时文件的路径以及实际的输入，如\u003Ccode>{&quot;tool&quot;: &quot;gmail_search_messages&quot;, &quot;input&quot;: {&quot;search_query&quot;: &quot;年度报告&quot;, &quot;label&quot;: &quot;work&quot;}}\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Agent逻辑接管\u003C\u002Fstrong>：核心的处理逻辑交由Agent来做（或者对应的sub agent）。\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4 data-marked-line=\"67\">\u003Csup class=\"fake-head\" id=\"%E6%AD%A5%E9%AA%A4%E4%B8%89%EF%BC%9A%E4%BB%BB%E5%8A%A1%E5%A4%84%E7%90%86%E4%B8%8E%E8%BF%AD%E4%BB%A3%E8%A7%A6%E5%8F%91\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E6%AD%A5%E9%AA%A4%E4%B8%89%EF%BC%9A%E4%BB%BB%E5%8A%A1%E5%A4%84%E7%90%86%E4%B8%8E%E8%BF%AD%E4%BB%A3%E8%A7%A6%E5%8F%91\">步骤三：任务处理与迭代触发\u003C\u002Fa>\u003C\u002Fh4>\u003Cp data-marked-line=\"69\">&emsp;&emsp;Agent在接收到任务后，会根据子命令和参数决定下一步的行动。这种决策是上下文感知的，极具灵活性。\u003C\u002Fp>\n\u003Cul data-marked-line=\"71\">\n\u003Cli>\u003Cstrong>对于直接任务\u003C\u002Fstrong>（如\u003Ccode>gmail_search_messages\u003C\u002Fcode>）：Agent会直接调用相应的第三方API（如Gmail API）。在获取到API返回的数据后，它会将这个最终结果写入之前创建的占位符文件 \u003Ccode>\u002Ftmp\u002Fresult-12345.json\u003C\u002Fcode> 中，覆盖原有的“pending”状态。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>对于需要确认的任务\u003C\u002Fstrong>（如发送邮件）：Agent可能会暂停执行，并向前端应用发送一个请求，等待用户进行安全确认。一旦用户在界面上点击“确认”，前端将通知Agent。Agent随后执行API调用，并将结果写入结果文件。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp data-marked-line=\"74\">&emsp;&emsp;最后，Agent会主动触发新一轮的迭代。整个流程对于LLM来说，只是\u003Cstrong>执行一个shell脚本 -&gt; 脚本返回了一个result-12345.json\u003C\u002Fstrong>，它自然会选择使用文件读取工具来查看该文件的内容，从而获得任务的最终执行结果，实是妙哉。\u003C\u002Fp>\n\u003Ch3 data-marked-line=\"76\">\u003Csup class=\"fake-head\" id=\"3.%20%E6%B5%81%E7%A8%8B%E5%9B%BE\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#3.%20%E6%B5%81%E7%A8%8B%E5%9B%BE\">3. 流程图\u003C\u002Fa>\u003C\u002Fh3>\u003Cp data-marked-line=\"78\">&emsp;&emsp;以下Mermaid流程图直观地展示了上述调用过程：\u003C\u002Fp>\n\u003Cpre data-marked-line=\"80\" class=\"mermaid-block\">sequenceDiagram\n    participant LLM\n    participant AgentLoop as &quot;Agent Loop&quot;\n    participant CommandExecutor as &quot;command_executor&quot;\n    participant AgentLogic as &quot;Agent Logic (Async)&quot;\n    participant ResultFile as &quot;\u002Ftmp\u002Fresult-&lt;id&gt;.json&quot;\n    participant UserFrontend as &quot;User Frontend&quot;\n    participant ThirdPartyAPI as &quot;Third-Party API&quot;\n\n    LLM-&gt;&gt;AgentLoop: shell(command=&quot;agent-magic-tool run ...&quot;)\n    AgentLoop-&gt;&gt;CommandExecutor: Execute command\n    CommandExecutor-&gt;&gt;ResultFile: Create with &quot;pending&quot; status\n    CommandExecutor--&gt;&gt;AgentLoop: toolResult: &quot;Result is in \u002Ftmp\u002Fresult-&lt;id&gt;.json&quot;\n    CommandExecutor-&gt;&gt;AgentLogic: Delegate task (command, input, file_path)\n    AgentLoop-&gt;&gt;LLM: Observation: &quot;Result is in \u002Ftmp\u002Fresult-&lt;id&gt;.json&quot;\n\n    alt Direct API Call (e.g., search)\n        AgentLogic-&gt;&gt;ThirdPartyAPI: Call search API\n        ThirdPartyAPI--&gt;&gt;AgentLogic: Return search results\n        AgentLogic-&gt;&gt;ResultFile: Write final result\n        AgentLogic-&gt;&gt;AgentLoop: Trigger next iteration\n    else User Confirmation (e.g., send)\n        AgentLogic-&gt;&gt;UserFrontend: Request confirmation\n        UserFrontend--&gt;&gt;AgentLogic: User confirms\n        AgentLogic-&gt;&gt;ThirdPartyAPI: Call send API\n        ThirdPartyAPI--&gt;&gt;AgentLogic: Return success status\n        AgentLogic-&gt;&gt;ResultFile: Write final result\n        AgentLogic-&gt;&gt;AgentLoop: Trigger next iteration\n    end\n\n    Note over LLM, AgentLoop: New iteration starts\n    LLM-&gt;&gt;AgentLoop: file(read=&quot;\u002Ftmp\u002Fresult-&lt;id&gt;.json&quot;)\n    AgentLoop-&gt;&gt;ResultFile: Read content\n    ResultFile--&gt;&gt;AgentLoop: fileContent: &quot;{...final result...}&quot;\n    AgentLoop-&gt;&gt;LLM: Observation: &quot;{...final result...}&quot;\n    LLM-&gt;&gt;AgentLoop: Continue task with the result...\u003C\u002Fpre>\u003Ch2 data-marked-line=\"119\">\u003Csup class=\"fake-head\" id=\"%E6%96%B9%E6%A1%88%E4%BC%98%E5%8A%BF%E6%80%BB%E7%BB%93\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E6%96%B9%E6%A1%88%E4%BC%98%E5%8A%BF%E6%80%BB%E7%BB%93\">方案优势总结\u003C\u002Fa>\u003C\u002Fh2>\u003Cp data-marked-line=\"121\">&emsp;&emsp;该方案通过一个统一的CLI入口和执行机制，带来了多方面的显著优势：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth align=\"left\">优势\u003C\u002Fth>\n\u003Cth align=\"left\">描述\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd align=\"left\">\u003Cstrong>可扩展性\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd align=\"left\">新的第三方集成可以作为\u003Ccode>agent-magic-tool\u003C\u002Fcode>的子命令被轻松添加，无需修改LLM的核心工具定义。这使得Agent的能力可以无限扩展。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Cstrong>上下文优化\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd align=\"left\">将数百个潜在的工具定义缩减为一个\u003Ccode>command_executor\u003C\u002Fcode>的定义，极大地节省了LLM的上下文空间，使其能更专注于任务逻辑本身。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Cstrong>灵活性\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd align=\"left\">异步占位符机制优雅地处理了长耗时任务、网络延迟甚至需要用户介入的场景。Agent的迭代循环不会被阻塞，可以灵活应对各种异常情况。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"left\">\u003Cstrong>关注点分离\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd align=\"left\">该设计将“工具的发现和选择”（由LLM负责）与“工具的具体执行”（由后端Agent逻辑负责）清晰地分离开来，使得系统架构更清晰，更易于维护。\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 data-marked-line=\"130\">\u003Csup class=\"fake-head\" id=\"%E7%BB%93\">\u003C\u002Fsup>\u003Ca class=\"header-link\" href=\"#%E7%BB%93\">结\u003C\u002Fa>\u003C\u002Fh2>\u003Cp data-marked-line=\"131\">&emsp;&emsp;这篇文档是AI基于我的简要说明写出来的，还不错哦\u003Cimg src=\"\u002Fsticker\u002Faru\u002F132.png\" alt=\"sticker\"\u002F>\u003C\u002Fp>\n",[19,23,26,30,33,36,39,42,45,48],{"size":20,"text":21,"url":22},"big","问题来源","%E9%97%AE%E9%A2%98%E6%9D%A5%E6%BA%90",{"size":20,"text":24,"url":25},"思路：统一的CLI工具","%E6%80%9D%E8%B7%AF%EF%BC%9A%E7%BB%9F%E4%B8%80%E7%9A%84CLI%E5%B7%A5%E5%85%B7",{"size":27,"text":28,"url":29},"small","1. 概要","1.%20%E6%A6%82%E8%A6%81",{"size":27,"text":31,"url":32},"2. 工作流程详解","2.%20%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B%E8%AF%A6%E8%A7%A3",{"size":27,"text":34,"url":35},"步骤一：工具发现","%E6%AD%A5%E9%AA%A4%E4%B8%80%EF%BC%9A%E5%B7%A5%E5%85%B7%E5%8F%91%E7%8E%B0",{"size":27,"text":37,"url":38},"步骤二：Agent接管与执行","%E6%AD%A5%E9%AA%A4%E4%BA%8C%EF%BC%9AAgent%E6%8E%A5%E7%AE%A1%E4%B8%8E%E6%89%A7%E8%A1%8C",{"size":27,"text":40,"url":41},"步骤三：任务处理与迭代触发","%E6%AD%A5%E9%AA%A4%E4%B8%89%EF%BC%9A%E4%BB%BB%E5%8A%A1%E5%A4%84%E7%90%86%E4%B8%8E%E8%BF%AD%E4%BB%A3%E8%A7%A6%E5%8F%91",{"size":27,"text":43,"url":44},"3. 流程图","3.%20%E6%B5%81%E7%A8%8B%E5%9B%BE",{"size":20,"text":46,"url":47},"方案优势总结","%E6%96%B9%E6%A1%88%E4%BC%98%E5%8A%BF%E6%80%BB%E7%BB%93",{"size":20,"text":49,"url":50},"结","%E7%BB%93","问题来源 在典型的AI Agent系统中，其工作流程是一个迭代循环(AI Agent参考)：LLM根据任务需求选择并调用一个工具，观察返回结果，然后基于新信息进行下一步思考和决策。 随着一个AI Agent的功能(tools)越来越多，便会出现上下文压力：每一个工具的定义（包括其名称、功能描述、参数…",[],1793351174526]