63 điểm bởi GN⁺ 2025-07-07 | 6 bình luận | Chia sẻ qua WhatsApp
  • Hầu hết các nhóm xây dựng hệ thống dựa trên LLM đều cố bắt đầu từ agent, nhưng đa số dễ sụp đổ vì độ phức tạp, khó điều phối và khó gỡ lỗi
  • Mẫu agent thực thụ, nơi bộ nhớ, RAG, dùng công cụ và điều khiển workflow đều cần thiết, trên thực tế khá hiếm; phần lớn vấn đề có thể được giải quyết hiệu quả hơn bằng workflow đơn giản (chaining, parallelization, routing, v.v.)
  • Khuyến nghị nên áp dụng trước 5 mẫu workflow LLM hữu ích trong thực tế, và chỉ dùng agent một cách thận trọng khi thật sự cần
    • Prompt chaining, parallelization, routing, orchestrator-worker, evaluator-optimizer
  • Ngay cả khi cần agent, điều cốt lõi vẫn là sự tham gia của con người, khả năng kiểm soát rõ ràng và khả năng quan sát (Observability)

AI agent, có thực sự cần thiết?

Khởi đầu sai lầm: Vì sao ai cũng ám ảnh với agent

  • Nhiều nhóm khi bắt đầu dự án LLM thường ưu tiên đưa vào các cấu trúc phức tạp như agent, memory, routing, dùng tool, tính cách nhân vật
  • Khi triển khai thực tế, các vấn đề bất thường và thất bại liên tục xuất hiện ở nhiều khía cạnh như cộng tác giữa các agent, chọn công cụ, bộ nhớ dài hạn
  • Ví dụ, trong một dự án agent nghiên cứu dựa trên CrewAI, từng vai trò (researcher, summarizer, coordinator) đã không thể phối hợp như kỳ vọng và sụp đổ hoàn toàn

Agent là gì?

  • 4 đặc tính của hệ thống LLM: bộ nhớ, truy xuất thông tin (RAG), dùng công cụ, điều khiển workflow
  • Đặc tính cuối cùng là điều khiển workflow, tức LLM tự quyết định bước tiếp theo hoặc có dùng công cụ hay không, được gọi là tính chất agentic
  • Trong phần lớn công việc thực tế, workflow đơn giản (chaining, routing, v.v.) cho độ ổn định cao hơn

Những mẫu workflow LLM nên dùng thay vì agent, thực sự hữu ích trong thực chiến

1. Prompt Chaining

  • Mô tả: Chia nhiều tác vụ thành một chuỗi bước và để LLM xử lý tuần tự từng bước
  • Ví dụ: Trích xuất tên, chức danh và công ty từ hồ sơ LinkedIn → thêm thông tin bổ sung về công ty đó (sứ mệnh, tuyển dụng, v.v.) → viết email cá nhân hóa dựa trên hồ sơ + thông tin công ty
  • Ưu điểm: Mỗi bước được tách biệt rõ ràng nên khi có lỗi rất dễ truy vết nguyên nhân/sửa chữa; thuận lợi cho gỡ lỗi và bảo trì
  • Hướng dẫn:
    • Phù hợp với các tác vụ được nối tuần tự
    • Chỉ cần một bước thất bại là cả chuỗi có thể sụp đổ
    • Nếu chia thành các đơn vị công việc nhỏ, có thể đạt kết quả dễ dự đoán và dễ gỡ lỗi

2. Parallelization

  • Mô tả: Chạy đồng thời nhiều tác vụ độc lập để tăng tốc toàn bộ quy trình
  • Ví dụ: Trích xuất song song nhiều mục như học vấn, kinh nghiệm, kỹ năng từ hồ sơ của nhiều người để rút ngắn thời gian xử lý tổng thể
  • Ưu điểm: Hiệu quả với dữ liệu quy mô lớn trong các bài toán trích xuất/xử lý độc lập; rất hợp với môi trường xử lý phân tán
  • Hướng dẫn:
    • Khi các tác vụ độc lập với nhau, chạy song song có thể cải thiện tốc độ tổng thể đáng kể
    • Cần lưu ý các ngoại lệ như race condition, timeout trong lúc chạy song song
    • Phù hợp cho xử lý dữ liệu lớn, phân tích đồng thời nhiều nguồn

