Vì sao bạn nên tự tay tạo một agent
(fly.io)- Agent LLM là một cấu trúc kỹ thuật mà thay vì chỉ hiểu như một khái niệm, bạn nên tự triển khai để thực sự cảm nhận được nguyên lý vận hành
- Chỉ với vài chục dòng mã Python, có thể tạo một agent hội thoại bằng OpenAI Responses API; khi bổ sung khả năng gọi công cụ (tool call), agent có thể hành động một cách tự chủ
- Cốt lõi của agent là vòng lặp gọi lặp lại với LLM không có trạng thái, trong đó bạn tự quản lý ngữ cảnh hội thoại (context) để hiện thực hóa các cuộc trò chuyện nhiều lượt
- Context Engineering là một vấn đề ở cấp độ bài toán lập trình thực tế, đòi hỏi thiết kế tối ưu đầu vào, đầu ra và mô tả công cụ trong giới hạn token
- Thiết kế agent hiện nay là một không gian vấn đề kỹ thuật phần mềm mở, nơi cả lập trình viên cá nhân cũng có thể thử nghiệm các cách tiếp cận mới
Sự đơn giản của việc viết agent
- Agent LLM có thể được triển khai chỉ với OpenAI Responses API mà không cần cấu hình phức tạp
- Trong mã ví dụ, danh sách
contextđược dùng để lưu cuộc đối thoại giữa người dùng và mô hình, rồi được gọi lặp lại để tạo phản hồi hội thoại giống ChatGPT
- Trong mã ví dụ, danh sách
- Có thể mô phỏng cuộc trò chuyện đa nhân cách bằng cách tạo hai context với “tính cách tốt” và “tính cách xấu”
- LLM không có trạng thái, và tính liên tục của hội thoại được duy trì bằng mảng chuỗi (context) do người dùng quản lý
- Chỉ với cấu trúc đơn giản này cũng có thể thực hiện hội thoại nhiều lượt, đồng thời tự mình trải nghiệm nguyên lý hoạt động của LLM
Tích hợp công cụ (tool) và hoạt động tự chủ
- Có thể đăng ký hàm ping như một công cụ cho agent để thêm khả năng kiểm tra trạng thái kết nối mạng
- OpenAI API yêu cầu định nghĩa công cụ dưới dạng JSON; khi LLM yêu cầu gọi công cụ nếu cần, mã Python sẽ thực thi rồi gửi lại kết quả
- Ngay cả khi không có chỉ thị tường minh, LLM vẫn tự động ping nhiều host (
google.com,www.google.com,8.8.8.8)- Điều này cho thấy chỉ cần có “quyền sử dụng công cụ”, LLM cũng có thể đưa ra phán đoán tự chủ
- Toàn bộ vòng lặp chỉ đơn giản là “yêu cầu gọi công cụ → thực thi → trả kết quả”, nên có thể hiện thực hành vi agent tự chủ mà không cần logic điều khiển phức tạp
Ứng dụng thực tế và phê bình MCP
- Mã ví dụ tuy đơn giản, nhưng nếu kết hợp thêm công cụ bổ sung (như traceroute) hoặc lưu context dựa trên SQLite thì có thể mở rộng theo hướng thực dụng
- MCP (Multi-Context Protocol) chỉ là giao diện plugin của Claude Code hay Cursor, chứ không phải công nghệ bắt buộc
- Nếu trực tiếp làm việc với API, vẫn có thể hiện thực cùng chức năng mà không cần MCP
- MCP chỉ hữu ích trong môi trường không có quyền kiểm soát mã; ngược lại, nó còn có thể hạn chế tính linh hoạt của kiến trúc agent
- Bảo mật LLM là vấn đề phức tạp, nhưng vẫn có thể thiết kế cấu trúc an toàn thông qua tách biệt context và giới hạn công cụ
Tầm quan trọng của context engineering
- “Prompt engineering” là một khái niệm bị thổi phồng, nhưng context engineering là một bài toán lập trình thực sự
- Số token trong cửa sổ ngữ cảnh là hữu hạn, và đầu vào, đầu ra, mô tả công cụ đều chiếm không gian
- Khi vượt qua giới hạn này, chất lượng phản hồi của mô hình sẽ trở nên thiếu ổn định
- Một cách giải quyết là tạo sub-agent với các context và công cụ khác nhau, rồi thiết kế để chúng tóm tắt và trao đổi với nhau
- Cấu trúc như vậy có thể được mở rộng thành nhiều thử nghiệm khác nhau như mạng agent dạng cây hoặc nén dựa trên tóm tắt thời gian thực
- Ngay cả những ý tưởng phức tạp cũng có mức độ đơn giản đủ để triển khai trong vòng 30 phút
Bài toán kỹ thuật mở và giá trị của thử nghiệm
- Hiện nay rất nhiều startup đang phát triển agent để phát hiện lỗ hổng, và lập trình viên cá nhân cũng có thể thực hiện các thử nghiệm tương tự
- Thiết kế agent bao gồm những bài toán kỹ thuật chưa được giải quyết như sau
- Cân bằng giữa tính phi định và lập trình có cấu trúc
- Kiểm chứng thực tế (ground truth) và ngăn vòng lặp kết thúc quá sớm
- Định dạng trao đổi dữ liệu giữa các agent nhiều tầng (JSON, SQL, Markdown, v.v.)
- Phân bổ token và kiểm soát chi phí
- Đây không phải là những vấn đề chỉ có thể nghiên cứu ở quy mô lớn, mà là lĩnh vực có thể khám phá bằng các thử nghiệm ở cấp độ cá nhân, với mỗi vòng lặp chỉ mất vài chục phút để thử
- Kết luận lại, trải nghiệm tự tay tạo agent chính là điểm khởi đầu để hiểu công nghệ LLM
2 bình luận
Ý kiến Hacker News
Có quá nhiều thứ muốn làm. Tôi muốn tự ráp CPU từ cổng NAND trên breadboard, cũng muốn thử làm CDN bằng Rust nhưng không có đủ thời gian
Thay vào đó, tôi đã làm thử một LLM theo tutorial của Karpathy, và cảm thấy việc thử nghiệm từng chút một như vậy khá ổn
Mỗi khi nghĩ rằng “giờ là xong rồi”, tôi lại có cảm giác vạch đích ngày càng xa hơn. Cuối cùng thì những người như chúng ta có lẽ là kiểu người không bao giờ thật sự thỏa mãn
Ví dụ dùng GPT-5, nhưng giao diện truy vấn thì đã ở mức chuẩn công nghiệp rồi
Chẳng hạn, nếu kết nối OpenRouter.ai thì có thể dễ dàng đổi model và nhà cung cấp ngay trong lúc chạy
Họ cũng có model miễn phí (ví dụ: DeepSeek), tuy chậm và bị giới hạn. Dù vậy, vẫn rất tuyệt để thử nghiệm
Vài tháng trước tôi đã tự làm một agent bằng Ruby. Thật sự rất vui
Logic cốt lõi chỉ có đúng bốn dòng, và về mặt khái niệm thì đơn giản đến đáng ngạc nhiên
Hai năm trước tôi từng làm một agent chỉ với 25 dòng PHP; lúc đó còn chưa có cả tool calling, nhưng nó vẫn hoạt động khá tốt
Với tôi, LLM giống như các công cụ thao tác văn bản UNIX kiểu
sedhayawk— bạn đưa đầu vào và lệnh, rồi nó trả ra đầu raGhép nhiều lời gọi LLM theo kiểu này, rồi thêm vòng lặp hoặc phân nhánh, là có thể tạo ra một hệ thống khá mạnh
Mã liên quan: hubcap, llm
Tôi đã nhận được rất nhiều cảm hứng từ bài viết của Simon Willison
Tôi đặc biệt đồng cảm với phần tự làm một phương án thay thế cho Claude Code. Việc tạo ra một agent lập trình tự cải thiện gần như là một trải nghiệm ma thuật
Có thể tự do đổi model, và nếu dùng model nhanh như Cerebras thì sẽ thấy khác biệt rất lớn ngay cả trong các công cụ gọi hàm tương tác
Nếu thêm bộ nhớ, nhận dạng giọng nói, v.v. thì hiệu quả còn cao hơn nhiều. Có thể làm trong vài phút và thật sự rất vui
Model của Google thì chất lượng thấp, còn model của Mistral thì nhanh nhưng đôi khi lại phản ứng với cả văn bản
Vì vậy đôi lúc nó ghi lại lời tôi nói thành kiểu dòng ý thức của chính LLM
Ban đầu tôi làm nó để hiểu cấu trúc bên trong, nhưng rồi thấy nó đơn giản hơn tưởng tượng nên giờ tôi đang tự thêm những tính năng mình muốn
Có thể thêm tính năng nhanh hơn cả sản phẩm do cả một đội làm. Agent có cấu trúc đơn giản đến đáng kinh ngạc
Không rõ cái đó có dựa trên model cục bộ hay không
Đọc bài này khiến tôi muốn làm lại triết lý Unix — công cụ làm tốt một việc
Không chỉ giúp agent đơn giản hơn mà còn tăng tính bảo mật
Dù không hoàn hảo bằng hệ thống telemetry do con người tự xây, nhưng vẫn có thể đạt mức hữu dụng 90% dễ dàng hơn nhiều
Có lẽ kích thước lý tưởng của LLM nằm ở đâu đó giữa, nhỉnh hơn các công cụ Unix truyền thống một chút
Tôi băn khoăn liệu có nhất thiết phải tự làm agent không?
Trong bối cảnh mọi nhà cung cấp AI đều đang lỗ, tôi hoài nghi về việc liệu có thể có một mô hình doanh thu bền vững hay không
Lý luận này cũng giống như lấy việc Astral đang lỗ làm lý do để không dùng Python
Họ cần vốn vì chi phí huấn luyện model tiếp theo rất lớn, chứ giai đoạn suy luận thì có lợi nhuận
Phần về context engineering đặc biệt chạm đúng điều tôi đang nghĩ
Tôi đang làm một trợ lý cá nhân, và nó có trí nhớ, theo dõi công việc, khả năng giải quyết vấn đề nhiều hơn một agent thông thường
Tôi thiết kế để nhiều agent trò chuyện với nhau nhằm giải quyết vấn đề, và agent đầu tiên đóng vai trò giám sát quản lý công việc
Càng đi sâu vào quá trình này, nó càng trở thành một bài toán kỹ thuật hơn
Tôi có viết chi tiết trong bài blog của mình
Ai cũng thích làm agent nhưng lại ghét debug
Ban đầu nó chạy tốt như ma thuật, nhưng rồi dần dần các lỗi mang tính xác suất tích tụ lại khiến việc tái hiện trở nên khó khăn
Mỗi bước mất 0,5 giây, nên để kiểm tra xem nó sai ở đâu thì phải chờ 10–20 phút
đồng thời chạy lại các kịch bản cũ để xác minh rằng không có gì bị hỏng
Tôi đã làm thử một MCP dựa trên đoạn mã được cung cấp: gurddy-mcp.fly.dev
Có thể xem mã nguồn trong repository GitHub