{"product_id":"research-agent-một-dong-code-bắt-dầu-với-claude-agent-sdk","title":"Research Agent một dòng code — Bắt đầu với Claude Agent SDK","description":"\n\u003cp\u003eResearch agent là một trong những ứng dụng mạnh nhất của AI agents. Thay vì theo workflow cố định, agent tự \u003cstrong\u003equyết định tìm gì tiếp theo\u003c\/strong\u003e dựa trên những gì đã khám phá. Bài này hướng dẫn bạn xây dựng research agent từ prototype đến production-ready với \u003cstrong\u003eClaude Agent SDK\u003c\/strong\u003e.\u003c\/p\u003e\n\n\u003cp\u003eBài viết dựa trên \u003cstrong\u003eClaude Cookbooks chính thức\u003c\/strong\u003e của Anthropic.\u003c\/p\u003e\n\n\u003ch2\u003eTại sao Research Agent?\u003c\/h2\u003e\n\n\u003cp\u003eResearch là use case lý tưởng cho agents vì hai lý do:\u003c\/p\u003e\n\n\u003col\u003e\n  \u003cli\u003e\n\u003cstrong\u003eThông tin không self-contained\u003c\/strong\u003e — Câu hỏi đầu vào không chứa đáp án. Agent phải tương tác với hệ thống bên ngoài (search engines, databases, APIs) để thu thập dữ liệu.\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eLộ trình khám phá xuất hiện trong quá trình\u003c\/strong\u003e — Không thể predetermine workflow. Việc agent nên tìm tài chính hay pháp lý phụ thuộc vào những gì nó phát hiện về business model.\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003cp\u003eỨng dụng thực tế: phân tích cạnh tranh, troubleshooting kỹ thuật, nghiên cứu đầu tư, literature review.\u003c\/p\u003e\n\n\u003ch2\u003eAgent đầu tiên: Stateless Query\u003c\/h2\u003e\n\n\u003cp\u003eĐơn giản nhất — chỉ vài dòng code:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003efrom claude_agent_sdk import query\n\nresult = await query(\n    prompt=\"Phân tích thị trường AI tại Việt Nam 2026\",\n    allowed_tools=[\"WebSearch\"],\n    model=\"claude-sonnet-4-6\"\n)\n\nprint(result.result)\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003eCách hoạt động\u003c\/h3\u003e\n\n\u003cul\u003e\n  \u003cli\u003e\n\u003ccode\u003equery()\u003c\/code\u003e tạo một agent interaction \u003cstrong\u003estateless\u003c\/strong\u003e (không conversation memory)\u003c\/li\u003e\n  \u003cli\u003e\n\u003ccode\u003eallowed_tools=[\"WebSearch\"]\u003c\/code\u003e cho phép Claude tự do search web\u003c\/li\u003e\n  \u003cli\u003eAgent tự quyết định: search gì, bao nhiêu lần, synthesize kết quả ra sao\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch3\u003eTool permissions\u003c\/h3\u003e\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n\u003cth\u003eLoại\u003c\/th\u003e\n\u003cth\u003eHành vi\u003c\/th\u003e\n\u003c\/tr\u003e\n  \u003c\/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eallowed_tools\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eClaude dùng tự do (WebSearch)\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOther tools\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eCó sẵn nhưng cần approval\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRead-only tools\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eLuôn được phép (Read)\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003edisallowed_tools\u003c\/strong\u003e\u003c\/td\u003e\n\u003ctd\u003eBị loại hoàn toàn khỏi context\u003c\/td\u003e\n\u003c\/tr\u003e\n  \u003c\/tbody\u003e\n\u003c\/table\u003e\n\n\u003ch3\u003eKhi nào dùng stateless query?\u003c\/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eCâu hỏi research one-off, không cần context trước đó\u003c\/li\u003e\n  \u003cli\u003eXử lý song song nhiều câu hỏi độc lập\u003c\/li\u003e\n  \u003cli\u003eCần fresh context cho mỗi query\u003c\/li\u003e\n\u003c\/ul\u003e\n\n\u003ch2\u003eNâng cấp: 3 cải tiến quan trọng\u003c\/h2\u003e\n\n\u003ch3\u003e1. Conversation Memory với ClaudeSDKClient\u003c\/h3\u003e\n\n\u003cp\u003eStateless queries không thể xây dựng trên kết quả trước. Ví dụ: \"Tìm top AI startups\" rồi \"Họ được fund thế nào?\" — câu thứ hai không biết startups nào.\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003efrom claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions\n\noptions = ClaudeAgentOptions(\n    model=\"claude-sonnet-4-6\",\n    allowed_tools=[\"WebSearch\", \"Read\"]\n)\n\nasync with ClaudeSDKClient(options=options) as client:\n    # Turn 1: Research\n    await client.query(\"Top AI startups Việt Nam 2026?\")\n    async for msg in client.receive_response():\n        process(msg)\n\n    # Turn 2: Follow-up (có context từ turn 1)\n    await client.query(\"So sánh funding của top 3\")\n    async for msg in client.receive_response():\n        process(msg)\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003e\u003ccode\u003eClaudeSDKClient\u003c\/code\u003e duy trì conversation history — turn 2 biết \"top 3\" là startups nào từ turn 1.\u003c\/p\u003e\n\n\u003ch3\u003e2. System Prompts cho specialized behavior\u003c\/h3\u003e\n\n\u003cp\u003eResearch domains khác nhau cần tiêu chuẩn khác nhau. Financial analysis cần rigorous hơn tech news summaries.\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003eoptions = ClaudeAgentOptions(\n    model=\"claude-sonnet-4-6\",\n    system_prompt=\"\"\"Bạn là research analyst chuyên thị trường Việt Nam.\n    - Ưu tiên nguồn: báo cáo chính thức, số liệu thống kê\n    - Trích dẫn nguồn cho mọi claim\n    - Output format: executive summary + chi tiết + sources\"\"\",\n    allowed_tools=[\"WebSearch\"]\n)\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch3\u003e3. Multimodal Research với Read Tool\u003c\/h3\u003e\n\n\u003cp\u003eResearch thực tế không chỉ text. Market reports có charts, technical docs có diagrams. Enable \u003ccode\u003eRead\u003c\/code\u003e tool để Claude phân tích images, PDFs, và visual content.\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003eoptions = ClaudeAgentOptions(\n    allowed_tools=[\"WebSearch\", \"Read\"],\n    # Read tool cho phép Claude đọc files, images, PDFs\n)\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eXử lý buffer overflow\u003c\/h2\u003e\n\n\u003cp\u003eKhi làm việc với images hoặc large data, có thể gặp lỗi buffer:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003eFatal error: JSON message exceeded maximum buffer size of 1048576 bytes\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cp\u003eGiải pháp: limit kích thước responses hoặc chunk large data trước khi gửi.\u003c\/p\u003e\n\n\u003ch2\u003ePattern áp dụng\u003c\/h2\u003e\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n\u003cth\u003eUse Case\u003c\/th\u003e\n\u003cth\u003eApproach\u003c\/th\u003e\n\u003c\/tr\u003e\n  \u003c\/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n\u003ctd\u003eQuick fact-check\u003c\/td\u003e\n\u003ctd\u003eStateless \u003ccode\u003equery()\u003c\/code\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003eMulti-step investigation\u003c\/td\u003e\n\u003ctd\u003e\n\u003ccode\u003eClaudeSDKClient\u003c\/code\u003e with memory\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003eParallel research batch\u003c\/td\u003e\n\u003ctd\u003eMultiple stateless queries\u003c\/td\u003e\n\u003c\/tr\u003e\n    \u003ctr\u003e\n\u003ctd\u003eDomain-specific analysis\u003c\/td\u003e\n\u003ctd\u003eSystem prompt + specialized tools\u003c\/td\u003e\n\u003c\/tr\u003e\n  \u003c\/tbody\u003e\n\u003c\/table\u003e\n\n\u003cp\u003eBước tiếp theo: Đọc \u003ca href=\"\/en\/collections\/nang-cao\"\u003eChief of Staff Agent\u003c\/a\u003e để học cách điều phối multi-agent, hoặc \u003ca href=\"\/en\/collections\/nang-cao\"\u003eObservability Agent\u003c\/a\u003e để tích hợp với hệ thống bên ngoài qua MCP.\u003c\/p\u003e\n","brand":"Minh Tuấn","offers":[{"title":"Default Title","offer_id":47721723166932,"sku":null,"price":0.0,"currency_code":"VND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0821\/0264\/9044\/files\/research-agent-m_t-dong-code-b_t-d_u-v_i-claude-agent-sdk.jpg?v=1774521708","url":"https:\/\/claude.vn\/en\/products\/research-agent-m%e1%bb%99t-dong-code-b%e1%ba%aft-d%e1%ba%a7u-v%e1%bb%9bi-claude-agent-sdk","provider":"CLAUDE.VN","version":"1.0","type":"link"}