3. Routing

  • Mô tả: LLM phân loại dữ liệu đầu vào rồi tự động rẽ nhánh sang workflow phù hợp cho từng loại
  • Ví dụ: Trong công cụ hỗ trợ khách hàng, phân loại nội dung đầu vào là câu hỏi về sản phẩm, sự cố thanh toán hay yêu cầu hoàn tiền rồi tự động xử lý theo workflow tương ứng; nếu loại không rõ ràng thì chuyển sang handler mặc định
  • Ưu điểm: Áp dụng logic xử lý chuyên biệt theo từng loại đầu vào, giúp tách bạch nhiều trường hợp khác nhau một cách gọn gàng
  • Hướng dẫn:
    • Hữu ích khi cần xử lý riêng cho các loại đầu vào/tình huống khác nhau
    • Ở các trường hợp biên hay ngoại lệ, routing có thể thất bại hoặc bỏ sót
    • Nhất định phải thiết kế một catch-all handler cho trường hợp chưa phân loại/ngoại lệ

4. Orchestrator-Worker

  • Mô tả: LLM ở vai trò orchestrator phân rã/đánh giá công việc rồi giao các tác vụ chi tiết cho worker (LLM thực thi), đồng thời trực tiếp kiểm soát toàn bộ luồng và thứ tự
  • Ví dụ: Phân loại hồ sơ mục tiêu thành tech/non-tech → nếu là tech thì giao cho worker chuyên môn tạo email, nếu là non-tech thì giao cho worker khác
  • Ưu điểm: Tách biệt việc ra quyết định (phân loại/đánh giá) và thực thi (xử lý riêng lẻ), thuận lợi cho điều khiển luồng động và mở rộng
  • Hướng dẫn:
    • Phù hợp khi mỗi tác vụ cần cách xử lý chuyên biệt, hoặc cần rẽ nhánh phức tạp và điều phối theo từng bước
    • Nếu orchestrator phân rã hoặc ủy quyền sai, toàn bộ luồng sẽ phát sinh lỗi
    • Hãy giữ logic đơn giản một cách tường minh, và thiết kế rõ việc ủy quyền/thứ tự/điều kiện kết thúc

5. Evaluator-Optimizer

  • Mô tả: LLM đánh giá đầu ra (điểm số/phản hồi), nếu chưa đạt chuẩn thì lặp lại việc sửa đổi/cải thiện
  • Ví dụ: Tạo bản nháp email → evaluator cho điểm chất lượng/phản hồi → nếu đạt ngưỡng hoặc vượt số lần lặp tối đa thì dừng, nếu không thì tiếp tục sửa lại
  • Ưu điểm: Có thể cải thiện lặp đi lặp lại chất lượng đầu ra cuối cùng đến mức mục tiêu; phù hợp khi dùng tiêu chí định lượng
  • Hướng dẫn:
    • Phù hợp với tình huống chất lượng quan trọng hơn tốc độ, hoặc workflow cần tối ưu lặp lại
    • Nếu không có điều kiện dừng, hệ thống có thể rơi vào vòng lặp vô hạn
    • Bắt buộc phải đặt tiêu chí chất lượng rõ ràng và giới hạn số vòng lặp

Khi nào thật sự cần agent

  • Agent phát huy giá trị mạnh nhất trong môi trường có đảm bảo Human-in-the-loop theo thời gian thực
    • Ví dụ 1: Trợ lý khoa học dữ liệu - LLM thử nghiệm sáng tạo với truy vấn SQL, trực quan hóa, gợi ý phân tích dữ liệu, còn con người đánh giá/chỉnh sửa kết quả
    • Ví dụ 2: Đối tác sáng tạo - trong việc gợi ý ý tưởng copywriting, đề xuất headline, cấu trúc văn bản, việc chỉnh hướng và thẩm định chất lượng của con người là then chốt
    • Ví dụ 3: Trợ lý refactor code - nhà phát triển phê duyệt/bổ sung các đề xuất về design pattern, phát hiện edge case, tối ưu code
  • Đặc điểm: Agent không phải là thứ “tự lo mọi thứ”, mà hiệu quả nhất trong môi trường nơi con người sửa lỗi/chỉnh hướng theo thời gian thực

