{"id":25298,"date":"2026-06-13T14:10:28","date_gmt":"2026-06-13T14:10:28","guid":{"rendered":"https:\/\/umang.pk\/2026\/06\/13\/%d9%85%d8%a7%d8%b3%d9%b9%d8%b1%d8%a7-%d8%a8%d9%85%d9%82%d8%a7%d8%a8%d9%84%db%81-%d9%84%db%8c%d9%86%da%af-%da%86%db%8c%d9%86-%d8%a8%d9%84%da%88%d9%86%da%af-ai-%d8%a7%db%8c%d8%ac%d9%86%d9%b9-%d9%be\/"},"modified":"2026-06-13T14:10:29","modified_gmt":"2026-06-13T14:10:29","slug":"%d9%85%d8%a7%d8%b3%d9%b9%d8%b1%d8%a7-%d8%a8%d9%85%d9%82%d8%a7%d8%a8%d9%84%db%81-%d9%84%db%8c%d9%86%da%af-%da%86%db%8c%d9%86-%d8%a8%d9%84%da%88%d9%86%da%af-ai-%d8%a7%db%8c%d8%ac%d9%86%d9%b9-%d9%be","status":"publish","type":"post","link":"https:\/\/umang.pk\/ur\/2026\/06\/13\/%d9%85%d8%a7%d8%b3%d9%b9%d8%b1%d8%a7-%d8%a8%d9%85%d9%82%d8%a7%d8%a8%d9%84%db%81-%d9%84%db%8c%d9%86%da%af-%da%86%db%8c%d9%86-%d8%a8%d9%84%da%88%d9%86%da%af-ai-%d8%a7%db%8c%d8%ac%d9%86%d9%b9-%d9%be\/","title":{"rendered":"\u0645\u0627\u0633\u0679\u0631\u0627 \u0628\u0645\u0642\u0627\u0628\u0644\u06c1 \u0644\u06cc\u0646\u06af \u0686\u06cc\u0646: \u0628\u0644\u0688\u0646\u06af AI \u0627\u06cc\u062c\u0646\u0679 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u062a\u062c\u0632\u06cc\u06c1"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0627\u06cc\u06a9 \u06c1\u0641\u062a\u06c1 \u067e\u06c1\u0644\u06d2 \u0645\u06cc\u06ba \u0646\u06d2 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0679\u0648\u06cc\u0679 \u062f\u06cc\u06a9\u06be\u0627:<\/p>\n<p>\u06c1\u0645 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0627\u0628\u06be\u06cc \u0633\u067e\u0648\u0631\u0679 \u0645\u06cc\u0634 \u0644\u0627\u0646\u0686 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0645\u0644\u0679\u06cc \u06a9\u0631\u0627\u06cc\u06c1 \u062f\u0627\u0631 AI \u0633\u067e\u0648\u0631\u0679 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u062c\u0648 \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06c1\u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0627\u0646 \u067e\u0679 \u0686\u0627\u06c1\u06cc\u06d2 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u0627\u0633\u06d2 \u067e\u0633\u0646\u062f \u06a9\u06cc\u0627 <code>.dowhile()<\/code> \u0644\u0648\u067e\u0633\u060c \u0627\u0646 \u067e\u0679 \u0633\u0679\u06cc\u067e \u0627\u0633\u06a9\u06cc\u0645\u0627 \u0627\u0648\u0631 \u0637\u0631\u06cc\u0642\u06d2 <code>createWorkflow<\/code> \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u0631\u06a9\u06be\u0627 \u06af\u06cc\u0627\u06d4 \u062c\u0648 \u0686\u06cc\u0632 \u0645\u062c\u06be\u06d2 \u067e\u0633\u0646\u062f \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc \u0648\u06c1 \u0679\u0648\u06a9\u0646 \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u062a\u06be\u0627\u06d4 \u0627\u06cc\u062c\u0646\u0679 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u060c \u0642\u0637\u0639 \u0646\u0638\u0631 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u06a9\u0633\u06cc \u0679\u0648\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06cc\u0627 \u0646\u06c1\u06cc\u06ba\u060c \u0686\u0627\u0631 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06d2 \u0679\u0648\u0644 \u0644\u0648\u067e \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0645\u06cc\u06ba \u06a9\u0626\u06cc \u0633\u06cc\u06a9\u0646\u0688\u0632 \u062a\u06a9 \u0627\u0636\u0627\u0641\u06cc \u062a\u0627\u062e\u06cc\u0631 \u0627\u0648\u0631 \u06c1\u0632\u0627\u0631\u0648\u06ba \u0627\u0636\u0627\u0641\u06cc \u0679\u0648\u06a9\u0646\u0632 \u0641\u06cc \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0634\u0627\u0645\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633\u06cc \u0648\u0642\u062a\u060c \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u0644\u06af \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u06cc\u0646\u06af \u0686\u06cc\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06cc\u06a9\u06be \u0631\u06c1\u0627 \u062a\u06be\u0627 \u062c\u0648 \u0645\u06cc\u06ba \u0634\u0631\u0648\u0639 \u06a9\u0631 \u0631\u06c1\u0627 \u062a\u06be\u0627\u06d4 \u0637\u0631\u06cc\u0642\u06c1 \u0645\u0633\u062a\u0631\u0627 \u0633\u06d2 \u0628\u0627\u0644\u06a9\u0644 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2\u06d4 \u0628\u0627\u0636\u0627\u0628\u0637\u06c1 \u0642\u062f\u0645\u06cc \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2\u060c \u06c1\u0645 \u0627\u06cc\u06a9 \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0688 \u06af\u0631\u0627\u0641 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u0646\u0648\u0688\u0633 \u0633\u0627\u062f\u06c1 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0627\u0641\u0639\u0627\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0631\u06cc\u0627\u0633\u062a \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0686\u06cc\u0632 \u06c1\u06d2\u06d4<\/p>\n<p>\u0648\u0639\u062f\u06c1 \u0632\u06cc\u0627\u062f\u06c1 \u062c\u0627\u0645\u0639 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u0627\u0648\u0631 \u06c1\u0631 \u0645\u0627\u0688\u0644 \u06a9\u0627\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u067e\u0631 \u0648\u0627\u0636\u062d \u06a9\u0646\u0679\u0631\u0648\u0644 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u062a\u06be\u0627 \u062c\u0648 \u0645\u06cc\u06ba \u0646\u06d2 \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u06cc\u06a9\u06be\u0627 \u0679\u0648\u06a9\u0646 \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0631\u0633\u062a \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0644\u06c1\u0630\u0627 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0627\u0648\u0631 \u0627\u062d\u0633\u0627\u0633 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u06c1\u0645 \u0646\u06d2 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0628\u0646\u0627\u0626\u06cc \u0627\u0648\u0631 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u06cc \u067e\u06cc\u0645\u0627\u0626\u0634 \u06a9\u06cc\u06d4 \u0648\u06c1\u06cc \u067e\u0627\u0646\u0686 \u0645\u0631\u062d\u0644\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u062a\u062d\u0642\u06cc\u0642 \u0627\u0648\u0631 \u062a\u0631\u06a9\u06cc\u0628 \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 (\u06c1\u0631 \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0622\u0644\u06c1 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2): \u0679\u0648\u06a9\u0646 \u0641\u06cc \u0627\u0633\u0679\u06cc\u062c\u060c \u0641\u06cc \u0627\u0633\u0679\u06cc\u062c \u0645\u06cc\u06ba \u062a\u0627\u062e\u06cc\u0631\u060c \u06c1\u0631 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u06a9\u0644\u0627\u0688 \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06d2 \u06af\u0626\u06d2 \u0642\u0637\u0639\u06cc \u0627\u0634\u0627\u0631\u06d2\u060c \u062e\u0627\u0645 Tavily \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06af\u0631\u06cc\u0688\u0646\u06af \u0633\u0633\u0679\u0645 \u062c\u0648 \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 7 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0642\u0633\u0645 \u06a9\u06d2 \u0627\u0633\u06a9\u0648\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u0645 Convex \u0627\u0648\u0631 Next.js \u067e\u0631 \u0627\u06cc\u06a9 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0648\u06cc\u0628 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0635\u0627\u0631\u0641 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0645\u0648\u0636\u0648\u0639 \u067e\u0631 \u062c\u0627 \u0633\u06a9\u06cc\u06ba \u0627\u0648\u0631 \u0648\u06c1\u0627\u06ba \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u06c1\u0631 \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u0648 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/06\/1781359827_937_\u0645\u0627\u0633\u0679\u0631\u0627-\u0628\u0645\u0642\u0627\u0628\u0644\u06c1-\u0644\u06cc\u0646\u06af-\u0686\u06cc\u0646-\u0628\u0644\u0688\u0646\u06af-AI-\u0627\u06cc\u062c\u0646\u0679-\u067e\u0627\u0626\u067e-\u0644\u0627\u0626\u0646-\u0627\u0648\u0631.png\" alt=\"\u0645\u0627\u0633\u0679\u0631\u0627 \u0628\u0645\u0642\u0627\u0628\u0644\u06c1 \u0644\u06cc\u0646\u06af \u0686\u06cc\u0646 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0645\u06a9\u0645\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0645\u0627\u0633\u0679\u0631\u0627 \u0646\u06d2 9,846 \u0679\u0648\u06a9\u0646\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 25.2 \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba 9\/10 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u06cc\u0627 \u0627\u0648\u0631 LangChain \u0646\u06d2 7,875 \u0679\u0648\u06a9\u0646\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 19.8 \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba 8\/10 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u06cc\u0627\u06d4 \" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" What is the real cost of running AI agents in title=\"\"><\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<p>\u0627\u0633 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062e\u0648\u062f \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0686\u0627\u0631 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc:<\/p>\n<ul>\n<li>\n<p><strong>Node.js 22+<\/strong>: \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u067e\u06cc\u06a9\u062c \u062c\u062f\u06cc\u062f \u062a\u0631\u06cc\u0646 TypeScript \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0648\u0688 \u06a9\u06d2 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0648\u0631\u0698\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u0646\u062a\u06be\u0631\u0648\u067e\u06a9 API \u06a9\u0644\u06cc\u062f<\/strong>: \u0622\u067e \u0627\u0633\u06d2 console.anthropic.com \u067e\u0631 \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 Claude Haiku 4.5 \u0633\u0633\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9 \u06a9\u0648 12 \u0628\u0627\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u0631\u0641 \u0686\u0646\u062f \u0633\u06cc\u0646\u0679 \u062e\u0631\u0686 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>Tavily API \u06a9\u0644\u06cc\u062f<\/strong>: \u0622\u067e \u0627\u0633\u06d2 tavily.com \u067e\u0631 \u062e\u0631\u06cc\u062f \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0641\u062a \u062f\u0631\u062c\u06d2 \u0645\u06cc\u06ba \u06c1\u0631 \u0645\u0627\u06c1 1,000 \u062a\u0644\u0627\u0634\u06cc\u06ba \u0645\u0644\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062c\u0648 \u0627\u0633 \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9 \u06a9\u0648 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u062d\u062f\u0628 \u0627\u06a9\u0627\u0624\u0646\u0679<\/strong>: \u0622\u067e Convex.dev \u067e\u0631 \u0633\u0627\u0626\u0646 \u0627\u067e \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0641\u062a \u062f\u0631\u062c\u06d2 \u0645\u06cc\u06ba \u06cc\u06c1\u0627\u06ba \u0633\u0628 \u06a9\u0686\u06be \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0648\u06c1 \u06c1\u06cc\u06ba \u062a\u0648\u060c \u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u06a9\u06d2 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0633\u06cc\u0679\u0646\u06af\u0632 \u0633\u06cc\u06a9\u0634\u0646 \u0622\u067e \u06a9\u0648 \u0627\u0646 \u06a9\u06d2 \u0635\u062d\u06cc\u062d \u0645\u0642\u0627\u0645 \u06a9\u06cc \u0637\u0631\u0641 \u0631\u06c1\u0646\u0645\u0627\u0626\u06cc \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0645\u06cc\u06ba \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0648\u06ba\u060c \u06cc\u06c1 \u062c\u0627\u0646\u0646\u0627 \u0645\u062f\u062f\u06af\u0627\u0631 \u06c1\u06d2 \u06a9\u06c1 \u0645\u06cc\u06ba \u0646\u06d2 \u062c\u0648 \u0679\u0648\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0648\u06c1 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u0627\u0633\u0679\u06cc\u06a9 \u0645\u06cc\u06ba \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u06cc\u06c1 \u0633\u0628 \u062c\u0627\u0646\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>Mastra AI \u067e\u0631 \u0645\u0628\u0646\u06cc \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u0627\u0648\u0631 \u0627\u06cc\u062c\u0646\u0679\u0633 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 TypeScript \u06a9\u0627 \u067e\u06c1\u0644\u0627 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06c1\u06d2\u06d4 \u062e\u06cc\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u0646 \u067e\u0679 \u0627\u0648\u0631 \u0622\u0624\u0679 \u067e\u0679 \u0627\u0633\u06a9\u06cc\u0645\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0645\u0631\u0627\u062d\u0644 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0633\u06d2 \u062c\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u06d2 \u0627\u06cc\u06a9 \u062e\u0635\u0648\u0635\u06cc\u062a \u06cc\u0627 \u0631\u06a9\u0627\u0648\u0679 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062a\u0628\u0635\u0631\u06d2 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba \u0627\u0633 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc\u0627 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0644\u06cc\u0646\u06af \u0686\u06cc\u0646<\/strong> \u06cc\u06c1 LLM \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u0632 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4 \u06cc\u06c1 Python \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0627 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 TypeScript \u0648\u0631\u0698\u0646 \u06c1\u06d2\u06d4<\/p>\n<p>\u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u062c\u0646\u0679 \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0645\u062a\u0639\u0644\u0642\u06c1 \u062d\u0635\u06d2 \u06c1\u06cc\u06ba: <strong>\u0644\u06cc\u0646\u06af\u0631\u0627\u0641<\/strong>LangChain \u06a9\u06cc \u06af\u0631\u0627\u0641 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0644\u06cc\u0626\u0631\u06d4 \u0679\u0627\u0626\u067e \u0634\u062f\u06c1 \u0642\u062f\u0645\u06cc \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0688 \u06af\u0631\u0627\u0641 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0646\u0648\u0688 \u0627\u06cc\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2\u060c \u0631\u06cc\u0627\u0633\u062a \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0686\u06cc\u0632 \u06c1\u06d2 \u062c\u0633\u06d2 \u062a\u0645\u0627\u0645 \u0646\u0648\u0688 \u067e\u0691\u06be\u062a\u06d2 \u0627\u0648\u0631 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0646\u0648\u0688\u0633 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u06a9\u0646\u0627\u0631\u0648\u06ba \u0633\u06d2 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u0644\u0627\u0688 \u06c1\u0627\u0626\u06cc\u06a9\u0648 4.5<\/strong> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u0627 \u0645\u0627\u0688\u0644 \u06c1\u06d2 \u062c\u0648 \u062a\u0645\u0627\u0645 \u0627\u06cc\u062c\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 Anthropic \u06a9\u0627 \u062a\u06cc\u0632 \u062a\u0631\u06cc\u0646 \u0627\u0648\u0631 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0644\u0627\u06af\u062a \u0648\u0627\u0644\u0627 \u0645\u0627\u0688\u0644 \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u0635\u062d\u06cc\u062d \u0627\u0646\u062a\u062e\u0627\u0628 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06cc\u06c1 \u067e\u06af\u06be\u0644 \u06af\u06cc\u0627\u06d4<\/strong> \u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u0633\u0631\u0686 API \u062c\u0648 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 AI \u0627\u06cc\u062c\u0646\u0679\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0631\u06cc\u06af\u0648\u0644\u0631 \u0633\u0631\u0686 APIs \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633\u060c \u06cc\u06c1 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0627\u0633\u06a9\u0648\u0631\u0632 \u0627\u0648\u0631 \u0645\u0648\u0627\u062f \u06a9\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0679\u0631\u06a9\u0686\u0631\u0688 \u0646\u062a\u0627\u0626\u062c \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0645\u0627\u0688\u0644 \u067e\u0631\u0627\u0645\u067e\u0679 \u067e\u0631 \u0628\u06be\u06cc\u062c\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u06d4 \u0645\u0641\u062a \u062f\u0631\u062c\u06d2 \u0645\u06cc\u06ba \u06a9\u0627\u0641\u06cc \u0641\u0631\u0627\u062e\u062f\u0644\u06cc \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0628\u063a\u06cc\u0631 \u06a9\u0686\u06be \u0627\u062f\u0627 \u06a9\u06cc\u06d2 \u0627\u0633 \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u0627\u0633\u06d2 \u06cc\u06c1\u0627\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u0645\u06cc\u06ba \u0635\u0627\u0641 \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 SDK \u06c1\u06d2\u060c \u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u0633\u0679\u0631\u0627 \u0679\u0648\u0644\u0632 \u0627\u0648\u0631 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0644\u06cc\u0646\u06af \u0686\u06cc\u0646 \u0646\u0648\u0688\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u063a\u06cc\u0631 \u0627\u0688\u0627\u067e\u0679\u0631 \u0644\u06cc\u0626\u0631 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u0627\u0646 \u067e\u0679 \u06a9\u0648\u0627\u0644\u0679\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u062d\u062f\u0628<\/strong> \u0631\u06cc \u0627\u06cc\u06a9\u0679 \u06c1\u06a9\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u06a9\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633\u06d4 <code>useQuery<\/code>\u062c\u0628 \u0628\u06be\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06cc\u0679\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0637\u0648\u0631 \u067e\u0631 \u062c\u0632\u0648 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0631\u06cc\u0646\u0688\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u067e\u0648\u0644\u0646\u06af\u060c WebSocket \u0633\u06cc\u0679\u0646\u06af\u0632\u060c \u0627\u0648\u0631 \u062f\u0633\u062a\u06cc \u0633\u0679\u06cc\u0679 \u0633\u0646\u06a9\u0631\u0648\u0646\u0627\u0626\u0632\u06cc\u0634\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u06cc\u06ba \u0686\u0644\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 \u0688\u06cc\u0679\u0627 \u0644\u06a9\u06be\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u067e\u06cc\u062c \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>Next.js<\/strong> \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9\u06d4 \u0627\u06cc\u06a9 \u0627\u06cc\u067e \u0631\u0648\u0679\u0631\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 API \u067e\u0627\u062a\u06be\u060c \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0645\u0646\u0627\u0633\u0628 \u0627\u062c\u0632\u0627\u0621\u06d4<\/p>\n<h2 id=\"heading-why-this-pipeline\">\u0627\u0633 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u06a9\u06cc\u0648\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u061f<\/h2>\n<p>\u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0641\u0631\u0642 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0633\u0627\u062f\u06c1 \u0645\u0648\u0627\u0632\u0646\u06c1 \u0645\u0641\u06cc\u062f \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0641\u0631\u0627\u06c1\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u06cc\u06ba \u062c\u0633 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u06cc\u0627 \u06c1\u0648\u06ba \u0627\u0633 \u06a9\u06d2 \u067e\u0627\u0646\u0686 \u0645\u0631\u0627\u062d\u0644 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-plaintext\">Topic\n  \u2193\n1. RESEARCH   (Tavily web search, 5 results with relevance scores)\n2. ANALYSIS   (Extract 5 key findings, 3 themes, 1 central argument)\n3. WRITE      (Draft a structured ~400-word report)\n4. CRITIC     (Score the draft, provide dimension-level feedback)\n5. LOOP       (Revise if score below 7, output if passes or 3 iterations used)\n<\/code><\/pre>\n<p>\u06c1\u0631 \u0642\u062f\u0645 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0633 \u0644\u06cc\u06d2 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06a9\u06c1 \u06cc\u06c1 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u067e\u0631 \u0645\u062e\u062a\u0644\u0641 \u0627\u0646\u062f\u0627\u0632 \u0645\u06cc\u06ba \u0632\u0648\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u062d\u0642\u06cc\u0642 \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0635\u0644 \u0679\u0648\u0644 \u06a9\u0627\u0644\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0633 \u0645\u06cc\u06ba \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06d2 \u0627\u06cc\u062c\u0646\u0679 \u0627\u06cc\u0628\u0633\u0679\u0631\u06cc\u06a9\u0634\u0646 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0628\u06be\u0627\u0631\u06cc \u0648\u0632\u0646 \u0627\u0679\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u06cc\u06c1 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 JSON \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06cc \u0634\u06a9\u0644 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u062d\u0631\u06cc\u0631\u06cc \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u0633\u062e\u062a \u0645\u0648\u0627\u062f \u06a9\u06d2 \u062a\u0642\u0627\u0636\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u062e\u0627\u0644\u0635\u062a\u0627\u064b \u0641\u0648\u0631\u06cc \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0646\u0642\u0627\u062f \u06a9\u0648 \u0641\u06a9\u0631\u06cc \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u06a9\u0627 \u0633\u0644\u0633\u0644\u06c1 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u0627\u0648\u0631 \u0633\u0627\u062a\u06be \u06c1\u06cc \u0633\u0627\u062e\u062a\u06c1 JSON \u062a\u06cc\u0627\u0631 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u062e\u06cc\u0627\u0644 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0634\u06a9\u0644 \u06c1\u06d2\u06d4 \u0627\u0648\u0631 \u0646\u0638\u0631\u062b\u0627\u0646\u06cc \u0644\u0648\u067e \u0679\u06cc\u0633\u0679 \u0634\u0627\u06cc\u062f \u062f\u0648 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0633\u0628 \u0633\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0641\u0631\u0642 \u06c1\u06d2: \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0633 \u0637\u0631\u062d \u0645\u0634\u0631\u0648\u0637 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0627 \u0627\u0638\u06c1\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0644\u06d2 \u06a9\u0631\u060c \u0627\u0633 \u0645\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0648\u06c1 \u0686\u06cc\u0632\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0627\u0635\u0644 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0627\u06cc\u062c\u0646\u0679 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0679\u0648\u0644 \u06a9\u0627\u0644\u0632\u060c \u0633\u0679\u0631\u06a9\u0686\u0631\u0688 \u0622\u0624\u0679 \u067e\u0679\u060c \u0645\u0644\u0679\u06cc \u0633\u0679\u06cc\u067e \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646\u060c \u06a9\u0648\u0627\u0644\u0679\u06cc \u0627\u0633\u0633\u0645\u0646\u0679\u060c \u0627\u0648\u0631 \u0641\u06cc\u0688 \u0628\u06cc\u06a9 \u0644\u0648\u067e\u0633\u06d4<\/p>\n<h2 id=\"heading-the-project-structure\">\u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u06cc \u0633\u0627\u062e\u062a<\/h2>\n<p>\u0627\u06cc\u0646 \u067e\u06cc \u0627\u06cc\u0645 \u0648\u0631\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0633\u0628 \u06a9\u0686\u06be \u0627\u06cc\u06a9 \u06c1\u06cc \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u067e\u06cc\u06a9\u062c\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>node_modules<\/code> \u0622\u067e \u062c\u0691 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u0648 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">mastra-vs-langchain\/\n\u251c\u2500\u2500 packages\/\n\u2502   \u251c\u2500\u2500 mastra-pipeline\/          # Mastra implementation\n\u2502   \u251c\u2500\u2500 langchain-pipeline\/       # LangChain\/LangGraph implementation\n\u2502   \u251c\u2500\u2500 web\/                      # Next.js 16 App Router dashboard\n\u2502   \u2514\u2500\u2500 shared\/                   # Shared TypeScript types\n\u251c\u2500\u2500 convex\/                       # Real-time backend\n\u2514\u2500\u2500 package.json                  # Workspace root\n<\/code><\/pre>\n<p>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c \u06a9\u0627 \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u062d\u0635\u06c1 \u06c1\u06d2\u06d4 <code>PipelineCallbacks<\/code> \u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u062c\u0648 \u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06c1\u06d2 \u062c\u0648 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u0648 \u062f\u0648\u0646\u0648\u06ba \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0633\u06d2 \u0644\u0627\u0626\u06cc\u0648 \u0627\u06cc\u0648\u0646\u0679\u0633 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2: \u0645\u0631\u062d\u0644\u06c1 \u0634\u0631\u0648\u0639\u060c \u0645\u0631\u062d\u0644\u06c1 \u062a\u06a9\u0645\u06cc\u0644\u060c \u0679\u0648\u06a9\u0646 \u06a9\u0627\u0624\u0646\u0679\u060c \u0627\u0648\u0631 Tavily \u0646\u062a\u0627\u0626\u062c\u06d4 \u06cc\u06c1 \u0633\u0628 \u06a9\u0686\u06be \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0627\u0633\u0679\u0631\u0627 \u06cc\u0627 \u0644\u06cc\u0646\u06af \u0686\u06cc\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062c\u0627\u0646\u06d2 \u0628\u063a\u06cc\u0631 \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ packages\/shared\/src\/types.ts\nexport interface PipelineCallbacks {\n  onPipelineStart: () => Promise<string>;\n  onPipelineComplete: (id: string, data: PipelineCompleteData) => Promise<void>;\n  onPipelineError: (id: string, error: string) => Promise<void>;\n  step: {\n    onStepStart: (stepName: string, iteration: number, input: string) => Promise<string>;\n    onStepComplete: (stepId: string, data: StepCompleteData) => Promise<void>;\n    onStepError: (stepId: string, error: string) => Promise<void>;\n  };\n}\n<\/void><\/void><\/string><\/void><\/void><\/string><\/code><\/pre>\n<p>\u062a\u0645\u0627\u0645 \u0645\u062d\u062f\u0628 \u062a\u062d\u0631\u06cc\u0631\u06cc\u06ba\u060c \u0644\u0627\u0626\u06cc\u0648 \u0644\u0627\u06af \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a\u060c \u0627\u0648\u0631 \u0679\u0648\u06a9\u0646 \u0634\u0645\u0627\u0631 \u0627\u0633 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0633\u062a\u0642\u0628\u0644 \u0645\u06cc\u06ba \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0627\u0633 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 API \u067e\u0627\u062a\u06be \u0645\u06cc\u06ba \u067e\u0644\u06af \u06a9\u0631\u0646\u0627\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0686\u06be \u0627\u0648\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-building-the-mastra-pipeline\">\u0645\u0633\u062a\u0631\u0627 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631<\/h2>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u0628\u06be\u06cc \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1\u0627\u06ba \u0628\u0646\u06cc\u0627\u062f\u06cc \u0630\u06c1\u0646\u06cc \u0645\u0627\u0688\u0644 \u06c1\u06d2: \u0622\u067e \u0627\u0646 \u067e\u0679 \u0627\u0648\u0631 \u0622\u0624\u0679 \u067e\u0679 \u0627\u0633\u06a9\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0645\u0631\u0627\u062d\u0644 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06cc\u06ba \u062c\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0645\u0627\u0633\u0679\u0631\u0627 \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0627\u067e\u0646\u06cc \u0633\u0627\u062e\u062a \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0679\u0631 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0688\u06be\u0627\u0646\u0686\u06c1 \u067e\u0648\u0631\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0642\u0633\u0645 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u0645\u0646\u0637\u0642 \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0622\u0633\u0627\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-search-tool\">\u062a\u0644\u0627\u0634 \u06a9\u0627 \u0622\u0644\u06c1<\/h3>\n<p>\u0645\u0627\u0633\u0679\u0631\u0627 \u0679\u0648\u0644\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba: <code>createTool<\/code>\u06cc\u06c1 Zod \u0627\u0646 \u067e\u0679 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06c1\u06d2 \u0627\u0648\u0631 <code>execute<\/code> \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u062c\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0648\u062b\u06cc\u0642 \u0634\u062f\u06c1 \u0627\u0646 \u067e\u0679 \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-typescript\">\/\/ packages\/mastra-pipeline\/src\/tools\/search.ts\nimport { createTool } from \"@mastra\/core\/tools\";\nimport { z } from \"zod\";\nimport { tavily } from \"@tavily\/core\";\n\nconst client = tavily({ apiKey: process.env.TAVILY_API_KEY! });\n\nexport let lastTavilyCapture: { query: string; results: any[] } = {\n  query: \"\",\n  results: [],\n};\n\nexport function resetTavilyCapture() {\n  lastTavilyCapture = { query: \"\", results: [] };\n}\n\nexport const searchTool = createTool({\n  id: \"web-search\",\n  description: \"Search the web for information on a topic\",\n  inputSchema: z.object({ query: z.string() }),\n  execute: async ({ query }) => {\n    lastTavilyCapture = { query, results: [] };\n    const results = await client.search(query, {\n      maxResults: 5,\n      searchDepth: \"basic\",\n    });\n    lastTavilyCapture.results = results.results;\n    return { results: results.results };\n  },\n});\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>lastTavilyCapture<\/code> \u0645\u0627\u0688\u06cc\u0648\u0644 \u0633\u0637\u062d \u06a9\u06d2 \u0645\u062a\u063a\u06cc\u0631 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06cc \u0631\u06a9\u0627\u0648\u0679\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06d2 \u0679\u0648\u0644 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0627\u06cc\u062c\u0646\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0679\u0648\u0644 \u0644\u0648\u067e \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0627\u06cc\u06a9 \u067e\u0631\u062a\u06d4<\/p>\n<p>\u06c1\u0645\u06cc\u06ba Tavily \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u0627\u0648\u0631 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631 \u06a9\u06cc\u067e\u0686\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u062a\u06be\u06cc \u062a\u0627\u06a9\u06c1 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06c1\u0631 \u0639\u0645\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0635\u0644 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0627\u0648\u0631 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0633\u06a9\u0648\u0631 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u06c1\u0645\u06cc\u06ba \u0627\u06cc\u062c\u0646\u0679 \u06a9\u06d2 \u0679\u0648\u0644 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u0648 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0627\u0633\u0679\u0631 \u0627\u0646\u0679\u0631\u0646\u0644\u0632 \u06a9\u0648 \u0628\u06be\u06cc \u067e\u06cc\u0686 \u06a9\u0631\u0646\u0627 \u062a\u06be\u0627\u06d4 \u06a9\u06cc\u067e\u0686\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0627\u0688\u06cc\u0648\u0644 \u0627\u0633\u06a9\u0648\u067e \u067e\u0631 \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>resetTavilyCapture()<\/code> \u06cc\u06c1 \u06c1\u0631 \u0645\u0637\u0627\u0644\u0639\u06c1 \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u0622\u063a\u0627\u0632 \u0645\u06cc\u06ba \u06a9\u0645 \u062e\u0648\u0628\u0635\u0648\u0631\u062a\u060c \u0644\u06cc\u06a9\u0646 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0686\u06be\u0644\u06d2 \u0631\u0646\u0632 \u06a9\u06d2 \u0628\u0627\u0633\u06cc \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0631\u0646 \u0645\u06cc\u06ba \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-agents\">\u0627\u06cc\u062c\u0646\u0679<\/h3>\n<p>\u0645\u0633\u062a\u0631\u0627 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u0648 \u0627\u06cc\u06a9 \u0627\u0644\u06af \u0642\u062f\u0645 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Agent<\/code> \u0645\u062b\u0627\u0644 \u0627\u06af\u0631 \u0622\u067e \u0627\u0628\u06be\u06cc \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639\u0627\u062a \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0686\u06cc\u0632 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2\u06d4 <code>id<\/code> \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0645\u06cc\u062f\u0627\u0646 <code>name<\/code>. \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 TypeScript \u0645\u0637\u0644\u0648\u0628\u06c1 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u06d2 \u063a\u0627\u0626\u0628 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u0628\u06c1\u0645 \u063a\u0644\u0637\u06cc\u0627\u06ba \u067e\u06be\u06cc\u0646\u06a9 \u062f\u06d2 \u06af\u0627 \u062c\u0648 \u0627\u0635\u0644 \u0645\u0633\u0626\u0644\u06c1 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ packages\/mastra-pipeline\/src\/agents\/researcher.ts\nexport const researcherAgent = new Agent({\n  name: \"Researcher\",\n  id: \"researcher\",           \/\/ required in v1.41 - easy to miss\n  instructions: `You are a research agent. When given a topic, use the \n  web-search tool to find 5 relevant results. Return ALL the raw search \n  results including titles, URLs, and content snippets as a formatted string.`,\n  model: anthropic(\"claude-haiku-4-5\"),\n  tools: { searchTool },\n});\n<\/code><\/pre>\n<p>\u0631\u0627\u0626\u0679\u0631 \u0627\u06cc\u062c\u0646\u0679 \u062a\u0645\u0627\u0645 \u0645\u0648\u0627\u062f \u06a9\u06cc \u0636\u0631\u0648\u0631\u06cc\u0627\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u067e\u0631\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06c1\u062f\u0627\u06cc\u0627\u062a \u067e\u0631 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0631\u06a9\u0627\u0648\u0679\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0633 \u0648\u0642\u062a \u0627\u06c1\u0645 \u06c1\u06d2 \u062c\u0628 \u0646\u0627\u0642\u062f\u06cc\u0646 \u0645\u062e\u0635\u0648\u0635 \u062a\u0642\u0627\u0636\u0648\u06ba \u067e\u0631 \u0631\u0627\u0626\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u06cc \u0645\u0633\u0648\u062f\u06c1 \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ packages\/mastra-pipeline\/src\/agents\/writer.ts\nexport const writerAgent = new Agent({\n  name: \"Writer\",\n  id: \"writer\",\n  instructions: `You are a research analyst writing for a technical audience.\n\nSTRICT REQUIREMENTS:\n- Opening sentence must state a specific finding from the research.\n  Never open with \"X is increasingly important.\"\n- Every paragraph makes exactly one argument. State it first.\n  Support it with specific evidence.\n- Name specific tools, frameworks, companies, numbers, and dates.\n- Conclusion must make a specific recommendation or prediction.\n  It must not restate the introduction.\n- Target length: 350-450 words.\n\nFORBIDDEN PHRASES:\n\"it is important to note\", \"it is worth noting\",\n\"organizations must consider\", \"in conclusion\", \"in summary\",\n\"as we look to the future\", \"rapidly evolving landscape\",\nany sentence equally true if you replaced the topic`,\n  model: anthropic(\"claude-haiku-4-5\"),\n});\n<\/code><\/pre>\n<h3 id=\"heading-the-writecriticstep-why-write-and-critic-live-in-the-same-step\">writeCriticStep: \u0644\u06a9\u06be\u0646\u0627 \u0627\u0648\u0631 \u062a\u0646\u0642\u06cc\u062f \u06a9\u0631\u0646\u0627 \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0631\u062d\u0644\u06d2 \u0645\u06cc\u06ba \u06a9\u06cc\u0648\u06ba \u06c1\u06cc\u06ba\u061f<\/h3>\n<p>\u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0645\u06cc\u06ba \u0646\u06d2 \u06a9\u0686\u06be \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u06cc\u06d2 \u062c\u0648 \u06cc\u06c1\u0627\u06ba \u06a9\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644\u0632 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u062a\u06be\u06d2\u060c \u0627\u0648\u0631 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0648\u06ba\u06d4<\/p>\n<p>\u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u0627 <code>.dowhile()<\/code> \u0634\u0631\u0637 \u067e\u0648\u0631\u06cc \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0628\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u0642\u062f\u0645 \u06a9\u0648 \u062f\u06c1\u0631\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u0639\u0627\u062f\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0686\u06cc\u0632 \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0646\u0638\u0631\u062b\u0627\u0646\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2: \u0627\u06cc\u06a9 \u062a\u062d\u0631\u06cc\u0631\u06cc \u0645\u0631\u062d\u0644\u06c1 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u062a\u0646\u0642\u06cc\u062f\u06cc \u0645\u0631\u062d\u0644\u06c1\u06d4 \u0622\u067e \u0627\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u0642\u062f\u0645 \u0645\u06cc\u06ba \u06cc\u06a9\u062c\u0627 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u0627 \u0627\u06cc\u06a9 \u0646\u06cc\u0633\u0679\u0688 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u0645\u06cc\u06ba \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0645\u0631\u0627\u062d\u0644 \u0634\u0627\u0645\u0644 \u06c1\u0648\u06ba\u06d4<\/p>\n<p>\u0646\u06cc\u0633\u0679\u0688 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u06a9\u06cc \u0627\u06cc\u06a9 \u067e\u0631\u062a \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u0633 \u0645\u0639\u0627\u0645\u0644\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u062e\u0631\u06cc\u062f\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062a\u062d\u0631\u06cc\u0631 \u0627\u0648\u0631 \u062a\u0646\u0642\u06cc\u062f\u06cc \u0645\u0631\u0627\u062d\u0644 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>writeCriticStep<\/code>. \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 \u067e\u06c1\u0644\u06d2 \u0645\u0635\u0646\u0641 \u06a9\u0648 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c \u067e\u06be\u0631 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u0642\u0627\u062f \u06a9\u0648 \u0645\u0633\u0648\u062f\u06c1 \u067e\u0631\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0622\u0624\u0679 \u067e\u0679 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0645\u0633\u0648\u062f\u06c1 \u0627\u0648\u0631 \u0627\u0633\u06a9\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">const writeCriticStep = createStep({\n  id: \"write-critic\",\n  inputSchema: z.object({\n    topic: z.string(),\n    research: z.string(),\n    analysis: z.string(),\n    keyFindings: z.array(z.string()),\n    mainThemes: z.array(z.string()),\n    centralArgument: z.string(),\n    draft: z.string().optional(),       \/\/ populated after first iteration\n    score: z.number().optional(),       \/\/ populated after first iteration\n    feedback: z.string().optional(),    \/\/ populated after first iteration\n    iterations: z.number().optional(),\n  }),\n  outputSchema: z.object({\n    \/\/ ... all input fields plus draft, score, feedback, iterations\n  }),\n  execute: async ({ inputData }) => {\n    const iteration = (inputData.iterations ?? 0) + 1;\n\n    \/\/ WRITE phase\n    let writerPrompt = `Topic: \"({inputData.topic}\"nnResearch:n){inputData.research}nnAnalysis:n${inputData.analysis}`;\n    if (inputData.feedback && inputData.draft) {\n      \/\/ On revisions, the writer sees its previous attempt and the specific feedback\n      writerPrompt += `nnPrevious draft:n({inputData.draft}nnFeedback:n){inputData.feedback}`;\n    }\n\n    const writeStepId = await callbacks.step.onStepStart(\"write\", iteration, writerPrompt.slice(0, 500));\n    const writerResult = await writerAgent.generate(writerPrompt);\n    const draft = writerResult.text;\n    await callbacks.step.onStepComplete(writeStepId, { output: draft, \/* token data *\/ });\n\n    \/\/ CRITIC phase: runs immediately after write, on the same draft\n    const criticPrompt = `RESEARCH:n({inputData.research}nnANALYSIS:n){inputData.analysis}nnDRAFT:n${draft}`;\n    const criticStepId = await callbacks.step.onStepStart(\"critic\", iteration, draft.slice(0, 500));\n    const criticResult = await criticAgent.generate(criticPrompt);\n    const parsed = extractJson(criticResult.text);\n    const score = parsed?.score ?? 4;\n    const feedback = parsed?.feedback ?? \"Score parsing failed\";\n    await callbacks.step.onStepComplete(criticStepId, { output: criticResult.text, criticScore: score });\n\n    return { ...inputData, draft, score, feedback, iterations: iteration };\n  },\n});\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>.dowhile()<\/code> \u062d\u0627\u0644\u062a \u067e\u06be\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u067e \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u067e\u0686\u06be\u0644\u0627 \u0622\u0624\u0679 \u067e\u0679 \u0648\u0635\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>writeCriticStep<\/code> \u067e\u0633\u0646\u062f <code>inputData<\/code>\u0622\u067e \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u06a9\u0648\u0631 \u067e\u0691\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">const workflow = createWorkflow({\n  id: `research-pipeline-${Date.now()}`,  \/\/ timestamp prevents conflicts on concurrent runs\n  inputSchema: z.object({ topic: z.string() }),\n})\n  .then(researchStep)\n  .then(analysisStep)\n  .dowhile(\n    writeCriticStep,\n    async ({ inputData }) => inputData.score < 7 &#038;&#038; inputData.iterations < 3\n  )\n  .commit();\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>Date.now()<\/code> \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0622\u0626\u06cc \u0688\u06cc\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0645\u0633\u062a\u0631\u0627 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u06a9\u0633\u0688 \u0622\u0626\u06cc \u0688\u06cc\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062f\u0648 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u06c1\u0631 \u0639\u0645\u0644 \u06a9\u0648 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06cc \u0627\u06cc\u06a9 \u0645\u0646\u0641\u0631\u062f \u0645\u062b\u0627\u0644 \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-token-capture\">\u0679\u0648\u06a9\u0646 \u06a9\u06cc\u067e\u0686\u0631<\/h3>\n<p>\u06a9\u0633 \u06a9\u06d2 \u0628\u0639\u062f <code>agent.generate()<\/code> \u062c\u0628 \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0627 \u0688\u06cc\u0679\u0627 \u0646\u062a\u06cc\u062c\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 Mastra \u0648\u0631\u0698\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0638\u0627\u06c1\u0631\u06cc \u0634\u06a9\u0644 \u0628\u062f\u0644 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0645\u0645\u06a9\u0646\u06c1 \u0641\u06cc\u0644\u0688 \u0646\u0627\u0645\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">const inputTokens =\n  (result as any).usage?.promptTokens ??\n  (result as any).usage?.inputTokens ??\n  0;\nconst outputTokens =\n  (result as any).usage?.completionTokens ??\n  (result as any).usage?.outputTokens ??\n  0;\n<\/code><\/pre>\n<h2 id=\"heading-building-the-langchain-pipeline\">LangChain \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631<\/h2>\n<p>LangChain\/LangGraph \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u062e\u062a\u0644\u0641 \u0630\u06c1\u0646\u06cc \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0633\u0626\u0644\u06c1 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628\u06a9\u06c1 \u0645\u0627\u0633\u0679\u0631\u0627 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u062c \u06a9\u0631\u062f\u06c1 \u0642\u062f\u0645\u06cc \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u0646\u06af \u06af\u0631\u0627\u0641 \u0627\u06cc\u06a9 \u06c1\u062f\u0627\u06cc\u062a \u0634\u062f\u06c1 \u06af\u0631\u0627\u0641 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u0648\u0688\u0633 \u0633\u0627\u062f\u06c1 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0627\u0641\u0639\u0627\u0644 \u06c1\u06cc\u06ba\u060c \u0631\u06cc\u0627\u0633\u062a \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u062a\u063a\u06cc\u0631 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06c1\u06d2 \u062c\u0648 \u06af\u0631\u0627\u0641 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u06c1\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0627 \u062d\u06a9\u0645 \u0632\u0646\u062c\u06cc\u0631\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06a9\u0646\u0627\u0631\u0648\u06ba \u0633\u06d2 \u0637\u06d2 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>.then()<\/code> \u0641\u0648\u0646 \u06a9\u0627\u0644<\/p>\n<h3 id=\"heading-the-state-annotation\">\u062d\u06cc\u062b\u06cc\u062a \u06a9\u06cc \u062a\u0634\u0631\u06cc\u062d<\/h3>\n<p>\u0646\u0648\u0688 \u0628\u0646\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u062d\u0627\u0644\u062a \u06a9\u06cc\u0633\u06cc \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u06cc: <code>Annotation.Root<\/code>. \u06af\u0631\u0627\u0641 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u062a\u0645\u0627\u0645 \u0646\u0648\u0688\u0633 \u0627\u0633 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0633\u06d2 \u067e\u0691\u06be\u062a\u06d2 \u0627\u0648\u0631 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ packages\/langchain-pipeline\/src\/graph\/state.ts\nexport const PipelineState = Annotation.Root({\n  topic: Annotation<string>(),\n  research: Annotation<string>(),\n  analysis: Annotation<string>(),\n  draft: Annotation<string>(),\n  score: Annotation<number>(),\n  feedback: Annotation<string>(),\n  iterations: Annotation<number>(),\n  finalReport: Annotation<string>(),\n  criticDimensions: Annotation<\/string><\/number><\/string><\/number><\/string><\/string><\/string><\/string><\/code><\/pre>\n<p>\u0645\u0633\u062a\u0631\u0627 \u0645\u06cc\u06ba\u060c \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u0645\u06cc\u06ba \u0641\u0631\u0642 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u0645\u0633\u062a\u0631\u0627 \u0645\u06cc\u06ba\u060c \u06c1\u0631 \u0642\u062f\u0645 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u06cc\u0627 \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u06cc\u0627 \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0627\u0633 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0648 TypeScript \u06a9\u06cc \u0633\u0637\u062d \u067e\u0631 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0644\u06cc\u0646\u06af \u06af\u0631\u0627\u0641 \u0645\u06cc\u06ba\u060c \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0646\u0648\u0688 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0641\u06cc\u0644\u0688 \u06a9\u0648 \u067e\u0691\u06be \u06cc\u0627 \u0644\u06a9\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0688\u06be\u0627\u0646\u0686\u06c1 \u06af\u0631\u0627\u0641 \u0679\u0648\u067e\u0648\u0644\u0648\u062c\u06cc \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u0679\u0627\u0626\u067e \u0633\u0633\u0679\u0645 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u0645\u067e\u0627\u0626\u0644 \u06a9\u06d2 \u0648\u0642\u062a \u0688\u06cc\u0679\u0627 \u0641\u0644\u0648 \u0628\u06af \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0644\u06cc\u0646\u06af \u06af\u0631\u0627\u0641 \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u0648 \u0686\u06be\u0648\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0646\u0626\u06d2 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-factory-pattern\">\u0641\u06cc\u06a9\u0679\u0631\u06cc \u067e\u06cc\u0679\u0631\u0646<\/h3>\n<p>\u0644\u06cc\u0646\u06af \u06af\u0631\u0627\u0641 \u0646\u0648\u0688\u0633 \u0633\u0627\u062f\u06c1 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688\u060c \u06a9\u0648\u0626\u06cc \u0627\u0628\u062a\u062f\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 \u0635\u0631\u0641 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0633\u0626\u0644\u06c1 \u06cc\u06c1 \u062a\u06be\u0627 \u06a9\u06c1 \u0645\u062c\u06be\u06d2 \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u0627\u0648\u0631 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0679\u0648\u06a9\u0646 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0686\u0627\u0631\u0648\u06ba \u0646\u0648\u0688\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u062a\u06be\u06cc\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0628\u0644\u0679 \u0627\u0646 \u0645\u06cc\u06a9\u0627\u0646\u0632\u0645 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u0627\u06d4<\/p>\n<p>\u062d\u0644 \u0627\u06cc\u06a9 \u0641\u06cc\u06a9\u0679\u0631\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0631\u06cc\u0627\u0633\u062a \u0645\u06cc\u06ba \u0628\u0646\u062f\u0634 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0627\u0631\u0648\u06ba \u0646\u0648\u0688\u0633 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ packages\/langchain-pipeline\/src\/graph\/nodes.ts\nexport function createNodes(\n  callbacks: PipelineCallbacks,\n  acc: { inputTokens: number; outputTokens: number }\n) {\n  const tavilyClient = tavily({ apiKey: process.env.TAVILY_API_KEY! });\n\n  async function researchNode(state: PipelineStateType): Promise<partial>> {\n    const stepId = await callbacks.step.onStepStart(\"research\", 1, state.topic);\n    const results = await tavilyClient.search(state.topic, { maxResults: 5, searchDepth: \"basic\" });\n    const research = results.results\n      .map((r, i) => `[({i + 1}] ){r.title}nURL: ({r.url}nContent: ){r.content}`)\n      .join(\"nn\");\n    await callbacks.step.onStepComplete(stepId, {\n      output: research,\n      promptSent: state.topic,\n      timeMs: elapsed,\n      inputTokens: 0,      \/\/ research step uses Tavily, not an LLM\n      outputTokens: 0,\n      model: \"tavily-search\",\n      tavilyQuery: state.topic,\n      tavilyResults: JSON.stringify(results.results),\n    });\n    return { research };\n  }\n\n  \/\/ analysisNode, writeNode, criticNode follow the same pattern\n\n  return { researchNode, analysisNode, writeNode, criticNode };\n}\n<\/partial><\/code><\/pre>\n<p>\u0631\u06cc\u0633\u0631\u0686 \u0646\u0648\u0688 0 \u0679\u0648\u06a9\u0646 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 LLM \u0645\u062f\u0627\u062e\u0644\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 Tavily \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9 \u0688\u06cc\u0679\u0627 \u0645\u06cc\u06ba \u0646\u0638\u0631 \u0622\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0631\u0642\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0628\u0639\u062f \u06a9\u0627 \u0646\u0648\u0688 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u0648\u0688 \u0645\u06cc\u06ba \u0679\u0648\u06a9\u0646 \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>acc<\/code> \u0627\u0639\u062a\u0631\u0627\u0636:<\/p>\n<pre><code class=\"language-typescript\">const inputTokens = response.usage_metadata?.input_tokens ?? 0;\nconst outputTokens = response.usage_metadata?.output_tokens ?? 0;\nacc.inputTokens += inputTokens;\nacc.outputTokens += outputTokens;\n<\/code><\/pre>\n<p>\u0644\u06cc\u0646\u06af \u0686\u06cc\u0646\u0632 <code>ChatAnthropic<\/code> \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>response.usage_metadata<\/code>\u06cc\u06c1 \u0635\u0627\u0641 \u0637\u0648\u0631 \u067e\u0631 \u0679\u0627\u0626\u067e \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u06a9\u0627\u0633\u0679\u0646\u06af \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-graph-and-the-node-naming-collision\">\u06af\u0631\u0627\u0641 \u0627\u0648\u0631 \u0646\u0648\u0688 \u0646\u0627\u0645 \u06a9\u06d2 \u062a\u0646\u0627\u0632\u0639\u0627\u062a<\/h3>\n<p>\u0627\u06cc\u06a9 \u0686\u06cc\u0632 \u062c\u0648 \u0644\u06cc\u0646\u06af \u06af\u0631\u0627\u0641 \u06a9\u0648 \u06cc\u0627\u062f \u0622\u062a\u06cc \u06c1\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0646\u0648\u0688 \u06a9\u06d2 \u0646\u0627\u0645 \u0631\u06cc\u0627\u0633\u062a\u06cc \u062a\u0634\u0631\u06cc\u062d\u06cc \u06a9\u0644\u06cc\u062f\u0648\u06ba \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0679\u06a9\u0631\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0646\u0648\u0688 \u06a9\u0627 \u0646\u0627\u0645 \u062f\u06cc\u0646\u0627 <code>\"research\"<\/code> \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 <code>state.research<\/code> \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0627\u06cc\u06a9 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0686\u06cc\u0646\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u0627\u0648\u0631 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u0627\u0645 \u0628\u062f\u0644 \u062f\u06cc\u06ba\u06d4 <code>\"researcher\"<\/code> \u0627\u0648\u0631 <code>\"analyzer\"<\/code> \u0627\u0633\u06d2 \u062f\u0631\u0633\u062a \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">export const pipeline = new StateGraph(PipelineState)\n  .addNode(\"researcher\", researchNode)   \/\/ NOT \"research\": conflicts with state.research\n  .addNode(\"analyzer\", analysisNode)     \/\/ NOT \"analysis\": conflicts with state.analysis\n  .addNode(\"write\", writeNode)\n  .addNode(\"critic\", criticNode)\n  .addEdge(START, \"researcher\")\n  .addEdge(\"researcher\", \"analyzer\")\n  .addEdge(\"analyzer\", \"write\")\n  .addEdge(\"write\", \"critic\")\n  .addConditionalEdges(\"critic\", shouldRevise, {\n    revise: \"write\",\n    end: END,\n  })\n  .compile();\n<\/code><\/pre>\n<p>\u0644\u06cc\u0646\u06af \u06af\u0631\u0627\u0641 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645\u06cc \u0644\u0648\u067e\u0633 \u06a9\u0648 \u0631\u0648\u0679\u0646\u06af \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0634\u0631\u0648\u0637 \u06a9\u0646\u0627\u0631\u0648\u06ba \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">function shouldRevise(state: PipelineStateType): string {\n  if (state.score >= 7 || state.iterations >= 3) return \"end\";\n  return \"revise\";\n}\n<\/code><\/pre>\n<p>\u062a\u0645\u0627\u0645 \u0646\u0627\u0642\u062f\u06cc\u0646 \u06a9\u0648 \u067e\u06be\u0627\u0646\u0633\u06cc \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c <code>shouldRevise<\/code> \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>\"revise\"<\/code> \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0646\u0648\u0688 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0644\u0648\u067e \u06a9\u0631\u06cc\u06ba\u060c \u06cc\u0627 <code>\"end\"<\/code> \u06af\u0631\u0627\u0641 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06cc\u06c1 \u0645\u0633\u062a\u0631\u0627 \u06a9\u06d2 \u0628\u0631\u0627\u0628\u0631 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0645\u0634\u06cc\u0646 \u06c1\u06d2\u06d4 <code>.dowhile()<\/code>: \u0648\u06c1\u06cc \u0645\u0634\u0631\u0648\u0637 \u0645\u0646\u0637\u0642 \u062c\u0633 \u06a9\u0627 \u0627\u0638\u06c1\u0627\u0631 \u0646\u0627\u0645 \u0644\u0648\u067e \u06a9\u0646\u0633\u0679\u0631\u06a9\u0634\u0646 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06af\u0631\u0627\u0641 \u0631\u0648\u0679\u0646\u06af \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-retry-wrapper\">\u0631\u06cc\u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba<\/h3>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0648\u0642\u0641\u06d2 \u0648\u0642\u0641\u06d2 \u0633\u06d2 TLS \u0633\u06cc\u0634\u0646 \u06a9\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0645\u06cc\u06ba \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0628 \u06c1\u0645 \u0633\u0627\u062a\u06be HTTPS \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u063a\u0644\u0637\u06cc \u06cc\u06c1 \u06c1\u06d2: <code>SSL routines:tls_get_more_records:decryption failed or bad record mac<\/code>. \u0644\u06a9\u06cc\u0631\u06cc \u0628\u06cc\u06a9 \u0622\u0641 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0631\u06cc\u067e\u0631 \u0627\u0633\u06d2 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">async function retryOnFetch<t>(fn: () => Promise<t>, retries = 3): Promise<t> {\n  for (let i = 0; i <= retries; i++) {\n    try {\n      return await fn();\n    } catch (e: any) {\n      const shouldRetry =\n        e?.message?.includes(\"fetch\") ||\n        e?.message === \"fetch failed\" ||\n        e?.message?.includes(\"SSL\") ||\n        e?.message?.includes(\"ECONNRESET\") ||\n        e?.message?.includes(\"other side closed\") ||\n        e?.cause?.code === \"ECONNRESET\";\n      if (i < retries &#038;&#038; shouldRetry) {\n        await new Promise((r) => setTimeout(r, 1000 * (i + 1)));\n        continue;\n      }\n      throw e;\n    }\n  }\n  throw new Error(\"unreachable\");\n}\n<\/t><\/t><\/t><\/code><\/pre>\n<p>\u06c1\u0631 <code>llm.invoke()<\/code> LangChain \u0646\u0648\u0688 \u0633\u06d2 \u06a9\u0627\u0644\u06cc\u06ba \u06cc\u06c1\u0627\u06ba \u0644\u067e\u06cc\u0679 \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4 \u0648\u06cc\u0628 \u0627\u06cc\u067e \u06a9\u06d2 API \u067e\u0627\u062a\u06be \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u0633\u0627\u0648\u06cc \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2\u06d4 <code>retryMutation<\/code> \u0627\u0633\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u06c1\u0631 \u0645\u062d\u062f\u0628 \u06a9\u0627\u0644 \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u0627\u06cc\u06a9 \u0631\u06cc\u067e\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-the-critic-that-gave-everything-a-7-out-of-10\">\u0627\u06cc\u06a9 \u0646\u0642\u0627\u062f \u0646\u06d2 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 10 \u0645\u06cc\u06ba \u0633\u06d2 7 \u0646\u0645\u0628\u0631 \u062f\u06cc\u0627\u06d4<\/h2>\n<p>\u06c1\u0645 \u0646\u06d2 \u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u0686\u0644\u0627 \u06a9\u0631 \u06a9\u0626\u06cc \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 \u06a9\u06cc\u0627\u06d4 \u0645\u0648\u0636\u0648\u0639\u060c \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9\u060c \u06cc\u0627 \u062a\u06a9\u0631\u0627\u0631 \u0633\u06d2 \u0642\u0637\u0639 \u0646\u0638\u0631\u060c \u062a\u0645\u0627\u0645 \u0627\u0633\u06a9\u0648\u0631 10 \u0645\u06cc\u06ba \u0633\u06d2 7 \u062a\u06be\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062f\u0631\u0627\u0635\u0644 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u0627 \u0645\u0648\u0688 \u06c1\u06d2 \u062c\u0633\u06d2 LLM-as-judge bias \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0633\u06cc \u0644\u06cc\u0646\u06af\u0648\u06cc\u062c \u0645\u0627\u0688\u0644 \u0633\u06d2 1 \u0633\u06d2 10 \u062a\u06a9 \u06a9\u0627 \u0633\u06a9\u0648\u0631 \u062a\u0641\u0648\u06cc\u0636 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06c1\u0631 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u06cc \u0633\u0637\u062d \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0627\u062e\u062a\u06cc \u0645\u0639\u06cc\u0627\u0631 \u0627\u0648\u0631 \u0648\u0627\u0636\u062d \u0645\u0639\u06cc\u0627\u0631 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631\u060c \u06cc\u06c1 7 \u06a9\u06cc \u0637\u0631\u0641 \u0628\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0633\u0645\u0627\u062c\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u062d\u0641\u0648\u0638 \u062c\u0648\u0627\u0628 \u06c1\u06d2\u06d4 \u0645\u0639\u06cc\u0627\u0631 \u06a9\u0627 \u0627\u0634\u0627\u0631\u06c1 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0645\u0646\u0627\u0633\u0628 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u06a9\u0645 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u062d\u0642\u06cc\u0642\u06cc \u062c\u0648\u0627\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u0627\u0645\u062a\u06cc\u0627\u0632\u06cc \u0633\u0644\u0648\u06a9 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u0627\u0645\u062a\u06cc\u0627\u0632\u06cc \u0633\u0644\u0648\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u062a\u0631\u063a\u06cc\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u06cc\u0631\u0627 \u0627\u0635\u0644 \u0646\u0642\u0627\u062f \u06cc\u06c1 \u062a\u06be\u0627:<\/p>\n<pre><code class=\"language-plaintext\">You are a critical editor. Score the draft 1-10 on accuracy,\nclarity, and depth. Return { score, feedback }.\n<\/code><\/pre>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u0648\u06c1 \u0627\u06cc\u06a9 \u062c\u0645\u0644\u06c1 \u0645\u06a9\u0645\u0644 \u067e\u0631\u0627\u0645\u067e\u0679 \u062a\u06be\u0627\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u06cc\u06ba \u0646\u06d2 \u0638\u0627\u06c1\u0631 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 7 \u062f\u06d2 \u062f\u06cc\u0627\u06d4<\/p>\n<h3 id=\"heading-what-production-grade-evaluation-actually-looks-like\">\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06af\u0631\u06cc\u0688\u0646\u06af \u0648\u0627\u0642\u0639\u06cc \u06a9\u06cc\u0633\u06cc \u062f\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/h3>\n<p>\u0645\u06cc\u06ba \u0646\u06d2 \u062c\u0648 \u062d\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0648\u06c1 G-Eval \u067e\u06cc\u067e\u0631 \u0633\u06d2 \u06c1\u06d2\u060c \u062c\u0648 \u06a9\u06c1 \u0648\u06c1 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u0628\u06be\u06cc \u06c1\u06d2 \u062c\u0648 DeepEval \u0627\u0648\u0631 RAGAS \u062c\u06cc\u0633\u06d2 \u0679\u0648\u0644\u0632 \u06a9\u0648 \u0632\u06cc\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0644\u06cc\u062f\u06cc \u0628\u0635\u06cc\u0631\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062a\u06cc\u0646\u0648\u06ba \u06a9\u0648 \u0645\u0644 \u06a9\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u062c\u062c\u0632 \u06a9\u0648 \u0627\u0633\u06a9\u0648\u0631 \u062a\u0641\u0648\u06cc\u0636 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0642\u062f\u0645 \u0628\u06c1 \u0642\u062f\u0645 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0627\u0633\u06a9\u0648\u0631 \u06a9\u06cc\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0637\u0648\u0644 \u0648 \u0639\u0631\u0636 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u0633\u06d2 \u0622\u0632\u0627\u062f \u06c1\u0648\u0646\u06d2 \u0686\u0627\u06c1\u0626\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0627\u0633\u06a9\u0648\u0631\u0646\u06af \u0644\u06cc\u0648\u0644 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u06d2 \u0645\u0639\u0646\u06cc \u06a9\u06cc \u0648\u0627\u0636\u062d \u0648\u0636\u0627\u062d\u062a \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0635\u0631\u0641 \"1 \u0628\u0631\u0627 \u06c1\u06d2 \u0627\u0648\u0631 10 \u06a9\u0627\u0645\u0644 \u06c1\u06d2\u06d4\"<\/p>\n<p>\u0644\u06c1\u0630\u0627 \u0645\u06cc\u06ba \u0646\u06d2 \u062a\u0646\u0642\u06cc\u062f \u06a9\u0648 \u0686\u06be \u0636\u0631\u0648\u0631\u06cc \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06c1\u06d2\u060c \u062c\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u0633\u0628\u06be\u06cc \u06a9\u0648 \u0646\u0645\u0628\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p><strong>\u0628\u0644\u0646\u06af \u0622\u0688\u0679<\/strong>: \u0631\u067e\u0648\u0631\u0679 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u062d\u0642\u0627\u0626\u0642 \u067e\u0631 \u0645\u0628\u0646\u06cc \u062f\u0639\u0648\u0648\u06ba \u06a9\u0648 \u0645\u0639\u0627\u0648\u0646 (\u0645\u062e\u0635\u0648\u0635 \u0646\u062a\u0627\u0626\u062c \u0633\u06d2 \u062a\u0639\u0627\u0648\u0646 \u06cc\u0627\u0641\u062a\u06c1)\u060c \u0642\u06cc\u0627\u0633 \u0622\u0631\u0627\u0626\u06cc (\u0645\u0637\u0627\u0644\u0639\u06c1 \u06a9\u06cc \u0645\u0639\u0642\u0648\u0644 \u062a\u0648\u0633\u06cc\u0639)\u060c \u063a\u06cc\u0631 \u062a\u0639\u0627\u0648\u0646 \u06cc\u0627\u0641\u062a\u06c1 (\u0646\u062a\u0627\u0626\u062c \u0645\u06cc\u06ba \u0628\u06d2 \u0628\u0646\u06cc\u0627\u062f)\u060c \u06cc\u0627 \u0641\u0631\u06cc\u0628 \u06a9\u0627\u0631\u06cc (\u0646\u062a\u0627\u0626\u062c \u0633\u06d2 \u0645\u062a\u0635\u0627\u062f\u0645) \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u067e\u06cc\u0634\u0644\u0679\u06cc \u0622\u0688\u0679<\/strong>: \u062a\u0645\u0627\u0645 \u0639\u0627\u0645 \u062c\u0645\u0644\u06d2 \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0645\u0645\u0646\u0648\u0639 \u062c\u0645\u0644\u06d2 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0646\u0634\u0627\u0646 \u0632\u062f \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0628\u0635\u06cc\u0631\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0634\u06a9\u0631\u06cc\u06c1<\/strong>: \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0646\u062a\u06cc\u062c\u06c1 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u062a\u0639\u0627\u0631\u0641 \u06a9\u0648 \u0628\u062d\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0639\u0644\u0627\u0648\u06c1 \u06a9\u0686\u06be \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062c\u0648\u0627\u0628\u06cc \u062c\u0627\u0646\u0686<\/strong>: \u062c\u062c\u0632 \u06a9\u0648 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0639\u0642\u06cc\u062f\u06c1 \u06a9\u0627 \u0630\u06a9\u0631 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0648 \u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u06a9\u0648 \u0635\u0631\u0641 \u0639\u0646\u0648\u0627\u0646 \u06a9\u06d2 \u0639\u0646\u0648\u0627\u0646 \u0633\u06d2 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0642\u0627\u0631\u06cc \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627\u06d4 \u0627\u06af\u0631 \u0627\u0633 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0628\u0635\u06cc\u0631\u062a \u06a9\u0627 \u0633\u06a9\u0648\u0631 6 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u062c\u06c1\u062a\u06cc \u0627\u0633\u06a9\u0648\u0631\u0646\u06af<\/strong>: \u06c1\u0631 \u0633\u0637\u062d \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u0636\u062d \u0645\u0639\u06cc\u0627\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u06cc\u0646 \u0622\u0632\u0627\u062f \u0627\u0633\u06a9\u0648\u0631\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0641\u0631\u0634 \u06a9\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646<\/strong>: \u0627\u06af\u0631 \u0627\u06cc\u06a9 \u062c\u06c1\u062a \u0645\u06cc\u06ba \u0627\u0633\u06a9\u0648\u0631 4 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u06a9\u0645 \u06c1\u06d2\u060c \u062a\u0648 \u062d\u062a\u0645\u06cc \u0627\u0633\u06a9\u0648\u0631 6 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627\u060c \u0642\u0637\u0639 \u0646\u0638\u0631 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u062f\u06cc\u06af\u0631 \u062c\u06c1\u062a\u06cc\u06ba \u06a9\u0686\u06be \u0628\u06be\u06cc \u06c1\u0648\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0632\u0645\u06cc\u0646\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u0645\u062e\u0635\u0648\u0635 \u0648\u0636\u0627\u062d\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0648\u06c1 \u0627\u0635\u0644 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0632\u0645\u06cc\u0646\u06cc \u0627\u0635\u0648\u0644 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0627\u06cc\u06a9 \u0631\u067e\u0648\u0631\u0679 \u062c\u0648 \u062d\u0642\u0627\u0626\u0642 \u06a9\u0648 \u0641\u0631\u06cc\u0628 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u0645\u0627\u062e\u0630 \u06a9\u06cc \u0645\u062e\u0644\u0635\u06cc \u067e\u0631 2 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06af\u0631 \u062e\u0627\u0635\u06cc\u062a \u0627\u0648\u0631 \u0628\u0635\u06cc\u0631\u062a \u06a9\u0627\u0641\u06cc \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0648\u0632\u0646\u06cc \u0627\u0648\u0633\u0637 \u067e\u0631 \u067e\u0627\u0633\u0646\u06af \u0633\u06a9\u0648\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4 \u0627\u06cc\u06a9 \u062c\u06c1\u062a \u0645\u06cc\u06ba \u0633\u0646\u06af\u06cc\u0646 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u0648 \u0631\u067e\u0648\u0631\u0679 \u06a9\u0648 \u0646\u0627 \u0627\u06c1\u0644 \u0642\u0631\u0627\u0631 \u062f\u06cc\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u067e\u0627\u0646\u06cc \u0646\u06c1\u06cc\u06ba \u0688\u0627\u0644\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u062c\u0645\u0648\u0639\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0646\u0642\u06cc\u062f\u06cc \u0627\u0634\u0627\u0631\u06c1 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0645\u0627\u0633\u0679\u0631\u0627 \u0627\u0648\u0631 \u0644\u06cc\u0646\u06af \u0686\u06cc\u0646 \u06a9\u0627\u0646\u0633\u0679\u0646\u0679 \u067e\u0631 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>nodes.ts<\/code>:<\/p>\n<pre><code class=\"language-typescript\">const CRITIC_INSTRUCTIONS = `You are a senior research editor.\nCatch the specific ways AI-generated reports fail.\n\nSTEP 1: CLAIM AUDIT\nClassify every claim: [GROUNDED] [INFERRED] [UNSUPPORTED] [HALLUCINATED]\n\nSTEP 2: SPECIFICITY AUDIT\nList sentences that are generic, use forbidden phrases, or make no\nfalsifiable claims. Forbidden phrases: \"it is important to note\",\n\"organizations must consider\", \"rapidly evolving\", \"as we look to the future\"\n\nSTEP 3: INSIGHT AUDIT\nDoes the conclusion add anything not already in the introduction?\n\nSTEP 3.5: COUNTERFACTUAL CHECK\nName one specific belief a reader holds after reading this that they\nwould not hold from just the topic title. If you cannot identify one,\ninsight cannot exceed 6.\n\nSTEP 4: SCORE EACH DIMENSION\n\nSOURCE FIDELITY (40% weight):\n5-6: Claims accurate but traced to general topic knowledge, not these specific results\n7:   Most claims traceable, at least one source cited by name\n8:   All major claims grounded, two or more named sources with specific details\n9-10: Every claim traces to a named source, at least one statistic used\n\nSPECIFICITY (30% weight):\n5-6: Some specific claims but generic analysis between paragraphs\n7:   Mostly specific, minor filler remains\n8:   Every paragraph falsifiable, named entities throughout\n9-10: Zero sentences survive if you swap the topic\n\nINSIGHT (30% weight):\n5-6: Some synthesis but conclusion could have been written before reading\n7:   Conclusion makes a recommendation that follows from the evidence\n8:   Identifies a tradeoff the reader has not considered\n9-10: A senior engineer would reconsider an architectural decision after reading this\n\nSTEP 5: FLOOR RULE\nIf any dimension scores 4 or below, the final score cannot exceed 6.\n\nSTEP 6: CALCULATE\nfinalScore = round((fidelity * 0.40) + (specificity * 0.30) + (insight * 0.30))\n\nRespond ONLY with this JSON:\n{\n  \"fidelity\": <1-10>,\n  \"fidelityReasoning\": \"<one sentence=\"\">\",\n  \"specificity\": <1-10>,\n  \"specificityReasoning\": \"<one sentence=\"\">\",\n  \"insight\": <1-10>,\n  \"insightReasoning\": \"<one sentence=\"\">\",\n  \"score\": <weighted final=\"\">,\n  \"feedback\": \"<surgical: quote=\"\" the=\"\" specific=\"\" sentence=\"\" that=\"\" caused=\"\" lowest-scoring=\"\" dimension=\"\" to=\"\" fail=\"\" then=\"\" state=\"\" exactly=\"\" what=\"\" needs=\"\" change=\"\">\"\n}`;\n<\/surgical:><\/weighted><\/one><\/one><\/one><\/code><\/pre>\n<p>\u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0646\u0642\u0627\u062f \u0627\u0628 JSON \u0628\u0646\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u06a9\u06d2 \u06a9\u0626\u06cc \u067e\u06cc\u0631\u0627\u06af\u0631\u0627\u0641 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>JSON.parse(result.text)<\/code> \u0627\u06cc\u0633\u0627 \u0627\u0633 \u0644\u06cc\u06d2 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u062c\u0648\u0627\u0628 \u0627\u0628 \u062e\u0627\u0644\u0635 JSON \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u06cc \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0631\u0633\u062a \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u0645\u062a\u0628\u0627\u062f\u0644 \u0642\u062f\u0631 \u062a\u06be\u06cc\u06d4 <code>4<\/code> \u062c\u0628 \u0628\u06be\u06cc \u06a9\u0648\u0626\u06cc \u062a\u062c\u0632\u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0644\u0648\u067e \u0646\u06d2 \u06c1\u0631 \u0645\u0648\u0636\u0648\u0639 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644 \u062a\u06cc\u0646 \u062a\u06a9\u0631\u0627\u0631\u06cc\u06ba \u06a9\u06cc\u06ba\u06d4<\/p>\n<p>\u0641\u06a9\u0633 \u0645\u062a\u0646 \u0645\u06cc\u06ba \u0622\u062e\u0631\u06cc \u062f\u0631\u0633\u062a JSON \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u06cc\u0686\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u06a9\u06cc \u0637\u0631\u0641 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 JSON \u0628\u0644\u0627\u06a9\u0633 \u06c1\u0645\u06cc\u0634\u06c1 \u062a\u062e\u0645\u06cc\u0646\u06c1 \u06a9\u06d2 \u0628\u0639\u062f \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">function extractJson(text: string): any {\n  try { return JSON.parse(text.trim()); } catch {}\n\n  const matches = text.match(\/{[sS]*}\/g);\n  if (matches) {\n    for (let i = matches.length - 1; i >= 0; i--) {\n      try { return JSON.parse(matches[i]); } catch {}\n    }\n  }\n\n  const fenced = text.match(\/```(?:json)?s*([sS]*?)```\/);\n  if (fenced) {\n    try { return JSON.parse(fenced[1].trim()); } catch {}\n  }\n\n  return null;\n}\n<\/code><\/pre>\n<h2 id=\"heading-the-evaluation-bias-i-almost-shipped\">\u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0627 \u062a\u0639\u0635\u0628 \u062c\u0633 \u0646\u06d2 \u0645\u062c\u06be\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0627\u0633\u06d2 \u0628\u06be\u06cc\u062c \u062f\u06cc\u0627\u06d4<\/h2>\n<p>\u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u062a\u0639\u0645\u06cc\u0631 \u0646\u0648 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u0628 \u06a9\u0686\u06be \u0679\u06be\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u06cc\u0627\u06d4 \u067e\u06c1\u0644\u06d2 \u0688\u0631\u0627\u0641\u0679 \u06a9\u0627 \u0633\u06a9\u0648\u0631 4-6 \u062a\u06be\u0627\u060c \u062c\u0633 \u0646\u06d2 \u0646\u0638\u0631\u062b\u0627\u0646\u06cc \u06a9\u0627 \u0622\u063a\u0627\u0632 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u0646\u0638\u0631 \u062b\u0627\u0646\u06cc \u062f\u0631\u0627\u0635\u0644 \u067e\u0686\u06be\u0644\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba \u0628\u06c1\u062a\u0631\u06cc \u062a\u06be\u06cc\u06d4<\/p>\n<p>\u062a\u0627\u06c1\u0645\u060c \u0679\u06cc\u06a9\u0646\u0627\u0644\u0648\u062c\u06cc \u06a9\u06d2 \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u0645\u06cc\u06ba \u0648\u0627\u0636\u062d \u0646\u0645\u0648\u0646\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0622\u0626\u06d2\u06d4 \u0645\u0627\u0633\u0679\u0631\u0627 \u06c1\u0631 \u0627\u06cc\u06a9 \u0645\u0636\u0645\u0648\u0646 \u067e\u0631 \u0645\u0633\u0644\u0633\u0644 8-9 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0628\u06a9\u06c1 \u0644\u06cc\u0646\u06af \u0686\u06cc\u0646 \u0645\u0633\u0644\u0633\u0644 6-7 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u06c1 \u0646\u0627\u0642\u062f\u06cc\u0646 \u0646\u06d2 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0627 \u0627\u0646\u06a9\u0634\u0627\u0641 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u0633\u0648\u0631\u0633 \u0641\u06cc\u0688\u06cc\u0644\u06cc\u0679\u06cc \u0641\u0627\u0626\u0646\u0644 \u0627\u0633\u06a9\u0648\u0631 \u06a9\u0627 40% \u062d\u0635\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u0639\u0627\u0645\u0627\u062a \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679\u0633 \u062c\u0648 Tavily \u0646\u062a\u0627\u0626\u062c \u0645\u06cc\u06ba \u0645\u062e\u0635\u0648\u0635 \u0646\u0627\u0645\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0630\u0631\u0627\u0626\u0639 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u0633\u062a\u0631\u0627 \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679 \"Kore.ai's analysis shows\" \u0627\u0648\u0631 \"ArXiv paper on coordinated multi-gent systems\" \u062c\u06cc\u0633\u06d2 \u062c\u0645\u0644\u06d2 \u0633\u06d2 \u0628\u06be\u0631\u06cc \u06c1\u0648\u0626\u06cc \u062a\u06be\u06cc\u06d4 LangChain \u06a9\u06cc \u0631\u067e\u0648\u0631\u0679 \u0646\u06d2 \u0628\u06be\u06cc \u06cc\u06c1\u06cc \u0628\u0627\u062a \u06a9\u06cc \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 \u0630\u0631\u06cc\u0639\u06c1 \u0633\u06d2 \u0645\u0646\u0633\u0648\u0628 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06c1\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u062a\u06be\u0627\u06d4 \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06cc \u0627\u06cc\u062c\u0646\u0679 \u06a9\u0644\u0627\u0633 \u0679\u0648\u0644 \u0644\u0648\u067e \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0645\u0627\u0645 Tavily \u0645\u0648\u0627\u062f (\u0639\u0646\u0648\u0627\u0646\u060c URL\u060c \u0645\u0648\u0627\u062f \u06a9\u0627 \u0679\u06a9\u0691\u0627) \u06af\u0641\u062a\u06af\u0648 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u062c\u0628 \u062a\u06a9 \u0645\u0635\u0646\u0641 \u06a9\u0627 \u0627\u06cc\u062c\u0646\u0679 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0645\u0627\u0645 \u0645\u0627\u062e\u0630 \u0645\u0648\u0627\u062f \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u06cc \u0637\u0631\u0641 LangChain \u062a\u062d\u0631\u06cc\u0631\u06cc \u0646\u0648\u0688\u0633 \u0635\u0631\u0641 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u0626\u06d2\u06d4 <code>state.analysis<\/code>\u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645 JSON \u06c1\u06d2 \u062c\u0648 \u0645\u0637\u0627\u0644\u0639\u06c1 \u0633\u06d2 \u0646\u06a9\u0627\u0644\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 (\u0627\u06c1\u0645 \u0646\u062a\u0627\u0626\u062c\u060c \u062a\u06be\u06cc\u0645\u0632\u060c \u0627\u0648\u0631 \u0645\u0631\u06a9\u0632\u06cc \u062f\u0644\u0627\u0626\u0644)\u06d4 \u062c\u0628 JSON \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0686\u06be \u0645\u0627\u062e\u0630 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u062e\u0644\u0627\u0635\u06c1 \u06a9\u0631 \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0645\u0635\u0646\u0641 \u0646\u06d2 \u0627\u06cc\u06a9 \u0646\u062a\u06cc\u062c\u06c1 \u0627\u062e\u0630 \u06a9\u06cc\u0627 \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u0627\u06d4<\/p>\n<p>\u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0648 \u06c1\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u0645\u062d\u0627\u0648\u0631\u06d2 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u062f\u0631\u0633\u062a \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0644\u0627\u06af\u0648 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u0627 \u0627\u062d\u0633\u0627\u0633 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0645\u062e\u062a\u0644\u0641 \u0627\u0646 \u067e\u0679 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0631\u06c1\u06d2 \u062a\u06be\u06d2\u06d4 \u062a\u0634\u062e\u06cc\u0635\u06cc \u0646\u0638\u0627\u0645 \u0646\u06d2 \u0627\u06cc\u06a9 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0648 \u0628\u06c1\u062a\u0631 \u0631\u067e\u0648\u0631\u0679\u0633 \u067e\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0648\u0627\u0632\u0627\u060c \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u067e\u0631 \u0645\u0633\u0644\u0633\u0644 \u0633\u06a9\u0648\u0631 \u06a9\u0627 \u0641\u0631\u0642 \u0627\u06cc\u06a9 \u0627\u0634\u0627\u0631\u06c1 \u062a\u06be\u0627\u06d4 \u0627\u0635\u0644 \u0645\u0639\u06cc\u0627\u0631 \u06a9\u06d2 \u0641\u0631\u0642 \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u0627\u0648\u0631 \u0645\u0633\u0648\u062f\u0648\u06ba \u0645\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0633\u0627\u062e\u062a\u06cc \u062e\u0644\u0627\u0621 \u06c1\u0631 \u0628\u0627\u0631 \u0627\u0633\u06cc \u0637\u0631\u062d \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062d\u0644 LangChain \u0631\u0627\u0626\u0679 \u0646\u0648\u0688 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062a\u0628\u062f\u06cc\u0644\u06cc \u06c1\u06d2\u06d4 <code>state.research<\/code> (Raw Tavily \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c) <code>state.analysis<\/code>:<\/p>\n<pre><code class=\"language-typescript\">async function writeNode(state: PipelineStateType): Promise<partial>> {\n  const prompt = `You are a research analyst writing for a technical audience.\n\nRESEARCH (raw search results -- cite specific sources by name):\n${state.research}\n\nANALYSIS:\n${state.analysis}\n({state.feedback ? `nCRITIC FEEDBACK FROM PREVIOUS DRAFT:n){state.feedback}` : \"\"}\n\n${WRITER_INSTRUCTIONS}\n\nReturn ONLY the report text.`;\n\n  const response = await retryOnFetch(() => llm.invoke(prompt));\n  return { draft: response.content as string, iterations: (state.iterations ?? 0) + 1 };\n}\n<\/partial><\/code><\/pre>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0645\u0635\u0646\u0641\u06cc\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0630\u0631\u06cc\u0639\u06c1 \u0645\u0648\u0627\u062f \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u060c \u0627\u0646 \u06a9\u06d2 \u0645\u0639\u06cc\u0627\u0631 \u06a9\u06d2 \u0627\u0633\u06a9\u0648\u0631 \u0627\u0628 \u0627\u0646 \u06a9\u06cc \u062a\u062d\u0631\u06cc\u0631 \u06a9\u06d2 \u0627\u0635\u0644 \u0645\u0639\u06cc\u0627\u0631 \u06a9\u06cc \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u062a\u0634\u062e\u06cc\u0635\u06cc \u0646\u0638\u0627\u0645 \u0645\u0633\u062a\u0642\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0631\u0646\u0632 \u067e\u0631 \u0627\u06cc\u06a9 \u0622\u067e\u0634\u0646 \u06a9\u06cc \u062d\u0645\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u062f\u0648\u0646\u0648\u06ba \u0622\u067e\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u0627 \u0627\u0646 \u067e\u0679 \u06c1\u06d2\u06d4 \u0633\u0627\u062e\u062a\u06cc \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u0645\u0633\u0644\u0633\u0644 \u0646\u062a\u0627\u0626\u062c \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u0628\u06a9\u06c1 \u062d\u0642\u06cc\u0642\u06cc \u0645\u0639\u06cc\u0627\u0631 \u06a9\u06d2 \u0641\u0631\u0642 \u0645\u0648\u0636\u0648\u0639 \u0627\u0648\u0631 \u0645\u0633\u0648\u062f\u06d2 \u06a9\u06d2 \u0645\u0639\u06cc\u0627\u0631 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-the-real-time-dashboard\">\u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688<\/h2>\n<p>\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u062e\u0648\u062f \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0645\u0644\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u0627 \u067e\u06cc\u0645\u0627\u0646\u06c1 \u0627\u0633 \u0645\u0639\u06cc\u0627\u0631 \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u062c\u0633\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u0648\u0627\u0632\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062f\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0645\u0627\u0645 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0627\u0646 \u06a9\u06cc \u0646\u0645\u0627\u0626\u0634\u060c \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u062a\u0648\u0633\u06cc\u0639 \u067e\u0630\u06cc\u0631 \u0645\u06a9\u0645\u0644 \u067e\u0631\u0627\u0645\u067e\u0679\u0633 \u0627\u0648\u0631 \u062c\u0648\u0627\u0628\u0627\u062a\u060c \u0645\u062a\u0639\u0644\u0642\u06c1 \u0633\u06a9\u0648\u0631 \u0628\u0627\u0631\u0632\u060c \u0679\u0648\u06a9\u0646 \u06a9\u0627\u0624\u0646\u0679\u060c \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0627\u0633\u06a9\u0631\u0648\u0644\u0646\u06af \u0644\u0627\u06af\u0632\u060c \u0627\u0648\u0631 Tavily \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0630\u062e\u06cc\u0631\u06c1 \u0634\u062f\u06c1 \u0627\u0648\u0631 \u0632\u0645\u0631\u06c1 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0642\u0627\u0628\u0644 \u062f\u0631\u06cc\u0627\u0641\u062a\u06d4<\/p>\n<h3 id=\"heading-the-convex-schema\">\u0645\u062d\u062f\u0628 \u0633\u06a9\u06cc\u0645\u0627<\/h3>\n<p>Convex \u06a9\u0648 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u06a9\u06cc \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u06a9\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0646\u062a\u062e\u0628 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 <code>useQuery<\/code> \u0631\u06cc \u0627\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u06c1\u06a9\u0633 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u0648 \u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0633\u06cc \u067e\u0648\u0644\u0646\u06af \u06cc\u0627 \u0648\u06cc\u0628 \u0633\u0627\u06a9\u0679 \u06a9\u06d2 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06cc\u0679\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633\u06a9\u06cc\u0645\u0627 \u062a\u0645\u0627\u0645 \u067e\u06be\u0627\u0646\u0633\u06cc\u0648\u06ba \u06a9\u0648 \u06af\u0631\u0627\u0646\u0648\u0644\u0631\u06cc\u0679\u06cc \u06a9\u06cc \u062a\u06cc\u0646 \u0633\u0637\u062d\u0648\u06ba \u067e\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-typescript\">steps: defineTable({\n  runId: v.id(\"runs\"),\n  pipelineResultId: v.id(\"pipelineResults\"),\n  framework: v.union(v.literal(\"mastra\"), v.literal(\"langchain\")),\n  stepName: v.union(\n    v.literal(\"research\"), v.literal(\"analysis\"),\n    v.literal(\"write\"), v.literal(\"critic\")\n  ),\n  iterationNumber: v.number(),\n  status: v.union(v.literal(\"running\"), v.literal(\"complete\"), v.literal(\"error\")),\n  promptSent: v.optional(v.string()),\n  output: v.optional(v.string()),\n  timeMs: v.optional(v.number()),\n  inputTokens: v.optional(v.number()),\n  outputTokens: v.optional(v.number()),\n  model: v.optional(v.string()),\n  tavilyQuery: v.optional(v.string()),\n  tavilyResults: v.optional(v.string()),\n  criticScore: v.optional(v.number()),\n  criticFeedback: v.optional(v.string()),\n  criticDimensions: v.optional(v.object({\n    fidelity: v.number(),\n    specificity: v.number(),\n    insight: v.number(),\n    fidelityReasoning: v.string(),\n    specificityReasoning: v.string(),\n    insightReasoning: v.string(),\n  })),\n}).index(\"by_pipeline_result\", [\"pipelineResultId\"]),\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>criticDimensions<\/code> \u0641\u06cc\u0644\u0688 \u067e\u0648\u0631\u06d2 G-Eval \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0631\u0646\u06af \u0628\u0627\u0631\u0632 \u0627\u0648\u0631 \u0637\u0648\u0644 \u0648 \u0639\u0631\u0636 \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0627\u0646\u0641\u0631\u0646\u0633 \u0679\u06cc\u06a9\u0633\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0688\u0627\u0626\u0645\u06cc\u0646\u0634\u0646 \u0633\u06a9\u0648\u0631 \u067e\u06cc\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-fire-and-forget-pattern\">\u0641\u0627\u0626\u0631 \u0627\u06cc\u0646\u0688 \u0641\u0631\u062c\u0679 \u067e\u06cc\u0679\u0631\u0646<\/h3>\n<p>\u0622\u067e \u06a9\u06d2 Next.js API \u067e\u0627\u062a\u06be \u0645\u06cc\u06ba \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0641\u06cc\u0635\u0644\u06c1 \u06c1\u06d2\u06d4 <code>runId<\/code> \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0628\u0631\u0627\u0624\u0632\u0631 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0635\u0641\u062d\u06c1 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 30 \u0633\u06d2 \u200b\u200b60 \u0633\u06cc\u06a9\u0646\u0688 \u062a\u06a9 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06d2 \u06af\u0627\u060c \u0627\u0648\u0631 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0646\u0642\u0637\u06c1 \u0636\u0627\u0626\u0639 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-typescript\">const activeTasks = new Map<string promise=\"\">>();\n\nexport async function POST(req: NextRequest) {\n  const { topic, category } = await req.json();\n\n  \/\/ Create the Convex records synchronously (these are fast)\n  const runId = await retryMutation(() =>\n    fetchMutation(api.runs.createRun, { topic, category, status: \"running\" })\n  );\n  const mastraResultId = await retryMutation(() =>\n    fetchMutation(api.pipelineResults.createPipelineResult, {\n      runId, framework: \"mastra\", status: \"running\", iterations: 0,\n    })\n  );\n  const langchainResultId = await retryMutation(() =>\n    fetchMutation(api.pipelineResults.createPipelineResult, {\n      runId, framework: \"langchain\", status: \"running\", iterations: 0,\n    })\n  );\n\n  \/\/ Start both pipelines without awaiting them\n  const task = Promise.allSettled([\n    withRetry(() => runMastraPipeline(topic, buildCallbacks(runId, mastraResultId, \"mastra\"))),\n    withRetry(() => runLangChainPipeline(topic, buildCallbacks(runId, langchainResultId, \"langchain\"))),\n  ]).then(async () => {\n    await retryMutation(() =>\n      fetchMutation(api.runs.updateRunStatus, { runId, status: \"complete\" })\n    );\n    activeTasks.delete(runId as string);\n  });\n\n  \/\/ Hold a reference in the Map so Node.js doesn't garbage-collect the promise\n  activeTasks.set(runId as string, task);\n  return NextResponse.json({ runId });   \/\/ returns immediately\n}\n<\/string><\/code><\/pre>\n<p>\u0648\u0631\u0633\u0644 \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u067e\u06cc\u0679\u0631\u0646 \u0627\u0628 \u0628\u06be\u06cc \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u062c\u0628 \u0631\u0648\u0679 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u0633\u0631\u0648\u0631 \u0644\u06cc\u0633 \u0641\u0646\u06a9\u0634\u0646 \u062e\u062a\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0648\u0639\u062f\u06d2 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u06a9\u0633 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2: <code>waitUntil<\/code> \u0633\u06d2 <code>@vercel\/functions<\/code>\u06cc\u06c1 \u0648\u0639\u062f\u06c1 \u06a9\u06d2 \u062d\u0644 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 Vercel \u06a9\u0648 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">import { waitUntil } from \"@vercel\/functions\";\n\nwaitUntil(task);\nreturn NextResponse.json({ runId });\n<\/code><\/pre>\n<h3 id=\"heading-subscribing-to-live-updates\">\u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0648 \u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u067e\u06cc\u062c \u0628\u06cc\u06a9 \u0648\u0642\u062a \u062a\u06cc\u0646 \u0645\u062d\u062f\u0628 \u0633\u0648\u0627\u0644\u0627\u062a \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2: \u062e\u0648\u062f \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c\u060c \u0627\u0648\u0631 \u06c1\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u06d4<\/p>\n<p>\u06a9\u06c1 <code>\"skip\"<\/code> \u0633\u06cc\u0646\u0679\u06cc\u0646\u0644 \u06cc\u06c1\u0627\u06ba \u0627\u06c1\u0645 \u06c1\u06d2: \u06cc\u06c1 Convex \u0633\u06d2 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u06a9\u0648 \u06a9\u06be\u0644\u0627 \u0631\u06a9\u06be\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0627\u0635\u0644 \u062f\u0644\u0627\u0626\u0644 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1 \u06c1\u0648\u06ba\u06d4 \u06cc\u06c1 \u0631\u06cc\u0633 \u06a9\u06d2 \u062d\u0627\u0644\u0627\u062a \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0628\u0646\u0627\u0626\u06d2 \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">const mastraSteps = useQuery(\n  api.steps.getStepsForPipelineResult,\n  mastraResult ? { pipelineResultId: mastraResult._id } : \"skip\"\n);\n<\/code><\/pre>\n<h3 id=\"heading-deduplicating-steps-after-retries\">\u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u06d2 \u0628\u0639\u062f \u0688\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0645\u0631\u062d\u0644\u06c1<\/h3>\n<p>\u0627\u06af\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 TLS \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06a9\u0648\u0634\u0634 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u06a9\u06d2 \u0633\u0627\u062a\u06be Convex \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06a9\u0648\u0634\u0634 \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 UI \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u062d\u0642\u06cc\u0642\u06cc \u06a9\u0627\u0631\u0688\u0632 \u0627\u0648\u0631 \u0628\u0642\u06cc\u06c1 \u0645\u0631\u0627\u062d\u0644 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0646\u0645\u0627\u06cc\u0627\u06ba \u0641\u0631\u0642 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0631\u0645\u06cc\u0645 \u06a9\u06d2 \u06af\u0631\u0648\u067e \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 \u06a9\u0626\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba: <code>stepName + iterationNumber<\/code> \u06c1\u0631 \u0622\u0626\u0679\u0645 \u06a9\u0627 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0648\u0631\u0698\u0646 \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">const stepMap = new Map<string step=\"\">();\n[...steps]\n  .sort((a, b) => (a._creationTime ?? 0) - (b._creationTime ?? 0))\n  .forEach((s) => {\n    const key = `({s.stepName}-){s.iterationNumber}`;\n    const existing = stepMap.get(key);\n    if (!existing) { stepMap.set(key, s); return; }\n    if (s.status === \"complete\") { stepMap.set(key, s); return; }\n    if (existing.status !== \"complete\") { stepMap.set(key, s); }\n  });\n<\/string><\/code><\/pre>\n<h3 id=\"heading-the-live-log-auto-scroll\">\u0644\u0627\u0626\u06cc\u0648 \u0644\u0627\u06af \u0622\u0679\u0648 \u0633\u06a9\u0631\u0648\u0644\u0646\u06af<\/h3>\n<p>\u0644\u0627\u06af \u0627\u0646\u0679\u0631\u06cc\u0632 \u06a9\u0648 Convex \u06a9\u06d2 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0635\u0641 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062c\u0628 \u0646\u0626\u06cc \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u067e\u06cc\u0646\u0644 \u0646\u06cc\u0686\u06d2 \u0648\u0627\u0644\u06d2 \u062e\u0627\u0644\u06cc div \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0622\u0679\u0648 \u0633\u06a9\u0631\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">function LiveLogPanel({ logs }: { logs?: LogEntry[] }) {\n  const endRef = useRef<htmldivelement>(null);\n\n  useEffect(() => {\n    endRef.current?.scrollIntoView({ behavior: \"smooth\" });\n  }, [logs?.length]);\n\n  return (\n    <div classname=\"max-h-52 overflow-y-auto font-mono text-xs\">\n      {logs?.map((entry, i) => (\n        <p>\n          <span classname=\"text-[#484f58]\">[{fmtTs(entry.timestamp)}]<\/span>\n          <span classname=\"{`font-bold\" w-14=\"\">{entry.tag}<\/span>\n          <span classname=\"text-[#c9d1d9]\">{entry.message}<\/span>\n        <\/p>\n      ))}\n      \n    <\/div>\n  );\n}\n<\/htmldivelement><\/code><\/pre>\n<p>\u0627\u062b\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06c1\u06d2 <code>logs?.length<\/code>\u0644\u06c1\u0630\u0627 \u062c\u0628 \u0628\u06be\u06cc \u0645\u062d\u062f\u0628 \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0646\u06cc\u0627 \u0644\u0627\u06af \u0627\u0646\u0679\u0631\u06cc \u0622\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06a9\u0631\u0648\u0644\u0646\u06af \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-what-the-data-actually-shows\">\u0688\u06cc\u0679\u0627 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p><strong>\u0631\u0641\u062a\u0627\u0631:<\/strong> LangChain \u062a\u0645\u0627\u0645 \u0631\u0646\u0632 \u067e\u0631 25-45% \u062a\u06cc\u0632 \u06c1\u06d2\u06d4 \u0686\u06be\u0648\u0679\u06d2 \u0639\u0646\u0648\u0627\u0646\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0648\u0642\u0641\u06c1 7 \u06cc\u0627 8 \u0633\u06cc\u06a9\u0646\u0688 \u062a\u06a9 \u06a9\u0645 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0628\u06be\u06cc \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627\u06d4<\/p>\n<p>\u0645\u06cc\u0631\u06d2 \u062e\u06cc\u0627\u0644 \u0645\u06cc\u06ba \u0648\u062c\u06c1 \u0633\u0627\u062e\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06cc \u0627\u06cc\u062c\u0646\u0679 \u06a9\u0644\u0627\u0633 \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u0679\u0648\u0644 \u0644\u0648\u067e \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0686\u0627\u06c1\u06d2 \u0679\u0648\u0644 \u0646\u06c1 \u0628\u06be\u06cc \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0635\u0644 \u0645\u0627\u0688\u0644 \u06a9\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u06af\u0641\u062a\u06af\u0648 \u06a9\u06cc \u0633\u0631\u06af\u0632\u0634\u062a\u060c \u0679\u0648\u0644 \u0633\u06a9\u06cc\u0645\u0627\u060c \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u0633\u0628 \u06a9\u0648 \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u0627\u0631 \u0645\u0631\u062d\u0644\u06d2 \u0648\u0627\u0644\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0627\u0633 \u067e\u0627\u0631\u060c \u0641\u06cc \u0645\u0631\u062d\u0644\u06c1 2 \u0633\u06d2 5 \u0633\u06cc\u06a9\u0646\u0688\u0632 \u062c\u0645\u0639 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 LangGraph \u0646\u0648\u0688\u0633 \u0633\u0627\u062f\u06c1 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06c1\u06cc\u06ba\u060c \u06cc\u0639\u0646\u06cc \u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 \u0622\u067e \u0627\u0648\u0631 \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06a9\u0633\u06cc \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06cc \u0627\u0628\u062a\u062f\u0627 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0679\u0648\u06a9\u0646:<\/strong> \u0645\u0627\u0633\u0679\u0631\u0627 1.5-2.5 \u06af\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0679\u0648\u06a9\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06a9\u06cc\u0644\u06d2 \u062a\u062d\u0642\u06cc\u0642\u06cc \u0645\u0631\u062d\u0644\u06d2 \u0646\u06d2 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u062e\u0644\u0627\u0621 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u06cc\u0627\u060c \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0644\u06cc\u0646\u06af \u0686\u06cc\u0646 \u06a9\u06d2 \u062a\u062d\u0642\u06cc\u0642\u06cc \u0646\u0648\u0688\u0633 LLM \u06a9\u0648 \u0628\u0627\u0644\u06a9\u0644 \u0628\u06be\u06cc \u06a9\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0628\u0644\u06a9\u06c1 Tavily \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0632\u06cc\u062f \u0639\u0645\u0648\u0645\u06cc \u0645\u0648\u0636\u0648\u0639 \u067e\u0631\u060c Mastra \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 6,200 \u0679\u0648\u06a9\u0646 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 LangChain \u062a\u0642\u0631\u06cc\u0628\u0627\u064b 3,900 \u0679\u0648\u06a9\u0646 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 Tavily \u06a9\u06cc \u0648\u0627\u067e\u0633\u06cc \u06a9\u06d2 \u0645\u0648\u0627\u062f \u06a9\u06cc \u0645\u0642\u062f\u0627\u0631 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062e\u0644\u0627 \u0648\u0633\u06cc\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 \u0645\u0648\u0627\u062f \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06d2 \u0627\u06cc\u062c\u0646\u0679 \u06a9\u06cc \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u06cc \u0633\u0631\u06af\u0632\u0634\u062a \u0645\u06cc\u06ba \u06c1\u0631 \u0627\u06af\u0644\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0639\u06cc\u0627\u0631:<\/strong> \u062a\u0634\u062e\u06cc\u0635\u06cc \u062a\u0639\u0635\u0628 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0633\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0633\u06a9\u0648\u0631\u0632 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062a\u0645\u0627\u0645 \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u067e\u0631 \u0645\u0639\u0646\u06cc \u062e\u06cc\u0632 \u0637\u0648\u0631 \u067e\u0631 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u0628 Tavily \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u0645\u062e\u0635\u0648\u0635 \u0627\u0648\u0631 \u0628\u06be\u0631\u067e\u0648\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u062f\u0648\u0646\u0648\u06ba \u06c1\u06cc \u0627\u0639\u0644\u06cc \u0627\u0633\u06a9\u0648\u0631\u0646\u06af \u0631\u067e\u0648\u0631\u0679\u0633 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0628\u06c1\u0645 \u06cc\u0627 \u0633\u0648\u0627\u0646\u062d\u06cc \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u062f\u0648\u062c\u06c1\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u0639\u0627\u0645 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>7 \u06cc\u0627 8 \u06a9\u06d2 \u067e\u06c1\u0644\u06d2 \u0688\u0631\u0627\u0641\u0679 \u0633\u06a9\u0648\u0631 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u062a\u062d\u0642\u06cc\u0642 \u0645\u0636\u0628\u0648\u0637 \u062a\u06be\u06cc \u0627\u0648\u0631 \u0645\u0635\u0646\u0641 \u0646\u06d2 \u0645\u062e\u0635\u0648\u0635\u060c \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u062d\u0645\u0627\u06cc\u062a \u06cc\u0627\u0641\u062a\u06c1 \u062f\u0639\u0648\u06d2 \u06a9\u06cc\u06d2 \u062a\u06be\u06d2\u06d4 4 \u06cc\u0627 5 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0637\u0627\u0644\u0639\u06c1 \u06a9\u06d2 \u062e\u0631\u0627\u0628 \u0646\u062a\u0627\u0626\u062c \u0622\u0626\u06d2\u060c \u0645\u0635\u0646\u0641\u06cc\u0646 \u0646\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0639\u0627\u0645 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0646\u0638\u0631\u062b\u0627\u0646\u06cc \u06a9\u0627 \u0644\u0648\u067e \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0645\u0633\u0648\u062f\u06c1 \u0628\u06c1\u062a\u0631 \u0646\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06cc\u0627 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u06cc \u062d\u062f \u062a\u06a9 \u067e\u06c1\u0646\u0686 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p><strong>\u0633\u0645\u062c\u06be\u0648\u062a\u06c1 \u0645\u0646\u0635\u0648\u0628\u06c1:<\/strong> \u0645\u0627\u0633\u0679\u0631\u0627 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06cc \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2 \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062a\u0645 \u0644\u06a9\u06be\u0648 <code>.dowhile()<\/code> \u0645\u0634\u0631\u0648\u0637 \u06a9\u0646\u0627\u0631\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u06c1\u0645 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u062a\u063a\u06cc\u0631 \u067e\u0630\u06cc\u0631 \u0627\u0633\u0679\u06cc\u0679 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0679\u0627\u0626\u067e \u0634\u062f\u06c1 \u0633\u0679\u06cc\u067e \u0633\u06a9\u06cc\u0645\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06af\u0641\u062a\u06af\u0648 \u06a9\u06cc \u0631\u06cc\u06a9\u0627\u0631\u0688\u0646\u06af \u0627\u0648\u0631 \u0679\u0648\u0644 \u06a9\u06d2 \u0639\u0645\u0644 \u06a9\u0648 \u0645\u0646\u0638\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u0627\u06af\u062a \u06c1\u0631 \u0642\u062f\u0645 \u067e\u0631 \u0645\u0633\u062a\u0642\u0644 \u0679\u0648\u06a9\u0646 \u0627\u0648\u0631 \u0644\u06cc\u0679\u06cc\u0646\u0633\u06cc \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u06c1\u06d2\u06d4<\/p>\n<p>LangChain \u06af\u0631\u0627\u0641 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0627\u0646\u062c\u0646 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be \u0622\u067e \u067e\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0627\u0636\u062d \u0648\u0627\u0626\u0631\u0646\u06af\u060c \u0644\u06cc\u06a9\u0646 \u06c1\u0631 \u0645\u0627\u0688\u0644 \u06a9\u0627\u0644 \u0645\u06cc\u06ba \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06c1\u0631 \u0679\u0648\u06a9\u0646 \u067e\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0645\u067e\u06cc\u06a9\u0679 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0627\u0648\u0631 \u0642\u0637\u0639\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644\u06d4<\/p>\n<h2 id=\"heading-try-it-yourself\">\u062e\u0648\u062f \u06c1\u06cc \u0622\u0632\u0645\u0627\u0626\u06cc\u06ba\u06d4<\/h2>\n<p>\u0644\u0627\u0626\u06cc\u0648 \u0688\u06cc\u0645\u0648 mastra-vs-langchain.vercel.app \u067e\u0631 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u06a9\u0645\u0644 \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688 github.com\/sholajegede\/mastra-vs-langchain \u067e\u0631 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u06a9\u0627\u0631\u0622\u0645\u062f \u0644\u06af\u0627\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633\u06d2 \u0633\u062a\u0627\u0631\u06c1 \u06a9\u06cc \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u062f\u06cc\u0646\u06d2 \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">git clone https:\/\/github.com\/sholajegede\/mastra-vs-langchain.git\ncd mastra-vs-langchain\nnpm install\ncp .env.example .env\n# Add ANTHROPIC_API_KEY and TAVILY_API_KEY\nnpx convex dev   # Terminal 1\nnpm run web      # Terminal 2\n<\/code><\/pre>\n<p>\u06a9\u06be\u0644\u0627 <code>localhost:3000<\/code>\u0627\u06cc\u06a9 \u0645\u0648\u0636\u0648\u0639 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u0632\u0645\u0631\u06c1 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u062a\u0645\u0627\u0645 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u062c\u06cc\u0633\u06d2 \u06c1\u06cc \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u0626\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0645\u0627\u0645 \u0679\u0648\u06a9\u0646\u0632 \u0634\u0645\u0627\u0631 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062a\u0627\u0631\u06cc\u062e \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0632\u0645\u0631\u06c1 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062a\u0645\u0627\u0645 \u0633\u0627\u0628\u0642\u06c1 \u200b\u200b\u0631\u0646\u0648\u06ba \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e CrewAI\u060c CopilotKit\u060c \u06cc\u0627 \u062f\u0648\u0633\u0631\u06d2 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0628\u06cc\u0646\u0686 \u0645\u0627\u0631\u06a9 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06a9\u06d2 \u0627\u0633 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0648 \u0645\u0632\u06cc\u062f \u062a\u0641\u0635\u06cc\u0644 \u0633\u06d2 \u0644\u06cc\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c <code>PipelineCallbacks<\/code> \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 <code>packages\/shared<\/code> \u06cc\u06c1 \u0648\u0627\u062d\u062f \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u06a9\u0627\u0631\u0622\u0645\u062f \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u0627 \u062a\u0648 \u0628\u0644\u0627 \u062c\u06be\u062c\u06a9 \u062f\u0648\u0633\u0631\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0641\u0627\u0626\u062f\u06c1 \u0627\u0679\u06be\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639\u06cc \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06d2 \u062a\u0628\u0635\u0631\u06d2 \u06a9\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u06d4 \u0622\u067e X \u067e\u0631 @wani_shola \u06a9\u0627 \u0630\u06a9\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 LinkedIn \u067e\u0631 \u0645\u062c\u06be \u0633\u06d2 \u0631\u0627\u0628\u0637\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u06cc\u06a9 \u06c1\u0641\u062a\u06c1 \u067e\u06c1\u0644\u06d2 \u0645\u06cc\u06ba \u0646\u06d2 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0679\u0648\u06cc\u0679 \u062f\u06cc\u06a9\u06be\u0627: \u06c1\u0645 \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0627\u0628\u06be\u06cc \u0633\u067e\u0648\u0631\u0679 \u0645\u06cc\u0634 \u0644\u0627\u0646\u0686 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0645\u0644\u0679\u06cc \u06a9\u0631\u0627\u06cc\u06c1 \u062f\u0627\u0631 AI \u0633\u067e\u0648\u0631\u0679 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u062c\u0648 \u0645\u0627\u0633\u0679\u0631\u0627 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06c1\u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0627\u0646 \u067e\u0679 \u0686\u0627\u06c1\u06cc\u06d2 \u062a\u06be\u0627\u06d4 \u0645\u06cc\u06ba \u0646\u06d2 \u0627\u0633\u06d2 \u067e\u0633\u0646\u062f \u06a9\u06cc\u0627 .dowhile() \u0644\u0648\u067e\u0633\u060c \u0627\u0646 \u067e\u0679 \u0633\u0679\u06cc\u067e \u0627\u0633\u06a9\u06cc\u0645\u0627 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":25299,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-25298","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/25298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/comments?post=25298"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/25298\/revisions"}],"predecessor-version":[{"id":25300,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/25298\/revisions\/25300"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/media\/25299"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/media?parent=25298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/categories?post=25298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/tags?post=25298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}