Tôi muốn tự tay xây dựng một AI Agent từ đầu.
Trên đường tan làm thứ Sáu, niềm tin này tràn ngập trong lòng một người học xã hội.
Buổi họp tuần chiều hôm đó, kỹ sư R&D buột miệng nói với tôi "Mày hiểu cái đếch gì về AI", ngay sau đó là hàng loạt thuật ngữ như ngữ cảnh, MCP, Skills - những thứ với tôi chỉ là "xa vời khó nắm bắt". Tôi im lặng, không thể phản bác, vì hiểu biết của tôi về AI thực sự chỉ dừng ở meme hàng tháng, từ thịnh hành, cùng những giai thoại về OpenAI, Anthropic. Bất kỳ câu hỏi nào cũng khiến tôi câm nín.
Nhưng mọi chuyện sẽ thay đổi, tôi cảm nhận được một niềm tin mạnh mẽ khác hẳn với "tháng sau giảm cân", "ăn ít dầu mỡ" hay "bỏ TikTok": Tôi sẽ dành hai ngày để hệ thống hóa lịch sử phát triển AI, hiểu rõ giới hạn năng lực của Agent. Tôi cũng biết kỹ thuật phần mềm là môn học thực hành, muốn học AI thì không gì hiệu quả hơn việc tự "làm lại từ đầu".
Vì vậy tôi đặt ra mục tiêu rõ ràng, AI Agent của tôi ít nhất phải làm được ba việc:
- Trò chuyện bình thường;
- Giúp tạo và quản lý ghi chú, công việc;
- Lấy tóm tắt các chuyên mục như Bản tin sớm, Tuần này xem gì từ SSPAI.
Ngoài ra, nó không được sử dụng bất kỳ framework AI nào, code phải viết từ đầu; quy trình chính và lặp lại do tôi tự quyết, không thể lười biếng bảo Codex "Tao muốn một AI Agent".
Khiến AI biết nói, và chữa khỏi "bệnh hay quên" của nó
Sáng thứ Bảy, tôi thử bước bước đầu tiên: xử lý trò chuyện. Để làm điều này tôi phải đọc tài liệu phức tạp hơn cả "Hướng dẫn sử dụng Samsung OneUI", với người không phải lập trình viên như tôi - gần như đọc thiên thư.
Bất ngờ là, trang đầu tài liệu của mọi nhà cung cấp AI chỉ có mười chữ in đậm: Chỉ định model trước, sau đó viết câu hỏi:
Khối code
Sao chép
DeepSeek-v4-flash:
Xin chàoDeepSeek sẽ gửi lời chúc mừng không lâu sau. Khoảng nửa giờ, tôi dùng một phần mềm có sẵn làm khung giao diện, tạo ra nguyên mẫu:

Một câu thần chú đơn giản có thể kích hoạt hộp đen được huấn luyện bởi lượng dữ liệu khổng lồ. Khởi đầu tốt đẹp khiến tôi tự tin vô cùng. Tôi tiếp tục muốn kết nối tình cảm với AI: "Từ giờ, bạn gọi tôi là A Lạc, tôi gọi bạn là Đại D". Tôi muốn thử sự ăn ý của đối tác này, nhưng nó đã trục trặc:

Đúng vậy, như bị mất trí nhớ, mỗi lượt hội thoại với AI dường như là một khởi đầu mới. Điều này không ổn, và ChatGPT không như vậy. Tìm kiếm với từ khóa "đa luồng hội thoại", tôi hiểu ra rằng ở cấp độ model, AI không có khái niệm "ghi nhớ"1:
Model chỉ xử lý đầu vào và đầu ra của lượt hội thoại hiện tại. Đây chính là Context (cửa sổ ngữ cảnh) của model.
Giải pháp rất thô sơ: mỗi lượt hội thoại mới, đều lặp lại nội dung các lượt trước:
Khối code
Sao chép
DeepSeek-v4-flash:
Câu hỏi lượt trước; câu trả lời lượt trước
Câu hỏi lượt hiện tạiNếu AI có thực thể, mỗi lần trò chuyện tôi sẽ mất vài phút kể lại nội dung lượt trước; nghĩ đến tình huống buồn cười này, cảm giác "giống người" của AI giảm đi nhiều. Nhưng với AI lặp lại, "bệnh hay quên" đã khỏi, tôi tạm thời chỉ chồng thêm 5 lượt trước, chưa có cách xử lý những lượt xa hơn. Mục tiêu trước mắt là chạy được:

Lúc này mới hơn hai tiếng sáng thứ Bảy, kế hoạch của tôi đã tiến bước vững chắc đầu tiên. Tôi còn ngạc nhiên phát hiện, dù thị trường có nhiều AI, nhưng đều có thể sử dụng theo hai ba cách do OpenAI và Anthropic định ra, cách xử lý đa luồng hội thoại về cơ bản giống nhau:
- OpenAI Chat Completions API: định dạng phổ biến nhất, thường nói "tương thích OpenAI" là có thể dùng nó;
- OpenAI Responses API: tiêu chuẩn mới của OpenAI, xAI, Volcano (Doubao) đều chủ trương cái này;
- Anthropic Messages API: Claude tự có hệ thống riêng, các nhà cung cấp muốn tích hợp Claude Code (như DeepSeek) thường hỗ trợ.
Đây chỉ là "mấy cách viết chữ Hồi". Tôi một mạch tích hợp mấy AI trong tay, OpenAI, Gemini đều có sẵn chức năng nhật ký, sau này kiểm tra đối chiếu có lẽ sẽ thuận tiện hơn.
Có khả năng trò chuyện cơ bản, nếu muốn tùy chỉnh AI riêng hoặc khiến AI hoàn thành nhiệm vụ chỉ định, như thời ChatGPT gây chấn động năm 2022, thứ duy nhất tôi có thể dựa vào là prompt. Người ta còn phát minh ra một từ: prompt engineering (kỹ thuật prompt). Hồi đó đủ loại prompt khó phân biệt khoa học hay huyền học lan tràn khắp MXH và cộng đồng, xuất hiện vô số trang tổng hợp prompt, đều do prompt là cách duy nhất tương tác với AI. Khi đó Character.ai nổi lên nhanh chóng nhờ bán điểm nhấn role-play qua prompt. Nhưng AI dường như dừng ở lĩnh vực Chat.
Khiến AI "sử dụng" công cụ
Trước khi bắt đầu chiều thứ Bảy, tôi định chào hỏi tạo vật của mình, chưa quen nên chọn chủ đề an toàn "Hôm nay ngày mấy":

Câu trả lời khiến tôi sửng sốt: tháng 7 năm 2025! Sao mày vẫn sống năm ngoái thế?
AI có thể suy nghĩ, nó hiểu thế giới đến thời điểm huấn luyện, nhưng làm sao "não trong bể" này tương tác với thế giới hiện tại? Điều này cũng liên quan đến khả năng giúp tôi tạo ghi chú công việc của AI Agent.
Tôi lại mở tài liệu của các nhà cung cấp, khái niệm tool use (sử dụng công cụ) hiện ra. Thú vị là, OpenAI gọi một số công cụ là function (hàm). Khái niệm hàm tồn tại trong hầu hết ngôn ngữ lập trình, được thiết kế để hoàn thành nhiệm vụ cụ thể trong môi trường hiện tại, như lưu trữ dữ liệu, lấy thông tin, giống như ngũ quan tay chân con người. Nhưng model AI chạy hàm theo nghĩa lập trình, nghe như "não trong bể" mọc mắt tai tay chân, khó tin.
Thực tế không phải vậy, tool use hơi phức tạp:
Khối code
Sao chép
DeepSeek-v4-flash:
Câu hỏi lượt trước; câu trả lời lượt trước
Câu hỏi lượt hiện tại
Công cụ: muốn biết thời gian hãy trả lời "lấy thời gian"
Code:
Nếu AI trả về "lấy thời gian", gửi thời gian cho AIKhi model AI quyết định lấy thời gian, nó sẽ trả lời theo định dạng đặc biệt, code của chúng ta nhận được sẽ tự lấy thời gian rồi báo cho AI, nó mới biết. Nói cách khác, model AI chỉ huy, không xông pha. Nó quyết định ai làm việc gì, sau đó báo cáo kết quả cho người dùng.
Điều này nghĩa là tôi phải tự viết bên thực thi để phối hợp.