Khi agent không phù hợp

  • Hệ thống enterprise hoặc mission-critical (tài chính, y tế, pháp lý, v.v.):
    • Vì độ tin cậy của tự động hóa và hành vi mang tính quyết định là quan trọng, cấu trúc để LLM agent tự phán đoán là rủi ro
    • Cần dùng các mẫu kiểm soát rõ ràng như orchestrator, routing
  • Mọi tình huống mà tính ổn định và khả năng dự đoán là quan trọng
    • Trường hợp bất thường: agent liên tục chọn sai công cụ vì thiếu ngữ cảnh/bộ nhớ, hoặc thất bại trong phân công/điều phối khiến toàn bộ luồng sụp đổ
  • Các nguyên nhân thất bại của hệ thống agent thường gặp trong thực tế
    • Không thiết kế hệ thống bộ nhớ tường minh nên bị mất ngữ cảnh
    • Thiếu ràng buộc trong việc chọn công cụ (dùng tool không cần thiết/sai công cụ)
    • Quá phụ thuộc vào cấu trúc ủy quyền tự do nên thất bại trong điều phối hợp tác

Bài học khi thiết kế hệ thống thực tế

  • Ngay cả khi đưa agent vào, vẫn bắt buộc phải có thiết kế, khả năng quan sát và cơ chế kiểm soát ở mức một hệ thống phần mềm hoàn chỉnh
  • So với framework agent phức tạp, thiết kế dựa trên Observability, vòng lặp đánh giá rõ ràng và cấu trúc có thể kiểm soát trực tiếp sẽ nhanh hơn và an toàn hơn

Kết luận (TL;DR)

  • Agent thường bị đánh giá quá cao và bị lạm dụng
  • Phần lớn bài toán thực chiến phù hợp hơn với các mẫu workflow đơn giản
  • Agent phát huy giá trị thật trong môi trường con người tham gia trực tiếp
  • Trong hệ thống cần ổn định, agent ngược lại có thể là yếu tố rủi ro
  • Hãy thiết kế với khả năng quan sát, kiểm soát tường minh và cấu trúc đánh giá lặp
  • Thay vì framework agent phức tạp, bí quyết để phát triển dịch vụ dựa trên LLM nhanh hơn và an toàn hơn trong thực tế là thiết kế với Observability, vòng lặp đánh giá rõ ràng và cấu trúc có thể kiểm soát trực tiếp

6 bình luận

 
samdo103 2025-07-12

Một tháng trước, tôi bắt tay phát triển một framework để vừa học xem AI coding là gì bằng cách tận dụng CURSOR.

Trong khoảng 3 tuần, tôi liên tục lặp lại cảnh thành công rồi lại để mã nguồn từng được AI Agent kiểm chứng bị phá hỏng, và đã cố gắng bằng mọi cách để kiểm soát AI Agent nhưng vẫn thất bại.

Rồi tôi nhận ra rằng trước khi phát triển framework, ưu tiên trước hết phải là phát triển mã nguồn để kiểm soát AI Agent.

Cuối cùng, đúng tròn 1 tháng kể từ khi bắt đầu để tìm hiểu AI thực sự là gì, tôi đã đạt được thành quả hoàn tất phát triển phần mềm có thể được AI triển khai 100% và vận hành 100% một cách hoàn toàn kiểm soát được AI Agent (chính xác hơn là không cần LLM bên ngoài hay AI Agent).

Hiện tại đã là ngày thứ 14, tôi đang tiếp tục huấn luyện bổ sung META AI đó để nâng cấp thêm, đồng thời xây dựng và buộc nó tuân thủ các quy định vận hành; song song đó, tôi cũng đang tiến hành migration, cải tiến và chuẩn hóa cùng lúc 3 hệ thống MES vốn trước đây do con người làm ra một cách chưa hoàn chỉnh, và hiện đã bước vào giai đoạn hoàn tất.

Và lúc này, tôi đang chuẩn bị cho một sự tiến hóa khác nữa.

 
spilist2 2025-07-09

