{"id":3876,"date":"2026-08-27T07:52:20","date_gmt":"2026-08-26T23:52:20","guid":{"rendered":"https:\/\/ai.zhousir.top\/?p=3876"},"modified":"2026-08-27T07:52:20","modified_gmt":"2026-08-26T23:52:20","slug":"langchain-%e5%a4%9a-agent-%e5%ae%9e%e6%88%98%ef%bc%9a%e7%a0%94%e7%a9%b6%e5%91%98%e3%80%81%e5%86%99%e6%89%8b%e3%80%81%e7%bc%96%e8%be%91%e5%88%86%e5%b7%a5%e5%8d%8f%e4%bd%9c","status":"publish","type":"post","link":"https:\/\/ai.zhousir.top\/?p=3876","title":{"rendered":"LangChain \u591a Agent \u5b9e\u6218\uff1a\u7814\u7a76\u5458\u3001\u5199\u624b\u3001\u7f16\u8f91\u5206\u5de5\u534f\u4f5c"},"content":{"rendered":"<section id=\"wenyan\" style=\"font-family: system-ui, 'Apple Color Emoji', 'Segoe UI', 'Segoe UI Symbol', 'Noto Sans', Roboto, sans-serif; line-height: 1.75; font-size: 16px; color: #000000; caret-color: #000000;\" data-provider=\"WenYan\">\n<blockquote style=\"margin: 20px 0px; display: block; font-size: 0.9em; overflow: auto; border-left: 3px solid #ef7060; color: #6a737d; padding: 10px 10px 10px 20px; background: #fff9f9;\">\n<p style=\"margin: 1em 0px;\">\u4e0a\u7bc7\u4f60\u7ed9\u5355\u4e2a Agent \u88c5\u4e0a\u4e86 Middleware\u2014\u2014\u8131\u654f\u3001\u9650\u6d41\u3001\u6458\u8981\u3001\u4eba\u5ba1\u90fd\u80fd\u6302\u94a9\u5b50\u3002\u53ef\u5f53\u4efb\u52a1\u8981\u300c\u7814\u7a76 + \u5199\u4f5c + \u5ba1\u7a3f\u300d\u591a\u79cd\u4eba\u8bbe\u65f6\uff0c\u4e00\u4e2a <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">create_agent<\/code> \u518d\u600e\u4e48\u52a0\u4e2d\u95f4\u4ef6\uff0c\u6587\u98ce\u4ecd\u5bb9\u6613\u6253\u67b6\u3002\u8fd9\u7bc7\u8bb2 <strong>Multi Agent<\/strong>\uff1a\u5916\u5c42 Orchestrator \u7f16\u6392\uff0c\u5185\u5c42\u6bcf\u4e2a Worker \u7528 <strong>LangChain <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">create_agent<\/code><\/strong> \u5b9e\u73b0\u3002\u3002<\/p>\n<\/blockquote>\n<hr \/>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid #ef7060; display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: #ef7060; color: #ffffff; padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u5c0f\u660e\u7528\u4e00\u4e2a Agent \u5199\u5b8c\u6574\u7bc7\u6587\u7ae0<\/span><\/h2>\n<p style=\"margin: 1em 0px;\">\u5b66\u5b8c LangChain \u652f\u7ebf\u524d\u534a\u6bb5\uff0c\u5c0f\u660e\u81ea\u4fe1\u6ee1\u6ee1\uff1a<\/p>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">agent\u00a0=\u00a0create_agent(\n\u00a0\u00a0model,\n\u00a0\u00a0tools=[search,\u00a0...],\n\u00a0\u00a0system_prompt=<span class=\"hljs-string\" style=\"color: #859900;\">\"\u4f60\u65e2\u662f\u7814\u7a76\u5458\u53c8\u662f\u5199\u624b\u53c8\u662f\u7f16\u8f91\u2026\u2026\"<\/span>,\n\u00a0\u00a0middleware=[...],\n)\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u4ed6\u4e22\u8fdb\u53bb\uff1a\u300c\u5199\u4e00\u7bc7\u5173\u4e8e\u4eba\u5de5\u667a\u80fd\u7684\u79d1\u666e\u6587\u300d\u3002\u51fa\u6765\u7684\u7a3f\u5b50\uff1a\u5f00\u5934\u50cf\u8bba\u6587\u6458\u8981\uff0c\u4e2d\u95f4\u7a81\u7136\u9e21\u6c64\uff0c\u7ed3\u5c3e\u53c8\u53d8\u8bf4\u660e\u4e66\u3002Middleware \u7ba1\u5f97\u4e86 PII\uff0c\u7ba1\u4e0d\u4e86\u300c\u4e00\u4eba\u5206\u9970\u4e09\u89d2\u300d\u3002<\/p>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u53bb\u627e\u8001\u5f20\uff1a&#8221;\u90a3\u662f\u4e0d\u662f\u53c8\u8981\u9000\u56de\u539f\u751f OpenAI <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">chat.completions<\/code> \u624b\u5199\u591a Agent\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u8bf4\uff1a&#8221;\u4e0d\u7528\u9000\u3002<strong>\u7ec4\u7ec7\u65b9\u5f0f<\/strong>\u7528 Orchestrator + Task \u534f\u8bae\uff1b<strong>\u6bcf\u4e00\u73af Worker<\/strong> \u7ee7\u7eed\u7528\u4f60\u719f\u6089\u7684 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">create_agent<\/code>\u2014\u2014\u53ea\u662f <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">tools=[]<\/code>\u3001\u6362\u4e13\u5c5e <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">system_prompt<\/code> \u548c\u6e29\u5ea6\u3002\u539f\u751f\u5199\u4f5c\u52a9\u624b\u662f\u540c\u4e00\u5957\u6d41\u6c34\u7ebf\uff1b\u672c\u7bc7\u628a\u5b83\u8fc1\u5230 LangChain \u6280\u672f\u6808\u3002&#8221;<\/p>\n<hr \/>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid #ef7060; display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: #ef7060; color: #ffffff; padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4ec0\u4e48\u662f Multi Agent\uff08LangChain \u7248\uff09<\/span><\/h2>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\u7528\u6237\u8f93\u5165\n\u00a0\u00a0\u00a0\u2193\n[Orchestrator]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u7eaf\u00a0Python\u00a0\u8c03\u5ea6\uff1a\u6d3e\u6d3b\u00a0\/\u00a0\u4f20\u00a0context\u00a0\/\u00a0\u91cd\u8bd5\u00a0\/\u00a0\u964d\u7ea7\n\u00a0\u00a0\u00a0\u2193\n[Researcher]\u00a0\u00a0create_agent(tools=[],\u00a0system=\u7814\u7a76\u5458,\u00a0t=0.3)\u00a0\u2192\u00a0research_output\n\u00a0\u00a0\u00a0\u2193\n[Writer]\u00a0\u00a0\u00a0\u00a0create_agent(tools=[],\u00a0system=\u5199\u624b,\u00a0\u00a0\u00a0t=0.8)\u00a0\u2192\u00a0draft\n\u00a0\u00a0\u00a0\u2193\n[Editor]\u00a0\u00a0\u00a0\u00a0create_agent(tools=[],\u00a0system=\u7f16\u8f91,\u00a0\u00a0\u00a0t=0.4)\u00a0\u2192\u00a0\u7ec8\u7a3f\n<\/code><\/pre>\n<table style=\"border-collapse: collapse; margin: 1.4em auto; max-width: 100%; table-layout: fixed; text-align: left; overflow: auto; display: table; overflow-wrap: break-word; word-break: break-all; height: 90px;\" width=\"623\">\n<thead>\n<tr>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top; font-weight: bold; background-color: #fff9f9; color: #ef7060;\">\u7ef4\u5ea6<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top; font-weight: bold; background-color: #fff9f9; color: #ef7060;\">\u5355 create_agent<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top; font-weight: bold; background-color: #fff9f9; color: #ef7060;\">\u591a Agent\uff08\u672c\u8bfe\uff09<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u4eba\u8bbe<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u4e00\u4e2a system_prompt<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u6bcf\u4e2a Worker \u4e00\u4e2a create_agent<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u5927\u8111<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u4e00\u4e2a model<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u5404 Worker \u53ef\u4e0d\u540c temperature<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u4ea4\u63a5<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u57cb\u5728 messages<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">Task.context \u663e\u5f0f\u4f20<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">\u5b9e\u73b0<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\">LangChain<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid #ef7060; vertical-align: top;\"><strong>\u4ecd\u662f LangChain<\/strong> + \u5916\u5c42\u7f16\u6392<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 1em 0px;\">\u76ee\u5f55\uff1a<\/p>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">courseware-langchain\/multi-agent-writing\/\n\u251c\u2500\u2500\u00a0main.py\n\u251c\u2500\u2500\u00a0llm.py\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0#\u00a0ChatOpenAI\u00a0\u5de5\u5382\n\u251c\u2500\u2500\u00a0protocol.py\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0#\u00a0Task\u00a0\/\u00a0TaskResult\n\u2514\u2500\u2500\u00a0agents\/\n\u00a0\u00a0\u251c\u2500\u2500\u00a0orchestrator.py\n\u00a0\u00a0\u251c\u2500\u2500\u00a0researcher.py\n\u00a0\u00a0\u251c\u2500\u2500\u00a0writer.py\n\u00a0\u00a0\u251c\u2500\u2500\u00a0editor.py\n\u00a0\u00a0\u2514\u2500\u2500\u00a0worker_util.py\u00a0\u00a0\u00a0#\u00a0invoke\u00a0\u2192\u00a0\u53d6\u6700\u7ec8\u6587\u672c\n<\/code><\/pre>\n<hr \/>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid #ef7060; display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: #ef7060; color: #ffffff; padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u5b8c\u6574\u5b9e\u73b0\uff1a\u4ece\u5de5\u5382\u5230\u6d41\u6c34\u7ebf<\/span><\/h2>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\">1. <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #ef7060;\">llm.py<\/code>\uff1aLangChain \u6a21\u578b\u5de5\u5382<\/h3>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\"><span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\u591a\u00a0Agent\u00a0\u5199\u4f5c\u52a9\u624b\uff1a\u6a21\u578b\u5de5\u5382\uff08LangChain\u00a0ChatOpenAI\uff09\u3002\"\"\"<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0__future__\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0annotations\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0os\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0dotenv\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0load_dotenv\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0langchain_openai\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0ChatOpenAI\n\nload_dotenv()\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">get_chat_model<\/span>(<span class=\"hljs-params\">*,\u00a0temperature:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">float<\/span>\u00a0=\u00a0<span class=\"hljs-number\" style=\"color: #cb4b16;\">0.7<\/span><\/span>)\u00a0-&gt;\u00a0ChatOpenAI:\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0ChatOpenAI(\n\u00a0\u00a0\u00a0\u00a0model=os.environ.get(<span class=\"hljs-string\" style=\"color: #859900;\">\"OPENAI_MODEL\"<\/span>,\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"qwen-plus\"<\/span>),\n\u00a0\u00a0\u00a0\u00a0api_key=os.environ[<span class=\"hljs-string\" style=\"color: #859900;\">\"OPENAI_API_KEY\"<\/span>],\n\u00a0\u00a0\u00a0\u00a0base_url=os.environ.get(<span class=\"hljs-string\" style=\"color: #859900;\">\"OPENAI_BASE_URL\"<\/span>),\n\u00a0\u00a0\u00a0\u00a0temperature=temperature,\n\u00a0\u00a0)\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">&#8220;\u6362\u7aef\u6539 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">.env<\/code>\uff0c\u4e0d\u6539 Worker\u3002&#8221;<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\">2. <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #ef7060;\">protocol.py<\/code>\uff1aTask \/ TaskResult\uff08\u7f16\u6392\u5c42\uff0c\u4e0e\u6846\u67b6\u65e0\u5173\uff09<\/h3>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\"><span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"Agent\u00a0\u95f4\u901a\u4fe1\u534f\u8bae\uff1aTask\u00a0\/\u00a0TaskResult\u3002\"\"\"<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0__future__\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0annotations\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0time\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0uuid\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0dataclasses\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0dataclass,\u00a0field\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0enum\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0Enum\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0typing\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0<span class=\"hljs-type\" style=\"color: #6c71c4;\">Any<\/span>\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">class<\/span>\u00a0<span class=\"hljs-title class_\" style=\"color: #b58900;\">TaskStatus<\/span>(<span class=\"hljs-title class_ inherited__\" style=\"color: #859900;\">Enum<\/span>):\n\u00a0\u00a0DONE\u00a0=\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"done\"<\/span>\n\u00a0\u00a0FAILED\u00a0=\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"failed\"<\/span>\n\n\n<span class=\"hljs-meta\" style=\"color: #d33682;\">@dataclass<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">class<\/span>\u00a0<span class=\"hljs-title class_\" style=\"color: #b58900;\">Task<\/span>:\n\u00a0\u00a0task_id:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>\n\u00a0\u00a0agent_name:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>\n\u00a0\u00a0instruction:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>\n\u00a0\u00a0context:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">dict<\/span>[<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>,\u00a0<span class=\"hljs-type\" style=\"color: #6c71c4;\">Any<\/span>]\u00a0=\u00a0field(default_factory=<span class=\"hljs-built_in\" style=\"color: #2aa198;\">dict<\/span>)\n\u00a0\u00a0created_at:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">float<\/span>\u00a0=\u00a0field(default_factory=time.time)\n\n<span class=\"hljs-meta\" style=\"color: #d33682;\">\u00a0\u00a0@classmethod<\/span>\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">new<\/span>(<span class=\"hljs-params\">cls,\u00a0agent_name:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>,\u00a0instruction:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>,\u00a0**context:\u00a0<span class=\"hljs-type\" style=\"color: #6c71c4;\">Any<\/span><\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"Task\"<\/span>:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0cls(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0task_id=<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>(uuid.uuid4())[:<span class=\"hljs-number\" style=\"color: #cb4b16;\">8<\/span>],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent_name=agent_name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0instruction=instruction,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0context=<span class=\"hljs-built_in\" style=\"color: #2aa198;\">dict<\/span>(context),\n\u00a0\u00a0\u00a0\u00a0)\n\n\n<span class=\"hljs-meta\" style=\"color: #d33682;\">@dataclass<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">class<\/span>\u00a0<span class=\"hljs-title class_\" style=\"color: #b58900;\">TaskResult<\/span>:\n\u00a0\u00a0task_id:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>\n\u00a0\u00a0agent_name:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>\n\u00a0\u00a0status:\u00a0TaskStatus\n\u00a0\u00a0output:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>\n\u00a0\u00a0duration_ms:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">int<\/span>\u00a0=\u00a0<span class=\"hljs-number\" style=\"color: #cb4b16;\">0<\/span>\n\u00a0\u00a0metadata:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">dict<\/span>[<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>,\u00a0<span class=\"hljs-type\" style=\"color: #6c71c4;\">Any<\/span>]\u00a0=\u00a0field(default_factory=<span class=\"hljs-built_in\" style=\"color: #2aa198;\">dict<\/span>)\n\n<span class=\"hljs-meta\" style=\"color: #d33682;\">\u00a0\u00a0@classmethod<\/span>\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">success<\/span>(<span class=\"hljs-params\">cls,\u00a0task:\u00a0Task,\u00a0output:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>,\u00a0**metadata:\u00a0<span class=\"hljs-type\" style=\"color: #6c71c4;\">Any<\/span><\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"TaskResult\"<\/span>:\n\u00a0\u00a0\u00a0\u00a0ms\u00a0=\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">int<\/span>((time.time()\u00a0-\u00a0task.created_at)\u00a0*\u00a0<span class=\"hljs-number\" style=\"color: #cb4b16;\">1000<\/span>)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0cls(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0task_id=task.task_id,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent_name=task.agent_name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0status=TaskStatus.DONE,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output=output,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0duration_ms=ms,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0metadata=<span class=\"hljs-built_in\" style=\"color: #2aa198;\">dict<\/span>(metadata),\n\u00a0\u00a0\u00a0\u00a0)\n\n<span class=\"hljs-meta\" style=\"color: #d33682;\">\u00a0\u00a0@classmethod<\/span>\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">failure<\/span>(<span class=\"hljs-params\">cls,\u00a0task:\u00a0Task,\u00a0reason:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span><\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"TaskResult\"<\/span>:\n\u00a0\u00a0\u00a0\u00a0ms\u00a0=\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">int<\/span>((time.time()\u00a0-\u00a0task.created_at)\u00a0*\u00a0<span class=\"hljs-number\" style=\"color: #cb4b16;\">1000<\/span>)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0cls(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0task_id=task.task_id,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent_name=task.agent_name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0status=TaskStatus.FAILED,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output=reason,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0duration_ms=ms,\n\u00a0\u00a0\u00a0\u00a0)\n\n<span class=\"hljs-meta\" style=\"color: #d33682;\">\u00a0\u00a0@property<\/span>\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">ok<\/span>(<span class=\"hljs-params\">self<\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">bool<\/span>:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>.status\u00a0==\u00a0TaskStatus.DONE\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">&#8220;Worker \u4e0d\u4e92\u76f8 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">import<\/code>\u3002\u53ea\u6536 Task\u3001\u56de TaskResult\u3002<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">research_output<\/code> \/ <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">draft<\/code> \u653e\u8fdb <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">context<\/code>\u3002&#8221;<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\">3. <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #ef7060;\">worker_util.py<\/code>\uff1a\u7edf\u4e00 invoke \u53d6\u6b63\u6587<\/h3>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\"><span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"Worker\u00a0\u5171\u7528\uff1a\u7528\u00a0create_agent\u00a0\u8dd1\u4e00\u8f6e\u5e76\u53d6\u51fa\u6700\u7ec8\u6587\u672c\u3002\"\"\"<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0__future__\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0annotations\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0typing\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0<span class=\"hljs-type\" style=\"color: #6c71c4;\">Any<\/span>\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">invoke_agent_text<\/span>(<span class=\"hljs-params\">agent:\u00a0<span class=\"hljs-type\" style=\"color: #6c71c4;\">Any<\/span>,\u00a0user_content:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span><\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>:\n\u00a0\u00a0result\u00a0=\u00a0agent.invoke({<span class=\"hljs-string\" style=\"color: #859900;\">\"messages\"<\/span>:\u00a0[{<span class=\"hljs-string\" style=\"color: #859900;\">\"role\"<\/span>:\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"user\"<\/span>,\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"content\"<\/span>:\u00a0user_content}]})\n\u00a0\u00a0last\u00a0=\u00a0result[<span class=\"hljs-string\" style=\"color: #859900;\">\"messages\"<\/span>][-<span class=\"hljs-number\" style=\"color: #cb4b16;\">1<\/span>]\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">getattr<\/span>(last,\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"content\"<\/span>,\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>(last))\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">or<\/span>\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"\"<\/span>\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">&#8220;\u548c\u5feb\u901f\u5165\u95e8\u7bc7\u540c\u4e00\u8c03\u7528\u59ff\u52bf\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">invoke({\\\"messages\\\": [...]})<\/code>\u3002&#8221;<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\">4. Researcher\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #ef7060;\">create_agent<\/code> + \u4f4e\u6e29<\/h3>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\"><span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\u7814\u7a76\u5458\u00a0Worker\uff1aLangChain\u00a0create_agent\uff08\u65e0\u5de5\u5177\uff0c\u4e13\u5c5e\u00a0system_prompt\uff09\u3002\"\"\"<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0__future__\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0annotations\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0langchain.agents\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0create_agent\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0agents.worker_util\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0invoke_agent_text\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0llm\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0get_chat_model\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0protocol\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0Task,\u00a0TaskResult\n\n_SYSTEM\u00a0=\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\\\n\u4f60\u662f\u4e00\u4f4d\u7ecf\u9a8c\u4e30\u5bcc\u7684\u5185\u5bb9\u7814\u7a76\u5458\u3002\n\u7528\u6237\u4f1a\u7ed9\u4f60\u4e00\u4e2a\u5199\u4f5c\u4e3b\u9898\uff0c\u4f60\u7684\u4efb\u52a1\u662f\uff1a\n1.\u00a0\u5206\u6790\u8be5\u4e3b\u9898\u7684\u6838\u5fc3\u89d2\u5ea6\u548c\u80cc\u666f\n2.\u00a0\u6574\u7406\u51fa\u00a05-8\u00a0\u4e2a\u8bfb\u8005\u6700\u9700\u8981\u4e86\u89e3\u7684\u5173\u952e\u8981\u70b9\n3.\u00a0\u7ed9\u51fa\u5199\u4f5c\u65b9\u5411\u5efa\u8bae\uff1a\u53d7\u4f17\u5b9a\u4f4d\u3001\u884c\u6587\u8bed\u6c14\u3001\u91cd\u70b9\u7a81\u51fa\u54ea\u4e9b\u65b9\u9762\n\n\u76f4\u63a5\u8f93\u51fa\u5206\u6790\u5185\u5bb9\uff0c\u81ea\u7136\u6d41\u7545\u5730\u8868\u8fbe\uff0c\u4e0d\u9700\u8981\u00a0JSON\u00a0\u683c\u5f0f\u3002\n\"\"\"<\/span>\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">class<\/span>\u00a0<span class=\"hljs-title class_\" style=\"color: #b58900;\">ResearcherAgent<\/span>:\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-literal\" style=\"color: #cb4b16;\">None<\/span>:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._agent\u00a0=\u00a0create_agent(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0get_chat_model(temperature=<span class=\"hljs-number\" style=\"color: #cb4b16;\">0.3<\/span>),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0tools=[],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0system_prompt=_SYSTEM,\n\u00a0\u00a0\u00a0\u00a0)\n\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">run<\/span>(<span class=\"hljs-params\">self,\u00a0task:\u00a0Task<\/span>)\u00a0-&gt;\u00a0TaskResult:\n\u00a0\u00a0\u00a0\u00a0prompt\u00a0=\u00a0(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">f\"\u5199\u4f5c\u4e3b\u9898\uff1a<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{task.instruction}<\/span>\\n\\n\"<\/span>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"\u8bf7\u5e2e\u6211\u5206\u6790\u8fd9\u4e2a\u4e3b\u9898\uff0c\u6574\u7406\u5173\u952e\u8981\u70b9\u548c\u5199\u4f5c\u5efa\u8bae\u3002\"<\/span>\n\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">try<\/span>:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0output\u00a0=\u00a0invoke_agent_text(<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._agent,\u00a0prompt)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0TaskResult.success(task,\u00a0output=output)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">except<\/span>\u00a0Exception\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">as<\/span>\u00a0e:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0TaskResult.failure(task,\u00a0reason=<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>(e))\n<\/code><\/pre>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\">5. Writer\uff1a\u5403 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #ef7060;\">research_output<\/code>\uff0c\u9ad8\u6e29\u521b\u4f5c<\/h3>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\"><span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\u5199\u4f5c\u00a0Worker\uff1a\u57fa\u4e8e\u7814\u7a76\u62a5\u544a\u51fa\u521d\u7a3f\u3002\"\"\"<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0__future__\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0annotations\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0langchain.agents\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0create_agent\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0agents.worker_util\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0invoke_agent_text\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0llm\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0get_chat_model\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0protocol\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0Task,\u00a0TaskResult\n\n_SYSTEM\u00a0=\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\\\n\u4f60\u662f\u4e00\u4f4d\u7ecf\u9a8c\u4e30\u5bcc\u7684\u5185\u5bb9\u521b\u4f5c\u8005\uff0c\u64c5\u957f\u5c06\u590d\u6742\u77e5\u8bc6\u5199\u6210\u6e05\u6670\u6613\u61c2\u7684\u6587\u7ae0\u3002\n\n\u5199\u4f5c\u539f\u5219\uff1a\n-\u00a0\u5f00\u7bc7\u7528\u4e00\u4e2a\u5177\u4f53\u573a\u666f\u6216\u95ee\u9898\u6293\u4f4f\u8bfb\u8005\n-\u00a0\u903b\u8f91\u6e05\u6670\uff0c\u6bcf\u6bb5\u53ea\u56f4\u7ed5\u4e00\u4e2a\u6838\u5fc3\u89c2\u70b9\u5c55\u5f00\n-\u00a0\u7528\u7c7b\u6bd4\u548c\u4f8b\u5b50\u89e3\u91ca\u62bd\u8c61\u6982\u5ff5\uff0c\u8ba9\u666e\u901a\u8bfb\u8005\u4e5f\u80fd\u770b\u61c2\n-\u00a0\u7ed3\u5c3e\u7ed9\u8bfb\u8005\u7559\u4e0b\u660e\u786e\u7684\u601d\u8003\u65b9\u5411\u6216\u884c\u52a8\u5efa\u8bae\n-\u00a0\u8bed\u8a00\u81ea\u7136\u6d41\u7545\uff0c\u907f\u514d\u300c\u9996\u5148\u3001\u5176\u6b21\u3001\u6700\u540e\u300d\u7b49\u5957\u8bdd\n\n\u76f4\u63a5\u8f93\u51fa\u6587\u7ae0\u6b63\u6587\uff0c\u4e0d\u8981\u52a0\u4efb\u4f55\u8bf4\u660e\u6027\u524d\u7f00\u3002\n\"\"\"<\/span>\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">class<\/span>\u00a0<span class=\"hljs-title class_\" style=\"color: #b58900;\">WriterAgent<\/span>:\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-literal\" style=\"color: #cb4b16;\">None<\/span>:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._agent\u00a0=\u00a0create_agent(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0get_chat_model(temperature=<span class=\"hljs-number\" style=\"color: #cb4b16;\">0.8<\/span>),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0tools=[],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0system_prompt=_SYSTEM,\n\u00a0\u00a0\u00a0\u00a0)\n\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">run<\/span>(<span class=\"hljs-params\">self,\u00a0task:\u00a0Task<\/span>)\u00a0-&gt;\u00a0TaskResult:\n\u00a0\u00a0\u00a0\u00a0research\u00a0=\u00a0task.context.get(<span class=\"hljs-string\" style=\"color: #859900;\">\"research_output\"<\/span>,\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"\uff08\u65e0\u7814\u7a76\u8d44\u6599\uff09\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0prompt\u00a0=\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">f\"\"\"\\\n\u5199\u4f5c\u4e3b\u9898\uff1a<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{task.instruction}<\/span>\n\n\u4ee5\u4e0b\u662f\u7814\u7a76\u5458\u6574\u7406\u7684\u53c2\u8003\u8d44\u6599\uff0c\u8bf7\u57fa\u4e8e\u8fd9\u4e9b\u5185\u5bb9\u5199\u51fa\u5b8c\u6574\u6587\u7ae0\uff1a\n\n<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{research}<\/span>\n\n\u76f4\u63a5\u8f93\u51fa\u6587\u7ae0\u6b63\u6587\u3002\n\"\"\"<\/span>\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">try<\/span>:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0draft\u00a0=\u00a0invoke_agent_text(<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._agent,\u00a0prompt)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0TaskResult.success(task,\u00a0output=draft)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">except<\/span>\u00a0Exception\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">as<\/span>\u00a0e:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0TaskResult.failure(task,\u00a0reason=<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>(e))\n<\/code><\/pre>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\">6. Editor\uff1a\u4e00\u6761\u5efa\u8bae +\u3010\u7ec8\u7a3f\u3011<\/h3>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\"><span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\u7f16\u8f91\u00a0Worker\uff1a\u4e00\u6761\u6539\u8fdb\u5efa\u8bae\u00a0+\u00a0\u7ec8\u7a3f\u3002\"\"\"<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0__future__\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0annotations\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0langchain.agents\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0create_agent\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0agents.worker_util\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0invoke_agent_text\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0llm\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0get_chat_model\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0protocol\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0Task,\u00a0TaskResult\n\n_SYSTEM\u00a0=\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\\\n\u4f60\u662f\u4e00\u4f4d\u4e25\u683c\u4f46\u9ad8\u6548\u7684\u6587\u7ae0\u7f16\u8f91\u3002\n\n\u4f60\u7684\u5de5\u4f5c\u5206\u4e24\u6b65\uff1a\n1.\u00a0\u7ed9\u51fa\u3010\u4e00\u6761\u3011\u6700\u91cd\u8981\u7684\u6539\u8fdb\u5efa\u8bae\uff08\u4e00\u53e5\u8bdd\uff0c\u76f4\u63a5\u8bf4\u95ee\u9898\u5728\u54ea\u3001\u600e\u4e48\u6539\uff09\n2.\u00a0\u7d27\u63a5\u7740\u8f93\u51fa\u6539\u8fdb\u540e\u7684\u5b8c\u6574\u6587\u7ae0\u5168\u6587\n\n\u8f93\u51fa\u683c\u5f0f\uff1a\n\u3010\u6539\u8fdb\u5efa\u8bae\u3011&lt;\u4e00\u53e5\u8bdd\u5efa\u8bae&gt;\n\n\u3010\u7ec8\u7a3f\u3011\n&lt;\u6539\u8fdb\u540e\u7684\u5b8c\u6574\u6587\u7ae0&gt;\n\n\u4e0d\u8981\u5217\u591a\u6761\u5efa\u8bae\uff0c\u805a\u7126\u6700\u5173\u952e\u7684\u4e00\u6761\uff0c\u7136\u540e\u5728\u7ec8\u7a3f\u4e2d\u628a\u5b83\u6539\u597d\u3002\n\"\"\"<\/span>\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">class<\/span>\u00a0<span class=\"hljs-title class_\" style=\"color: #b58900;\">EditorAgent<\/span>:\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-literal\" style=\"color: #cb4b16;\">None<\/span>:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._agent\u00a0=\u00a0create_agent(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0get_chat_model(temperature=<span class=\"hljs-number\" style=\"color: #cb4b16;\">0.4<\/span>),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0tools=[],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0system_prompt=_SYSTEM,\n\u00a0\u00a0\u00a0\u00a0)\n\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">run<\/span>(<span class=\"hljs-params\">self,\u00a0task:\u00a0Task<\/span>)\u00a0-&gt;\u00a0TaskResult:\n\u00a0\u00a0\u00a0\u00a0draft\u00a0=\u00a0task.context.get(<span class=\"hljs-string\" style=\"color: #859900;\">\"draft\"<\/span>,\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0prompt\u00a0=\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">f\"\"\"\\\n\u6587\u7ae0\u4e3b\u9898\uff1a<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{task.instruction}<\/span>\n\n\u4ee5\u4e0b\u662f\u521d\u7a3f\uff0c\u8bf7\u5ba1\u6838\u5e76\u6539\u8fdb\uff1a\n\n<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{draft}<\/span>\n\"\"\"<\/span>\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">try<\/span>:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0response\u00a0=\u00a0invoke_agent_text(<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._agent,\u00a0prompt)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0final\u00a0=\u00a0_extract_final(response)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0TaskResult.success(task,\u00a0output=final,\u00a0full_response=response)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">except<\/span>\u00a0Exception\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">as<\/span>\u00a0e:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0TaskResult.failure(task,\u00a0reason=<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>(e))\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">_extract_final<\/span>(<span class=\"hljs-params\">editor_response:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span><\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>:\n\u00a0\u00a0marker\u00a0=\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"\u3010\u7ec8\u7a3f\u3011\"<\/span>\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">if<\/span>\u00a0marker\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">in<\/span>\u00a0editor_response:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0editor_response[editor_response.index(marker)\u00a0+\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">len<\/span>(marker):].strip()\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0editor_response.strip()\n<\/code><\/pre>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\">7. Orchestrator\uff1a\u6d3e\u6d3b\u3001\u91cd\u8bd5\u3001\u964d\u7ea7<\/h3>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\"><span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\u8c03\u5ea6\u5458\uff1aResearcher\u00a0\u2192\u00a0Writer\u00a0\u2192\u00a0Editor\u3002\"\"\"<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0__future__\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0annotations\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0time\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0agents.editor\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0EditorAgent\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0agents.researcher\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0ResearcherAgent\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0agents.writer\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0WriterAgent\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0protocol\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0Task,\u00a0TaskResult,\u00a0TaskStatus\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">class<\/span>\u00a0<span class=\"hljs-title class_\" style=\"color: #b58900;\">OrchestratorAgent<\/span>:\n\u00a0\u00a0MAX_RETRIES\u00a0=\u00a0<span class=\"hljs-number\" style=\"color: #cb4b16;\">2<\/span>\n\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-literal\" style=\"color: #cb4b16;\">None<\/span>:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._researcher\u00a0=\u00a0ResearcherAgent()\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._writer\u00a0=\u00a0WriterAgent()\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._editor\u00a0=\u00a0EditorAgent()\n\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">run<\/span>(<span class=\"hljs-params\">self,\u00a0user_request:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span><\/span>)\u00a0-&gt;\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">f\"\\n[Orchestrator]\u00a0\u6536\u5230\u4efb\u52a1\uff1a<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{user_request}<\/span>\"<\/span>)\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"[Orchestrator]\u00a0\u2192\u00a0\u4ea4\u7ed9\u00a0Researcher...\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0research_result\u00a0=\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._run_with_retry(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent=<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._researcher,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent_name=<span class=\"hljs-string\" style=\"color: #859900;\">\"researcher\"<\/span>,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0instruction=user_request,\n\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">if<\/span>\u00a0research_result.status\u00a0==\u00a0TaskStatus.FAILED:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">f\"\u7814\u7a76\u9636\u6bb5\u5931\u8d25\uff1a<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{research_result.output}<\/span>\"<\/span>\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">f\"[Orchestrator]\u00a0\u00a0\u00a0Researcher\u00a0\u5b8c\u6210\uff08<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{research_result.duration_ms}<\/span>ms\uff09\"<\/span>)\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"[Orchestrator]\u00a0\u2192\u00a0\u4ea4\u7ed9\u00a0Writer...\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0write_result\u00a0=\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._run_with_retry(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent=<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._writer,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent_name=<span class=\"hljs-string\" style=\"color: #859900;\">\"writer\"<\/span>,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0instruction=user_request,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0research_output=research_result.output,\n\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">if<\/span>\u00a0write_result.status\u00a0==\u00a0TaskStatus.FAILED:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">f\"\u5199\u4f5c\u9636\u6bb5\u5931\u8d25\uff1a<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{write_result.output}<\/span>\"<\/span>\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">f\"[Orchestrator]\u00a0\u00a0\u00a0Writer\u00a0\u5b8c\u6210\uff08<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{write_result.duration_ms}<\/span>ms\uff09\"<\/span>)\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"[Orchestrator]\u00a0\u2192\u00a0\u4ea4\u7ed9\u00a0Editor...\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0edit_result\u00a0=\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._run_with_retry(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent=<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>._editor,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent_name=<span class=\"hljs-string\" style=\"color: #859900;\">\"editor\"<\/span>,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0instruction=user_request,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0draft=write_result.output,\n\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">if<\/span>\u00a0edit_result.status\u00a0==\u00a0TaskStatus.FAILED:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"[Orchestrator]\u00a0\u00a0\u00a0Editor\u00a0\u5931\u8d25\uff0c\u4fdd\u7559\u521d\u7a3f\u3002\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0write_result.output\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">f\"[Orchestrator]\u00a0\u00a0\u00a0Editor\u00a0\u5b8c\u6210\uff08<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{edit_result.duration_ms}<\/span>ms\uff09\"<\/span>)\n\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"[Orchestrator]\u00a0\u5168\u90e8\u6d41\u7a0b\u5b8c\u6210\u3002\\n\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0edit_result.output\n\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">_run_with_retry<\/span>(<span class=\"hljs-params\">\n\u00a0\u00a0\u00a0\u00a0self,\n\u00a0\u00a0\u00a0\u00a0agent:\u00a0ResearcherAgent\u00a0|\u00a0WriterAgent\u00a0|\u00a0EditorAgent,\n\u00a0\u00a0\u00a0\u00a0agent_name:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>,\n\u00a0\u00a0\u00a0\u00a0instruction:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>,\n\u00a0\u00a0\u00a0\u00a0**context_kwargs:\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">str<\/span>,\n\u00a0\u00a0<\/span>)\u00a0-&gt;\u00a0TaskResult:\n\u00a0\u00a0\u00a0\u00a0last_result:\u00a0TaskResult\u00a0|\u00a0<span class=\"hljs-literal\" style=\"color: #cb4b16;\">None<\/span>\u00a0=\u00a0<span class=\"hljs-literal\" style=\"color: #cb4b16;\">None<\/span>\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">for<\/span>\u00a0attempt\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">in<\/span>\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">range<\/span>(<span class=\"hljs-number\" style=\"color: #cb4b16;\">1<\/span>,\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>.MAX_RETRIES\u00a0+\u00a0<span class=\"hljs-number\" style=\"color: #cb4b16;\">2<\/span>):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0task\u00a0=\u00a0Task.new(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0agent_name=agent_name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0instruction=instruction,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0**context_kwargs,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0result\u00a0=\u00a0agent.run(task)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">if<\/span>\u00a0result.status\u00a0==\u00a0TaskStatus.DONE:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0result\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0last_result\u00a0=\u00a0result\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">if<\/span>\u00a0attempt\u00a0&lt;=\u00a0<span class=\"hljs-variable language_\" style=\"color: #dc322f;\">self<\/span>.MAX_RETRIES:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">f\"\u00a0\u00a0[<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{agent_name}<\/span>]\u00a0\u7b2c<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{attempt}<\/span>\u6b21\u5931\u8d25\uff1a<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{result.output}<\/span>\uff0c1s\u00a0\u540e\u91cd\u8bd5...\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0time.sleep(<span class=\"hljs-number\" style=\"color: #cb4b16;\">1<\/span>)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">else<\/span>:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">f\"\u00a0\u00a0[<span class=\"hljs-subst\" style=\"color: #93a1a1;\">{agent_name}<\/span>]\u00a0\u5df2\u8fbe\u6700\u5927\u91cd\u8bd5\u6b21\u6570\uff0c\u653e\u5f03\u3002\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>\u00a0last_result\u00a0\u00a0<span class=\"hljs-comment\" style=\"color: #657b83;\">#\u00a0type:\u00a0ignore[<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">return<\/span>-value]<\/span>\n<\/code><\/pre>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\">8. <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #ef7060;\">main.py<\/code>\uff1a\u5165\u53e3<\/h3>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\"><span class=\"hljs-string\" style=\"color: #859900;\">\"\"\"\u591a\u00a0Agent\u00a0\u5199\u4f5c\u52a9\u624b\uff08LangChain\u00a0create_agent\u00a0\u7248\uff09\"\"\"<\/span>\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0os\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0sys\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">from<\/span>\u00a0agents.orchestrator\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">import<\/span>\u00a0OrchestratorAgent\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">def<\/span>\u00a0<span class=\"hljs-title function_\" style=\"color: #268bd2;\">main<\/span>()\u00a0-&gt;\u00a0<span class=\"hljs-literal\" style=\"color: #cb4b16;\">None<\/span>:\n\u00a0\u00a0request\u00a0=\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">input<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"\u8bf7\u8f93\u5165\u5199\u4f5c\u9700\u6c42\uff08\u4f8b\u5982\uff1a\u5199\u4e00\u7bc7\u5173\u4e8e\u00a0AI\u00a0\u7684\u79d1\u666e\u6587\u7ae0\uff09\uff1a\\n&gt;\u00a0\"<\/span>).strip()\n\n\u00a0\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">if<\/span>\u00a0<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">not<\/span>\u00a0request:\n\u00a0\u00a0\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"\u9700\u6c42\u4e0d\u80fd\u4e3a\u7a7a\u3002\"<\/span>)\n\u00a0\u00a0\u00a0\u00a0sys.exit(<span class=\"hljs-number\" style=\"color: #cb4b16;\">1<\/span>)\n\n\u00a0\u00a0article\u00a0=\u00a0OrchestratorAgent().run(request)\n\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"=\"<\/span>\u00a0*\u00a0<span class=\"hljs-number\" style=\"color: #cb4b16;\">60<\/span>)\n\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(article)\n\u00a0\u00a0<span class=\"hljs-built_in\" style=\"color: #2aa198;\">print<\/span>(<span class=\"hljs-string\" style=\"color: #859900;\">\"=\"<\/span>\u00a0*\u00a0<span class=\"hljs-number\" style=\"color: #cb4b16;\">60<\/span>)\n\n\n<span class=\"hljs-keyword\" style=\"color: #6c71c4;\">if<\/span>\u00a0__name__\u00a0==\u00a0<span class=\"hljs-string\" style=\"color: #859900;\">\"__main__\"<\/span>:\n\u00a0\u00a0main()\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u590d\u8ff0\uff1a&#8221;\u4e09\u4e2a Worker \u90fd\u662f <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">create_agent<\/code>\uff1b\u8c03\u5ea6\u8fd8\u662f Orchestrator\uff1b\u4e0a\u4e0b\u6587\u8d70 Task.context\u2014\u2014LangChain \u96f6\u4ef6 + \u591a\u89d2\u8272\u7ec4\u7ec7\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5bf9\u3002\u4ee5\u540e\u67d0\u4e00\u73af\u8981\u67e5\u8d44\u6599\uff0c\u7ed9\u90a3\u4e2a Worker \u7684 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">tools=[...]<\/code> \u6302\u4e0a\u5373\u53ef\uff0c\u4e0d\u5fc5\u62c6\u6389\u6d41\u6c34\u7ebf\u3002&#8221;<\/p>\n<hr \/>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid #ef7060; display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: #ef7060; color: #ffffff; padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u603b\u7ed3<\/span><\/h2>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u8bf4\uff1a&#8221;\u7b2c\u5341\u4e00\u7bc7\u5347\u7ea7\u7248\uff1a\u591a Agent \u7ec4\u7ec7\u65b9\u6cd5 + LangChain \u5b9e\u73b0\u96f6\u4ef6\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u4e09\u4e2a\u6838\u5fc3\u7406\u89e3\uff1a<\/p>\n<ol style=\"padding-left: 1rem; margin-left: 1rem; font-size: 0.9rem; list-style-type: decimal;\">\n<li>\n<section><strong>Orchestrator + Worker<\/strong> \u2014\u2014 \u8c03\u5ea6\u4e0d\u5199\u5b57\uff1bWorker \u4e92\u4e0d\u8ba4\u8bc6<\/section>\n<\/li>\n<li>\n<section><strong>Worker = create_agent<\/strong> \u2014\u2014 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: #ef7060; background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">tools=[]<\/code> + \u4e13\u5c5e system + \u4e0d\u540c temperature<\/section>\n<\/li>\n<li>\n<section><strong>Task.context<\/strong> \u2014\u2014 \u663e\u5f0f\u4f20 research\/draft\uff1b\u91cd\u8bd5\u4e0e\u7f16\u8f91\u964d\u7ea7\u4fdd\u8bc1\u97e7\u6027&#8221;<\/section>\n<\/li>\n<\/ol>\n<p style=\"margin: 1em 0px;\">LangChain \u652f\u7ebf\u8fdb\u5ea6\uff1a<\/p>\n<section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><\/section>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\u2026\u00a0\u2192\u00a0Middleware\n\u00a0\u00a0\u00a0\u00a0\u2193\n\u591a\u00a0Agent\u00a0\u534f\u4f5c\uff08\u672c\u7bc7\uff1aLangChain\u00a0\u5b8c\u6574\u5b9e\u73b0\uff09\n\u00a0\u00a0\u00a0\u00a0\u2193\nAgentic\u00a0RAG\u00a0\u5168\u94fe\u8def\u00a0\u2026\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u8bf4\uff1a&#8221;\u6d41\u6c34\u7ebf\u7528\u4e0a create_agent \u4e86\u3002\u4e0b\u4e00\u7bc7\u77e5\u8bc6\u5e93\u95ee\u7b54\u2014\u2014Agentic RAG\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5bf9\u3002&#8221;<\/p>\n<blockquote style=\"margin: 20px 0px; display: block; font-size: 0.9em; overflow: auto; border-left: 3px solid #ef7060; color: #6a737d; padding: 10px 10px 10px 20px; background: #fff9f9;\">\n<p style=\"margin: 1em 0px;\"><strong>\u591a Agent \u4e0d\u662f\u629b\u5f03 LangChain\uff0c\u800c\u662f\u7528\u591a\u4e2a create_agent \u626e\u6f14\u4e0d\u540c\u89d2\u8272\uff0c\u518d\u7528\u534f\u8bae\u628a\u4ea7\u7269\u63a5\u8d77\u6765\u3002<\/strong><\/p>\n<\/blockquote>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0a\u7bc7\u4f60\u7ed9\u5355\u4e2a Agent \u88c5\u4e0a\u4e86 Middleware\u2014\u2014\u8131\u654f\u3001\u9650\u6d41\u3001\u6458\u8981\u3001\u4eba\u5ba1\u90fd\u80fd\u6302\u94a9\u5b50\u3002\u53ef\u5f53\u4efb\u52a1\u8981\u300c\u7814\u7a76  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3877,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[163,165],"tags":[167,168,170],"_links":{"self":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3876"}],"collection":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3876"}],"version-history":[{"count":1,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3876\/revisions"}],"predecessor-version":[{"id":3878,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3876\/revisions\/3878"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/media\/3877"}],"wp:attachment":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}