Dù nguyên lý không đúng tên, nhưng công cụ mang lại vô vàn khả năng cho model. Tôi chỉ cần đóng gói năng lực cần thiết thành từng công cụ, AI sẽ dùng chúng đúng lúc. Đồng nghĩa mọi thứ lập trình truyền thống làm được, mọi thông tin, dịch vụ hiện có, model AI đều có thể đọc, sử dụng.
Khối code
Sao chép
Nhiệm vụ thực tế bên ngoài <--giải quyết-- chương trình <--giao tiếp-- giao diện <--tool-- model AITôi một mạch thêm mười mấy công cụ cho AI: giờ đây nó có thể truy cập mạng, chạy lệnh, thao tác hệ thống:

Một trong những mục tiêu của tôi - tạo ghi chú công việc, giờ cũng dễ dàng thực hiện:

Tôi nhanh chóng nhận thấy tác dụng phụ: nhiều công cụ thế, tôi nhồi nhét vào hội thoại, một câu "Xin chào" đơn giản đã ngốn 3-4 nghìn token, một phút có vài lần gọi công cụ, 6-8 vạn token biến mất.

Nhưng tôi tạm không tối ưu, vì đã tối thứ Bảy. Tôi dừng công việc suy ngẫm vấn đề khác: Tôi tự làm AI Agent, mười mấy công cụ là mười mấy logic code khác nhau, viết cả chiều. Vậy Cursor, Codex, Claude Code quy mô thế, lập trình viên phải tự viết code cho hàng nghìn dịch vụ trên thị trường sao?
Rõ ràng không, "công cụ" không phải khái niệm phổ biến với người dùng AI, MCP (Model Context Protocol) mới là. MCP do Anthropic đề xuất cuối 2024, cố gắng định nghĩa bộ quy tắc ứng dụng AI và nhà cung cấp công cụ cùng tuân thủ, mọi người "đèn đỏ dừng, đèn xanh đi", lái xe không cần giao tiếp nhiều. Hàng nghìn nhà cung cấp cũng có thể tích hợp dễ dàng vào ứng dụng AI lớn.
Khối code
Sao chép
Nhiệm vụ thực tế bên ngoài <--giải quyết-- chương trình <--chuẩn hóa-- MCP --tool--> model AISau đó MCP được OpenAI ủng hộ. Cổng thông tin MCP, công cụ nền tảng bùng nổ từ đầu 2025. Sự phổ biến của công cụ, năng lực MCP, thúc đẩy AI mở rộng từ trò chuyện sang nghiên cứu phân tích, viết báo cáo, vẽ biểu đồ, ngôi sao Manus.im cũng nổi như cồn.
Ngoài lập trình, AI trong mắt đại chúng cũng dần thoát khỏi khuôn khổ chatbot.
Cho AI một cuốn sách dạy nấu ăn
Làm việc cật lực hôm qua khiến mục tiêu gần kề, nên sáng Chủ Nhật tôi lười biếng hơn.
AI Agent của tôi có thể trò chuyện dùng công cụ, hoàn thành nhiệm vụ phức tạp khó đến mức nào? Tôi nghĩ đơn giản với sức mạnh model AI hiện đại, giờ chỉ cần prompt đơn giản là nó đã lấy được tóm tắt bài SSPAI mới nhất:

DeepSeek và GPT 5.5 đều trả lời sai, GPT 5.5 Pro cuối cùng thành công với cái giá 2 đô la, 3 phút. Nhưng suy nghĩ rườm rà, gọi công cụ liên tục khiến tôi nghi ngờ đây có thực sự là năng lực model đỉnh cao? Việc tôi làm trong 10 giây, AI mạnh mẽ lại cân nhắc lâu thế. Dù có thể thêm "lần suy nghĩ này nhanh hơn 98% người dùng" để an ủi, ví tiền cũng không chịu nổi.
Codex viết dự án cũng không chậm thế. Tôi thử xem lại quá trình xử lý của AI:
- Tìm kiếm từ khóa "SSPAI", "mới nhất": thất bại, kết quả toàn nội dung cũ
- Lấy ngày hiện tại, tìm "SSPAI", "2026-05-17": thất bại, không có nội dung hiệu quả, do bài mới đăng chưa được thu thập
- Tìm nền tảng MXH của SSPAI, thử lấy link bài mới: thất bại, MXH cấm thu thập
- Lần đầu thu thập trực tiếp trang chủ SSPAI, lấy link đầu tiên: thất bại, cấu trúc trang phức tạp, link đầu không phải bài
- Phân tích, lần hai thu thập trang chủ, thử phân tích bài: thất bại, bị sắp xếp đánh lừa, nội dung không phải mới nhất
- Phát hiện link RSS từ web, thử phân tích: thành công.
AI vừa thông minh, vừa giỏi, nhưng thiếu kinh nghiệm. Có vẻ 5 lần đầu không chỉ tốn thời gian mà còn không có kết quả, lần thứ 6 mới tìm ra "công thức" hoàn hảo cho nhiệm vụ. Vì vậy tôi cần làm là trực tiếp nói với AI, lần sau nhiệm vụ này, làm ba bước:
- Dùng công cụ shell đọc địa chỉ RSS, phân tích lấy link đầu;
- Dùng công cụ web đọc link này;
- Tóm tắt nội dung 200 chữ, kèm link gốc, không trả về gì khác.
Nhưng prompt đặc biệt này đặt ở đâu? Nếu vài năm trước, nền tảng AI và hướng dẫn đều khuyên mỗi chủ đề tạo hội thoại mới, hội thoại này chỉ xử lý một việc, gọi là agent/trợ lý chuyên dụng.

Một thời gian sau, trong lĩnh vực AI lập trình, mọi người dần quen viết thói quen, quy trình cố định vào file văn bản. Ví dụ CLAUDE.md, AGENTS.md. Thói quen này đến cuối 2025 được Anthropic chủ trương mở rộng, tiêu chuẩn mở Skills ra đời, cộng đồng tiếng Trung gọi là kỹ năng.
Bóc lớp vỏ Skills, phần lõi vẫn là prompt được thiết kế cẩn thận, thường dưới dạng file local ghi lại từng bộ quy trình cố định, tài liệu bên ngoài. Phức tạp hơn có kèm script hoặc tài nguyên khác. Tôi cũng tự làm hệ thống Skills theo hiểu biết, kết quả thời gian thực thi đã dưới 10 giây:

