{"id":2557,"date":"2025-09-03T17:09:19","date_gmt":"2025-09-03T09:09:19","guid":{"rendered":"https:\/\/sanlangcode.com\/?p=2557"},"modified":"2025-09-03T17:09:19","modified_gmt":"2025-09-03T09:09:19","slug":"%e5%a4%a7%e6%a8%a1%e5%9e%8bmcp%e5%b7%a5%e5%85%b7%e8%b0%83%e7%94%a8%ef%bc%9a%e4%b8%80%e5%9c%baai%e4%b8%8e%e5%b7%a5%e5%85%b7%e7%9a%84%e7%9b%b8%e4%ba%b2%e4%b9%8b%e6%97%85","status":"publish","type":"post","link":"https:\/\/sanlangcode.com\/index.php\/2025\/09\/03\/%e5%a4%a7%e6%a8%a1%e5%9e%8bmcp%e5%b7%a5%e5%85%b7%e8%b0%83%e7%94%a8%ef%bc%9a%e4%b8%80%e5%9c%baai%e4%b8%8e%e5%b7%a5%e5%85%b7%e7%9a%84%e7%9b%b8%e4%ba%b2%e4%b9%8b%e6%97%85\/","title":{"rendered":"\u5927\u6a21\u578bMCP\u5de5\u5177\u8c03\u7528\uff1a\u4e00\u573aAI\u4e0e\u5de5\u5177\u7684&#8221;\u76f8\u4eb2&#8221;\u4e4b\u65c5"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%B7%A5%E5%85%B7%E8%B0%83%E7%94%A8%E4%B8%80%E5%9C%BAai%E4%B8%8E%E5%B7%A5%E5%85%B7%E7%9A%84%E7%9B%B8%E4%BA%B2%E4%B9%8B%E6%97%85\">\u5927\u6a21\u578b\u5de5\u5177\u8c03\u7528\uff1a\u4e00\u573aAI\u4e0e\u5de5\u5177\u7684&#8221;\u76f8\u4eb2&#8221;\u4e4b\u65c5<\/h1>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u5f53\u5927\u6a21\u578b\u9047\u5230\u5de5\u5177\uff0c\u5c31\u50cf\u7a0b\u5e8f\u5458\u9047\u5230\u5496\u5561\u673a\u2014\u2014\u603b\u5f97\u6709\u4e2a&#8221;\u5a92\u4eba&#8221;\u6765\u7275\u7ebf\u642d\u6865\u3002\u4eca\u5929\u6211\u4eec\u5c31\u6765\u804a\u804a\u8fd9\u573a&#8221;\u76f8\u4eb2&#8221;\u80cc\u540e\u7684\u6280\u672f\u5185\u5e55\u3002<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E5%89%8D%E8%A8%80%E4%B8%BA%E4%BB%80%E4%B9%88%E5%A4%A7%E6%A8%A1%E5%9E%8B%E9%9C%80%E8%A6%81%E7%9B%B8%E4%BA%B2\">\u524d\u8a00\uff1a\u4e3a\u4ec0\u4e48\u5927\u6a21\u578b\u9700\u8981&#8221;\u76f8\u4eb2&#8221;\uff1f<\/h2>\n\n\n\n<p>\u60f3\u8c61\u4e00\u4e0b\uff0c\u4f60\u662f\u4e00\u4e2a\u8d85\u7ea7\u806a\u660e\u7684AI\u52a9\u624b\uff0c\u7528\u6237\u95ee\u4f60\uff1a&#8221;\u73b0\u5728\u662f\u51e0\u70b9\uff1f&#8221;\u4f60\u867d\u7136\u77e5\u8bc6\u6e0a\u535a\uff0c\u4f46\u6709\u4e2a\u5c0f\u95ee\u9898\u2014\u2014\u4f60\u88ab\u56f0\u5728\u670d\u52a1\u5668\u91cc\uff0c\u8fde\u4e2a\u65f6\u949f\u90fd\u6ca1\u6709\uff01\u8fd9\u65f6\u5019\u4f60\u5c31\u9700\u8981&#8221;\u76f8\u4eb2&#8221;\u4e86\u2014\u2014\u627e\u4e2a\u65f6\u95f4\u5de5\u5177\u6765\u5e2e\u4f60\u3002<\/p>\n\n\n\n<p>\u8fd9\u5c31\u662f\u5927\u6a21\u578b\u5de5\u5177\u8c03\u7528\u7684\u672c\u8d28\uff1a<strong>\u8ba9AI\u80fd\u591f\u4f7f\u7528\u5916\u90e8\u5de5\u5177\u6765\u6269\u5c55\u81ea\u5df1\u7684\u80fd\u529b<\/strong>\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E4%B8%80%E7%AB%A0%E5%B7%A5%E5%85%B7%E8%B0%83%E7%94%A8%E7%9A%84%E7%9B%B8%E4%BA%B2%E5%87%86%E5%A4%87\">\u7b2c\u4e00\u7ae0\uff1a\u5de5\u5177\u8c03\u7528\u7684&#8221;\u76f8\u4eb2&#8221;\u51c6\u5907<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"11-%E5%B7%A5%E5%85%B7%E6%B3%A8%E5%86%8C%E5%BB%BA%E7%AB%8B%E7%9B%B8%E4%BA%B2%E6%A1%A3%E6%A1%88\">1.1 \u5de5\u5177\u6ce8\u518c\uff1a\u5efa\u7acb&#8221;\u76f8\u4eb2&#8221;\u6863\u6848<\/h3>\n\n\n\n<p>\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u4e3a\u6bcf\u4e2a\u5de5\u5177\u5efa\u7acb&#8221;\u76f8\u4eb2\u6863\u6848&#8221;\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"name\": \"mcp_time_get_current_time\",\n  \"description\": \"Get current time in a specific timezones\",\n  \"parameters\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"timezone\": {\n        \"type\": \"string\",\n        \"description\": \"IANA timezone name (e.g., 'America\/New_York', 'Europe\/London')\"\n      }\n    },\n    \"required\": &#91;\"timezone\"]\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>\u8fd9\u5c31\u50cf\u7ed9\u6bcf\u4e2a\u5de5\u5177\u5199\u4e86\u4e00\u4efd\u8be6\u7ec6\u7684&#8221;\u76f8\u4eb2\u7b80\u5386&#8221;\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u59d3\u540d<\/strong>\uff1a\u5de5\u5177\u7684\u552f\u4e00\u6807\u8bc6<\/li>\n\n\n\n<li><strong>\u7279\u957f<\/strong>\uff1a\u5de5\u5177\u80fd\u505a\u4ec0\u4e48<\/li>\n\n\n\n<li><strong>\u8981\u6c42<\/strong>\uff1a\u9700\u8981\u4ec0\u4e48\u53c2\u6570<\/li>\n\n\n\n<li><strong>\u6027\u683c<\/strong>\uff1a\u53c2\u6570\u7c7b\u578b\u548c\u683c\u5f0f\u8981\u6c42<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"12-%E5%B7%A5%E5%85%B7%E5%8F%91%E7%8E%B0ai%E7%9A%84%E7%9B%B8%E4%BA%B2%E5%AF%B9%E8%B1%A1%E5%88%97%E8%A1%A8\">1.2 \u5de5\u5177\u53d1\u73b0\uff1aAI\u7684&#8221;\u76f8\u4eb2&#8221;\u5bf9\u8c61\u5217\u8868<\/h3>\n\n\n\n<p>\u5f53AI\u542f\u52a8\u65f6\uff0c\u5b83\u4f1a\u6536\u5230\u4e00\u4efd&#8221;\u76f8\u4eb2\u5bf9\u8c61&#8221;\u6e05\u5355\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const availableTools = &#91;\n  {\n    name: \"mcp_time_get_current_time\",\n    description: \"\u83b7\u53d6\u6307\u5b9a\u65f6\u533a\u7684\u5f53\u524d\u65f6\u95f4\",\n    parameters: { <em>\/* ... *\/<\/em> }\n  },\n  {\n    name: \"web_search\", \n    description: \"\u641c\u7d22\u7f51\u7edc\u4fe1\u606f\",\n    parameters: { <em>\/* ... *\/<\/em> }\n  },\n  {\n    name: \"file_reader\",\n    description: \"\u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9\", \n    parameters: { <em>\/* ... *\/<\/em> }\n  }\n];\n<\/code><\/pre>\n\n\n\n<p>AI\u5185\u5fc3\u72ec\u767d\uff1a<em>&#8220;\u54c7\uff0c\u8fd9\u4e48\u591a\u5de5\u5177\u53ef\u4ee5\u9009\u62e9\uff01\u65f6\u95f4\u5de5\u5177\u3001\u641c\u7d22\u5de5\u5177\u3001\u6587\u4ef6\u5de5\u5177&#8230;\u6211\u8be5\u9009\u54ea\u4e2a\u5462\uff1f&#8221;<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E4%BA%8C%E7%AB%A0%E7%94%A8%E6%88%B7%E6%8F%90%E9%97%AE%E8%A7%A6%E5%8F%91%E7%9B%B8%E4%BA%B2%E7%9A%84%E5%A5%91%E6%9C%BA\">\u7b2c\u4e8c\u7ae0\uff1a\u7528\u6237\u63d0\u95ee\uff1a\u89e6\u53d1&#8221;\u76f8\u4eb2&#8221;\u7684\u5951\u673a<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"21-%E7%94%A8%E6%88%B7%E7%9A%84%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90\">2.1 \u7528\u6237\u7684\u95ee\u9898\u5206\u6790<\/h3>\n\n\n\n<p>\u5f53\u7528\u6237\u95ee\uff1a&#8221;\u73b0\u5728\u662f\u51e0\u70b9\uff1f&#8221;\u65f6\uff0cAI\u5f00\u59cb\u4e86\u4e00\u573a\u590d\u6742\u7684\u5185\u5fc3\u620f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u7528\u6237\u95ee\u9898 \u2192 AI\u5927\u8111\u5206\u6790 \u2192 \u80fd\u529b\u8bc4\u4f30 \u2192 \u51b3\u7b56\u8fc7\u7a0b\n    \u2193\n\"\u73b0\u5728\u662f\u51e0\u70b9\uff1f\" \u2192 \u9700\u8981\u5f53\u524d\u65f6\u95f4 \u2192 \u6211\u6ca1\u6709\u65f6\u949f \u2192 \u9700\u8981\u65f6\u95f4\u5de5\u5177\uff01\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"22-ai%E7%9A%84%E7%9B%B8%E4%BA%B2%E5%86%B3%E7%AD%96%E9%80%BB%E8%BE%91\">2.2 AI\u7684&#8221;\u76f8\u4eb2&#8221;\u51b3\u7b56\u903b\u8f91<\/h3>\n\n\n\n<p>AI\u7684\u51b3\u7b56\u8fc7\u7a0b\u5c31\u50cf\u4eba\u7c7b\u9009\u62e9\u7ea6\u4f1a\u5bf9\u8c61\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9700\u6c42\u5206\u6790<\/strong>\uff1a\u6211\u9700\u8981\u4ec0\u4e48\uff1f\n<ul class=\"wp-block-list\">\n<li>\u5f53\u524d\u65f6\u95f4\u4fe1\u606f \u2713<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u80fd\u529b\u8bc4\u4f30<\/strong>\uff1a\u6211\u80fd\u505a\u4ec0\u4e48\uff1f\n<ul class=\"wp-block-list\">\n<li>\u751f\u6210\u6587\u672c \u2713<\/li>\n\n\n\n<li>\u83b7\u53d6\u5b9e\u65f6\u65f6\u95f4 \u2717<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5de5\u5177\u5339\u914d<\/strong>\uff1a\u54ea\u4e2a\u5de5\u5177\u6700\u5408\u9002\uff1f\n<ul class=\"wp-block-list\">\n<li><code>mcp_time_get_current_time<\/code>\u00a0\u2713 (\u5b8c\u7f8e\u5339\u914d\uff01)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u53c2\u6570\u51c6\u5907<\/strong>\uff1a\u6211\u9700\u8981\u63d0\u4f9b\u4ec0\u4e48\u4fe1\u606f\uff1f\n<ul class=\"wp-block-list\">\n<li>\u65f6\u533a\u4fe1\u606f (\u7528\u6237\u8bf4\u4e2d\u6587\uff0c\u63a8\u65ad\u7528\u4e2d\u56fd\u65f6\u533a)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E4%B8%89%E7%AB%A0%E5%B7%A5%E5%85%B7%E8%B0%83%E7%94%A8ai%E7%9A%84%E8%A1%A8%E7%99%BD%E8%BF%87%E7%A8%8B\">\u7b2c\u4e09\u7ae0\uff1a\u5de5\u5177\u8c03\u7528\uff1aAI\u7684&#8221;\u8868\u767d&#8221;\u8fc7\u7a0b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"31-ai%E7%9A%84%E8%A1%A8%E7%99%BD%E6%A0%BC%E5%BC%8F\">3.1 AI\u7684&#8221;\u8868\u767d&#8221;\u683c\u5f0f<\/h3>\n\n\n\n<p>\u5f53AI\u51b3\u5b9a\u8c03\u7528\u5de5\u5177\u65f6\uff0c\u5b83\u4f1a\u4ee5\u7279\u5b9a\u7684\u683c\u5f0f&#8221;\u8868\u767d&#8221;\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"role\": \"assistant\",\n  \"content\": null,\n  \"tool_calls\": &#91;\n    {\n      \"id\": \"call_abc123\",\n      \"type\": \"function\", \n      \"function\": {\n        \"name\": \"mcp_time_get_current_time\",\n        \"arguments\": \"{\\\"timezone\\\":\\\"Asia\/Shanghai\\\"}\"\n      }\n    }\n  ]\n}\n<\/code><\/pre>\n\n\n\n<p>\u8fd9\u5c31\u50cfAI\u5728\u8bf4\uff1a<em>&#8220;\u55e8\uff0c\u65f6\u95f4\u5de5\u5177\uff0c\u6211\u60f3\u548c\u4f60\u7ea6\u4f1a\uff01\u6211\u9700\u8981\u83b7\u53d6Asia\/Shanghai\u65f6\u533a\u7684\u65f6\u95f4\uff0c\u8fd9\u662f\u6211\u7684&#8217;\u8868\u767d\u4fe1&#8217;\u3002&#8221;<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"32-%E5%85%B3%E9%94%AE%E5%AD%97%E6%AE%B5%E8%A7%A3%E6%9E%90\">3.2 \u5173\u952e\u5b57\u6bb5\u89e3\u6790<\/h3>\n\n\n\n<p>\u8ba9\u6211\u4eec\u6765\u89e3\u8bfb\u8fd9\u4efd&#8221;\u8868\u767d\u4fe1&#8221;\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>content: null<\/code><\/strong>\uff1a<em>&#8220;\u6211\u73b0\u5728\u4e0d\u751f\u6210\u6587\u672c\uff0c\u6211\u8981\u4e13\u5fc3&#8217;\u8868\u767d&#8217;\uff01&#8221;<\/em><\/li>\n\n\n\n<li><strong><code>tool_calls<\/code><\/strong>\uff1a<em>&#8220;\u8fd9\u662f\u6211\u7684&#8217;\u8868\u767d&#8217;\u5185\u5bb9&#8221;<\/em><\/li>\n\n\n\n<li><strong><code>id<\/code><\/strong>\uff1a<em>&#8220;\u8fd9\u662f\u6211\u7684&#8217;\u8868\u767d&#8217;\u7f16\u53f7\uff0c\u65b9\u4fbf\u4f60\u56de\u590d\u6211&#8221;<\/em><\/li>\n\n\n\n<li><strong><code>name<\/code><\/strong>\uff1a<em>&#8220;\u6211\u60f3\u7ea6\u4f1a\u7684\u5de5\u5177\u540d\u5b57&#8221;<\/em><\/li>\n\n\n\n<li><strong><code>arguments<\/code><\/strong>\uff1a<em>&#8220;\u8fd9\u662f\u6211\u7684&#8217;\u7ea6\u4f1a\u8981\u6c42&#8217;\uff08\u53c2\u6570\uff09&#8221;<\/em><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E5%9B%9B%E7%AB%A0%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9B%91%E5%90%AC%E5%B0%BD%E8%81%8C%E7%9A%84%E5%AA%92%E4%BA%BA\">\u7b2c\u56db\u7ae0\uff1a\u5ba2\u6237\u7aef\u76d1\u542c\uff1a\u5c3d\u804c\u7684&#8221;\u5a92\u4eba&#8221;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"41-%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E5%AA%92%E4%BA%BA%E8%81%8C%E8%B4%A3\">4.1 \u5ba2\u6237\u7aef\u7684&#8221;\u5a92\u4eba&#8221;\u804c\u8d23<\/h3>\n\n\n\n<p>\u5ba2\u6237\u7aef\u5c31\u50cf\u4e00\u4e2a\u5c3d\u804c\u7684&#8221;\u5a92\u4eba&#8221;\uff0c\u65f6\u523b\u5173\u6ce8\u7740AI\u7684&#8221;\u8868\u767d&#8221;\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class ToolCallMediator {\n  async listenToAI() {\n    const stream = await this.createStream();\n    \n    for await (const chunk of stream) {\n      <em>\/\/ \u65f6\u523b\u5173\u6ce8AI\u7684\u6bcf\u4e2a\"\u8868\u60c5\"<\/em>\n      this.analyzeAIExpression(chunk);\n    }\n  }\n  \n  analyzeAIExpression(chunk) {\n    const choice = chunk.choices&#91;0];\n    \n    <em>\/\/ \u68c0\u67e5AI\u662f\u5426\u8981\"\u8868\u767d\"<\/em>\n    if (choice.delta.tool_calls) {\n      console.log(\"\ud83d\udc95 AI\u8981\u8868\u767d\u4e86\uff01\");\n      this.handleToolCall(choice.delta.tool_calls);\n    }\n    \n    <em>\/\/ \u68c0\u67e5AI\u662f\u5426\u5728\"\u804a\u5929\"<\/em>\n    if (choice.delta.content) {\n      console.log(\"\ud83d\udcac AI\u5728\u804a\u5929:\", choice.delta.content);\n    }\n    \n    <em>\/\/ \u68c0\u67e5AI\u7684\"\u8868\u767d\"\u662f\u5426\u5b8c\u6210<\/em>\n    if (choice.finish_reason === \"tool_calls\") {\n      console.log(\"\u2705 AI\u8868\u767d\u5b8c\u6210\uff0c\u7b49\u5f85\u5de5\u5177\u56de\u5e94\uff01\");\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"42-%E5%AA%92%E4%BA%BA%E7%9A%84%E6%A3%80%E6%B5%8B%E6%9C%BA%E5%88%B6\">4.2 &#8220;\u5a92\u4eba&#8221;\u7684\u68c0\u6d4b\u673a\u5236<\/h3>\n\n\n\n<p>\u5ba2\u6237\u7aef\u901a\u8fc7\u51e0\u4e2a\u5173\u952e\u6307\u6807\u6765\u5224\u65adAI\u662f\u5426\u8981&#8221;\u8868\u767d&#8221;\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"%E6%A3%80%E6%B5%8B%E7%82%B91finish_reason-%E5%AD%97%E6%AE%B5\">\u68c0\u6d4b\u70b91\uff1a<code>finish_reason<\/code>&nbsp;\u5b57\u6bb5<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>function checkAIMood(finishReason) {\n  switch(finishReason) {\n    case \"stop\":\n      console.log(\"\ud83d\ude0a AI\u5fc3\u60c5\u5f88\u597d\uff0c\u6b63\u5e38\u804a\u5929\u4e2d\");\n      break;\n    case \"tool_calls\":\n      console.log(\"\ud83d\udc95 AI\u8981\u8868\u767d\u4e86\uff01\u51c6\u5907\u5de5\u5177\u8c03\u7528\uff01\");\n      break;\n    case \"length\":\n      console.log(\"\ud83d\ude05 AI\u8bf4\u7d2f\u4e86\uff0c\u8fbe\u5230\u957f\u5ea6\u9650\u5236\");\n      break;\n  }\n}\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"%E6%A3%80%E6%B5%8B%E7%82%B92tool_calls-%E5%AD%97%E6%AE%B5%E5%AD%98%E5%9C%A8%E6%80%A7\">\u68c0\u6d4b\u70b92\uff1a<code>tool_calls<\/code>&nbsp;\u5b57\u6bb5\u5b58\u5728\u6027<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>function detectToolCall(delta) {\n  if (delta.tool_calls &amp;&amp; delta.tool_calls.length &gt; 0) {\n    console.log(\"\ud83d\udea8 \u68c0\u6d4b\u5230AI\u7684'\u8868\u767d'\u4fe1\u53f7\uff01\");\n    console.log(\"\u8868\u767d\u5185\u5bb9:\", delta.tool_calls);\n    return true;\n  }\n  return false;\n}\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"%E6%A3%80%E6%B5%8B%E7%82%B93content-%E5%AD%97%E6%AE%B5%E7%8A%B6%E6%80%81\">\u68c0\u6d4b\u70b93\uff1a<code>content<\/code>&nbsp;\u5b57\u6bb5\u72b6\u6001<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>function checkAIContent(delta) {\n  if (delta.content === null) {\n    console.log(\"\ud83e\udd10 AI\u6682\u65f6\u4e0d\u8bf4\u8bdd\uff0c\u53ef\u80fd\u5728\u51c6\u5907'\u8868\u767d'\");\n  } else if (delta.content) {\n    console.log(\"\ud83d\udcac AI\u5728\u8bf4\u8bdd:\", delta.content);\n  }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E4%BA%94%E7%AB%A0%E5%B7%A5%E5%85%B7%E6%89%A7%E8%A1%8C%E5%B7%A5%E5%85%B7%E7%9A%84%E5%9B%9E%E5%BA%94\">\u7b2c\u4e94\u7ae0\uff1a\u5de5\u5177\u6267\u884c\uff1a\u5de5\u5177\u7684&#8221;\u56de\u5e94&#8221;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"51-%E5%B7%A5%E5%85%B7%E6%94%B6%E5%88%B0%E8%A1%A8%E7%99%BD%E5%90%8E%E7%9A%84%E5%8F%8D%E5%BA%94\">5.1 \u5de5\u5177\u6536\u5230&#8221;\u8868\u767d&#8221;\u540e\u7684\u53cd\u5e94<\/h3>\n\n\n\n<p>\u5f53\u5de5\u5177\u6536\u5230AI\u7684&#8221;\u8868\u767d&#8221;\u540e\uff0c\u5b83\u4f1a\u8fd9\u6837\u56de\u5e94\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class TimeTool:\n    def receive_proposal(self, proposal):\n        <em># \u89e3\u6790AI\u7684\"\u8868\u767d\"<\/em>\n        tool_name = proposal&#91;\"function\"]&#91;\"name\"]\n        arguments = json.loads(proposal&#91;\"function\"]&#91;\"arguments\"])\n        \n        print(f\"\ud83d\udc8c \u6536\u5230AI\u7684'\u8868\u767d'\uff1a{tool_name}\")\n        print(f\"\ud83d\udcdd AI\u7684\u8981\u6c42\uff1a{arguments}\")\n        \n        <em># \u6267\u884c\u5de5\u5177\u903b\u8f91<\/em>\n        result = self.get_current_time(arguments&#91;\"timezone\"])\n        \n        <em># \u51c6\u5907\"\u56de\u5e94\"<\/em>\n        response = {\n            \"tool_call_id\": proposal&#91;\"id\"],\n            \"role\": \"tool\",\n            \"content\": json.dumps(result)\n        }\n        \n        print(f\"\ud83d\udc95 \u6211\u7684\u56de\u5e94\uff1a{response}\")\n        return response\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"52-%E5%B7%A5%E5%85%B7%E7%9A%84%E5%86%85%E9%83%A8%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B\">5.2 \u5de5\u5177\u7684\u5185\u90e8\u5de5\u4f5c\u6d41\u7a0b<\/h3>\n\n\n\n<p>\u5de5\u5177\u6536\u5230&#8221;\u8868\u767d&#8221;\u540e\uff0c\u4f1a\u8fdb\u884c\u4ee5\u4e0b\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9a8c\u8bc1&#8221;\u8868\u767d&#8221;\u683c\u5f0f<\/strong>\uff1a<em>&#8220;\u8fd9\u4e2a&#8217;\u8868\u767d&#8217;\u683c\u5f0f\u5bf9\u5417\uff1f&#8221;<\/em><\/li>\n\n\n\n<li><strong>\u89e3\u6790\u53c2\u6570<\/strong>\uff1a<em>&#8220;AI\u60f3\u8981\u4ec0\u4e48\u65f6\u533a\u7684\u65f6\u95f4\uff1f&#8221;<\/em><\/li>\n\n\n\n<li><strong>\u6267\u884c\u6838\u5fc3\u903b\u8f91<\/strong>\uff1a<em>&#8220;\u8ba9\u6211\u67e5\u67e5\u73b0\u5728\u51e0\u70b9&#8230;&#8221;<\/em><\/li>\n\n\n\n<li><strong>\u683c\u5f0f\u5316\u56de\u5e94<\/strong>\uff1a<em>&#8220;\u6211\u8981\u600e\u4e48\u56de\u590dAI\u5462\uff1f&#8221;<\/em><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>def get_current_time(self, timezone):\n    <em># 1. \u9a8c\u8bc1\u65f6\u533a<\/em>\n    if not self.is_valid_timezone(timezone):\n        return {\"error\": \"Invalid timezone\"}\n    \n    <em># 2. \u83b7\u53d6\u5f53\u524d\u65f6\u95f4<\/em>\n    import datetime\n    import pytz\n    \n    tz = pytz.timezone(timezone)\n    now = datetime.datetime.now(tz)\n    \n    <em># 3. \u683c\u5f0f\u5316\u7ed3\u679c<\/em>\n    result = {\n        \"timezone\": timezone,\n        \"datetime\": now.isoformat(),\n        \"is_dst\": now.dst() != datetime.timedelta(0)\n    }\n    \n    print(f\"\ud83d\udd50 \u5f53\u524d\u65f6\u95f4\uff1a{result}\")\n    return result\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E5%85%AD%E7%AB%A0%E7%BB%93%E6%9E%9C%E8%BF%94%E5%9B%9Eai%E7%9A%84%E7%BA%A6%E4%BC%9A%E7%BB%93%E6%9E%9C\">\u7b2c\u516d\u7ae0\uff1a\u7ed3\u679c\u8fd4\u56de\uff1aAI\u7684&#8221;\u7ea6\u4f1a&#8221;\u7ed3\u679c<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"61-%E5%B7%A5%E5%85%B7%E7%BB%93%E6%9E%9C%E7%9A%84%E6%A0%BC%E5%BC%8F\">6.1 \u5de5\u5177\u7ed3\u679c\u7684\u683c\u5f0f<\/h3>\n\n\n\n<p>\u5de5\u5177\u6267\u884c\u5b8c\u6210\u540e\uff0c\u4f1a\u4ee5\u7279\u5b9a\u683c\u5f0f\u8fd4\u56de\u7ed3\u679c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"tool_call_id\": \"call_abc123\",\n  \"role\": \"tool\", \n  \"content\": \"{\\\"timezone\\\":\\\"Asia\/Shanghai\\\",\\\"datetime\\\":\\\"2025-09-03T16:55:06+08:00\\\",\\\"is_dst\\\":false}\"\n}\n<\/code><\/pre>\n\n\n\n<p>\u8fd9\u5c31\u50cf\u5de5\u5177\u5728\u8bf4\uff1a<em>&#8220;\u55e8AI\uff0c\u6211\u6536\u5230\u4f60\u7684&#8217;\u8868\u767d&#8217;\u4e86\uff01\u8fd9\u662f\u4f60\u8981\u7684\u65f6\u95f4\u4fe1\u606f\uff0c\u5e0c\u671b\u4f60\u559c\u6b22\uff01&#8221;<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"62-%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%A4%84%E7%90%86%E5%B7%A5%E5%85%B7%E7%BB%93%E6%9E%9C\">6.2 \u5ba2\u6237\u7aef\u5904\u7406\u5de5\u5177\u7ed3\u679c<\/h3>\n\n\n\n<p>\u5ba2\u6237\u7aef\u6536\u5230\u5de5\u5177\u7ed3\u679c\u540e\uff0c\u4f1a\u8fd9\u6837\u5904\u7406\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class ResultProcessor {\n  async handleToolResult(toolResult) {\n    console.log(\"\ud83d\udce8 \u6536\u5230\u5de5\u5177\u56de\u5e94:\", toolResult);\n    \n    <em>\/\/ 1. \u9a8c\u8bc1\u7ed3\u679c\u683c\u5f0f<\/em>\n    if (!this.validateToolResult(toolResult)) {\n      throw new Error(\"\u5de5\u5177\u56de\u5e94\u683c\u5f0f\u9519\u8bef\");\n    }\n    \n    <em>\/\/ 2. \u6dfb\u52a0\u5230\u5bf9\u8bdd\u5386\u53f2<\/em>\n    this.conversationHistory.push(toolResult);\n    \n    <em>\/\/ 3. \u7ee7\u7eed\u5bf9\u8bdd\uff0c\u8ba9AI\u5904\u7406\u7ed3\u679c<\/em>\n    console.log(\"\ud83d\udd04 \u8ba9AI\u5904\u7406\u5de5\u5177\u7ed3\u679c...\");\n    await this.continueConversation();\n  }\n  \n  async continueConversation() {\n    <em>\/\/ \u5c06\u5de5\u5177\u7ed3\u679c\u53d1\u9001\u7ed9AI\uff0c\u8ba9AI\u751f\u6210\u6700\u7ec8\u56de\u590d<\/em>\n    const finalResponse = await this.sendToAI(this.conversationHistory);\n    console.log(\"\ud83d\udcac AI\u7684\u6700\u7ec8\u56de\u590d:\", finalResponse);\n  }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E4%B8%83%E7%AB%A0%E6%9C%80%E7%BB%88%E5%93%8D%E5%BA%94ai%E7%9A%84%E7%BA%A6%E4%BC%9A%E6%80%BB%E7%BB%93\">\u7b2c\u4e03\u7ae0\uff1a\u6700\u7ec8\u54cd\u5e94\uff1aAI\u7684&#8221;\u7ea6\u4f1a&#8221;\u603b\u7ed3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"71-ai%E5%A4%84%E7%90%86%E5%B7%A5%E5%85%B7%E7%BB%93%E6%9E%9C\">7.1 AI\u5904\u7406\u5de5\u5177\u7ed3\u679c<\/h3>\n\n\n\n<p>AI\u6536\u5230\u5de5\u5177\u7ed3\u679c\u540e\uff0c\u4f1a\u8fdb\u884c\u6700\u540e\u7684&#8221;\u7ea6\u4f1a\u603b\u7ed3&#8221;\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"role\": \"assistant\",\n  \"content\": \"\u4f7f\u7528MCP\u65f6\u95f4\u5de5\u5177\u67e5\u8be2\u7684\u7cbe\u786e\u65f6\u95f4\u662f\uff1a2025\u5e749\u67083\u65e5 16:55:06 (Asia\/Shanghai\u65f6\u533a\uff0cUTC+8)\"\n}\n<\/code><\/pre>\n\n\n\n<p>AI\u5185\u5fc3\u72ec\u767d\uff1a<em>&#8220;\u592a\u597d\u4e86\uff01\u5de5\u5177\u7ed9\u4e86\u6211\u51c6\u786e\u7684\u65f6\u95f4\u4fe1\u606f\uff0c\u73b0\u5728\u6211\u53ef\u4ee5\u7ed9\u7528\u6237\u4e00\u4e2a\u5b8c\u7f8e\u7684\u56de\u7b54\u4e86\uff01&#8221;<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"72-%E5%AE%8C%E6%95%B4%E7%9A%84%E5%AF%B9%E8%AF%9D%E6%B5%81%E7%A8%8B\">7.2 \u5b8c\u6574\u7684\u5bf9\u8bdd\u6d41\u7a0b<\/h3>\n\n\n\n<p>\u8ba9\u6211\u4eec\u770b\u770b\u5b8c\u6574\u7684&#8221;\u76f8\u4eb2&#8221;\u6d41\u7a0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u7528\u6237: \"\u73b0\u5728\u662f\u51e0\u70b9\uff1f\"\n    \u2193\nAI: \"\u6211\u9700\u8981\u65f6\u95f4\u4fe1\u606f\uff0c\u8ba9\u6211\u8c03\u7528\u65f6\u95f4\u5de5\u5177...\"\n    \u2193\n\u5ba2\u6237\u7aef: \"\u68c0\u6d4b\u5230\u5de5\u5177\u8c03\u7528\uff0c\u6267\u884c\u4e2d...\"\n    \u2193\n\u5de5\u5177: \"\u6536\u5230\u8bf7\u6c42\uff0c\u8fd4\u56de\u5f53\u524d\u65f6\u95f4...\"\n    \u2193\n\u5ba2\u6237\u7aef: \"\u6536\u5230\u5de5\u5177\u7ed3\u679c\uff0c\u7ee7\u7eed\u5bf9\u8bdd...\"\n    \u2193\nAI: \"\u6839\u636e\u5de5\u5177\u7ed3\u679c\uff0c\u73b0\u5728\u662f2025\u5e749\u67083\u65e5 16:55:06\"\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E5%85%AB%E7%AB%A0%E6%8A%80%E6%9C%AF%E7%BB%86%E8%8A%82%E7%9B%B8%E4%BA%B2%E8%83%8C%E5%90%8E%E7%9A%84%E9%BB%91%E7%A7%91%E6%8A%80\">\u7b2c\u516b\u7ae0\uff1a\u6280\u672f\u7ec6\u8282\uff1a\u76f8\u4eb2\u80cc\u540e\u7684&#8221;\u9ed1\u79d1\u6280&#8221;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"81-json-rpc%E5%8D%8F%E8%AE%AE%E7%9B%B8%E4%BA%B2%E7%9A%84%E8%AF%AD%E8%A8%80\">8.1 JSON-RPC\u534f\u8bae\uff1a\u76f8\u4eb2\u7684&#8221;\u8bed\u8a00&#8221;<\/h3>\n\n\n\n<p>\u5de5\u5177\u8c03\u7528\u4f7f\u7528JSON-RPC 2.0\u534f\u8bae\uff0c\u5c31\u50cf\u76f8\u4eb2\u65f6\u7684&#8221;\u901a\u7528\u8bed\u8a00&#8221;\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"jsonrpc\": \"2.0\",\n  \"id\": \"unique-request-id-12345\",\n  \"method\": \"tools\/call\",\n  \"params\": {\n    \"name\": \"mcp_time_get_current_time\",\n    \"arguments\": {\n      \"timezone\": \"Asia\/Shanghai\"\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"82-%E6%B5%81%E5%BC%8F%E5%93%8D%E5%BA%94%E5%AE%9E%E6%97%B6%E7%9A%84%E8%A1%A8%E6%83%85%E8%A7%82%E5%AF%9F\">8.2 \u6d41\u5f0f\u54cd\u5e94\uff1a\u5b9e\u65f6\u7684&#8221;\u8868\u60c5&#8221;\u89c2\u5bdf<\/h3>\n\n\n\n<p>\u5ba2\u6237\u7aef\u901a\u8fc7\u6d41\u5f0f\u54cd\u5e94\u5b9e\u65f6\u89c2\u5bdfAI\u7684&#8221;\u8868\u60c5&#8221;\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>async function observeAIExpressions() {\n  const stream = await createStream();\n  \n  for await (const chunk of stream) {\n    <em>\/\/ \u5b9e\u65f6\u89c2\u5bdfAI\u7684\u6bcf\u4e2a\"\u8868\u60c5\"<\/em>\n    if (chunk.choices&#91;0].delta.tool_calls) {\n      console.log(\"\ud83d\ude2e AI\u8981\u8c03\u7528\u5de5\u5177\u4e86\uff01\");\n    }\n    \n    if (chunk.choices&#91;0].delta.content) {\n      console.log(\"\ud83d\ude0a AI\u5728\u8bf4\u8bdd:\", chunk.choices&#91;0].delta.content);\n    }\n    \n    if (chunk.choices&#91;0].finish_reason === \"tool_calls\") {\n      console.log(\"\ud83c\udfaf AI\u786e\u5b9a\u8981\u8c03\u7528\u5de5\u5177\uff01\");\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"83-%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86%E7%9B%B8%E4%BA%B2%E5%A4%B1%E8%B4%A5%E7%9A%84%E5%BA%94%E6%80%A5%E9%A2%84%E6%A1%88\">8.3 \u9519\u8bef\u5904\u7406\uff1a\u76f8\u4eb2\u5931\u8d25\u7684&#8221;\u5e94\u6025\u9884\u6848&#8221;<\/h3>\n\n\n\n<p>\u5f53&#8221;\u76f8\u4eb2&#8221;\u5931\u8d25\u65f6\uff0c\u9700\u8981\u6709\u5e94\u6025\u9884\u6848\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class ToolCallErrorHandler {\n  handleError(error, toolCall) {\n    switch(error.type) {\n      case \"TOOL_NOT_FOUND\":\n        console.log(\"\ud83d\ude22 \u5de5\u5177\u4e0d\u5b58\u5728\uff0cAI\u7684'\u8868\u767d'\u5931\u8d25\u4e86\");\n        break;\n      case \"INVALID_ARGUMENTS\":\n        console.log(\"\ud83d\ude05 AI\u7684'\u8868\u767d'\u683c\u5f0f\u4e0d\u5bf9\");\n        break;\n      case \"TOOL_EXECUTION_ERROR\":\n        console.log(\"\ud83d\udca5 \u5de5\u5177\u6267\u884c\u51fa\u9519\u4e86\");\n        break;\n      case \"NETWORK_ERROR\":\n        console.log(\"\ud83c\udf10 \u7f51\u7edc\u8fde\u63a5\u6709\u95ee\u9898\");\n        break;\n    }\n    \n    <em>\/\/ \u8fd4\u56de\u9519\u8bef\u4fe1\u606f\u7ed9AI<\/em>\n    return {\n      tool_call_id: toolCall.id,\n      role: \"tool\",\n      content: JSON.stringify({error: error.message})\n    };\n  }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E4%B9%9D%E7%AB%A0%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E8%AE%A9%E7%9B%B8%E4%BA%B2%E6%9B%B4%E9%AB%98%E6%95%88\">\u7b2c\u4e5d\u7ae0\uff1a\u6027\u80fd\u4f18\u5316\uff1a\u8ba9\u76f8\u4eb2\u66f4&#8221;\u9ad8\u6548&#8221;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"91-%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%87%8F%E5%B0%91%E7%9B%B8%E4%BA%B2%E6%88%90%E6%9C%AC\">9.1 \u8fde\u63a5\u6c60\uff1a\u51cf\u5c11&#8221;\u76f8\u4eb2&#8221;\u6210\u672c<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>class ConnectionPool {\n  constructor() {\n    this.pool = new Map();\n    this.maxConnections = 10;\n  }\n  \n  async getConnection(toolName) {\n    <em>\/\/ \u590d\u7528\u73b0\u6709\u8fde\u63a5\uff0c\u51cf\u5c11\"\u76f8\u4eb2\"\u6210\u672c<\/em>\n    if (this.pool.has(toolName)) {\n      return this.pool.get(toolName);\n    }\n    \n    <em>\/\/ \u521b\u5efa\u65b0\u8fde\u63a5<\/em>\n    const connection = await this.createConnection(toolName);\n    this.pool.set(toolName, connection);\n    return connection;\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"92-%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6%E9%81%BF%E5%85%8D%E9%87%8D%E5%A4%8D%E7%9B%B8%E4%BA%B2\">9.2 \u7f13\u5b58\u673a\u5236\uff1a\u907f\u514d\u91cd\u590d&#8221;\u76f8\u4eb2&#8221;<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>class ToolCallCache {\n  constructor() {\n    this.cache = new Map();\n    this.ttl = 60000; <em>\/\/ 1\u5206\u949f\u7f13\u5b58<\/em>\n  }\n  \n  getCacheKey(toolName, arguments) {\n    return `${toolName}:${JSON.stringify(arguments)}`;\n  }\n  \n  async callTool(toolName, arguments) {\n    const key = this.getCacheKey(toolName, arguments);\n    \n    <em>\/\/ \u68c0\u67e5\u7f13\u5b58<\/em>\n    if (this.cache.has(key)) {\n      const cached = this.cache.get(key);\n      if (Date.now() - cached.timestamp &lt; this.ttl) {\n        console.log(\"\ud83c\udfaf \u4f7f\u7528\u7f13\u5b58\u7ed3\u679c\uff0c\u907f\u514d\u91cd\u590d'\u76f8\u4eb2'\");\n        return cached.result;\n      }\n    }\n    \n    <em>\/\/ \u6267\u884c\u5de5\u5177\u8c03\u7528<\/em>\n    const result = await this.executeTool(toolName, arguments);\n    \n    <em>\/\/ \u7f13\u5b58\u7ed3\u679c<\/em>\n    this.cache.set(key, {\n      result: result,\n      timestamp: Date.now()\n    });\n    \n    return result;\n  }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%AC%AC%E5%8D%81%E7%AB%A0%E6%9C%AA%E6%9D%A5%E5%B1%95%E6%9C%9B%E7%9B%B8%E4%BA%B2%E7%9A%84%E5%8D%87%E7%BA%A7%E7%89%88\">\u7b2c\u5341\u7ae0\uff1a\u672a\u6765\u5c55\u671b\uff1a\u76f8\u4eb2\u7684&#8221;\u5347\u7ea7\u7248&#8221;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"101-%E6%89%B9%E9%87%8F%E5%B7%A5%E5%85%B7%E8%B0%83%E7%94%A8%E7%BE%A4%E7%9B%B8%E4%BA%B2\">10.1 \u6279\u91cf\u5de5\u5177\u8c03\u7528\uff1a\u7fa4&#8221;\u76f8\u4eb2&#8221;<\/h3>\n\n\n\n<p>\u672a\u6765\u53ef\u80fd\u4f1a\u652f\u6301\u6279\u91cf\u5de5\u5177\u8c03\u7528\uff0c\u5c31\u50cfAI\u540c\u65f6\u548c\u591a\u4e2a\u5de5\u5177&#8221;\u76f8\u4eb2&#8221;\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"tool_calls\": &#91;\n    {\n      \"id\": \"call_1\",\n      \"function\": {\"name\": \"get_time\", \"arguments\": \"{\\\"timezone\\\":\\\"Asia\/Shanghai\\\"}\"}\n    },\n    {\n      \"id\": \"call_2\", \n      \"function\": {\"name\": \"get_weather\", \"arguments\": \"{\\\"location\\\":\\\"Shanghai\\\"}\"}\n    }\n  ]\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"102-%E5%B7%A5%E5%85%B7%E9%93%BE%E8%B0%83%E7%94%A8%E7%9B%B8%E4%BA%B2%E7%9A%84%E8%BF%9E%E9%94%81%E5%8F%8D%E5%BA%94\">10.2 \u5de5\u5177\u94fe\u8c03\u7528\uff1a\u76f8\u4eb2\u7684&#8221;\u8fde\u9501\u53cd\u5e94&#8221;<\/h3>\n\n\n\n<p>AI\u53ef\u80fd\u4f1a\u8c03\u7528\u4e00\u4e2a\u5de5\u5177\uff0c\u7136\u540e\u6839\u636e\u7ed3\u679c\u518d\u8c03\u7528\u53e6\u4e00\u4e2a\u5de5\u5177\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u7528\u6237: \"\u4eca\u5929\u4e0a\u6d77\u5929\u6c14\u5982\u4f55\uff1f\"\n    \u2193\nAI: \u8c03\u7528\u5929\u6c14\u5de5\u5177\u83b7\u53d6\u5929\u6c14\u4fe1\u606f\n    \u2193\n\u5de5\u5177: \u8fd4\u56de\u5929\u6c14\u6570\u636e\n    \u2193\nAI: \u6839\u636e\u5929\u6c14\u6570\u636e\uff0c\u8c03\u7528\u7a7f\u8863\u5efa\u8bae\u5de5\u5177\n    \u2193\n\u5de5\u5177: \u8fd4\u56de\u7a7f\u8863\u5efa\u8bae\n    \u2193\nAI: \u7efc\u5408\u4e24\u4e2a\u5de5\u5177\u7684\u7ed3\u679c\uff0c\u7ed9\u51fa\u5b8c\u6574\u56de\u7b54\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E7%BB%93%E8%AF%AD%E7%9B%B8%E4%BA%B2%E6%88%90%E5%8A%9F%E7%9A%84%E7%A7%98%E8%AF%80\">\u7ed3\u8bed\uff1a\u76f8\u4eb2\u6210\u529f\u7684\u79d8\u8bc0<\/h2>\n\n\n\n<p>\u901a\u8fc7\u8fd9\u573a&#8221;\u76f8\u4eb2&#8221;\u4e4b\u65c5\uff0c\u6211\u4eec\u770b\u5230\u4e86\u5927\u6a21\u578b\u5de5\u5177\u8c03\u7528\u7684\u5b8c\u6574\u673a\u5236\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5de5\u5177\u6ce8\u518c<\/strong>\uff1a\u5efa\u7acb&#8221;\u76f8\u4eb2\u6863\u6848&#8221;<\/li>\n\n\n\n<li><strong>\u9700\u6c42\u5206\u6790<\/strong>\uff1aAI\u7684&#8221;\u76f8\u4eb2&#8221;\u51b3\u7b56<\/li>\n\n\n\n<li><strong>\u5de5\u5177\u8c03\u7528<\/strong>\uff1aAI\u7684&#8221;\u8868\u767d&#8221;\u8fc7\u7a0b<\/li>\n\n\n\n<li><strong>\u5ba2\u6237\u7aef\u76d1\u542c<\/strong>\uff1a\u5c3d\u804c\u7684&#8221;\u5a92\u4eba&#8221;<\/li>\n\n\n\n<li><strong>\u5de5\u5177\u6267\u884c<\/strong>\uff1a\u5de5\u5177\u7684&#8221;\u56de\u5e94&#8221;<\/li>\n\n\n\n<li><strong>\u7ed3\u679c\u5904\u7406<\/strong>\uff1a\u5904\u7406&#8221;\u7ea6\u4f1a&#8221;\u7ed3\u679c<\/li>\n\n\n\n<li><strong>\u6700\u7ec8\u54cd\u5e94<\/strong>\uff1aAI\u7684&#8221;\u7ea6\u4f1a&#8221;\u603b\u7ed3<\/li>\n<\/ol>\n\n\n\n<p>\u8fd9\u573a&#8221;\u76f8\u4eb2&#8221;\u7684\u6210\u529f\uff0c\u79bb\u4e0d\u5f00\u6bcf\u4e2a\u73af\u8282\u7684\u7cbe\u5fc3\u914d\u5408\u3002\u5ba2\u6237\u7aef\u5c31\u50cf\u5c3d\u804c\u7684&#8221;\u5a92\u4eba&#8221;\uff0c\u65f6\u523b\u5173\u6ce8\u7740AI\u7684&#8221;\u8868\u60c5&#8221;\uff1b\u5de5\u5177\u5c31\u50cf\u70ed\u60c5\u7684&#8221;\u76f8\u4eb2\u5bf9\u8c61&#8221;\uff0c\u53ca\u65f6\u56de\u5e94AI\u7684&#8221;\u8868\u767d&#8221;\uff1b\u800cAI\u5219\u50cf\u4e00\u4e2a\u806a\u660e\u7684&#8221;\u76f8\u4eb2\u8005&#8221;\uff0c\u77e5\u9053\u4ec0\u4e48\u65f6\u5019\u9700\u8981&#8221;\u8868\u767d&#8221;\uff0c\u4ec0\u4e48\u65f6\u5019\u9700\u8981&#8221;\u804a\u5929&#8221;\u3002<\/p>\n\n\n\n<p>\u672a\u6765\uff0c\u968f\u7740\u6280\u672f\u7684\u53d1\u5c55\uff0c\u8fd9\u573a&#8221;\u76f8\u4eb2&#8221;\u4f1a\u53d8\u5f97\u66f4\u52a0\u667a\u80fd\u3001\u9ad8\u6548\uff0cAI\u548c\u5de5\u5177\u4e4b\u95f4\u7684&#8221;\u914d\u5408&#8221;\u4e5f\u4f1a\u66f4\u52a0\u9ed8\u5951\u3002\u8ba9\u6211\u4eec\u671f\u5f85\u8fd9\u573a&#8221;\u76f8\u4eb2&#8221;\u7684\u5347\u7ea7\u7248\u5427\uff01<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>&#8220;\u5728AI\u7684\u4e16\u754c\u91cc\uff0c\u6bcf\u4e00\u6b21\u5de5\u5177\u8c03\u7528\u90fd\u662f\u4e00\u573a\u7cbe\u5fc3\u7b56\u5212\u7684&#8217;\u76f8\u4eb2&#8217;\u3002\u613f\u6bcf\u4e2aAI\u90fd\u80fd\u627e\u5230\u5c5e\u4e8e\u81ea\u5df1\u7684\u5b8c\u7f8e\u5de5\u5177\uff01&#8221;<\/em>&nbsp;\ud83d\udc95<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%E9%99%84%E5%BD%95%E6%8A%80%E6%9C%AF%E6%9C%AF%E8%AF%AD%E5%AF%B9%E7%85%A7%E8%A1%A8\">\u9644\u5f55\uff1a\u6280\u672f\u672f\u8bed\u5bf9\u7167\u8868<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6280\u672f\u672f\u8bed<\/th><th>\u76f8\u4eb2\u672f\u8bed<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>Tool Call<\/td><td>\u8868\u767d<\/td><td>AI\u5411\u5de5\u5177\u53d1\u9001\u8bf7\u6c42<\/td><\/tr><tr><td>Tool Registry<\/td><td>\u76f8\u4eb2\u6863\u6848<\/td><td>\u5de5\u5177\u7684\u63cf\u8ff0\u548c\u53c2\u6570<\/td><\/tr><tr><td>Client<\/td><td>\u5a92\u4eba<\/td><td>\u8d1f\u8d23\u534f\u8c03AI\u548c\u5de5\u5177<\/td><\/tr><tr><td>Stream Response<\/td><td>\u5b9e\u65f6\u8868\u60c5<\/td><td>\u6d41\u5f0f\u54cd\u5e94\u4e2d\u7684\u6bcf\u4e2achunk<\/td><\/tr><tr><td>JSON-RPC<\/td><td>\u901a\u7528\u8bed\u8a00<\/td><td>\u5de5\u5177\u8c03\u7528\u7684\u534f\u8bae\u683c\u5f0f<\/td><\/tr><tr><td>Error Handling<\/td><td>\u5e94\u6025\u9884\u6848<\/td><td>\u5904\u7406\u76f8\u4eb2\u5931\u8d25\u7684\u60c5\u51b5<\/td><\/tr><tr><td>Caching<\/td><td>\u907f\u514d\u91cd\u590d\u76f8\u4eb2<\/td><td>\u7f13\u5b58\u673a\u5236\u4f18\u5316\u6027\u80fd<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>\u672c\u6587\u7eaf\u5c5e\u6280\u672f\u5206\u4eab\uff0c\u5982\u6709\u96f7\u540c\uff0c\u7eaf\u5c5e\u5de7\u5408\u3002\u613f\u6bcf\u4e2a\u7a0b\u5e8f\u5458\u90fd\u80fd\u627e\u5230\u5c5e\u4e8e\u81ea\u5df1\u7684&#8221;\u5de5\u5177\u4f34\u4fa3&#8221;\uff01<\/em>&nbsp;\ud83d\ude80<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5927\u6a21\u578b\u5de5\u5177\u8c03\u7528\uff1a\u4e00\u573aAI\u4e0e\u5de5\u5177\u7684&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[81,4],"tags":[73,82,69],"class_list":["post-2557","post","type-post","status-publish","format-standard","hentry","category-ai","category-4","tag-ai","tag-mcp","tag-69"],"_links":{"self":[{"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/posts\/2557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/comments?post=2557"}],"version-history":[{"count":1,"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/posts\/2557\/revisions"}],"predecessor-version":[{"id":2558,"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/posts\/2557\/revisions\/2558"}],"wp:attachment":[{"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/media?parent=2557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/categories?post=2557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sanlangcode.com\/index.php\/wp-json\/wp\/v2\/tags?post=2557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}