{"id":3927,"date":"2026-08-31T10:34:58","date_gmt":"2026-08-31T02:34:58","guid":{"rendered":"https:\/\/ai.zhousir.top\/?p=3927"},"modified":"2026-08-31T10:34:58","modified_gmt":"2026-08-31T02:34:58","slug":"langgraph-%e5%ae%a2%e6%88%b7%e6%94%af%e6%8c%81-email-agent%ef%bc%9a%e4%bb%8e%e8%ae%be%e8%ae%a1%e6%80%9d%e7%bb%b4%e5%88%b0%e5%8f%af%e8%bf%90%e8%a1%8c%e4%bb%a3%e7%a0%81","status":"publish","type":"post","link":"https:\/\/ai.zhousir.top\/?p=3927","title":{"rendered":"LangGraph \u5ba2\u6237\u652f\u6301 Email Agent\uff1a\u4ece\u8bbe\u8ba1\u601d\u7ef4\u5230\u53ef\u8fd0\u884c\u4ee3\u7801"},"content":{"rendered":"<section id=\"wenyan\" data-provider=\"WenYan\" style=\"font-family: system-ui, &quot;Apple Color Emoji&quot;, &quot;Segoe UI&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Sans&quot;, Roboto, sans-serif; line-height: 1.75; font-size: 16px; color: rgb(0, 0, 0); caret-color: rgb(0, 0, 0);\">\n<blockquote style=\"margin: 20px 0px; display: block; font-size: 0.9em; overflow: auto; border-left: 3px solid rgb(239, 112, 96); color: rgb(106, 115, 125); padding: 10px 10px 10px 20px; background: rgb(255, 249, 249);\">\n<p style=\"margin: 1em 0px;\">\u4e0a\u7bc7\u4f60\u5b66\u4f1a\u4e86\u4e03\u79cd WorkFlow \u6a21\u5f0f\uff0c\u80fd\u70b9\u540d\u3001\u80fd\u753b\u56fe\u3002\u4f46\u6a21\u5f0f\u53ea\u662f\u83dc\u8c31\u2014\u2014\u771f\u7ed9\u4f60\u4e00\u5c01\u5ba2\u670d\u90ae\u4ef6\uff0c\u4f60\u80fd\u753b\u51fa\u5b83\u8be5\u8d70\u54ea\u6761\u8def\u5417\uff1f\u8fd9\u7bc7\u7528\u4e00\u4e2a\u5b8c\u6574\u7684\u5ba2\u6237\u652f\u6301 Email Agent \u9879\u76ee\uff0c\u628a Routing\u3001Prompt Chaining\u3001HITL \u4e32\u6210\u4e00\u5f20<strong>\u53ef\u8fd0\u884c\u7684\u56fe<\/strong>\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 rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u5c0f\u660e\u628a\u4e03\u6a21\u5f0f\u9489\u5899\u4e0a\uff0c\u4ecd\u4e0d\u4f1a\u5f00\u4e00\u5f20\u4e1a\u52a1\u56fe<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u521a\u5b66\u5b8c LangGraph \u4e03\u79cd WorkFlow\uff0c\u89c9\u5f97\u4fe1\u5fc3\u6ee1\u6ee1\u3002\u4ea7\u54c1\u7529\u8fc7\u6765\u4e00\u4e2a\u9700\u6c42\uff1a<\/p>\n<blockquote style=\"margin: 20px 0px; display: block; font-size: 0.9em; overflow: auto; border-left: 3px solid rgb(239, 112, 96); color: rgb(106, 115, 125); padding: 10px 10px 10px 20px; background: rgb(255, 249, 249);\">\n<p style=\"margin: 1em 0px;\">\u81ea\u52a8\u8bfb\u6536\u4ef6\u7bb1 \u2192 \u5206\u7c7b \u2192 \u80fd\u7b54\u5c31\u67e5\u77e5\u8bc6\u5e93\u56de\u4fe1 \u2192 Bug \u5f00\u5de5\u5355 \u2192 \u8d26\u5355\/\u7591\u96be\u76f4\u63a5\u4eba\u5de5 \u2192 \u5fc5\u8981\u65f6\u8ddf\u8fdb\u3002<\/p>\n<\/blockquote>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u672c\u80fd\u53cd\u5e94\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">create_agent<\/code> + \u4e00\u5806\u5de5\u5177\uff0c\u8ba9\u6a21\u578b\u81ea\u5df1\u51b3\u5b9a\u8c03\u54ea\u4e2a\u3002<\/p>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u62e6\u4f4f\u4ed6\uff1a&#8221;\u4f60\u60f3\u60f3\uff0c\u91cd\u590d\u6263\u6b3e\u7684\u90ae\u4ef6\u548c\u5bc6\u7801\u91cd\u7f6e\u7684\u90ae\u4ef6\uff0c\u80fd\u8d70\u540c\u4e00\u6761\u8def\u5417\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5443\u2026\u2026\u597d\u50cf\u4e0d\u884c\uff1f\u6263\u6b3e\u5f97\u76f4\u63a5\u4eba\u5de5\uff0c\u5bc6\u7801\u91cd\u7f6e\u53ef\u4ee5\u81ea\u52a8\u56de\u590d\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5bf9\u3002<strong>\u5de5\u5177\u89e3\u51b3\u7684\u662f\u300e\u4f1a\u4e0d\u4f1a\u5e72\u300f\uff1b\u8fd9\u5f20\u5355\u5b50\u7684\u7075\u9b42\u662f\u300e\u4e0d\u540c\u7c7b\u578b\u5fc5\u987b\u8d70\u4e0d\u540c\u8def\u300f\u3002<\/strong> \u4e03\u79cd\u6a21\u5f0f\u544a\u8bc9\u4f60\u6709\u54ea\u4e9b\u62d3\u6251\u96f6\u4ef6\uff1bThink in LangGraph \u544a\u8bc9\u4f60\u600e\u4e48\u7528\u8fd9\u4e9b\u96f6\u4ef6\u62fc\u4e00\u5f20\u4e1a\u52a1\u56fe\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u5728\u767d\u677f\u4e0a\u5199\u4e86\u4e94\u4e2a\u5b57\uff1a<strong>\u5148\u60f3\u56fe\uff0c\u518d\u5199\u7801\u3002<\/strong><\/p>\n<hr>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4e94\u9636\u6bb5\u601d\u7ef4\uff1a\u4ece\u9700\u6c42\u5230\u62d3\u6251<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u753b\u4e86\u4e00\u5f20\u6d41\u7a0b\uff1a<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\">\u2460 \u62c6 Node    \u2192 \u628a\u4efb\u52a1\u5207\u6210\u79bb\u6563\u6b65\u9aa4\n\u2461 \u660e\u786e\u8282\u70b9\u804c\u8d23  \u2192 \u6bcf\u4e2a\u8282\u70b9\u53ea\u5e72\u4e00\u4ef6\u4e8b\uff1b\u6807\u6e05\u8c01\u505a\u51b3\u7b56\n\u2462 \u8bbe\u8ba1 State    \u2192 \u8282\u70b9\u4e4b\u95f4\u6d41\u8f6c\u4ec0\u4e48\u6570\u636e\n\u2463 \u5199\u8282\u70b9 + \u5f02\u5e38   \u2192 \u51fd\u6570\u5b9e\u73b0\u3001\u5931\u8d25\u600e\u4e48\u6536\u53e3\n\u2464 \u8fde\u8fb9\u6210 Graph  \u2192 \u4e32\u8d77\u6765\uff1b\u51b3\u7b56\u53ef\u5728\u8282\u70b9\u5185\u6216\u6761\u4ef6\u8fb9\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">&#8220;\u9636\u6bb5 \u2460\uff5e\u2462 \u5148\u843d\u7eb8\u9762\uff0c\u2463\uff5e\u2464 \u5bf9\u7167\u4ed3\u5e93 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">day6-customer-support\/<\/code>\u3002\u522b\u4e00\u4e0a\u6765\u5c31\u63a5\u771f\u5b9e SMTP\u2014\u2014\u5148\u7528 mock \u6570\u636e\u628a\u56fe\u8dd1\u901a\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u95ee\uff1a&#8221;\u7b2c\u4e00\u6b65\u62c6 Node\uff0c\u600e\u4e48\u62c6\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u770b\u9700\u6c42\u91cc\u6709\u54ea\u4e9b<strong>\u52a8\u4f5c<\/strong>\u3002\u8bfb\u90ae\u4ef6\u662f\u4e00\u4e2a\u52a8\u4f5c\uff0c\u5206\u7c7b\u662f\u4e00\u4e2a\uff0c\u641c\u77e5\u8bc6\u5e93\u662f\u4e00\u4e2a\u2026\u2026\u6bcf\u4e2a\u52a8\u4f5c\u5c31\u662f\u4e00\u4e2a\u8282\u70b9\u3002&#8221;<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>\u4e03\u4e2a\u8282\u70b9\uff0c\u5404\u53f8\u5176\u804c<\/span><\/h3>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\">          \u250c\u2500\u2500\u25ba search_docs \u2500\u2500\u25ba draft_reply \u2500\u2500\u25ba finalize_auto \u2500\u2500\u25ba END\n          \u2502     \u2502\n          \u2502     \u2514\u2500\u2500\uff08feature\uff09\u2500\u2500\u25ba tag_feature \u2500\u2500\u25ba \u2026\nSTART \u2192 read_email \u2192 classify_intent\n          \u2502\n          \u251c\u2500\u2500\u25ba create_bug_ticket \u2500\u2500\u25ba human_review \u2500\u2500\u25ba END\n          \u2502\n          \u251c\u2500\u2500\u25ba escalate_human \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba END\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;\">\n<thead>\n<tr>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">\u8282\u70b9<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">\u804c\u8d23<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">\u662f\u5426\u51b3\u7b56\uff1f<\/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 rgb(239, 112, 96); vertical-align: top;\"><code>read_email<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u89e3\u6790\u90ae\u4ef6\u5185\u5bb9\u3001\u53d1\u4ef6\u4eba\u3001\u4e3b\u9898<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u5426<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>classify_intent<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u5224\u610f\u56fe + \u7d27\u6025\u5ea6\uff0c\u51b3\u5b9a\u4e0b\u4e00\u8def\u5f84<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><strong>\u662f<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>search_docs<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u641c\u77e5\u8bc6\u5e93<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u5426<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>create_bug_ticket<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u521b\u5efa Bug \u5de5\u5355<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u5426<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>draft_reply<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u6839\u636e\u547d\u4e2d\u6587\u6863\u64b0\u5199\u56de\u590d\u8349\u7a3f<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u5426<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>human_review<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">Bug \u5de5\u5355\u4eba\u5de5\u5ba1\u6838\uff08HITL\uff09<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><strong>\u662f<\/strong>\uff08\u4eba\uff09<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>escalate_human<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u8d26\u5355\/\u7591\u96be\u76f4\u63a5\u5347\u7ea7\u4eba\u5de5<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u5426<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u6ce8\u610f\u5230\uff1a&#8221;<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">classify_intent<\/code> \u662f\u552f\u4e00\u7684\u8def\u7531\u51b3\u7b56\u70b9\uff0c<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">human_review<\/code> \u662f\u4eba\u5de5\u51b3\u7b56\u70b9\u2014\u2014\u5176\u4ed6\u8282\u70b9\u90fd\u662f\u5e72\u6d3b\u7684\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5bf9\u3002<strong>\u51b3\u7b56\u70b9\u5fc5\u987b\u663e\u5f0f\u5b58\u5728<\/strong>\uff0c\u4e0d\u80fd\u85cf\u5728 prompt \u91cc\u8ba9\u6a21\u578b\u81ea\u5df1\u731c\u3002\u8fd9\u662f\u56fe\u548c\u94fe\u7684\u6838\u5fc3\u533a\u522b\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 rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u8bbe\u8ba1 State\uff1a\u8282\u70b9\u7684\u5408\u540c<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\n<p style=\"margin: 1em 0px;\">&#8220;\u8282\u70b9\u62c6\u5b8c\u4e86\uff0c\u4e0b\u4e00\u6b65\u8bbe\u8ba1 State\u2014\u2014\u8282\u70b9\u4e4b\u95f4\u6d41\u8f6c\u4ec0\u4e48\u6570\u636e\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u6253\u5f00 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">state.py<\/code>\uff1a<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># state.py<\/span>\n\n<span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">from<\/span> typing <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">import<\/span> TypedDict\n\n<span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">class<\/span> <span class=\"hljs-title class_\" style=\"color: rgb(181, 137, 0);\">SupportState<\/span>(TypedDict, total=<span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">False<\/span>):\n  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># \u8f93\u5165 \/ \u8bfb\u4fe1<\/span>\n  email_id: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n  from_addr: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n  subject: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n  body: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># \u5206\u7c7b<\/span>\n  intent: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>      <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># password_reset | bug | billing | feature | tech_complex<\/span>\n  urgency: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>     <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># low | medium | high | critical<\/span>\n  next_action: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>   <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># search_docs | create_bug_ticket | escalate_human<\/span>\n  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># \u68c0\u7d22 \/ \u5de5\u5355 \/ \u8349\u7a3f<\/span>\n  doc_hits: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">list<\/span>[<span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>]\n  ticket_id: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n  feature_tag: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n  draft: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n  reply_status: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># auto_sent | queued | skipped | escalated<\/span>\n  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># HITL<\/span>\n  human_decision: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># approve | reject<\/span>\n  followup_at: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># \u53ef\u89c2\u6d4b<\/span>\n  trace: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">list<\/span>[<span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>]\n  error: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\uff1a&#8221;<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">total=False<\/code> \u662f\u4ec0\u4e48\u610f\u601d\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u610f\u601d\u662f\u6240\u6709\u5b57\u6bb5\u90fd\u662f\u53ef\u9009\u7684\u3002LangGraph \u7684\u8282\u70b9\u8fd4\u56de<strong>\u90e8\u5206\u66f4\u65b0<\/strong>\uff08partial update\uff09\u2014\u2014<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">read_email<\/code> \u53ea\u5199 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">from_addr\/subject\/body<\/code>\uff0c<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">classify_intent<\/code> \u53ea\u5199 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">intent\/urgency\/next_action<\/code>\u3002\u4e0d\u9700\u8981\u6bcf\u4e2a\u8282\u70b9\u90fd\u586b\u6ee1\u6574\u4e2a State\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u6240\u4ee5 State \u50cf\u4e00\u4efd\u5408\u540c\uff1a\u5206\u7c7b\u8282\u70b9\u8d1f\u8d23\u5199 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">intent<\/code>\uff0c\u68c0\u7d22\u8282\u70b9\u8d1f\u8d23\u5199 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">doc_hits<\/code>\uff0c\u5404\u5199\u5404\u7684\uff0c\u4e92\u4e0d\u5e72\u6d89\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5bf9\u3002<strong>\u522b\u8ba9\u6bcf\u4e2a\u8282\u70b9\u90fd\u53bb\u89e3\u6790\u539f\u59cb MIME \u90ae\u4ef6<\/strong>\u2014\u2014\u90a3\u662f <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">read_email<\/code> \u7684\u6d3b\u3002\u4e0b\u6e38\u53ea\u8bfb\u7ed3\u6784\u5316\u5b57\u6bb5\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 rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4e94\u4e2a\u573a\u666f\uff0c\u4e94\u6761\u8def<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\n<p style=\"margin: 1em 0px;\">&#8220;\u56fe\u8bbe\u8ba1\u597d\u4e86\uff0c\u4f46\u600e\u4e48\u9a8c\u6536\uff1f\u8001\u5f20\u7ed9\u4e86\u4e94\u5c01\u4ee3\u8868\u90ae\u4ef6\uff1a&#8221;<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># mailbox_data.py\uff08\u8282\u9009\uff09<\/span>\n\nSAMPLE_EMAILS = {\n  <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"e_password\"<\/span>: {\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"from\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"user@example.com\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"subject\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u65e0\u6cd5\u767b\u5f55\uff0c\u9700\u8981\u91cd\u7f6e\u5bc6\u7801\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"body\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u4f60\u597d\uff0c\u6211\u5fd8\u8bb0\u5bc6\u7801\u4e86\uff0c\u8bf7\u95ee\u5982\u4f55\u91cd\u7f6e\u5bc6\u7801\uff1f\"<\/span>,\n  },\n  <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"e_bug\"<\/span>: {\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"from\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"pm@example.com\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"subject\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u5bfc\u51fa PDF \u65f6\u5ba2\u6237\u7aef\u5d29\u6e83\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"body\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u70b9\u51fb\u5bfc\u51fa PDF \u540e\u5e94\u7528\u95ea\u9000\uff0c\u53ef\u7a33\u5b9a\u590d\u73b0\u3002\u8bf7\u5e2e\u5fd9\u5efa Bug \u8ddf\u8e2a\u3002\"<\/span>,\n  },\n  <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"e_billing\"<\/span>: {\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"from\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"cfo@example.com\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"subject\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u91cd\u590d\u6263\u6b3e\u7d27\u6025\u5904\u7406\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"body\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u672c\u6708\u8ba2\u9605\u88ab\u91cd\u590d\u6263\u6b3e\u4e24\u6b21\uff0c\u8bf7\u7acb\u523b\u4eba\u5de5\u5904\u7406\u9000\u6b3e\u3002\"<\/span>,\n  },\n  <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"e_feature\"<\/span>: {\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"from\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"designer@example.com\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"subject\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u5e0c\u671b\u589e\u52a0\u6697\u9ed1\u6a21\u5f0f\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"body\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u4ea7\u54c1\u6709\u6697\u9ed1\u6a21\u5f0f\u5417\uff1f\u5982\u679c\u6ca1\u6709\uff0c\u5e0c\u671b\u4f5c\u4e3a\u529f\u80fd\u8bf7\u6c42\u8ddf\u8fdb\u3002\"<\/span>,\n  },\n  <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"e_tech\"<\/span>: {\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"from\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"dev@example.com\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"subject\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"API \u95f4\u6b47\u6027\u8fd4\u56de 504\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"body\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u8c03\u7528 \/v1\/report \u65f6\u5076\u53d1 504\uff0c\u590d\u6742\u6392\u67e5\u8bf7\u8f6c\u6280\u672f\u652f\u6301\u4eba\u5de5\u3002\"<\/span>,\n  },\n}\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u4e94\u5c01\u90ae\u4ef6\uff0c\u4e94\u79cd\u610f\u56fe\uff0c\u4e94\u6761\u8def\u5f84\uff1a<\/p>\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;\">\n<thead>\n<tr>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">\u573a\u666f<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">intent<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">\u8def\u5f84<\/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 rgb(239, 112, 96); vertical-align: top;\">\u5bc6\u7801\u91cd\u7f6e<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>password_reset<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">read \u2192 classify \u2192 <strong>search_docs<\/strong> \u2192 draft_reply \u2192 finalize \u2192 END<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">PDF \u5d29\u6e83<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>bug<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">read \u2192 classify \u2192 <strong>create_bug_ticket<\/strong> \u2192 <strong>human_review<\/strong> \u2192 END<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u91cd\u590d\u6263\u6b3e<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>billing<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">read \u2192 classify \u2192 <strong>escalate_human<\/strong> \u2192 END<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u6697\u9ed1\u6a21\u5f0f<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>feature<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">read \u2192 classify \u2192 search_docs \u2192 <strong>tag_feature<\/strong> \u2192 draft \u2192 END<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">API 504<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\"><code>tech_complex<\/code><\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">read \u2192 classify \u2192 <strong>escalate_human<\/strong> \u2192 END<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u590d\u8ff0\uff1a&#8221;\u540c\u6837\u662f\u300e\u8bfb\u4e86\u90ae\u4ef6\u300f\uff0c\u540e\u9762\u5206\u53c9\u3002\u8d26\u5355\u548c\u7591\u96be<strong>\u7981\u6b62<\/strong>\u8d70\u81ea\u52a8\u6e29\u99a8\u63d0\u793a\u94fe\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5bf9\u3002\u5982\u679c\u786c\u505a\u6210\u4e00\u6761\u94fe\u300e\u8bfb\u4fe1\u2192\u68c0\u7d22\u2192\u56de\u4fe1\u2192\u7ed3\u675f\u300f\uff0c\u91cd\u590d\u6263\u6b3e\u4e5f\u4f1a\u88ab\u81ea\u52a8\u793c\u8c8c\u56de\u590d\u7cca\u5f04\u8fc7\u53bb\u2014\u2014\u5408\u89c4\u4e0e\u4f53\u9a8c\u53cc\u7206\u3002<strong>\u8fd9\u5c31\u662f\u9700\u8981\u56fe\u800c\u4e0d\u662f\u94fe\u7684\u539f\u56e0\u3002<\/strong>&#8220;<\/p>\n<hr>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4ee3\u7801\u5b9e\u6218\uff1a\u4ece\u8282\u70b9\u5230\u56fe<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>1. \u5206\u7c7b\u8282\u70b9\uff1a\u89c4\u5219\u8def\u7531\uff0c\u4e0d\u9760\u6a21\u578b<\/span><\/h3>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u6253\u5f00 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">nodes.py<\/code>\uff0c\u6307\u5411 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">classify_intent<\/code>\uff1a<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># nodes.py\uff08\u8282\u9009\uff09<\/span>\n\n<span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">def<\/span> <span class=\"hljs-title function_\" style=\"color: rgb(38, 139, 210);\">classify_intent<\/span>(<span class=\"hljs-params\">state: SupportState<\/span>) -&gt; <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">dict<\/span>:\n  <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\"\"\u89c4\u5219\u5206\u7c7b\uff08\u8bfe\u5802\u7a33\u5b9a\u3001\u65e0\u9700 LLM\uff1b\u751f\u4ea7\u53ef\u6362\u6210\u7ed3\u6784\u5316\u8f93\u51fa\uff09\u3002\"\"\"<\/span>\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> state.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"error\"<\/span>):\n    <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">return<\/span> {<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"next_action\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>,\n        <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"trace\"<\/span>: _trace(state, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"classify:skip_error\"<\/span>)}\n\n  text = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">f\"<span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{state.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">'subject'<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">''<\/span>)}<\/span> <span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{state.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">'body'<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">''<\/span>)}<\/span>\"<\/span>.lower()\n  intent = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"tech_complex\"<\/span>\n  urgency = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"medium\"<\/span>\n  next_action = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># \u9ed8\u8ba4\u515c\u5e95\uff1a\u62ff\u4e0d\u51c6\u5c31\u5347\u7ea7\u4eba\u5de5<\/span>\n\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">any<\/span>(k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> text <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">for<\/span> k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> (<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u5bc6\u7801\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u91cd\u7f6e\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u5fd8\u8bb0\u5bc6\u7801\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u767b\u5f55\"<\/span>)):\n    intent, urgency, next_action = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"password_reset\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"low\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"search_docs\"<\/span>\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">elif<\/span> <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">any<\/span>(k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> text <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">for<\/span> k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> (<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u5d29\u6e83\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"bug\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u95ea\u9000\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u5bfc\u51fa pdf\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"pdf\"<\/span>)):\n    intent, urgency, next_action = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"bug\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"high\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"create_bug_ticket\"<\/span>\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">elif<\/span> <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">any<\/span>(k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> text <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">for<\/span> k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> (<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u6263\u6b3e\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u9000\u6b3e\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u8d26\u5355\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u91cd\u590d\u6263\"<\/span>)):\n    intent, urgency, next_action = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"billing\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"critical\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">elif<\/span> <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">any<\/span>(k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> text <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">for<\/span> k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> (<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u6697\u9ed1\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"dark\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u529f\u80fd\u8bf7\u6c42\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u5e0c\u671b\u589e\u52a0\"<\/span>)):\n    intent, urgency, next_action = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"feature\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"low\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"search_docs\"<\/span>\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">elif<\/span> <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">any<\/span>(k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> text <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">for<\/span> k <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> (<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"504\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"api\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u95f4\u6b47\"<\/span>)):\n    intent, urgency, next_action = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"tech_complex\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"high\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>\n\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">return<\/span> {\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"intent\"<\/span>: intent,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"urgency\"<\/span>: urgency,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"next_action\"<\/span>: next_action,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"trace\"<\/span>: _trace(state, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">f\"classify:<span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{intent}<\/span>\/<span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{urgency}<\/span>\u2192<span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{next_action}<\/span>\"<\/span>),\n  }\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u95ee\uff1a&#8221;\u4e3a\u4ec0\u4e48\u4e0d\u7528 LLM \u5206\u7c7b\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u4e24\u4e2a\u539f\u56e0\uff1a\u7b2c\u4e00\uff0c\u8bfe\u5802\u65e0 Key \/ \u79bb\u7ebf\u4e5f\u80fd\u8dd1\u901a\u4e94\u6761\u8def\u5f84\uff1b\u7b2c\u4e8c\uff0c\u89c4\u5219\u5206\u7c7b<strong>\u7a33\u5b9a\u53ef\u590d\u73b0<\/strong>\u2014\u2014\u540c\u6837\u7684\u8f93\u5165\u6c38\u8fdc\u8d70\u540c\u4e00\u6761\u8def\uff0c\u65b9\u4fbf\u8c03\u8bd5\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u751f\u4ea7\u73af\u5883\u5462\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u6362\u6210 LLM \u7ed3\u6784\u5316\u8f93\u51fa\uff0c<strong>\u56fe\u62d3\u6251\u4e0d\u7528\u6539<\/strong>\u3002<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">classify_intent<\/code> \u5185\u90e8\u4ece\u89c4\u5219\u6362\u6210\u6a21\u578b\uff0c\u5bf9\u5916\u63a5\u53e3\u4e0d\u53d8\u2014\u2014\u8fd4\u56de <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">intent\/urgency\/next_action<\/code>\u3002\u8fd9\u5c31\u662f\u8282\u70b9\u89e3\u8026\u7684\u597d\u5904\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u8865\u5145\u4e86\u4e00\u4e2a\u7ec6\u8282\uff1a&#8221;\u6ce8\u610f\u9ed8\u8ba4\u503c\u662f <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">escalate_human<\/code>\u2014\u2014<strong>\u62ff\u4e0d\u51c6\u5c31\u5347\u7ea7\u4eba\u5de5<\/strong>\u3002\u8fd9\u662f\u5b89\u5168\u515c\u5e95\uff0c\u522b\u8ba9\u6a21\u578b\u5728\u4e0d\u786e\u5b9a\u65f6\u786c\u7b54\u3002&#8221;<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>2. \u6761\u4ef6\u8fb9\uff1a\u5206\u7c7b\u4e4b\u540e\u53bb\u54ea<\/span><\/h3>\n<p style=\"margin: 1em 0px;\">\u5206\u7c7b\u8282\u70b9\u5199\u4e86 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">next_action<\/code>\uff0c\u4f46\u8c01\u6765\u8bfb\u8fd9\u4e2a\u5b57\u6bb5\u51b3\u5b9a\u4e0b\u4e00\u8df3\uff1f<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">def<\/span> <span class=\"hljs-title function_\" style=\"color: rgb(38, 139, 210);\">route_after_classify<\/span>(<span class=\"hljs-params\">state: SupportState<\/span>) -&gt; <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>:\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">return<\/span> state.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"next_action\"<\/span>) <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">or<\/span> <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c31\u4e00\u884c\u3002\u8bfb <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">next_action<\/code>\uff0c\u8fd4\u56de\u8282\u70b9\u540d\u3002<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">None<\/code> \u65f6\u515c\u5e95\u5230\u4eba\u5de5\u3002<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">def<\/span> <span class=\"hljs-title function_\" style=\"color: rgb(38, 139, 210);\">route_after_search<\/span>(<span class=\"hljs-params\">state: SupportState<\/span>) -&gt; <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>:\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> state.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"intent\"<\/span>) == <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"feature\"<\/span>:\n    <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">return<\/span> <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"tag_feature\"<\/span>\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">return<\/span> <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"draft_reply\"<\/span>\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u641c\u5b8c\u77e5\u8bc6\u5e93\u4e5f\u6709\u5206\u53c9\uff1a\u529f\u80fd\u8bf7\u6c42\u8d70 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">tag_feature<\/code> \u6253\u6807\u7b7e\uff0c\u5176\u4ed6\u8d70 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">draft_reply<\/code> \u76f4\u63a5\u64b0\u7a3f\u3002<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>3. HITL\uff1ainterrupt \u6682\u505c\uff0cCommand \u6062\u590d<\/span><\/h3>\n<p style=\"margin: 1em 0px;\">Bug \u8def\u5f84\u6700\u7279\u6b8a\u2014\u2014\u5efa\u5b8c\u5de5\u5355\u540e\u8981<strong>\u6682\u505c\u7b49\u4eba\u5ba1<\/strong>\uff1a<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">def<\/span> <span class=\"hljs-title function_\" style=\"color: rgb(38, 139, 210);\">human_review<\/span>(<span class=\"hljs-params\">state: SupportState<\/span>) -&gt; <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">dict<\/span>:\n  <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\"\"Bug \u5de5\u5355\u4eba\u5de5\u5ba1\u6838\uff1ainterrupt \u6682\u505c\uff0cresume \u540e\u7ee7\u7eed\u3002\"\"\"<\/span>\n  payload = interrupt(\n    {\n      <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"kind\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"bug_ticket_review\"<\/span>,\n      <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"ticket_id\"<\/span>: state.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"ticket_id\"<\/span>),\n      <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"subject\"<\/span>: state.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"subject\"<\/span>),\n      <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"from_addr\"<\/span>: state.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"from_addr\"<\/span>),\n      <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"prompt\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"approve \u6216 reject \u8be5 Bug \u5de5\u5355\"<\/span>,\n    }\n  )\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">isinstance<\/span>(payload, <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">dict<\/span>):\n    decision = <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>(payload.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"type\"<\/span>) <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">or<\/span> payload.get(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"decision\"<\/span>) <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">or<\/span> <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"approve\"<\/span>)\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">else<\/span>:\n    decision = <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">str<\/span>(payload <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">or<\/span> <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"approve\"<\/span>)\n  decision = decision.lower()\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> decision <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">not<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">in<\/span> (<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"approve\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"reject\"<\/span>):\n    decision = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"approve\"<\/span>\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">return<\/span> {\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"human_decision\"<\/span>: decision,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"reply_status\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"queued\"<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> decision == <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"approve\"<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">else<\/span> <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"skipped\"<\/span>,\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"trace\"<\/span>: _trace(state, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">f\"human_review:<span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{decision}<\/span>\"<\/span>),\n  }\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\uff1a&#8221;<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">interrupt()<\/code> \u662f\u4ec0\u4e48\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;LangGraph \u7684\u6682\u505c\u6307\u4ee4\u3002\u6267\u884c\u5230\u8fd9\u91cc\uff0c\u56fe\u4f1a<strong>\u51bb\u7ed3\u5f53\u524d\u72b6\u6001<\/strong>\uff0c\u628a payload \u629b\u7ed9\u8c03\u7528\u65b9\u3002\u4eba\u5728\u5916\u9762\u770b\u5b8c\u4fe1\u606f\uff0c\u7528 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">Command(resume=...)<\/code> \u628a\u51b3\u7b56\u585e\u56de\u53bb\uff0c\u56fe\u63a5\u7740\u8dd1\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u8fd9\u548c\u4e4b\u524d\u5b66\u7684 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">create_agent<\/code> + Middleware \u6709\u4ec0\u4e48\u533a\u522b\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">create_agent<\/code> \u7684 Middleware \u662f<strong>\u53d1\u4fe1\u524d\u62e6\u622a<\/strong>\u2014\u2014\u96f6\u4ef6\u7ea7\uff1b\u8fd9\u91cc\u7684 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">interrupt<\/code> \u662f<strong>\u56fe\u8282\u70b9\u7ea7\u6682\u505c<\/strong>\u2014\u2014\u603b\u88c5\u7ea7\u3002\u96f6\u4ef6\u548c\u603b\u88c5\u5bf9\u7167\u7740\u5b66\u3002&#8221;<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>4. \u7ec4\u88c5\u56fe\uff1aadd_node + add_edge<\/span><\/h3>\n<p style=\"margin: 1em 0px;\"><code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">graph.py<\/code> \u628a\u6240\u6709\u96f6\u4ef6\u62fc\u8d77\u6765\uff1a<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># graph.py<\/span>\n\n<span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">def<\/span> <span class=\"hljs-title function_\" style=\"color: rgb(38, 139, 210);\">build_graph<\/span>(<span class=\"hljs-params\">*, checkpointer: InMemorySaver | <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span> = <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span><\/span>):\n  g = StateGraph(SupportState)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"read_email\"<\/span>, read_email)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"classify_intent\"<\/span>, classify_intent)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"search_docs\"<\/span>, search_docs)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"tag_feature\"<\/span>, tag_feature)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"draft_reply\"<\/span>, draft_reply)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"finalize_auto\"<\/span>, finalize_auto)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"create_bug_ticket\"<\/span>, create_bug_ticket)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"human_review\"<\/span>, human_review)\n  g.add_node(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>, escalate_human)\n\n  g.add_edge(START, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"read_email\"<\/span>)\n  g.add_edge(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"read_email\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"classify_intent\"<\/span>)\n  g.add_conditional_edges(\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"classify_intent\"<\/span>,\n    route_after_classify,\n    {\n      <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"search_docs\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"search_docs\"<\/span>,\n      <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"create_bug_ticket\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"create_bug_ticket\"<\/span>,\n      <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>,\n    },\n  )\n  g.add_conditional_edges(\n    <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"search_docs\"<\/span>,\n    route_after_search,\n    {<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"tag_feature\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"tag_feature\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"draft_reply\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"draft_reply\"<\/span>},\n  )\n  g.add_edge(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"tag_feature\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"draft_reply\"<\/span>)\n  g.add_edge(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"draft_reply\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"finalize_auto\"<\/span>)\n  g.add_edge(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"finalize_auto\"<\/span>, END)\n  g.add_edge(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"create_bug_ticket\"<\/span>, <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"human_review\"<\/span>)\n  g.add_edge(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"human_review\"<\/span>, END)\n  g.add_edge(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"escalate_human\"<\/span>, END)\n\n  saver = checkpointer <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> checkpointer <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">is<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">not<\/span> <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">else<\/span> InMemorySaver()\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">return<\/span> g.<span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">compile<\/span>(checkpointer=saver)\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u9010\u884c\u8bfb\uff1a&#8221;\u5148 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">add_node<\/code> \u6ce8\u518c\u4e5d\u4e2a\u8282\u70b9\uff0c\u518d <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">add_edge<\/code> \u4e32\u8fb9\u3002\u76f4\u8fb9\u662f\u56fa\u5b9a\u8def\u5f84\uff0c<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">add_conditional_edges<\/code> \u662f\u5206\u53c9\u8def\u5f84\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5bf9\u3002\u6ce8\u610f <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">human_review<\/code> \u7528\u4e86 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">interrupt<\/code>\uff0c\u6240\u4ee5\u5fc5\u987b\u914d <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">checkpointer<\/code>\u2014\u2014\u5426\u5219\u6682\u505c\u540e\u72b6\u6001\u6ca1\u5730\u65b9\u5b58\uff0c\u6062\u590d\u65f6\u627e\u4e0d\u5230\u3002\u8fd9\u91cc\u7528 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">InMemorySaver<\/code>\uff0c\u751f\u4ea7\u6362 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">PostgresSaver<\/code>\u3002&#8221;<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>5. \u4ea4\u4e92\u5f0f CLI\uff1a\u8ba9 HITL \u53ef\u89e6\u6478<\/span><\/h3>\n<p style=\"margin: 1em 0px;\">\u56fe\u7ec4\u88c5\u597d\u4e86\uff0c\u600e\u4e48\u8dd1\uff1f<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">main.py<\/code> \u4e0d\u662f\u4e00\u952e\u811a\u672c\uff0c\u800c\u662f\u4e00\u4e2a<strong>\u4ea4\u4e92\u5f0f\u547d\u4ee4\u884c<\/strong>\uff1a<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-python\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># main.py\uff08\u6838\u5fc3\u5faa\u73af\uff09<\/span>\n\n<span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">def<\/span> <span class=\"hljs-title function_\" style=\"color: rgb(38, 139, 210);\">main<\/span>() -&gt; <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span>:\n  <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">print<\/span>(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"=== Day6 \u5ba2\u6237\u652f\u6301 Email Agent ===\"<\/span>)\n  app = build_graph()\n  pending_cfg: <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">dict<\/span> | <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span> = <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span>   <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># \u6682\u505c\u4e2d\u7684\u56fe\u914d\u7f6e<\/span>\n  seq = <span class=\"hljs-number\" style=\"color: rgb(203, 75, 22);\">0<\/span>\n\n  <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">while<\/span> <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">True<\/span>:\n    prompt = <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"\u5ba1\u6838&gt; \"<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> pending_cfg <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">is<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">not<\/span> <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">else<\/span> <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"&gt; \"<\/span>\n    line = <span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">input<\/span>(prompt).strip()\n\n    <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># ... \u547d\u4ee4\u89e3\u6790\uff08list \/ run \/ help \/ exit\uff09...<\/span>\n\n    <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># HITL\uff1a\u6682\u505c\u4e2d\u53ea\u63a5\u53d7\u5ba1\u6279<\/span>\n    <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> pending_cfg <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">is<\/span> <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">not<\/span> <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span>:\n      decision = _normalize_decision(cmd)  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># a\u2192approve, r\u2192reject<\/span>\n      out = app.invoke(Command(resume={<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"type\"<\/span>: decision}), pending_cfg)\n      _print_case(<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">f\"\u4eba\u5de5\u5ba1\u6838\u540e\u7ee7\u7eed\uff08<span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{decision}<\/span>\uff09\"<\/span>, out)\n      pending_cfg = <span class=\"hljs-literal\" style=\"color: rgb(203, 75, 22);\">None<\/span>\n      <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">continue<\/span>\n\n    <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># \u6b63\u5e38\u6267\u884c<\/span>\n    cfg = {<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"configurable\"<\/span>: {<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"thread_id\"<\/span>: <span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">f\"cli-<span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{seq}<\/span>-<span class=\"hljs-subst\" style=\"color: rgb(147, 161, 161);\">{email_id}<\/span>\"<\/span>}}\n    result = app.invoke(_empty_state(email_id), cfg)\n    <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">if<\/span> _has_interrupt(result):\n      _print_interrupt(_interrupt_payload(result))\n      pending_cfg = cfg  <span class=\"hljs-comment\" style=\"color: rgb(101, 123, 131);\"># \u8bb0\u4f4f\u914d\u7f6e\uff0c\u7b49\u4e0b\u4e00\u6b65\u6062\u590d<\/span>\n      <span class=\"hljs-keyword\" style=\"color: rgb(108, 113, 196);\">continue<\/span>\n\n    _print_case(mail[<span class=\"hljs-string\" style=\"color: rgb(133, 153, 0);\">\"subject\"<\/span>], result)\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\uff1a&#8221;\u8fd9\u4e2a\u8bbe\u8ba1\u5f88\u5de7\u5999\u2014\u2014<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">pending_cfg<\/code> \u4e3a <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">None<\/code> \u65f6\u662f\u6b63\u5e38\u8f93\u5165\uff0c\u4e0d\u4e3a <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">None<\/code> \u65f6\u5207\u6362\u5230 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">\u5ba1\u6838&gt;<\/code> \u63d0\u793a\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5bf9\u3002Bug \u8def\u5f84\u8d70\u5230 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">human_review<\/code> \u65f6\uff0c\u56fe\u4f1a <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">interrupt<\/code> \u6682\u505c\u3002<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">main.py<\/code> \u68c0\u6d4b\u5230\u6682\u505c\u540e\uff0c\u628a <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">cfg<\/code> \u5b58\u8fdb <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">pending_cfg<\/code>\uff0c\u4e0b\u4e00\u8f6e\u8f93\u5165\u63d0\u793a\u53d8\u6210 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">\u5ba1\u6838&gt;<\/code>\uff0c\u53ea\u63a5\u53d7 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">a\/approve<\/code> \u6216 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">r\/reject<\/code>\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u6062\u590d\u65f6\u5462\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u7528 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">Command(resume={\"type\": decision})<\/code> \u518d <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">invoke<\/code> \u4e00\u6b21\uff0c\u4f20\u540c\u4e00\u4e2a <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">thread_id<\/code>\u3002\u56fe\u4ece\u51bb\u7ed3\u70b9\u7ee7\u7eed\u6267\u884c\uff0c\u628a\u51b3\u7b56\u585e\u56de <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">interrupt()<\/code> \u7684\u8fd4\u56de\u503c\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u8865\u5145\uff1a&#8221;\u6ce8\u610f <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">_normalize_decision<\/code> \u505a\u4e86\u5bb9\u9519\u2014\u2014<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">a<\/code>\u3001<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">approve<\/code>\u3001<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">y<\/code>\u3001<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">yes<\/code> \u90fd\u6620\u5c04\u5230 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">approve<\/code>\uff1b\u8f93\u5165\u4e71\u4e03\u516b\u7cdf\u7684\u8fd4\u56de <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">None<\/code>\uff0c\u63d0\u793a\u91cd\u65b0\u8f93\u5165\u3002<strong>\u4eba\u673a\u4ea4\u4e92\u7684\u9c81\u68d2\u6027\u548c\u56fe\u903b\u8f91\u4e00\u6837\u91cd\u8981\u3002<\/strong>&#8220;<\/p>\n<hr>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u5b8c\u6574\u8fd0\u884c\uff1a\u4ea4\u4e92\u5f0f\u4e94\u573a\u666f\u9a8c\u6536<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\n<p style=\"margin: 1em 0px;\">&#8220;\u542f\u52a8 CLI\uff0c\u9010\u5c01\u5904\u7406\u90ae\u4ef6\uff1a&#8221;<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs language-bash\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\"><span class=\"hljs-built_in\" style=\"color: rgb(42, 161, 152);\">cd<\/span> course-langgraph\/day6-customer-support\npython main.py\n<\/code><\/pre>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\">=== Day6 \u5ba2\u6237\u652f\u6301 Email Agent ===\n\u547d\u4ee4:\n  list        \u5217\u51fa\u6837\u4f8b\u90ae\u4ef6\n  run &lt;email_id&gt;  \u5904\u7406\u4e00\u5c01\u90ae\u4ef6\uff08\u5982 run e_bug\uff09\n  &lt;email_id&gt;    \u540c\u4e0a\u7b80\u5199\uff08\u5982 e_password\uff09\n  help        \u663e\u793a\u5e2e\u52a9\n  \/exit | quit    \u9000\u51fa\n\nHITL \u6682\u505c\u65f6\uff08Bug \u5de5\u5355\uff09:\n  a | approve     \u5ba1\u6279\u901a\u8fc7\u5e76\u6062\u590d\u6267\u884c\n  r | reject    \u62d2\u7edd\u5e76\u6062\u590d\u6267\u884c\n\n\u6837\u4f8b\u90ae\u4ef6: e_password, e_bug, e_billing, e_feature, e_tech\n\n&gt; list\n  e_password: \u65e0\u6cd5\u767b\u5f55\uff0c\u9700\u8981\u91cd\u7f6e\u5bc6\u7801  (from user@example.com)\n  e_bug: \u5bfc\u51fa PDF \u65f6\u5ba2\u6237\u7aef\u5d29\u6e83  (from pm@example.com)\n  e_billing: \u91cd\u590d\u6263\u6b3e\u7d27\u6025\u5904\u7406  (from cfo@example.com)\n  e_feature: \u5e0c\u671b\u589e\u52a0\u6697\u9ed1\u6a21\u5f0f  (from designer@example.com)\n  e_tech: API \u95f4\u6b47\u6027\u8fd4\u56de 504  (from dev@example.com)\n\n&gt; e_password\n--- \u65e0\u6cd5\u767b\u5f55\uff0c\u9700\u8981\u91cd\u7f6e\u5bc6\u7801 ---\n  intent=password_reset urgency=low next=search_docs\n  reply_status=auto_sent\n  draft: \u60a8\u597d\uff0c\u5173\u4e8e\u300c\u65e0\u6cd5\u767b\u5f55\uff0c\u9700\u8981\u91cd\u7f6e\u5bc6\u7801\u300d\uff1a\u5bc6\u7801\u91cd\u7f6e\uff1a\u767b\u5f55\u9875\u70b9\u51fb\u300c\u5fd8\u8bb0\u5bc6\u7801\u300d\uff0c\u9a8c\u8bc1\u90ae\u7bb1\u540e 15 \u5206\u949f\u5185\u6709\u6548\u3002\u5982\u4ecd\u65e0\u6cd5\u89e3\u51b3\u8bf7\u56de\u590d\u672c\u90ae\u4ef6\u3002\n  trace: read_email:e_password \u2192 classify:password_reset\/low\u2192search_docs \u2192 search_docs:hits=1 \u2192 draft_reply:auto_sent \u2192 finalize:auto_sent\n\n&gt; run e_bug\n--- HITL \u6682\u505c\uff1a\u7b49\u5f85\u4eba\u5de5\u5ba1\u6838 ---\n  kind: bug_ticket_review\n  ticket_id: BUG-1001\n  subject: \u5bfc\u51fa PDF \u65f6\u5ba2\u6237\u7aef\u5d29\u6e83\n  from_addr: pm@example.com\n  prompt: approve \u6216 reject \u8be5 Bug \u5de5\u5355\n  \u8f93\u5165 a\/approve \u901a\u8fc7\uff0c\u6216 r\/reject \u62d2\u7edd\u3002\n\n\u5ba1\u6838&gt; a\n  resume: approve\n--- \u4eba\u5de5\u5ba1\u6838\u540e\u7ee7\u7eed\uff08approve\uff09 ---\n  intent=bug urgency=high next=create_bug_ticket\n  reply_status=queued ticket=BUG-1001\n  human_decision=approve\n  trace: read_email:e_bug \u2192 classify:bug\/high\u2192create_bug_ticket \u2192 create_bug_ticket:BUG-1001 \u2192 human_review:approve\n\n&gt; e_billing\n--- \u91cd\u590d\u6263\u6b3e\u7d27\u6025\u5904\u7406 ---\n  intent=billing urgency=critical next=escalate_human\n  reply_status=escalated\n  draft: [\u5df2\u5347\u7ea7\u4eba\u5de5] intent=billing urgency=critical from=cfo@example.com\n  trace: read_email:e_billing \u2192 classify:billing\/critical\u2192escalate_human \u2192 escalate_human:billing\n\n&gt; e_feature\n--- \u5e0c\u671b\u589e\u52a0\u6697\u9ed1\u6a21\u5f0f ---\n  intent=feature urgency=low next=search_docs\n  reply_status=auto_sent feature_tag=feature:dark-mode\n  draft: \u60a8\u597d\uff0c\u5df2\u767b\u8bb0\u529f\u80fd\u8bf7\u6c42\uff08feature:dark-mode\uff09\u3002\u53c2\u8003\uff1adark: \u5916\u89c2\u8bbe\u7f6e\u2026\u611f\u8c22\u53cd\u9988\u3002\n  trace: read_email:e_feature \u2192 classify:feature\/low\u2192search_docs \u2192 search_docs:hits=1 \u2192 tag_feature:feature:dark-mode \u2192 draft_reply:auto_sent \u2192 finalize:auto_sent\n\n&gt; e_tech\n--- API \u95f4\u6b47\u6027\u8fd4\u56de 504 ---\n  intent=tech_complex urgency=high next=escalate_human\n  reply_status=escalated followup_at=T+1 \u6280\u672f\u652f\u6301\u56de\u8bbf\n  trace: read_email:e_tech \u2192 classify:tech_complex\/high\u2192escalate_human \u2192 escalate_human:tech_complex\n\n&gt; \/exit\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u9010\u6761\u5bf9\u7167\uff1a&#8221;\u4e94\u6761\u8def\u5f84\u5168\u901a\u2014\u2014\u5bc6\u7801\u91cd\u7f6e\u81ea\u52a8\u56de\u590d\uff0cBug \u5efa\u5355\u540e\u4eba\u5ba1\uff0c\u6263\u6b3e\u548c 504 \u76f4\u63a5\u5347\u7ea7\u4eba\u5de5\uff0c\u529f\u80fd\u8bf7\u6c42\u6253\u6807\u7b7e\u518d\u56de\u590d\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u6ce8\u610f Bug \u8def\u5f84\u2014\u2014<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">run e_bug<\/code> \u540e\u63d0\u793a\u53d8\u6210 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">\u5ba1\u6838&gt;<\/code>\u3002\u4f60\u770b <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">ticket_id: BUG-1001<\/code>\u3001<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">subject<\/code>\u3001<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">from_addr<\/code> \u90fd\u663e\u793a\u51fa\u6765\u4e86\uff0c\u4eba\u770b\u5b8c\u518d\u51b3\u5b9a approve \u8fd8\u662f reject\u3002\u8f93\u5165 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">a<\/code> \u540e\uff0c<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">Command(resume={\"type\": \"approve\"})<\/code> \u628a\u51b3\u7b56\u585e\u56de\u53bb\uff0c\u56fe\u7ee7\u7eed\u8dd1\u3002&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;\u5982\u679c reject \u5462\uff1f&#8221;<\/p>\n<p style=\"margin: 1em 0px;\">&#8220;<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">reply_status<\/code> \u53d8\u6210 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">skipped<\/code>\uff0c\u5de5\u5355\u4e0d\u53d1\u51fa\u3002\u4f46 trace \u91cc\u4ecd\u7136\u8bb0\u5f55\u4e86 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">human_review:reject<\/code>\u2014\u2014<strong>\u5ba1\u8ba1\u53ef\u8ffd\u6eaf<\/strong>\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 rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4e3a\u4f55\u4e0d\u662f\u4e00\u6761 Prompt Chain<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\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;\">\n<thead>\n<tr>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">\u7ef4\u5ea6<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">\u7ebf\u6027 A\u2192B\u2192C<\/th>\n<th style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top; font-weight: bold; background-color: rgb(255, 249, 249); color: rgb(239, 112, 96);\">\u672c\u56fe<\/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 rgb(239, 112, 96); vertical-align: top;\">\u8def\u5f84<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u6bcf\u5c01\u4fe1\u540c\u4e00\u5957\u6b65\u9aa4<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u6309 intent \u5206\u6d41<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u98ce\u9669\u63a7\u5236<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u96be\u8df3\u8fc7\u300c\u81ea\u52a8\u56de\u590d\u300d<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u7d27\u6025\u8d26\u5355\u76f4\u8fbe\u4eba\u5de5<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u5ba1\u8ba1<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u8981\u9760\u65e5\u5fd7\u4e8b\u540e\u62fc<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u62d3\u6251\u5373\u6d41\u7a0b\u8bf4\u660e<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u6a21\u5f0f\u7ec4\u5408<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u53ea\u4f1a Chaining<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">Routing + HITL + \u5c40\u90e8 Chaining<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u53ef\u6269\u5c55<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u52a0\u573a\u666f\u8981\u6539\u903b\u8f91<\/td>\n<td style=\"font-size: 0.75em; padding: 9px 12px; line-height: 22px; border: 1px solid rgb(239, 112, 96); vertical-align: top;\">\u52a0\u8282\u70b9 + \u6539\u6761\u4ef6\u8fb9<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote style=\"margin: 20px 0px; display: block; font-size: 0.9em; overflow: auto; border-left: 3px solid rgb(239, 112, 96); color: rgb(106, 115, 125); padding: 10px 10px 10px 20px; background: rgb(255, 249, 249);\">\n<p style=\"margin: 1em 0px;\">\u94fe\u9002\u5408\u300c\u6b65\u9aa4\u6c38\u8fdc\u4e00\u6837\u300d\uff1b\u5ba2\u670d\u90ae\u4ef6\u7684\u6b65\u9aa4<strong>\u6545\u610f\u4e0d\u4e00\u6837<\/strong>\u2014\u2014\u6240\u4ee5\u7528\u56fe\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 rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u4e09\u4e2a\u5e38\u89c1\u5751<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>\u5751 1\uff1a\u7528\u4e00\u6761 Chain\u300c\u5148\u56de\u4fe1\u518d\u5206\u7c7b\u300d<\/span><\/h3>\n<p style=\"margin: 1em 0px;\"><strong>\u75c7\u72b6<\/strong>\uff1a\u7d27\u6025\u8d26\u5355\u5df2\u81ea\u52a8\u53d1\u51fa\u5b89\u629a\u90ae\u4ef6\uff0c\u8d22\u52a1\u88ab\u52a8\u3002<\/p>\n<p style=\"margin: 1em 0px;\"><strong>\u539f\u56e0<\/strong>\uff1a\u628a Chaining \u5f53\u9ed8\u8ba4\u2014\u2014\u8bfb\u4fe1 \u2192 \u68c0\u7d22 \u2192 \u56de\u4fe1\uff0c\u4e00\u6761\u76f4\u7ebf\u3002<\/p>\n<p style=\"margin: 1em 0px;\"><strong>\u4fee\u6cd5<\/strong>\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">classify<\/code> \u5fc5\u987b\u5728\u81ea\u52a8\u56de\u590d\u4e4b\u524d\uff1b<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">critical<\/code> \u610f\u56fe\u76f4\u63a5\u8def\u7531\u5230 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">escalate_human<\/code>\uff0c\u8df3\u8fc7\u81ea\u52a8\u56de\u4fe1\u94fe\u3002<\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>\u5751 2\uff1a\u6240\u6709\u51b3\u7b56\u53ea\u5199\u5728 Prompt \u91cc<\/span><\/h3>\n<p style=\"margin: 1em 0px;\"><strong>\u75c7\u72b6<\/strong>\uff1a\u56fe\u4e0a\u4e00\u6761\u76f4\u7ebf\uff0c\u5206\u53c9\u5168\u9760\u6a21\u578b\u81ea\u89c9\u3002\u6362\u4e2a\u6a21\u578b\u884c\u4e3a\u5c31\u53d8\u4e86\u3002<\/p>\n<p style=\"margin: 1em 0px;\"><strong>\u539f\u56e0<\/strong>\uff1aThink \u9636\u6bb5\u5077\u61d2\uff0c\u6ca1\u6807\u51b3\u7b56\u8282\u70b9\u3002\u628a&#8221;\u5982\u679c\u662f Bug \u5c31\u5efa\u5de5\u5355&#8221;\u5199\u5728 prompt \u91cc\uff0c\u6a21\u578b\u5076\u5c14\u4e0d\u542c\u3002<\/p>\n<p style=\"margin: 1em 0px;\"><strong>\u4fee\u6cd5<\/strong>\uff1a\u81f3\u5c11\u6709\u4e00\u4e2a\u663e\u5f0f <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">classify_intent<\/code> \u8282\u70b9\uff1b\u8def\u7531\u7ed3\u679c\u5199\u8fdb State\uff08<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">next_action<\/code>\uff09\uff0c\u7528\u6761\u4ef6\u8fb9\u63a7\u5236\u4e0b\u4e00\u8df3\u3002<strong>\u51b3\u7b56\u662f\u62d3\u6251\uff0c\u4e0d\u662f prompt\u3002<\/strong><\/p>\n<h3 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em;\"><span>\u5751 3\uff1ainterrupt \u4e0d\u914d checkpointer<\/span><\/h3>\n<p style=\"margin: 1em 0px;\"><strong>\u75c7\u72b6<\/strong>\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">human_review<\/code> \u91cc\u8c03\u4e86 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">interrupt()<\/code>\uff0c\u4f46\u6062\u590d\u65f6\u62a5\u9519&#8221;\u627e\u4e0d\u5230\u72b6\u6001&#8221;\u3002<\/p>\n<p style=\"margin: 1em 0px;\"><strong>\u539f\u56e0<\/strong>\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">interrupt<\/code> \u4f9d\u8d56 checkpointer \u6301\u4e45\u5316\u4e2d\u95f4\u72b6\u6001\u3002\u6ca1\u914d saver\uff0c\u6682\u505c\u540e\u72b6\u6001\u4e22\u5931\u3002<\/p>\n<p style=\"margin: 1em 0px;\"><strong>\u4fee\u6cd5<\/strong>\uff1a<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">g.compile(checkpointer=InMemorySaver())<\/code>\uff0c\u5e76\u4e14\u6bcf\u6b21 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">invoke<\/code> \u4f20\u540c\u4e00\u4e2a <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">thread_id<\/code>\u3002\u751f\u4ea7\u6362 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">PostgresSaver<\/code>\u3002<\/p>\n<hr>\n<h2 style=\"margin: 1.2em 0px 1em; padding: 0px; font-weight: bold; font-size: 1.3em; border-bottom: 2px solid rgb(239, 112, 96); display: flex;\"><span style=\"display: inline-block; font-weight: bold; background: rgb(239, 112, 96); color: rgb(255, 255, 255); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px; margin-right: 3px;\">\u603b\u7ed3<\/span><\/p>\n<section style=\"border-bottom: 36px solid rgb(239, 235, 233); border-right: 20px solid transparent; align-self: flex-end; height: 0px;\"><\/section>\n<\/h2>\n<p style=\"margin: 1em 0px;\">\u8001\u5f20\u8bf4\uff1a&#8221;LangGraph \u4e13\u9898\u56db\u7bc7\u8d70\u5b8c\uff1a\u4e3a\u4f55 Graph \u2192 \u4e09\u8981\u7d20 \u2192 \u4e03\u6a21\u5f0f \u2192 <strong>\u600e\u4e48\u60f3\u4e00\u5f20\u4e1a\u52a1\u56fe<\/strong>\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>\u4e94\u9636\u6bb5\u601d\u7ef4<\/strong> \u2014\u2014 \u62c6 Node \u2192 \u5b9a\u804c\u8d23 \u2192 \u8bbe\u8ba1 State \u2192 \u5199\u8282\u70b9\u5f02\u5e38 \u2192 \u8fde Graph\u3002\u524d\u4e09\u6b65\u843d\u7eb8\u9762\uff0c\u540e\u4e24\u6b65\u843d\u4ee3\u7801\u3002<\/section>\n<\/li>\n<li>\n<section><strong>\u5ba2\u670d\u8981\u7528\u56fe<\/strong> \u2014\u2014 \u4e94\u573a\u666f\u4e94\u6761\u8def\uff1b\u94fe\u65e0\u6cd5\u8868\u8fbe\u300e\u6709\u7684\u4fe1\u7981\u6b62\u81ea\u52a8\u56de\u300f\u3002\u51b3\u7b56\u70b9\u5fc5\u987b\u663e\u5f0f\u5b58\u5728\uff0c\u4e0d\u80fd\u85cf\u5728 prompt \u91cc\u3002<\/section>\n<\/li>\n<li>\n<section><strong>\u8bbe\u8ba1\u5148\u4e8e\u4ee3\u7801\uff0c\u4ee3\u7801\u5df2\u53ef\u9a8c\u6536<\/strong> \u2014\u2014 \u62d3\u6251 + State + \u8def\u5f84\u8868\u4e09\u4ef6\u5957\uff1b\u4ea4\u4e92\u5f0f CLI \u8ba9 HITL \u53ef\u89e6\u6478\u2014\u2014<code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">\u5ba1\u6838&gt;<\/code> \u63d0\u793a\u8ba9\u4eba\u5ba1\u4e0d\u518d\u662f\u4ee3\u7801\u91cc\u7684\u6982\u5ff5\uff0c\u800c\u662f\u771f\u5b9e\u64cd\u4f5c\u3002HITL \u96f6\u4ef6\u89c1 day12\uff0c\u603b\u88c5\u89c1 <code style=\"font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; font-size: 0.9em; overflow-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0px 2px; color: rgb(239, 112, 96); background-color: rgba(27, 31, 35, 0.05); word-break: break-all;\">day6-customer-support\/<\/code>\u3002&#8221;<\/section>\n<\/li>\n<\/ol>\n<p style=\"margin: 1em 0px;\">LangGraph \u4e13\u9898\u8fdb\u5ea6\uff1a<\/p>\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: rgb(0, 43, 54); max-width: 100%; overflow-wrap: normal;\"><section style=\"display: block; background-repeat: no-repeat; width: 100%; height: 16px;\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" version=\"1.1\" width=\"45\" height=\"12\" viewBox=\"0 0 450 130\"><ellipse cx=\"65\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(220,60,54)\" stroke-width=\"2\" fill=\"rgb(237,108,96)\"><\/ellipse><ellipse cx=\"225\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(218,151,33)\" stroke-width=\"2\" fill=\"rgb(247,193,81)\"><\/ellipse><ellipse cx=\"385\" cy=\"65\" rx=\"50\" ry=\"52\" stroke=\"rgb(27,161,37)\" stroke-width=\"2\" fill=\"rgb(100,200,86)\"><\/ellipse><\/svg><\/section><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, &quot;Liberation Mono&quot;, &quot;Roboto Mono&quot;, &quot;Courier New&quot;, &quot;Microsoft YaHei&quot;, monospace; display: block; margin: 0.5em; padding: 3px 5px; overflow-x: auto; color: rgb(147, 161, 161); background: rgb(0, 43, 54); overflow-wrap: normal;\">01 \u4ecb\u7ecd\uff08\u53ef\u9760\u5ea6 \u00d7 \u81ea\u4e3b\u6027\uff09\n    \u2193\n02 \u4e09\u8981\u7d20\uff08State \/ Node \/ Edge\uff09\n    \u2193\n03 \u4e03\u79cd WorkFlow\uff08\u6a21\u5f0f\u83dc\u5355\uff09\n    \u2193\n04 Think in LG\uff1a\u5ba2\u670d Email Agent\uff08\u672c\u7bc7\u6536\u675f\uff09\n    \u2193\n\u843d\u5730\uff1aday6-customer-support\uff08\u4ea4\u4e92\u5f0f CLI + \u4e94\u573a\u666f + Bug HITL\uff09\n\u9009\u4fee\uff1aPostgres \/ Studio \/ \u591a Agent handoff\n<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u5c0f\u660e\u628a\u4e94\u573a\u666f\u8def\u5f84\u8868\u62cd\u8fdb\u7eaa\u8981\uff1a&#8221;\u8bbe\u8ba1\u8bf4\u660e\u6309\u8fd9\u5f20\u4ea4\uff1bCLI \u6211\u4eca\u665a\u9010\u5c01\u8dd1\u7eff\u3002&#8221;<\/p>\n<blockquote style=\"margin: 20px 0px; display: block; font-size: 0.9em; overflow: auto; border-left: 3px solid rgb(239, 112, 96); color: rgb(106, 115, 125); padding: 10px 10px 10px 20px; background: rgb(255, 249, 249);\">\n<p style=\"margin: 1em 0px;\"><strong>\u5148\u753b\u5bf9\u8def\uff0c\u518d\u5199\u4f1a\u8dd1\u7684\u8282\u70b9\u3002Think in LangGraph\uff0c\u60f3\u7684\u662f\u4e1a\u52a1\u62d3\u6251\uff0c\u4e0d\u662f\u53c8\u4e00\u4e2a while True\u3002<\/strong><\/p>\n<\/blockquote>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0a\u7bc7\u4f60\u5b66\u4f1a\u4e86\u4e03\u79cd WorkFlow \u6a21\u5f0f\uff0c\u80fd\u70b9\u540d\u3001\u80fd\u753b\u56fe\u3002\u4f46\u6a21\u5f0f\u53ea\u662f\u83dc\u8c31\u2014\u2014\u771f\u7ed9\u4f60\u4e00\u5c01\u5ba2\u670d\u90ae\u4ef6\uff0c\u4f60\u80fd\u753b\u51fa\u5b83\u8be5\u8d70 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3928,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[163,165],"tags":[167,168,170,210],"_links":{"self":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3927"}],"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=3927"}],"version-history":[{"count":1,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3927\/revisions"}],"predecessor-version":[{"id":3929,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3927\/revisions\/3929"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/media\/3928"}],"wp:attachment":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3927"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3927"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}