Tôi đặt kỹ năng local vào thư mục cố định, trong prompt toàn cục chèn tên và chức năng đại khái. Khi AI quyết định dùng, sẽ dùng công cụ read_skill tôi phát triển đọc mô tả kỹ năng, cuối cùng hoàn thành nhiệm vụ theo mô tả. Tôi dành nhiều thời gian nhất viết prompt và quy trình Skills để AI tuân theo: do Skills được nạp động vào ngữ cảnh model, mà mỗi AI tuân thủ prompt khác nhau, cuối cùng tôi nghĩ ra cách cố định quy trình, dùng script nhiều để giảm AI tự do, hiệu quả rõ rệt. Cách này cũng được Claude khuyến nghị.
Khối code
Sao chép
DeepSeek-v4-flash:
Câu hỏi lượt trước; câu trả lời lượt trước
Câu hỏi lượt hiện tại
Công cụ: muốn biết thời gian hãy trả lời "lấy thời gian"
Skills: muốn xử lý bài SSPAI mới nhất, đọc fetch-sspai
fetch-sspai
Lấy bài SSPAI theo bước: 1 2 3Nền tảng AI đa năng hiện nay đa số hỗ trợ tính năng này. Theo quan sát cá nhân, OpenClaw nổi như cồn đầu năm một phần do tác giả tích hợp sẵn hàng loạt Skills macOS tiện lợi. Người dùng AI Agent không cần quan tâm cách hoàn thành nhiệm vụ tối ưu, viết prompt thế nào, khi nào dùng công cụ, việc này để người viết Skills giải quyết.
Khối lượng công việc vượt tưởng tượng, đến hai ba giờ chiều Chủ Nhật tôi mới hài lòng. Thực ra đến giờ, tôi đem thành quả hiện tại cho bất kỳ ai xem, họ đều không phủ nhận đây là một AI Agent.
Từ chạy được đến dễ dùng, nền tảng AI Agent cần làm gì
Thời gian cuối tuần không còn nhiều, tôi làm ra một Agent chạy được, nhưng còn xa sản phẩm hoàn thiện.
Cùng là điều phối model, ngữ cảnh, công cụ, MCP và Skills, nền tảng Agent phổ biến còn làm gì? Đây là chủ đề tôi khám phá thời gian còn lại. Để điều tra có trọng điểm, tôi chọn dự án mã nguồn mở Codex CLI làm đối tượng nghiên cứu, từ các vấn đề thực tế gặp phải xem cách nó giải quyết:
- Quản lý lịch sử ngữ cảnh, đừng để model quên: trước tôi chọn cách nhồi 5 lượt hội thoại, khiến lượt xa hơn model không nhớ. Sản phẩm thương mại rõ ràng không làm thế.
- Quản lý công cụ, MCP và Skills: làm sao để người mới tiếp nhận khái niệm MCP và Skills? Làm sao tránh nạp tất cả công cụ một lúc? Công cụ bên thứ ba cài đặt đơn giản thế nào?
- Tổ chức ngữ cảnh hiện tại: nhưng trong tình huống hội thoại đa luồng phức tạp, đảm bảo lượt hiện tại không bị lệch hướng bởi tin nhắn cũ?
Nén là câu trả lời tối đa hóa lưu giữ lịch sử ngữ cảnh. Xem mã nguồn, khi ngữ cảnh sắp đạt giới hạn, Codex sẽ nén lịch sử tin nhắn thu thập trên server. Logic server chưa rõ, nhưng theo logic nén local khi server không dùng được, OpenAI có lẽ chỉ giữ khoảng 2 vạn token tóm tắt lịch sử người dùng. Trước khi kích hoạt nén, tin nhắn lịch sử chỉ được sắp xếp đơn giản, kể lại cho model. Có thể nói, sau nhiều lần nén, tin nhắn lịch sử chắc chắn sai lệch, nhưng thông tin quan trọng (như nhiệm vụ hiện tại) sẽ được giữ.
Về công cụ, nền tảng AI Agents luôn nghĩ ra cách mới. Codex đóng gói khái niệm Plugins, có thể cài đặt một click như ứng dụng. Plugin là cách đặt tên sản phẩm hóa, phần lõi khá phức tạp, ba plugin tích hợp từ cấu trúc file:
- Computer Use chứa một công cụ MCP + một Skill quy định ranh giới sử dụng;
- Chrome là một Skill + tiện ích Chrome, cùng phụ thuộc chạy cần thiết;
- Spreadsheets là file Skill, hướng dẫn model dùng code xử lý bảng.