Nhưng trong prompt chaining, liệu có thể xem là không vấn đề gì nếu gọi riêng LLM thực thi từng prompt, worker thực thi, worker điều phối, LLM đánh giá, v.v. là các agent hay không?

 
spilist2 2025-07-09

À, hóa ra có đoạn “quyền kiểm soát quy trình cuối cùng (LLM tự quyết định bước tiếp theo hoặc có dùng công cụ hay không) được gọi là tính chất tác tử”. Tôi hiểu rồi. Đây là bài viết nhắm tới autonomous agent. Vì tôi vẫn chưa hiểu rõ về agent nên...

 
GN⁺ 2025-07-07
Ý kiến trên Hacker News
  • Việc phát triển agent thực sự rất thú vị, nhưng rõ ràng có một vấn đề nghiêm trọng với "context engineering". Dù có mở rộng cửa sổ ngữ cảnh đến đâu thì vẫn phải tuyển chọn những gì agent được nhìn thấy, và tôi cảm thấy đang thiếu các bộ lọc hiệu quả để chỉ chọn ra thông tin thực sự quan trọng. Vì thế phải hỗ trợ bằng cách rải các file *.md ở nhiều nơi, và việc phân vai cũng quan trọng. Hệ thống *.md này là một dạng hệ thống bộ nhớ nguyên thủy, và hoàn toàn có thể phát triển nó vững chắc hơn nhiều. Tôi cũng nghĩ có thể tạo ra chương trình hoặc mô hình (dựa trên ngôn ngữ tự nhiên) theo thời gian thực dựa trên tương tác của người dùng. Khi dùng Claude Code, tôi nhận ra việc "điều khiển" agent bằng test suite là một cơ chế học tăng cường cực kỳ mạnh, và vì vòng lặp này phần lớn tiếp tục thành công nên tôi hy vọng sẽ xuất hiện những ý tưởng mới có thể biến agent thành cộng tác viên thông minh hơn trong tương lai
    • Có cảm giác mình dành nhiều thời gian hơn để chiến đấu với tool thay vì làm công việc thực tế
    • Tôi tò mò không biết có cách khuyến nghị nào để tổ chức các file .md trong những hệ thống như thế này không. Tôi lo rằng nếu thêm quá nhiều markup để con người dễ đọc thì có thể gây vấn đề cho llm khi xử lý. Tôi muốn biết liệu việc tạo file .md giống hệt cho mục đích con người đọc có cản trở việc dùng llm hay không
    • Theo trải nghiệm của tôi thì quản lý ngữ cảnh gần như là cốt lõi của mọi vấn đề. Ví dụ, tạo đúng ngữ cảnh cho các tác vụ song song/đệ quy, loại bỏ một số bước (ví dụ: chỉnh sửa phản hồi trước đó) và chỉ hiển thị kết quả đã sửa, hoặc khi tôi thêm bình luận thì làm sao để agent nhận biết đầu ra của chính nó thông qua bình luận đó, v.v. Thực tế có rất nhiều tình huống như vậy
    • Phần tăng cường agent bằng test suite rất thú vị, tôi muốn nghe giải thích chi tiết hơn về quy trình cụ thể được thực hiện như thế nào
  • Tôi vẫn chưa chắc AI agent có được dùng phổ biến như cách mọi người nói trên LinkedIn hay không, nhưng tôi vẫn để ngỏ khả năng đó. Hiện tại tôi dùng AI theo kiểu kiểm soát rất chặt như với Claude Code, Cursor. Không phải vì mô hình kém, mà vì tôi muốn trực tiếp thường xuyên đưa ra "gu" và định hướng. Việc trao cho AI nhiều quyền tự chủ hơn lại không hấp dẫn lắm với tôi, vì tôi chỉ cảm thấy có bản sắc và sự gắn kết khi chính mình can thiệp. Có thể sau này cách làm việc thay đổi hoặc xuất hiện UX mới thì tôi sẽ đổi ý, nhưng ở thời điểm hiện tại tôi không muốn AI trở nên quá agent
    • Tôi tò mò liệu theo thời gian, khi hiểu rõ hơn cách mô hình hành xử, và chỉ cần cung cấp nhiều ngữ cảnh cùng chỉ dẫn tốt hơn, thì có thể đáp ứng phần nào yêu cầu về gu và định hướng của người dùng hay không. Theo kinh nghiệm của tôi, chỉ riêng prompt engineering được làm tốt cũng đủ để khiến AI hoạt động đúng như mong muốn trong khá nhiều workflow, nên nhiều khi không cần phải can thiệp thường xuyên
    • Tôi hoàn toàn đồng cảm. Tôi cũng từng để lại bình luận tương tự ở nơi khác, rằng câu nói cũ "không có bữa trưa miễn phí" vẫn đúng. Nếu LLM có thể giải quyết vấn đề mà hoàn toàn không cần con người, thì điều đó cũng có nghĩa là chỉ với vài dòng prompt, ai cũng có thể tạo ra cùng một hệ thống tinh vi như nhau, và khi đó sự khác biệt hay giá trị giữa các hệ thống sẽ biến mất. Nếu prompt là một mức trừu tượng mới, thì ví dụ khi bảo Claude rằng "hãy làm cho tôi một ứng dụng ghi chú", hàng triệu người sẽ nhập cùng một prompt chi phí thấp như vậy, và lúc đó tôi tự hỏi rốt cuộc người viết prompt đóng góp thêm ý nghĩa gì
    • Theo tôi nghĩ, theo thời gian thì từng yếu tố về "gu" như vậy cũng sẽ dần được hệ thống hóa thành prompt. Ví dụ có một prompt để khi thay đổi code thì không tạo ra tính biến đổi không cần thiết, và nếu có thể thì hướng mô hình viết theo kiểu immutable. Lại có một prompt khác để tránh viết log vô dụng (theo cách tôi định nghĩa cụ thể), v.v. Khi review thay đổi code, tôi chạy tất cả các prompt này riêng lẻ và gom chúng lại thành đầu ra MCP có cấu trúc. Tôi áp dụng những thứ này vào code-agent để hiện thực hóa vòng lặp review tự động. Nếu phát sinh tình huống cần tự thêm ngữ cảnh, tôi sẽ tạo prompt mới hoặc mở rộng prompt hiện có để bổ sung
  • Thật thú vị khi thấy trong một lĩnh vực tưởng như mới chỉ có 1~2 năm kinh nghiệm mà đã xuất hiện những "thẩm quyền". Nó giống như phiên bản đảo ngược của meme "tìm người có 10 năm kinh nghiệm với một ngôn ngữ mới 2 năm tuổi"
    • Tôi đã tạo ra thứ được gọi là "ai agent" từ khi GPT-3 ra mắt, và ngoài tôi ra cũng có rất nhiều người có trải nghiệm tương tự. Đã 5 năm rồi, và nếu sau 5 năm mà vẫn chưa xuất hiện chuyên gia thì tôi nghĩ lúc đó đơn giản là chẳng có chuyên gia nào cả. Dĩ nhiên dạo này từ "agent" đang dần biến thành buzzword nên ý nghĩa của nó cũng bị phai đi
    • Còn khi đọc những câu chuyện kiểu "tôi đã làm việc với hàng chục đội ngũ..." thì phản ứng của tôi là thấy nó hơi kịch tính
  • Tóm tắt cốt lõi: nếu đã có giải pháp được định nghĩa sẵn thì không cần phải dùng agent làm gì (ví dụ: các "pattern" xuất hiện trong bài). Thông thường lập trình viên sẽ khuyến nghị một cách giải quyết đơn giản và đáng tin cậy hơn cho các vấn đề có thể xử lý bằng chương trình. Trong tương lai AI có thể đủ thông minh để thật sự giải quyết mọi vấn đề bằng brute force, nhưng hiện tại nó chỉ làm tăng độ phức tạp. Tôi nghĩ một trong những lý do khiến mọi người phát cuồng vì agent là vì đa số tiếp cận LLM qua mục đích chat assistant. Với các chat assistant như vậy, thường không có lời giải cố định và tương tác lại phức tạp, nên agent mới phát huy đúng giá trị. Ví dụ: "hãy tìm tối thứ Sáu gần nhất còn trống rồi nhắn cho Bob xem có thể gặp không" — những việc như vậy có giới hạn nếu cố lập trình sẵn mọi trường hợp. Cách tương tác với assistant gần như vô hạn nên agent phù hợp hơn
    • Nó hoạt động rất tốt khi tốc độ xác minh nhanh hơn việc tự mình làm trực tiếp. Tuy nhiên tôi vẫn khó tin AI nếu không có bước kiểm chứng
  • Tôi thắc mắc vì sao quá nhiều ví dụ cuối cùng lại quy về "cách gửi spam nhanh hơn và tốt hơn"
    • Chẳng phải ví dụ đúng là như thế sao. Kiểu crawl LinkedIn để tìm người rồi gửi spam bằng email "cá nhân hóa"
    • Có thể ví điều này với việc bánh xe rốt cuộc cũng không lăn được nếu thiếu dầu mỡ
  • Điều này đúng vào cuối 2023 ~ đầu 2024, nhưng đến khoảng giữa 2025 thì với các SOTA LLM, tôi nghĩ nó không còn đúng với nhiều tác vụ nữa. Trước đây đa phần chỉ gọi LLM như một hàm, nhưng đó cũng là do chọn sai công cụ. Các LLM hàng đầu hiện nay (Gemini 2.5 Pro, Claude 4, v.v.) thực sự rất thông minh nên khả năng "instruction following" và chọn tool rất tốt. Các tool checklist, lệnh delegate, phân chia tác vụ, v.v. vẫn cần thiết. Nhưng cách xây chỉ dẫn và chỉ định lệnh — đặc biệt nếu trong môi trường UI có thể chỉ định lệnh tool dễ dàng — linh hoạt hơn workflow và là một mức trừu tượng cao hơn. Các workflow trực quan rốt cuộc vẫn là lập trình dễ vỡ và khó tinh chỉnh. 6~12 tháng trước điều này còn bất khả thi, nhưng nếu LLM không tốt thì hiện tại vẫn chưa áp dụng được. Nhìn rộng ra, vì chỉ có một số ít mô hình làm tốt instruction followingtích hợp tool, nên áp dụng agent vào các mô hình như vậy sẽ có lợi. Trong 1~2 năm tới, sẽ xuất hiện một xu hướng quy mô lớn của các agent dùng cho trình duyệt/máy tính. Chúng cũng sẽ kết hợp hệ thống bộ nhớ tốt cùng "chế độ trình diễn/quan sát" để học (ghi lại) quá trình người dùng thao tác UI, và cũng sẽ học các quy trình được tối ưu hóa từ chỉ dẫn bằng lời nói/tài liệu của con người
    • Với sự xuất hiện gần đây của những mô hình agent mạnh nhất (Claude Opus 4, v.v.), tình hình đã thay đổi hoàn toàn. Vẫn cần ngữ cảnh tốt, nhưng khả năng chọn tool chính xác thật sự rất xuất sắc
    • Các kỹ thuật trong bài gốc phần lớn là "mô hình hóa vấn đề bằng data flow graph rồi làm theo đúng nó". Nếu vượt qua bước mô hình hóa và tiếp cận theo kiểu "cứ để nó tự lo" thì đó không còn là kỹ thuật mà là niềm tin
  • Trong 3 tuần qua tôi đã cố làm cho agent hoạt động ổn định, nhưng cuối cùng lại phải chuyển sang những pattern đơn giản hơn nhiều. Các agent hiện nay giống như "một bàn tay có sáu ngón" — cảm giác như đang ở giai đoạn đầu của tiến hóa
  • Khi thấy những nhận định kiểu "điều phối viên sẽ bỏ cuộc nếu định nghĩa tác vụ không rõ ràng" rồi kết luận rằng "vậy thì bỏ luôn điều phối viên và chuyển sang logic mệnh lệnh", tôi nghĩ thực ra đó có thể là vấn đề có thể giải quyết bằng cách viết prompt hoặc mô tả tool cụ thể hơn, và thêm các bước như tóm tắt trung gian hoặc nén ngữ cảnh LLM. Nếu trong bài còn không có ví dụ prompt/mô tả tool dài đủ để dùng thực tế thì cũng khó mà phán đoán. Về trực giác, tận dụng orchestration phù hợp với tác vụ mới là câu trả lời, nhưng trên thực tế tôi tin rằng orchestration kiểu agent có thể được dùng hiệu quả cho nhiều loại công việc hơn rất nhiều
  • Tôi cũng đồng ý 100%. Agent thực sự rất vui để thử nghiệm, nhưng để tăng năng suất trong thực tế thì cốt lõi là orchestrate tốt các workflow và quy trình cụ thể, rồi tập trung vào những phần chỉ AI mới làm được. Nhân tiện, tôi cũng khuyến nghị bài viết về AI workflow trên ai.intellectronica.net
  • Điều tôi hay thấy gần đây là người ta đưa LLM vào các tool orchestration workflow sẵn có để xây hệ thống dễ hơn rất nhiều. Phần lớn độ phức tạp nằm ở a) bản thân mô hình (các lab hàng đầu cung cấp model dễ dùng), b) đưa workflow vào production (tool workflow làm phần này dễ hơn). Vì các workflow này dựa trên công việc sẵn có nên giá trị của chúng cũng được nhận ra và đo lường dễ dàng. Mẫu hình này ngày càng nhiều nên chúng tôi đã đóng gói hẳn một SDK cho Airflow (một tool workflow rất phổ biến) và công bố nó.
    https://github.com/astronomer/airflow-ai-sdk
 
