{"id":107477,"date":"2025-05-04T08:46:17","date_gmt":"2025-05-04T04:16:17","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/langgraph-mcp-ollama-%da%a9%d9%84%db%8c%d8%af-%d8%b9%d8%a7%d9%85%d9%84-%d9%82%d8%af%d8%b1%d8%aa%d9%85%d9%86%d8%af-ai\/"},"modified":"2025-05-04T08:46:17","modified_gmt":"2025-05-04T04:16:17","slug":"langgraph-mcp-ollama-%da%a9%d9%84%db%8c%d8%af-%d8%b9%d8%a7%d9%85%d9%84-%d9%82%d8%af%d8%b1%d8%aa%d9%85%d9%86%d8%af-ai","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/langgraph-mcp-ollama-%da%a9%d9%84%db%8c%d8%af-%d8%b9%d8%a7%d9%85%d9%84-%d9%82%d8%af%d8%b1%d8%aa%d9%85%d9%86%d8%af-ai\/","title":{"rendered":"Langgraph + MCP + Ollama: \u06a9\u0644\u06cc\u062f \u0639\u0627\u0645\u0644 \u0642\u062f\u0631\u062a\u0645\u0646\u062f AI"},"content":{"rendered":"<div data-article-id=\"2422941\" id=\"article-body\">\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u062f\u0627\u0633\u062a\u0627\u0646 \u060c \u0645\u0646 \u06cc\u06a9 \u0622\u0645\u0648\u0632\u0634 \u0641\u0648\u0642 \u0627\u0644\u0639\u0627\u062f\u0647 \u0633\u0631\u06cc\u0639 \u062f\u0627\u0631\u0645 \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Langgraph \u060c MCP \u0648 Ollama \u06cc\u06a9 \u0686\u062a \u0628\u0627\u0628\u0627\u062a \u0686\u0646\u062f \u0639\u0627\u0645\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u062a\u0627 \u06cc\u06a9 chatbot \u0639\u0627\u0645\u0644 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06cc\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062e\u0635\u06cc \u062e\u0648\u062f \u0628\u0633\u0627\u0632\u06cc\u062f.<\/p>\n<p>\u0686\u0646\u062f\u06cc \u067e\u06cc\u0634 \u060c \u0645\u0646 \u0648\u06cc\u062f\u0626\u0648\u06cc\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0632\u0645\u06cc\u0646\u0647 \u0645\u062f\u0644 \u0633\u0627\u062e\u062a\u0645. \u0628\u0631\u062e\u06cc \u0627\u0632 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0627 &#8220;Zapier \u0633\u0627\u062e\u062a\u0647 \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc AI&#8221; \u0645\u0642\u0627\u06cc\u0633\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u0648 \u0645\u0639\u062a\u0642\u062f\u0646\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 API \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u062c\u0627\u0646 \u0631\u0627\u0634 \u06af\u0641\u062a: &#8220;\u0642\u0628\u0644 \u0627\u0632 MCP \u060c \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u062c\u0628\u0648\u0631 \u0628\u0648\u062f\u0646\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 API \u0647\u0627 \u0643\u062f \u0648 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc AI \u0631\u0627 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc \u0648\u0635\u0644 \u0643\u0646\u0646\u062f \u060c \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u0643\u0647 \u0647\u0631 \u0627\u062f\u063a\u0627\u0645 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u062f\u0631 \u062c\u0644\u0648 \u0627\u0633\u062a.&#8221;<\/p>\n<p>\u0627\u06af\u0631\u0686\u0647 MCP \u0633\u0627\u0644 \u06af\u0630\u0634\u062a\u0647 \u0645\u0646\u062a\u0634\u0631 \u0634\u062f \u060c \u0627\u0645\u0627 \u0627\u062e\u06cc\u0631\u0627\u064b \u0628\u0647 \u0637\u0648\u0631 \u0646\u0627\u06af\u0647\u0627\u0646\u06cc \u0645\u062d\u0628\u0648\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u06a9\u0647 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u062d\u062b \u0647\u0627\u06cc\u06cc \u0631\u0627\u062c\u0639 \u0628\u0647 \u062f\u0648\u0627\u0645 &#8220;\u062f\u0648\u0631\u0647 \u06af\u0644&#8221; \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a. Langchain \u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f X \u0631\u0623\u06cc \u062f\u0627\u062f:<\/p>\n<p>\u0646\u062a\u0627\u06cc\u062c \u0646\u0634\u0627\u0646 \u062f\u0627\u062f \u06a9\u0647 40.8 \u066a \u0627\u0632 \u0645\u0631\u062f\u0645 \u0645\u0639\u062a\u0642\u062f\u0646\u062f MCP \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0622\u06cc\u0646\u062f\u0647 \u0627\u0633\u062a \u060c 25.8 \u066a \u0645\u0639\u062a\u0642\u062f \u0628\u0648\u062f\u0646\u062f \u06a9\u0647 MCP \u0641\u0642\u0637 \u06cc\u06a9 \u0641\u0644\u0627\u0634 \u062f\u0631 \u062a\u0627\u0628\u0647 \u0627\u0633\u062a \u0648 33.4 \u066a \u0628\u0627\u0642\u06cc \u0645\u0627\u0646\u062f\u0647 \u062a\u0635\u0645\u06cc\u0645 \u0628\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u0648 \u062f\u06cc\u062f\u0646 \u062f\u0627\u0634\u062a\u0646\u062f.<\/p>\n<p>MCP \u0647\u0646\u0648\u0632 \u062c\u062f\u06cc\u062f \u0627\u0633\u062a (\u062f\u0631 \u0646\u0648\u0627\u0645\u0628\u0631 2024 \u0645\u0646\u062a\u0634\u0631 \u0634\u062f) \u060c \u0627\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u0627\u0632 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u062e\u062f\u0645\u0627\u062a \u0645\u0627\u0646\u0646\u062f Github \u060c Slack \u0648 PostgreSQL \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u0627\u0632 \u0622\u0646\u062c\u0627 \u06a9\u0647 \u0627\u06cc\u0646 \u06cc\u06a9 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0628\u0627\u0632 \u0627\u0633\u062a \u060c \u062c\u0627\u06cc \u062a\u0639\u062c\u0628 \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u0622\u0646 \u0628\u0627 \u0647\u0631 LLM (\u06a9\u0644\u0648\u062f \u060c \u0627\u0648\u067e\u0627\u06cc \u060c \u062c\u0645\u06cc\u0646\u06cc \u0648 \u063a\u06cc\u0631\u0647) \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u060c \u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u06cc \u0646\u0645\u0627\u06cc\u0634\u06cc \u0633\u0631\u06cc\u0639 \u0627\u0632 \u06cc\u06a9 \u0686\u062a \u0628\u0627\u0628\u0627\u062a \u0632\u0646\u062f\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0628\u062f\u0647\u0645 \u062a\u0627 \u0645\u0646\u0638\u0648\u0631 \u0645\u0646 \u0631\u0627 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u062f.<\/p>\n<p>YouTube \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f <\/p>\n<p>\u0645\u0646 \u0627\u0632 chatbot \u062f\u0648 \u0633\u0624\u0627\u0644 \u0645\u062e\u062a\u0644\u0641 \u0645\u06cc \u067e\u0631\u0633\u0645: \u0627\u0648\u0644\u06cc\u0646 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a: &#8220;\u0622\u06cc\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06af\u0632\u0627\u0631\u0634\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u0622\u062e\u0631\u06cc\u0646 LLM \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f\u061f&#8221; \u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0645\u0627\u06cc\u0644 \u0647\u0631\u06af\u0648\u0646\u0647 \u0633\u0624\u0627\u0644\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u067e\u0631\u0633\u06cc\u062f.<\/p>\n<p>\u0627\u06af\u0631 \u0628\u0647 \u0686\u06af\u0648\u0646\u06af\u06cc \u062a\u0648\u0644\u06cc\u062f chatbot \u062e\u0631\u0648\u062c\u06cc \u0628\u067e\u0631\u062f\u0627\u0632\u06cc\u062f \u060c \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u06cc\u062f \u06a9\u0647 \u0639\u0627\u0645\u0644 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u0648\u0631\u0648\u062f\u06cc \u0627\u0632 \u062c\u0631\u06cc\u0627\u0646 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u062e\u0648\u062f \u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f Create_Chatbot \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645 \u060c \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0627\u062c\u0631\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0631\u0622\u06cc\u0646\u062f \u062a\u0639\u0627\u0645\u0644 \u0635\u0627\u0641 \u0627\u062f\u063a\u0627\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0633\u067e\u0633 \u062a\u0635\u0645\u06cc\u0645 \u0645\u06cc \u06af\u06cc\u0631\u062f \u06a9\u0647 \u0627\u0632 \u06a9\u062f\u0627\u0645 \u0627\u0628\u0632\u0627\u0631 \u0628\u0631 \u0627\u0633\u0627\u0633 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u0648\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u062c\u0633\u062a\u062c\u0648\u06cc Google \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u0622\u062e\u0631\u06cc\u0646 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0648 \u062a\u0648\u0644\u06cc\u062f \u06af\u0632\u0627\u0631\u0634 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0631\u0627\u06cc \u0633\u0648\u0627\u0644 \u062f\u0648\u0645 \u060c &#8220;\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f \u06a9\u0647 \u0627\u0632 Seaborn \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0637\u0631\u062d \u067e\u0631\u0627\u06a9\u0646\u062f\u06af\u06cc \u0628\u0627 \u062e\u0637\u0648\u0637 \u0631\u06af\u0631\u0633\u06cc\u0648\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u060c&#8221; Chatbot \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0627\u0628\u0632\u0627\u0631 \u0645\u0646\u0627\u0633\u0628 \u0645\u0627\u0646\u0646\u062f Python_Repl \u06cc\u0627 Data_visualization \u060c \u0628\u0633\u062a\u0647 \u0628\u0647 \u0646\u062d\u0648\u0647 \u0633\u0627\u062e\u062a \u067e\u0631\u0633 \u0648 \u062c\u0648 \u060c \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f. ASYNC_TOOL_EXTOROR \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627 \u062a\u0645\u0627\u0633\u0647\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0647\u0645 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc \u0647\u0645\u0632\u0645\u0627\u0646 \u0648 \u0647\u0645 \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0645\u0627\u0646\u0646\u062f \u062a\u0648\u0644\u06cc\u062f \u06a9\u062f \u06cc\u0627 \u062a\u062c\u0633\u0645 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u0646\u062f.<\/p>\n<p>\u062f\u0631 \u0637\u0648\u0644 \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u060c chatbot stategraph \u062d\u0627\u0644\u062a \u0647\u0627\u06cc \u0645\u06a9\u0627\u0644\u0645\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u062f\u0642\u06cc\u0642 \u0648 \u0645\u062a\u0646\u06cc \u0622\u06af\u0627\u0647\u0627\u0646\u0647 \u0631\u0627 \u0628\u0647 \u0633\u0624\u0627\u0644\u0627\u062a \u067e\u06cc\u06af\u06cc\u0631\u06cc \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f. \u0639\u0645\u0644\u06a9\u0631\u062f get_tools \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0641\u0642\u0637 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0647\u0633\u062a\u0646\u062f \u0648 \u062b\u0628\u0627\u062a \u0633\u06cc\u0633\u062a\u0645 \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u0646\u062f. \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0635\u0644\u06cc \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0631\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f \u060c \u067e\u0631\u062f\u0627\u0632\u0634 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u060c \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0635\u062d\u06cc\u062d \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062e\u0631\u0648\u062c\u06cc \u0647\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u060c \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0627\u06cc\u0646 \u062f\u0627\u0633\u062a\u0627\u0646 \u060c \u0634\u0645\u0627 \u062a\u0641\u0627\u0648\u062a \u0628\u06cc\u0646 MCP \u0648 \u062a\u0645\u0627\u0633 \u0628\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u062f\u0631\u06a9 \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f \u060c \u0686\u0647 \u0645\u0648\u0642\u0639 \u0627\u0632 \u062a\u0645\u0627\u0633 \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 MCP \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u060c \u0648 \u0627\u06cc\u0646\u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u0627\u0632 Langgraph \u060c MCP \u0648 OpenSource \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u06cc\u06a9 \u0686\u062a \u0628\u0627\u0628\u0627\u062a \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0627\u06cc\u062c\u0627\u062f \u0634\u0648\u062f.<\/p>\n<p>\u062f\u0631 \u062a\u0645\u0627\u0633 \u0628\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u060c \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0645\u0627\u0646\u0646\u062f \u06cc\u06a9 \u06a9\u0627\u0631\u06af\u0631 \u0645\u0627\u0647\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062a\u062d\u062a \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u062e\u062a \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f &#8211; \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0641\u0631\u0645 \u0647\u0627 \u0631\u0627 \u067e\u0631 \u06a9\u0631\u062f\u0647 \u0648 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0631\u0627 \u0635\u062f\u0627 \u06a9\u0646\u062f \u060c \u0627\u0645\u0627 \u0641\u0642\u0637 \u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u062f\u0647 \u0627\u0633\u062a \u060c \u0648 \u0622\u0646\u0647\u0627 \u0631\u0627 \u06cc\u06a9\u06cc \u06cc\u06a9\u06cc \u0635\u062f\u0627 \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0631 MCP \u060c \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u0639\u0627\u0645\u0644 \u0628\u0627 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0627\u0633\u062a: \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u062c\u0639\u0628\u0647 \u0627\u0628\u0632\u0627\u0631 (\u06a9\u0634\u0641 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f) \u062f\u0631 \u0627\u0637\u0631\u0627\u0641 \u062e\u0648\u062f \u0634\u0633\u062a\u0647 \u0634\u0648\u062f \u060c \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0627 \u0647\u0645 \u062a\u0631\u06a9\u06cc\u0628 \u06a9\u0646\u06cc\u062f \u060c \u06a9\u0627\u0631\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u0647 \u0648 \u0627\u0633\u062a\u0642\u0644\u0627\u0644 \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u06a9\u0627\u0645\u0644\u0627\u064b \u0628\u0627 \u067e\u06cc\u0634\u0628\u0631\u062f \u0645\u062f\u0644 \u0647\u0645\u0631\u0627\u0647 \u0627\u0633\u062a \u0648 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u062a\u0627 \u0633\u0641\u0627\u0631\u0634 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u0646\u062f \u060c \u06a9\u0647 \u0627\u06cc\u0646 \u0627\u0645\u0631 \u0622\u0646 \u0631\u0627 \u0628\u0633\u06cc\u0627\u0631 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0627\u0645\u0627 \u062a\u0627 \u062d\u062f\u06cc \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a.<\/p>\n<p>MCP \u0627\u0632 \u0637\u0631\u06cc\u0642 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0647\u0627\u06cc \u0628\u0627\u0632 \u0628\u0647 \u0627\u062a\u0635\u0627\u0644 \u0633\u0633\u062a \u0645\u06cc \u0631\u0633\u062f \u060c \u06a9\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0628\u0633\u06cc\u0627\u0631 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0648 \u06af\u0633\u062a\u0631\u062f\u0647 \u0628\u0627\u0634\u062f \u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc (\u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0627\u06cc\u0645\u0646\u06cc) \u0628\u0647 \u0637\u0631\u0627\u062d\u06cc \u0642\u0648\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f. \u0628\u062e\u0634 \u0628\u0639\u062f\u06cc \u0628\u0647 \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0639\u0627\u0645\u0644 \u0628\u0627 MCP \u0648 \u0646\u062d\u0648\u0647 \u0645\u0642\u0627\u0628\u0644\u0647 \u0628\u0627 \u0686\u0627\u0644\u0634 \u0647\u0627\u06cc \u0646\u0627\u0634\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc \u0634\u06cc\u0631\u062c\u0647 \u0645\u06cc \u0632\u0646\u062f.<\/p>\n<p>\u0627\u0646\u062a\u062e\u0627\u0628 \u0639\u0645\u0644\u06a9\u0631\u062f \u062a\u0645\u0627\u0633 \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 MCP \u0628\u0647 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u062f:<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062c\u0645\u0648\u0639\u0647 \u06a9\u0648\u0686\u06a9\u06cc \u0627\u0632 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u062e\u0648\u0628 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u06cc\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u062f \u060c \u0627\u0632 \u062a\u0645\u0627\u0633 \u0628\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u060c \u0628\u0647 \u062e\u0635\u0648\u0635 \u0627\u06af\u0631 \u0622\u0646\u0647\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a \u062a\u06a9 \u0645\u0631\u062d\u0644\u0647 \u0627\u06cc \u0647\u0633\u062a\u0646\u062f \u0648 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062e\u0631\u0648\u062c\u06cc \u0647\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u067e\u06cc\u0634 \u0628\u06cc\u0646\u06cc \u0648 \u0627\u062f\u063a\u0627\u0645 \u0647\u0627\u06cc \u0633\u0628\u06a9 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0633\u0631\u0628\u0627\u0631 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 MCP \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0628\u0627\u0634\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0647\u0646\u06af\u0627\u0645 \u0633\u0627\u062e\u062a\u0627\u0631 \u060c \u06a9\u0627\u0631\u0647\u0627\u06cc \u0628\u0627\u0631\u06cc\u06a9 \u0648 \u0633\u0647\u0648\u0644\u062a \u0627\u062f\u063a\u0627\u0645 \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u060c \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u0632 MCP \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0628\u0647 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631 \u060c \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0647\u0645\u0647 \u06a9\u0627\u0631\u0647 \u06cc\u0627 \u0632\u0645\u06cc\u0646\u0647 \u0627\u06cc \u06a9\u0647 \u062f\u0631 \u062a\u0639\u0627\u0645\u0644 \u062a\u06a9\u0627\u0645\u0644 \u0645\u06cc \u06cc\u0627\u0628\u062f \u060c \u0627\u0632 MCP \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. MCP \u0628\u0631\u0627\u06cc \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0648 \u0686\u0646\u062f \u0645\u0631\u062d\u0644\u0647 \u0627\u06cc \u0645\u0646\u0627\u0633\u0628 \u062a\u0631 \u0627\u0633\u062a \u060c \u06cc\u0627 \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0627\u06cc\u062f \u0632\u0645\u06cc\u0646\u0647 \u0628\u0644\u0646\u062f \u0645\u062f\u062a \u0631\u0627 \u062d\u0641\u0638 \u06a9\u0646\u062f \u0648 \u0628\u0627 \u0627\u0646\u0648\u0627\u0639 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627 \u062f\u0631 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627\u0634\u062f \u060c \u0627\u06af\u0631 \u0639\u0627\u0645\u0644 AI \u0634\u0645\u0627 \u06cc\u06a9 \u062f\u0633\u062a\u06cc\u0627\u0631 \u0639\u0645\u0648\u0645\u06cc \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc \u0628\u0627\u0634\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0645\u0646\u0627\u0628\u0639 \u0645\u062e\u062a\u0644\u0641 \u062f\u0627\u062f\u0647 \u0631\u0627 \u062a\u0631\u0633\u06cc\u0645 \u06a9\u0646\u062f.<\/p>\n<p>\u062a\u0648\u062c\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u062d\u0627\u0626\u0632 \u0627\u0647\u0645\u06cc\u062a \u0627\u0633\u062a \u06a9\u0647 \u0627\u06cc\u0646 \u062f\u0648 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u062a\u0642\u0627\u0628\u0644\u0627\u064b \u0645\u0646\u062d\u0635\u0631 \u0628\u0647 \u0641\u0631\u062f \u0646\u06cc\u0633\u062a\u0646\u062f &#8211; \u0622\u0646\u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u06cc\u06a9\u062f\u06cc\u06af\u0631 \u0631\u0627 \u062a\u06a9\u0645\u06cc\u0644 \u06a9\u0646\u0646\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c \u062a\u0645\u0627\u0633 \u0628\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u0645\u0634\u062a\u0631\u06cc MCP \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062e\u0631\u0648\u062c\u06cc \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u06cc\u06a9 \u0645\u062f\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u0648\u062f.<\/p>\n<p>\u0627\u0632 \u0646\u0638\u0631 \u0645\u0641\u0647\u0648\u0645\u06cc \u060c \u062a\u0645\u0627\u0633 \u0628\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0627\u06cc \u062a\u0631\u062c\u0645\u0647 \u0632\u0628\u0627\u0646 \u0637\u0628\u06cc\u0639\u06cc \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0647 \u0631\u0648\u0634 \u06a9\u0646\u062a\u0631\u0644 \u0634\u062f\u0647 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 MCP \u0628\u0647 \u06af\u0648\u0646\u0647 \u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0631\u0627\u0628\u0637 \u0648\u0633\u06cc\u0639 \u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0641\u0631\u0627\u0647\u0645 \u06a9\u0646\u062f \u062a\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u06a9\u0627\u0648\u0634 \u0648 \u06a9\u0627\u0631 \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0627\u06a9\u0646\u0648\u0646 \u0642\u062f\u0645 \u0628\u0647 \u0642\u062f\u0645 \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u0645 \u0648 \u062c\u0648\u0627\u0628 \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u0628\u0631\u0646\u0627\u0645\u0647 MCP \u0631\u0627 \u06a9\u0634\u0641 \u06a9\u0646\u06cc\u0645. \u0645\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0627\u0632 \u0645\u062f\u0644 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f \u0646\u0635\u0628 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u060c \u0645\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0646\u0635\u0628 PIP \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>pip install -r requirements.txt\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0645\u0639\u0645\u0648\u0644 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u060c \u06a9\u0647 \u0627\u0647\u0645\u06cc\u062a \u0622\u0646 \u0628\u0627 \u0627\u062f\u0627\u0645\u0647 \u06a9\u0627\u0631 \u0645\u0634\u0647\u0648\u062f \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<p>langchain_mcp_adapters: \u062a\u0628\u062f\u06cc\u0644 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc MCP \u0628\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc Langchain<br \/>\u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0627 \u0646\u0645\u0627\u06cc\u0646\u062f\u0647 Langgraph \u0648 \u0627\u062c\u0631\u0627\u06cc \u0645\u0634\u062a\u0631\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u06cc\u062f<br \/>\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0627\u0632 \u0686\u0646\u062f\u06cc\u0646 \u0633\u0631\u0648\u0631 MCP \u0628\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0648\u0635\u0644 \u0634\u0648\u0646\u062f \u0648 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u0646\u062f<\/p>\n<p>MCP: MCP \u06cc\u06a9 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0628\u0627\u0632 \u0627\u0633\u062a \u06a9\u0647 \u0646\u062d\u0648\u0647 \u0627\u0631\u0627\u0626\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0632\u0645\u06cc\u0646\u0647 LLMS \u0631\u0627 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>Googlesearch-Python: \u0628\u0633\u062a\u0647 \u0627\u06cc \u0628\u0631\u0627\u06cc \u062a\u0633\u0647\u06cc\u0644 \u062f\u0631 \u062c\u0633\u062a\u062c\u0648\u06cc Google.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code># agent.py\nfrom langchain_core.messages import AIMessage, ToolMessage, HumanMessage\nfrom langgraph.graph import StateGraph, START, END, MessagesState\nfrom nodes import create_chatbot\nimport asyncio\nimport os\nimport dotenv\nfrom langchain_mcp_adapters.client import MultiServerMCPClient\n# main.py\nimport streamlit as st\nimport asyncio\nfrom agent import create_agent\nfrom langchain_core.messages import HumanMessage\n# nodes.py\nfrom server import get_tools\nfrom langgraph.graph import MessagesState\nfrom langchain_openai import ChatOpenAI\nfrom langchain_ollama import ChatOllama\nfrom langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate\nfrom datetime import datetime\nimport os\n\n# server.py - unchanged except for removing search_google if it's not working\nfrom mcp.server.fastmcp import FastMCP\nfrom langchain_experimental.utilities import PythonREPL\nimport io\nimport base64\nimport matplotlib.pyplot as plt\nfrom openai import OpenAI\nfrom pydantic import BaseModel, Field\nimport os\nfrom dotenv import load_dotenv\nimport asyncio\nfrom googlesearch import search  \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0646\u0645\u0627\u06cc\u0646\u062f\u0647<br \/>\u0645\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f CREATE_AGENT \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0641\u0631\u0622\u06cc\u0646\u062f \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0639\u0627\u0645\u0644 AI \u0637\u0631\u0627\u062d\u06cc \u06a9\u0631\u062f\u0645. \u0645\u0646 \u06cc\u06a9 \u062a\u0627\u0628\u0639 ASYNC \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u0645 \u06a9\u0647 DOCS_INFO \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0645\u06cc \u0631\u0633\u0627\u0646\u062f \u062a\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u0628\u0647 chatbot \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f.<\/p>\n<p>\u0645\u0646 MultiserverMcpClient \u0631\u0627 \u062f\u0631 \u06cc\u06a9 ASYNC \u0628\u0627 \u0645\u062f\u06cc\u0631 \u0645\u062a\u0646 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u06a9\u0631\u062f\u0645 \u060c \u0648 \u0627\u0632 \u0628\u0631\u0642\u0631\u0627\u0631\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0628\u0627 \u06cc\u06a9 \u0633\u0631\u0648\u0631 MCP http: \/\/ localhost: 8000\/SSE \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0633\u0631\u0648\u0631-\u0633\u0646 (SSE) \u0628\u0627 \u06cc\u06a9 \u0632\u0645\u0627\u0646 30 \u062b\u0627\u0646\u06cc\u0647.<\/p>\n<p>\u0645\u0646 \u06cc\u06a9 \u062a\u0645\u0627\u0633 \u0628\u0647 client.get_tools () \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0631\u062f\u0645 \u062a\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 MCP \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u0645 \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0631\u0627 \u0641\u0639\u0627\u0644 \u06a9\u0646\u0645. \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0634\u0648\u0631\u0647\u0627\u06cc \u0645\u06a9\u0627\u0644\u0645\u0647 \u060c \u0645\u0646 \u06cc\u06a9 \u062d\u0627\u0644\u062a \u062f\u0648\u0644\u062a\u06cc \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 MessagessTate \u0633\u0627\u062e\u062a\u0645.<\/p>\n<p>\u0633\u067e\u0633 \u0645\u0646 \u06cc\u06a9 \u06af\u0631\u0647 chatbot withcreate_chatbot (docs_info) \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0645 \u0648 \u0628\u0647 \u0622\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u0645 \u062a\u0627 \u0628\u0627 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u0648 \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>async def create_agent(docs_info=None):\n    async with MultiServerMCPClient(\n        {\n            \"server\":{\n                \"url\":\"http:\/\/localhost:8000\/sse\",\n                \"transport\":\"sse\",\n                \"timeout\": 30\n            }\n        }\n    ) as client:\n        # Get MCP tools\n        tools = client.get_tools()\n\n        # Create the graph builder\n        graph_builder = StateGraph(MessagesState)\n\n        # Create nodes\n        chatbot_node = create_chatbot(docs_info)\n        graph_builder.add_node(\"chatbot\", chatbot_node)\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0646 ASYNC_TOOL_EXTOUR \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u067e\u0648\u06cc\u0627 \u0627\u0628\u0632\u0627\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062d\u0627\u0644\u062a \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0648\u0631\u0648\u062f\u06cc \u0637\u0631\u0627\u062d\u06cc \u06a9\u0631\u062f\u0645 \u060c \u06a9\u0647 \u0634\u0627\u0645\u0644 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u0631\u062f \u0648 \u0628\u062f\u0644 \u0634\u062f\u0647 \u062f\u0631 \u0645\u06a9\u0627\u0644\u0645\u0647 \u0627\u0633\u062a. \u0645\u0646 \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0645\u06cc \u06a9\u0646\u0645 (\u067e\u06cc\u0627\u0645 \u0647\u0627[-1]) \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 \u060c \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0622\u0646\u0647\u0627 \u0627\u0632 Tool_calls \u0628\u0647 \u0637\u0648\u0631 \u0645\u0633\u062a\u0642\u06cc\u0645 \u06cc\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 kwargs \u0627\u0636\u0627\u0641\u06cc.<\/p>\n<p>\u0627\u06af\u0631 \u0647\u06cc\u0686 \u062a\u0645\u0627\u0633 \u0627\u0628\u0632\u0627\u0631\u06cc \u067e\u06cc\u062f\u0627 \u0646\u0634\u0648\u062f \u060c \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0631\u0627 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u0645. \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 \u060c \u0645\u0646 \u067e\u06cc\u0627\u0645 \u0647\u0627 \u0631\u0627 \u062f\u0631 New_Messages \u06a9\u067e\u06cc \u0645\u06cc \u06a9\u0646\u0645 \u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0647\u0631 \u062a\u0645\u0627\u0633 \u0627\u0628\u0632\u0627\u0631 \u060c \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0627\u0628\u0632\u0627\u0631_ name \u060c tool_args \u0648 tool_id \u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0647\u0631 \u062f\u0648 \u0641\u0631\u0647\u0646\u06af \u0644\u063a\u062a \u0648 \u0634\u06cc\u0621 \u0628\u0631\u0627\u06cc \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc \u0631\u0627 \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0645. \u0645\u0646 \u0628\u0627 \u062a\u0637\u0628\u06cc\u0642 \u0627\u0628\u0632\u0627\u0631 \u0622\u0646 \u0628\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u060c \u0627\u0628\u0632\u0627\u0631 \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc \u06a9\u0646\u0645. \u062f\u0631 \u0635\u0648\u0631\u062a \u06cc\u0627\u0641\u062a\u0646 \u060c \u0645\u0646 \u06cc\u06a9 \u0644\u06cc\u0633\u062a \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627\u06cc \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u0645.<\/p>\n<p>\u0627\u06af\u0631 \u0627\u0628\u0632\u0627\u0631 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u060c \u0645\u0646 \u062a\u0639\u06cc\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u0645 \u06a9\u0647 \u0622\u06cc\u0627 \u0627\u06cc\u0646 \u06cc\u06a9 \u062a\u0627\u0628\u0639 async \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 asyncio.iscoroutinefunction () \u0627\u0633\u062a &#8211; \u0627\u06af\u0631 async \u0628\u0627\u0634\u062f \u060c \u0645\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0628\u0632\u0627\u0631 await.coroutine \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u0645 (<strong>Tool_Args) \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u060c \u0645\u0646 \u0628\u0647 Tool.func \u0645\u06cc \u06af\u0648\u06cc\u0645 (<\/strong>Tool_args) \u06cc\u0627 \u0627\u0628\u0632\u0627\u0631 (** tool_args). \u0645\u0646 \u0628\u0627 \u06af\u0631\u0641\u062a\u0646 \u0627\u0633\u062a\u062b\u0646\u0627\u0626\u0627\u062a \u0648 \u067e\u06cc\u0648\u0633\u062a\u0646 \u0628\u0647 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u062e\u0637\u0627\u06cc \u062f\u0642\u06cc\u0642 \u0628\u0647 new_messages \u060c \u062e\u0637\u0627\u0647\u0627 \u0631\u0627 \u0628\u0631\u0637\u0631\u0641 \u0645\u06cc \u06a9\u0646\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code># Custom async tool node to handle async MCP tools\n        async def async_tool_executor(state):\n            messages = state[\"messages\"]\n            last_message = messages[-1]\n\n            # Check if there are tool calls\n            tool_calls = None\n            if hasattr(last_message, \"tool_calls\"):\n                tool_calls = last_message.tool_calls\n            elif hasattr(last_message, \"additional_kwargs\") and \"tool_calls\" in last_message.additional_kwargs:\n                tool_calls = last_message.additional_kwargs[\"tool_calls\"]\n\n            if not tool_calls:\n                return {\"messages\": messages}\n\n            # Process each tool call\n            new_messages = messages.copy()\n\n            for tool_call in tool_calls:\n                # Handle different formats of tool_call\n                if isinstance(tool_call, dict):\n                    tool_name = tool_call.get(\"name\")\n                    tool_args = tool_call.get(\"args\", {})\n                    tool_id = tool_call.get(\"id\", \"tool-call-id\")\n                else:\n                    tool_name = tool_call.name\n                    tool_args = tool_call.args if hasattr(tool_call, \"args\") else {}\n                    tool_id = getattr(tool_call, \"id\", \"tool-call-id\")\n\n                # Print debug info\n                print(f\"Executing tool: {tool_name}\")\n                print(f\"Tool args: {tool_args}\")\n\n                # Find the matching tool\n                tool = next((t for t in tools if t.name == tool_name), None)\n\n                if not tool:\n                    # Tool not found\n                    tool_error = f\"Error: {tool_name} is not a valid tool, try one of {[t.name for t in tools]}.\"\n                    new_messages.append(AIMessage(content=tool_error))\n                else:\n                    try:\n                        # Execute the async tool\n                        if asyncio.iscoroutinefunction(tool.coroutine):\n                            result = await tool.coroutine(**tool_args)\n                        else:\n                            # Fall back to sync execution if needed\n                            result = tool.func(**tool_args) if hasattr(tool, 'func') else tool(**tool_args)\n\n                        print(f\"Tool result: {result}\")\n\n                        # Add tool result\n                        new_messages.append(ToolMessage(\n                            content=str(result),\n                            tool_call_id=tool_id,\n                            name=tool_name\n                        ))\n                    except Exception as e:\n                        # Handle errors\n                        error_msg = f\"Error: {str(e)}\\n Please fix your mistakes.\"\n                        print(f\"Tool error: {error_msg}\")\n                        new_messages.append(AIMessage(content=error_msg))\n\n            return {\"messages\": new_messages}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0646 \u0628\u0627 \u0627\u062f\u063a\u0627\u0645 \u06cc\u06a9 \u06af\u0631\u0647 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0627\u0628\u0632\u0627\u0631 ASYNC \u0648 \u06cc\u06a9 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc \u062f\u0631 \u0646\u0645\u0648\u062f\u0627\u0631 Chatbot \u060c \u06cc\u06a9 \u062c\u0631\u06cc\u0627\u0646 \u0645\u06a9\u0627\u0644\u0645\u0647 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u0631\u0627 \u0637\u0631\u0627\u062d\u06cc \u06a9\u0631\u062f\u0645. \u0627\u0628\u062a\u062f\u0627 \u060c \u0645\u0646 ASYNC_TOOL_EXTOUR \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06af\u0631\u0647 \u0627\u06cc \u0628\u0647 \u0646\u0627\u0645 &#8220;\u0627\u0628\u0632\u0627\u0631\u0647\u0627&#8221; \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0645 \u0648 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u06a9\u0646\u062f.<\/p>\n<p>\u0633\u067e\u0633 \u060c \u0645\u0646 \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0631\u0648\u062a\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0645 \u062a\u0627 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u06cc \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u062f\u0631 \u0645\u06a9\u0627\u0644\u0645\u0647 \u062a\u0639\u06cc\u06cc\u0646 \u06a9\u0646\u0645. \u0631\u0648\u062a\u0631 \u0628\u0627\u0632\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 AI \u0634\u0627\u0645\u0644 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 \u0627\u0633\u062a &#8211; \u0627\u06af\u0631 \u067e\u06cc\u062f\u0627 \u0634\u0648\u062f \u060c \u062c\u0631\u06cc\u0627\u0646 \u0631\u0627 \u0628\u0647 &#8220;\u0627\u0628\u0632\u0627\u0631\u0647\u0627&#8221; \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f \u060c \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u060c \u0645\u06a9\u0627\u0644\u0645\u0647 \u0631\u0627 \u067e\u0627\u06cc\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u062c\u0631\u06cc\u0627\u0646 \u060c \u0645\u0646 \u0644\u0628\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0646\u0645\u0648\u062f\u0627\u0631 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0645: \u0634\u0631\u0648\u0639 \u0627\u0632 &#8220;chatbot&#8221; \u060c \u0645\u0633\u06cc\u0631\u06cc\u0627\u0628\u06cc \u0645\u0634\u0631\u0648\u0637 \u0628\u0647 &#8220;\u0627\u0628\u0632\u0627\u0631\u0647\u0627&#8221; \u06cc\u0627 &#8220;\u067e\u0627\u06cc\u0627\u0646&#8221; \u0648 \u062d\u0644\u0642\u0647 &#8220;\u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc&#8221; \u0628\u0647 &#8220;\u0686\u062a \u0628\u0627\u0628\u0627\u062a&#8221; \u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0686\u0646\u062f\u06cc\u0646 \u062a\u0639\u0627\u0645\u0644 \u0627\u0628\u0632\u0627\u0631.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code> # Add the async tool executor node\n        graph_builder.add_node(\"tools\", async_tool_executor)\n\n        # Define router function to handle tool calls\n        def router(state):\n            messages = state[\"messages\"]\n            last_message = messages[-1]\n\n            has_tool_calls = False\n            if isinstance(last_message, AIMessage):\n                if hasattr(last_message, \"tool_calls\") and last_message.tool_calls:\n                    has_tool_calls = True\n                elif hasattr(last_message, \"additional_kwargs\") and last_message.additional_kwargs.get(\"tool_calls\"):\n                    has_tool_calls = True\n\n            return \"tools\" if has_tool_calls else \"end\"\n\n        # Add edges\n        graph_builder.add_edge(START, \"chatbot\")\n        graph_builder.add_conditional_edges(\n            \"chatbot\",\n            router,\n            {\n                \"tools\": \"tools\",\n                \"end\": END\n            }\n        )\n        graph_builder.add_edge(\"tools\", \"chatbot\")\n\n        # Compile the graph\n        graph = graph_builder.compile()\n        return graph, client  # Return client to keep it alive\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/langgraph-mcp-ollama-%da%a9%d9%84%db%8c%d8%af-%d8%b9%d8%a7%d9%85%d9%84-%d9%82%d8%af%d8%b1%d8%aa%d9%85%d9%86%d8%af-ai\/#nodepy\" >node.py<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/langgraph-mcp-ollama-%da%a9%d9%84%db%8c%d8%af-%d8%b9%d8%a7%d9%85%d9%84-%d9%82%d8%af%d8%b1%d8%aa%d9%85%d9%86%d8%af-ai\/#%D8%B3%D8%B1%D9%88%D8%B1\" >\u0633\u0631\u0648\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/langgraph-mcp-ollama-%da%a9%d9%84%db%8c%d8%af-%d8%b9%d8%a7%d9%85%d9%84-%d9%82%d8%af%d8%b1%d8%aa%d9%85%d9%86%d8%af-ai\/#mainpy\" >main.py<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"nodepy\"><\/span>\n<p>  node.py<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0631\u0627 \u0637\u0631\u0627\u062d\u06cc \u06a9\u0631\u062f\u0645 \u060c get_system_prompt \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0633\u0631\u06cc\u0639 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u060c \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0627 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0648\u0627\u0636\u062d \u0648 \u0622\u06af\u0627\u0647\u06cc \u0645\u062a\u0646\u06cc \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u0648\u0644 \u060c \u0645\u0646 \u062a\u0627\u0631\u06cc\u062e \u0641\u0639\u0644\u06cc \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 dateTime.Now (). strftime (&#8220;\u066a y- \u066a m- \u066a d&#8221;) \u0641\u0631\u0645\u062a \u06a9\u0631\u062f\u0645 \u0648 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0633\u0631\u06cc\u0639 \u0628\u0631\u0627\u06cc \u0645\u0631\u062c\u0639 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u062a\u0639\u0628\u06cc\u0647 \u06a9\u0631\u062f\u0645.<\/p>\n<p>\u0633\u067e\u0633 \u060c \u0645\u0646 \u0646\u0642\u0634 \u0648 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0647\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0631 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u0645 \u060c \u0633\u0647 \u0627\u0628\u0632\u0627\u0631 \u0627\u0635\u0644\u06cc \u0631\u0627 \u0630\u06a9\u0631 \u06a9\u0631\u062f\u0645: GETERATE_IMAGE (DALL-E \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u062a\u0635\u0648\u06cc\u0631) \u060c Data_Visualization (Matplotlib \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0646\u0645\u0648\u062f\u0627\u0631) \u0648 Python_repl (\u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0627\u062c\u0631\u0627\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646).<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>def get_system_prompt(docs_info=None):\n    system_prompt = f\"\"\"\n    Today is {datetime.now().strftime(\"%Y-%m-%d\")}\n    You are a helpful AI Assistant that can use these tools:\n    - generate_image: Generate an image using DALL-E based on a prompt\n    - data_visualization: Create charts with Python and matplotlib\n    - python_repl: Execute Python code\n\n    When you call image generation or data visualization tool, only answer the fact that you generated, not base64 code or url.\n    Once you generated image by a tool, then do not call it again in one answer.\n    \"\"\"\n    if docs_info:\n        docs_context = \"\\n\\nYou have access to these documents:\\n\"\n        for doc in docs_info:\n            docs_context += f\"- {doc['name']}: {doc['type']}\\n\"\n        system_prompt += docs_context\n\n    system_prompt += \"\\nYou should always answer in same language as user's ask.\"\n    return system_prompt\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f Create_Chatbot \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0648 \u062a\u0648\u0644\u06cc\u062f \u067e\u0627\u0633\u062e \u0647\u0627\u06cc AI \u062a\u0648\u0633\u0639\u0647 \u062f\u0627\u062f\u0645. \u0627\u0632 \u06cc\u06a9 \u062a\u06a9\u0646\u06cc\u06a9 \u060c chatprompttemplate \u060c \u0628\u0631\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0628\u0627 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0627\u0632 get_system_prompt (docs_info) \u0622\u0645\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0645\u0646 (|) \u0633\u0631\u06cc\u0639 \u0631\u0627 \u0628\u0647 LLM \u0644\u0648\u0644\u0647 \u06a9\u0631\u062f\u0645 \u062a\u0627 \u06cc\u06a9 \u0632\u0646\u062c\u06cc\u0631\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0645. \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0631\u0634\u062a\u0647 \u0647\u0627 \u0628\u0647 \u0627\u0634\u06cc\u0627\u0621 \u0627\u0646\u0633\u0627\u0646\u06cc \u060c \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0642\u0627\u0644\u0628 \u067e\u06cc\u0627\u0645 \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f. Chatbot \u0628\u0627 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 LLM \u0631\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u067e\u0627\u0633\u062e \u0631\u0627 \u0636\u0645\u06cc\u0645\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u062a\u0627\u0631\u06cc\u062e \u0645\u06a9\u0627\u0644\u0645\u0647 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0633\u062a\u06cc\u0627\u0631 \u0636\u0645\u0646 \u062a\u0637\u0628\u06cc\u0642 \u0628\u0627 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627 \u060c \u0627\u0632 \u0642\u0648\u0627\u0646\u06cc\u0646 \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631-\u0622\u06af\u0646\u0648\u0633\u062a\u06cc\u06a9 \u0628\u0627\u0642\u06cc \u0645\u0627\u0646\u062f\u0647 \u0648 \u0627\u0645\u06a9\u0627\u0646 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc \u062f\u0631 \u067e\u0627\u0633\u062e \u0647\u0627 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u06cc\u06a9 \u062a\u062c\u0631\u0628\u0647 \u062a\u0639\u0627\u0645\u0644\u06cc \u0648 \u067e\u0648\u06cc\u0627 Chatbot \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f. \ud83d\ude80<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>def create_chatbot(docs_info=None):\n    prompt = ChatPromptTemplate.from_messages([\n        SystemMessagePromptTemplate.from_template(get_system_prompt(docs_info)),\n        HumanMessagePromptTemplate.from_template(\"{input}\")\n    ])\n\n    # Use the LLM without binding tools\n    chain = prompt | llm\n\n    def chatbot(state: MessagesState):\n        # Ensure messages are in the right format\n        if isinstance(state[\"messages\"], str):\n            from langchain_core.messages import HumanMessage\n            messages = [HumanMessage(content=state[\"messages\"])]\n        else:\n            messages = state[\"messages\"]\n\n        response = chain.invoke(messages)\n        return {\"messages\": messages + [response]}\n\n    return chatbot\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B3%D8%B1%D9%88%D8%B1\"><\/span>\n<p>  \u0633\u0631\u0648\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u062a\u0635\u0627\u0648\u06cc\u0631 \u060c \u062a\u062c\u0633\u0645 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f \u067e\u0627\u06cc\u062a\u0648\u0646 \u062f\u0631 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0686\u0646\u062f \u0627\u0628\u0632\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0645. \u0627\u0628\u0632\u0627\u0631 Generate_Image \u0627\u0632 DALL-E \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0633\u0631\u06cc\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0633\u0631\u06cc\u0639 \u0633\u0631\u06cc\u0639 \u0645\u0639\u062a\u0628\u0631 \u0627\u0633\u062a \u0648 \u0633\u067e\u0633 \u06cc\u06a9 \u062a\u0645\u0627\u0633 \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0647 API OpenAI \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u062a\u0635\u0648\u06cc\u0631 \u0628\u0631\u0642\u0631\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u062f\u0631 \u0635\u0648\u0631\u062a \u0645\u0648\u0641\u0642\u06cc\u062a \u060c \u06cc\u06a9 URL \u0631\u0627 \u0628\u0647 \u062a\u0635\u0648\u06cc\u0631 \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f. \u0627\u06af\u0631 \u062e\u0637\u0627\u06cc\u06cc \u0631\u062e \u062f\u0647\u062f \u060c \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0627\u0628\u0632\u0627\u0631 Data_Visualization \u06a9\u062f \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 MATPLOTLIB \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u062f\u0627\u0631\u0647\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 PNG \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 BASE64 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u0628\u0632\u0627\u0631 Python_Repl \u06a9\u062f \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u062c\u0631\u0627\u06cc \u067e\u0648\u06cc\u0627 \u0648\u0631\u0648\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u0647\u0631 \u0627\u0628\u0632\u0627\u0631 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627\u0647\u0627 \u0648 \u0628\u0627\u0632\u06af\u0634\u062a \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u0645\u0639\u0646\u06cc \u062f\u0627\u0631 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>@mcp.tool()\nasync def generate_image(prompt: str) -&gt; str:\n    \"\"\"\n    Generate an image using DALL-E based on the given prompt.\n    \"\"\"\n    if not isinstance(prompt, str) or not prompt.strip():\n        raise ValueError(\"Invalid prompt\")\n\n    try:\n        # Since this is an async function, we need to handle the synchronous OpenAI call properly\n        loop = asyncio.get_event_loop()\n        response = await loop.run_in_executor(\n            None, \n            lambda: client.images.generate(\n                model=\"dall-e-3\",\n                prompt=prompt,\n                size=\"1024x1024\",\n                quality=\"standard\",\n                n=1\n            )\n        )\n\n        # Return both success message and URL\n        return f\"Successfully generated an image of {prompt}! Here's the URL: {response.data[0].url}\"\n    except Exception as e:\n        return f\"Error generating image: {str(e)}\"\n\nrepl = PythonREPL()\n\n@mcp.tool()\ndef data_visualization(code: str):\n    \"\"\"Execute Python code. Use matplotlib for visualization.\"\"\"\n    try:\n        repl.run(code)\n        buf = io.BytesIO()\n        plt.savefig(buf, format=\"png\")\n        buf.seek(0)\n        img_str = base64.b64encode(buf.getvalue()).decode()\n        return f\"data:image\/png;base64,{img_str}\"\n    except Exception as e:\n        return f\"Error creating chart: {str(e)}\"\n\n@mcp.tool()\ndef python_repl(code: str):\n    \"\"\"Execute Python code.\"\"\"\n    return repl.run(code)\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f get_tools \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0645 \u062a\u0627 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0647\u0633\u062a\u0646\u062f \u060c \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u0645 \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u0645 \u06a9\u0647 \u062a\u0646\u0647\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u06af\u0646\u062c\u0627\u0646\u062f\u0647 \u0634\u062f\u0647 \u0627\u0646\u062f. \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0628\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0634\u0631\u0648\u0639 \u0645\u06cc \u0634\u0648\u062f: GETERATE_IMAGE \u060c PYTHON_REPL \u0648 DATA_VISUALIZATION. \u0627\u06af\u0631 \u06cc\u06a9 retriever_tool \u0627\u0636\u0627\u0641\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u0648\u062f \u060c \u0628\u0647 \u0644\u06cc\u0633\u062a \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0633\u067e\u0633 \u0627\u06cc\u0646 \u062a\u0627\u0628\u0639 \u0644\u06cc\u0633\u062a \u06a9\u0627\u0645\u0644\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<p>\u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc MCP.Run (Transport = &#8220;SSE&#8221;) \u0633\u0631\u0648\u0631 MCP \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0633\u0631\u0648\u0631 SENT (SSE) \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0631\u0648\u0634 \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0647\u0646\u06af\u0627\u0645 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0633\u062a\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>def get_tools(retriever_tool=None):\n    # Only include tools that are working\n    base_tools = [generate_image, python_repl, data_visualization]\n\n    if retriever_tool:\n        base_tools.append(retriever_tool)\n\n    return base_tools\n\nif __name__ == \"__main__\":\n    mcp.run(transport=\"sse\")\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"mainpy\"><\/span>\n<p>  main.py<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0635\u0644\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0639\u0627\u0645\u0644 \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0637\u0631\u0627\u062d\u06cc \u06a9\u0631\u062f\u0645 \u06a9\u0647 \u0648\u0631\u0648\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627 \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0631\u062f. \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0646\u0645\u0627\u06cc\u0646\u062f\u0647 \u0648 \u0645\u0634\u062a\u0631\u06cc \u0628\u0627 Await Create_Agent () \u0634\u0631\u0648\u0639 \u0645\u06cc \u0634\u0648\u062f. \u0633\u067e\u0633 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062e\u0637 \u0641\u0631\u0645\u0627\u0646 \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0628\u0647 \u0634\u0645\u0627 \u0633\u0648\u0642 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0628\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0631\u0628\u0631 \u067e\u06cc\u0627\u0645 \u0627\u0648\u0644\u06cc\u0647 (HumanMessage) \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0627 \u0627\u0633\u062a\u0646\u0627\u062f \u0628\u0647 \u0639\u0627\u0645\u0644 \u063a\u06cc\u0631 \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Agent.Ainvoke () \u060c \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648 \u067e\u0627\u0633\u062e\u06af\u0648\u06cc\u06cc \u0628\u0647 \u067e\u0627\u0633\u062e \u0647\u0627 \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc \u06cc\u0627\u0628\u062f. \u0627\u06af\u0631 \u067e\u0627\u0633\u062e \u0627\u0632 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627\u0634\u062f \u060c \u0648\u0631\u0648\u062f\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0686\u0627\u067e \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06af\u0631 \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0627\u0634\u062f \u060c \u0646\u062a\u06cc\u062c\u0647 \u0631\u0627 \u0686\u0627\u067e \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0627\u06cc\u0646 \u06cc\u06a9 \u062a\u0648\u0644\u06cc\u062f \u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u062a \u0648 URL \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0645\u06cc \u06a9\u0646\u062f. \u0647\u0631\u06af\u0648\u0646\u0647 \u0627\u0633\u062a\u062b\u0646\u0627 \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u067e\u0631\u062f\u0627\u0632\u0634 \u06af\u0631\u0641\u062a\u0627\u0631 \u0648 \u0686\u0627\u067e \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0645\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0627\u062f\u0627\u0645\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u0632\u0646\u062f\u0647 \u0645\u06cc \u0645\u0627\u0646\u062f. \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0647 \u0637\u0648\u0631 \u063a\u06cc\u0631 \u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0627 Ansyncio.run (\u0627\u0635\u0644\u06cc ()) \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>async def main():\n    # Create the agent\n    agent, client = await create_agent()\n\n    # Get user input from command line\n    user_input = input(\"What would you like to ask? \")\n\n    # Create a proper initial message\n    initial_message = HumanMessage(content=user_input)\n\n    try:\n        # Use the agent asynchronously\n        print(\"Processing your request...\")\n        result = await agent.ainvoke({\"messages\": [initial_message]})\n\n        # Print the results\n        for message in result[\"messages\"]:\n            if hasattr(message, \"type\") and message.type == \"human\":\n                print(f\"User: {message.content}\")\n            elif hasattr(message, \"type\") and message.type == \"tool\":\n                print(f\"Tool Result: {message.content}\")\n                # If it's an image generation result, extract URL\n                if \"image\" in message.content.lower() and \"url\" in message.content.lower():\n                    print(\"Image Generated Successfully!\")\n            else:\n                print(f\"AI: {message.content}\")\n    except Exception as e:\n        print(f\"Error: {str(e)}\")\n\n    # Keep the client alive until all operations are done\n    # In a real application, you'd keep the client active as long as needed\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc:<br \/>MCP \u0641\u0642\u0637 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0633\u0627\u062f\u0647 \u0628\u0647 \u0631\u0648\u0632 \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0631\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f \u060c \u0628\u0644\u06a9\u0647 \u06cc\u06a9 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0628\u0632\u0631\u06af \u067e\u0627\u0631\u0627\u062f\u0627\u06cc\u0645 \u0627\u0633\u062a.<\/p>\n<p>MCP \u06cc\u06a9 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0645\u062a\u062f\u0627\u0648\u0644 \u0648 \u0628\u0627\u0632 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc AI \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f \u0628\u0647 \u0627\u0646\u0648\u0627\u0639 \u0645\u062e\u062a\u0644\u0641\u06cc \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u060c \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0648 \u062e\u062f\u0645\u0627\u062a \u0628\u0647 \u0631\u0648\u0634\u06cc \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0645\u062a\u0635\u0644 \u0634\u0648\u0646\u062f \u060c \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0645\u0646\u0628\u0639 \u062f\u0627\u062f\u0647 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u062f\u063a\u0627\u0645 AI \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u062e\u062f\u0645\u0627\u062a \u063a\u06cc\u0631 \u0647\u0648\u0634\u0645\u0646\u062f \u0641\u0639\u0644\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 &#8220;\u0627\u0628\u0632\u0627\u0631\u06cc&#8221; \u0627\u0632 \u0637\u0631\u06cc\u0642 MCP \u0628\u0631\u0627\u06cc LLM (\u0645\u062f\u0644 \u0632\u0628\u0627\u0646 \u0628\u0632\u0631\u06af) \u062f\u0631 \u0645\u0639\u0631\u0636 \u062a\u0645\u0627\u0633 \u0642\u0631\u0627\u0631 \u062f\u0647\u0646\u062f \u060c \u06a9\u0647 LLM \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f \u0628\u0627 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0634\u062a\u0647 \u0648 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0639\u0645\u062f\u0647 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u0634\u0648\u062f.<\/p>\n<p>\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u06cc\u06a9 \u0641\u0631\u0627\u06cc\u0646\u062f \u0627\u0633\u062a \u0648 \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u062f \u060c \u0686\u0627\u0644\u0634 \u0647\u0627\u06cc\u06cc \u0648\u062c\u0648\u062f \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a. \u062e\u062f\u0627 \u0628\u0647 \u0633\u062e\u062a \u06a9\u0648\u0634\u06cc \u067e\u0627\u062f\u0627\u0634 \u0645\u06cc \u062f\u0647\u062f \u060c \u0648 \u0647\u0631\u0686\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u0633\u062e\u062a \u062a\u0631 \u0645\u06cc \u0634\u0648\u06cc\u062f \u060c \u0628\u0647\u062a\u0631 \u062e\u0648\u0627\u0647\u06cc\u062f \u0634\u062f<\/p>\n<p>\ud83e\uddd9\u200d\u2642 \u0645\u0646 \u06cc\u06a9 \u0645\u062a\u062e\u0635\u0635 \u0645\u0648\u0644\u062f \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0647\u0633\u062a\u0645! \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0631 \u0645\u0648\u0631\u062f \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u0647\u0645\u06a9\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f \u060c \u0627\u0632 \u0627\u06cc\u0646\u062c\u0627 \u0633\u0624\u0627\u0644 \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u06cc\u06a9 \u062a\u0645\u0627\u0633 \u0645\u0634\u0627\u0648\u0631\u0647 1 \u0628\u0631 1 \u0631\u0627 \u0628\u0627 \u0645\u0646 \u0631\u0632\u0631\u0648 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0645\u0646 \u0627\u06af\u0631 \u0634\u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0642\u062f\u0631\u062f\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u0645<\/p>\n<p>\u2763 \u0628\u0647 \u067e\u0627\u062a\u0631\u0648\u0646 \u0645\u0646 \u0628\u067e\u06cc\u0648\u0646\u062f\u06cc\u062f: https:\/\/www.patreon.com\/gaodalie_ai<\/p>\n<p>\u0642\u0631\u0627\u0631 \u0645\u0644\u0627\u0642\u0627\u062a \u0628\u0627 \u0645\u0646: https: \/\/topmate.io\/gaodalie_ai<\/p>\n<p>\u0627\u0632 \u0645\u062d\u062a\u0648\u0627 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0646\u06cc\u062f (\u0647\u0631 \u062f\u0644\u0627\u0631 \u0628\u0647 \u0641\u06cc\u0644\u0645 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u062f): https: \/\/buymeacoffee.com\/gaodalie98d<\/p>\n<p>\u062f\u0631 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0631\u0627\u06cc\u06af\u0627\u0646 \u0645\u0634\u062a\u0631\u06a9 \u0634\u0648\u06cc\u062f: https: \/\/substack.com\/@gaodalie<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u062f\u0631 \u0627\u06cc\u0646 \u062f\u0627\u0633\u062a\u0627\u0646 \u060c \u0645\u0646 \u06cc\u06a9 \u0622\u0645\u0648\u0632\u0634 \u0641\u0648\u0642 \u0627\u0644\u0639\u0627\u062f\u0647 \u0633\u0631\u06cc\u0639 \u062f\u0627\u0631\u0645 \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Langgraph \u060c MCP \u0648 Ollama \u06cc\u06a9 \u0686\u062a \u0628\u0627\u0628\u0627\u062a \u0686\u0646\u062f \u0639\u0627\u0645\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u062a\u0627 \u06cc\u06a9 chatbot \u0639\u0627\u0645\u0644 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06cc\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062e\u0635\u06cc \u062e\u0648\u062f \u0628\u0633\u0627\u0632\u06cc\u062f. \u0686\u0646\u062f\u06cc \u067e\u06cc\u0634 \u060c \u0645\u0646 \u0648\u06cc\u062f\u0626\u0648\u06cc\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":107478,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media2.dev.to\/dynamic\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdz7yflduwt3fgq53hqxo.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-107477","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/107477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=107477"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/107477\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/107478"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=107477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=107477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=107477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}