Nói cách khác, Codex cho rằng người dùng không cần hiểu công cụ, MCP, Skills là gì, chỉ cần biết dùng. Tôi khó khẳng định thiết kế Plugins có thành công không, nhưng rõ ràng là cách giải quyết tốt. Gần đây Twitter thường thấy bình luận "chúng ta không cần dùng MCP nữa", giờ xem ra không phải không dùng, chỉ là không thấy.
Liên quan việc thứ ba, tôi sớm nhận thấy hiện tượng: dùng tùy chọn "thực hiện kế hoạch" để Codex hoàn thành kế hoạch, và tự dán kế hoạch thảo luận sửa đổi rồi bảo nó thực hiện, độ hoàn thiện và chất lượng tốt hơn nhiều, trường hợp sau đôi khi hoàn toàn bỏ qua chi tiết kế hoạch tự phát huy. Điều này chứng minh khéo léo kiểm soát sự chú ý của model hiệu quả:
- Lệnh thực hiện kế hoạch: từ mã nguồn, sẽ gửi nguyên văn kế hoạch cho model, mục đích đặt việc ưu tiên cao nhất trực tiếp vào ngữ cảnh lượt này;
- "Thực hiện kế hoạch" thông thường, model cần tự đoán tổng kết chi tiết từ lịch sử hội thoại, dễ sai.

Codex mỗi lượt hội thoại bắt đầu sẽ tổ chức lại ngữ cảnh, một mặt cố gắng đưa quy tắc quan trọng, chỉ dẫn người dùng, mục tiêu (cốt lõi mode /goal) vào lại tin nhắn lượt này, mặt khác thông tin không cần thiết bị ẩn, hiện mô tả ngắn để lập chỉ mục, ví dụ Codex dùng công cụ đặc biệt tool search, tránh được tình cảnh như tôi nhồi mười mấy công cụ vào ngữ cảnh, một số công cụ không phù hợp môi trường hiện tại cũng bị ẩn.
Gần đây đồng sáng lập OpenAI nói "model đơn lẻ không còn là sản phẩm hoàn chỉnh", trước hết đến từ sự tự tin của OpenAI luôn đứng top công ty AI, thứ hai nói lên thực trạng: tiến bộ năng lực model người dùng cảm nhận hạn chế2, nên tập trung tầng ứng dụng. Tôi mở tài liệu vài nhà cung cấp, phát hiện họ đã cung cấp năng lực tầng ứng dụng như môi trường sandbox, tìm kiếm tích hợp, nhúng MCP ở tầng API AI, chứng minh nhận định.
Kết
Hai ngày sau, AI Agent của tôi cuối cùng cũng hoàn thành. Khác với vibe coding trước đây, tôi tham gia thiết kế chương trình, thông qua đề xuất ý tưởng, phát hiện vấn đề, tìm tài liệu, giải quyết vấn đề, cố gắng hiểu vấn đề đằng sau khái niệm AI:
- Model là hộp đen, chúng ta cung cấp đầu vào, nó chỉ trả đầu ra; đầu vào ra là ngữ cảnh model, tin nhắn lịch sử, công cụ, Skills phải vào ngữ cảnh mới hiệu quả;
- Người ta định nghĩa công cụ để giải quyết vấn đề model không thể trực tiếp đọc thông tin bên ngoài, thao tác hệ thống bên ngoài. Model không tự thực thi, nó chỉ ra lệnh. Công cụ tích hợp model chạy trong môi trường nhà cung cấp, muốn tích hợp công cụ phải cung cấp môi trường thực thi;
- MCP cố gắng giải quyết vấn đề ứng dụng AI và nhà cung cấp không thống nhất quy tắc sử dụng công cụ; nhưng nó không phải điều kiện bắt buộc gọi công cụ;
- Skills là hướng dẫn hoặc tài nguyên liên quan làm việc gì, nó nạp động vào ngữ cảnh, giải quyết vấn đề AI thiếu kinh nghiệm lĩnh vực chuyên sâu;
- Nền tảng AI Agent tổ chức cách dùng model, công cụ, MCP theo cách khác nhau, quản lý lịch sử ngữ cảnh, hy vọng hoàn thành nhiệm vụ hiệu quả hơn.
Tin rằng sau này bị hỏi vấn đề liên quan, tôi cũng có thể nói đôi điều. Tôi ghi lại quá trình này, hy vọng giúp ích cho bạn.

{{$t('report')}}
Vàng đẹp