sto1111 2025-07-08

Hiện tại tôi cũng đang làm một Computer-use Agent tên là UseDesktop.

https://youtu.be/aBkbsvMxP_A?si=uaugxKQEu4ZEz7jq

usedesktop.com

Vì vậy tôi đồng ý với phần lớn nội dung.

Bài này thiên về bức tranh tổng quan hơn là các mẹo thực chiến, nên nếu bổ sung thêm vài kinh nghiệm khi phát triển agentic/agent dựa trên LLM thì cuối cùng, LLM là thứ dựa trên transformer (tức là suy luận dựa trên xác suất, dự đoán token tiếp theo từ token/state hiện tại theo ngữ cảnh/ngữ nghĩa chứ không thực sự “hiểu” và nói ra từ tiếp theo), nên dù có viết sys prompt tốt đến đâu thì cũng khá thường xuyên không trả ra câu trả lời như mong muốn (ví dụ yêu cầu trả lời bằng JSON output nhưng thỉnh thoảng lại quên mất } chẳng hạn). Vì vậy, việc luôn thêm nhiều fallback function dựa trên regex là bắt buộc.

Ngoài ra, khi viết sys prompt để buộc structured output thì thường nên dùng non-reasoning model, và context càng dài thì hallucination càng hay xảy ra, nên thà tạo nhiều sys prompt rồi chain chúng lại còn tốt hơn.

Khi phát triển dịch vụ, có thể phát sinh nhiều loại lỗi, nên mấu chốt là phải thiết kế cấu trúc service theo hướng mô-đun hóa và fault-tolerant (ví dụ supervisor agent chạy async còn các agent khác chạy sync), đặc biệt là với các hệ agentic/agent vốn thường xuyên tạo ra unexpected output.
Vì thế, ngay từ đầu khi viết code thì nên cố gắng tuân thủ SRP và viết theo hướng declarative; tôi muốn nói rằng tiếp cận theo kiểu functional sẽ tốt hơn (= không có side effect và flow trực quan).

Ngoài ra, còn tùy bạn dùng LLM qua API hay tự phục vụ model, nhưng nếu định tự phục vụ SLM hoặc LLM thì đừng model serving trên cùng server đang host backend; nên tách riêng IO bound task và CPU bound tasks (tức các tác vụ cần GPU, phép nhân ma trận v.v.) sang các server khác nhau để fault-tolerant hơn và tốt hơn (ví dụ host CPU bound task trên runpod).

Ngoài những điều này còn nhiều mẹo phát triển khác nữa, nhưng sợ dài quá nên tôi chỉ viết đến đây thôi.

Hy vọng sẽ giúp ích cho ai đó.

 
jypark 2025-07-09

Thật sự cảm ơn bạn đã chia sẻ những trải nghiệm và ý kiến quý giá. Những ý kiến từ người đang trực tiếp làm việc tại hiện trường như thế này thực sự giúp ích rất nhiều.