Từ trả lời sang hành động
Trong vài năm qua, phần lớn chúng ta làm việc với các mô hình ngôn ngữ giống như làm việc với một đồng nghiệp rất uyên bác. Bạn đặt câu hỏi, bạn nhận câu trả lời, và việc tiếp theo là của bạn. Cách làm việc đó đang dần được thay thế. Những bài toán thú vị hiện nay không còn là làm sao để mô hình nói đúng. Chúng là làm sao để một hệ thống làm đúng, qua nhiều bước, với công cụ thật, trong những môi trường phức tạp nơi kế hoạch ban đầu hiếm khi trụ vững khi va chạm với thực tế.
Đó chính là nội dung của agentic engineering. Đây là chuyên ngành thiết kế, xây dựng và vận hành những hệ thống trong đó mô hình không chỉ tạo ra văn bản mà còn thực hiện hành động, xem xét kết quả và quyết định bước tiếp theo cho đến khi đạt được mục tiêu. Mô hình vẫn là trung tâm, nhưng giờ đây nó chỉ là một thành phần trong một cỗ máy lớn hơn, và phần lớn khó khăn thực sự nằm ở mọi thứ xung quanh nó.
Sự chuyển dịch này quan trọng vì các kỹ năng cần có đã khác. Viết prompt đề cao cách diễn đạt khéo léo. Agentic engineering đề cao những yếu tố vốn luôn làm nên phần mềm đáng tin cậy: giao diện rõ ràng, khả năng quan sát tốt, xử lý lỗi hợp lý và một vòng lặp chặt chẽ giữa những gì bạn triển khai và những gì bạn học được. Thành phần thực sự mới duy nhất là cái lõi khó đoán nằm ở giữa tất cả.
Agent thực chất là gì
Từ agent bị kéo giãn để chỉ gần như mọi thứ, vì vậy cần định nghĩa cho chính xác. Agent là một hệ thống theo đuổi một mục tiêu bằng cách liên tục lựa chọn hành động dựa trên những gì nó quan sát được, thay vì làm theo một kịch bản cố định. Đặc điểm cốt lõi là vòng lặp, không phải trí thông minh. Bộ điều nhiệt làm theo một quy tắc. Agent thì tự quyết định.
Sẽ hữu ích hơn nếu xem tính tự chủ là một dải liên tục thay vì câu hỏi có hoặc không. Ở một đầu là một lệnh gọi mô hình duy nhất để phân loại email. Xa hơn một chút, một workflow nối nhiều lệnh gọi theo thứ tự cố định, hữu ích nhưng vẫn theo kịch bản. Xa hơn nữa, mô hình tự chọn công cụ nào để gọi và khi nào, rồi tiếp tục cho đến khi nó đánh giá công việc đã xong. Ở đầu xa nhất, hệ thống tự đặt mục tiêu con, tự quản lý bộ nhớ và chạy hàng giờ liền. Hầu hết các hệ thống production hiện nay nằm đâu đó ở giữa, và đó thường là vị trí đúng, vì tự chủ hoàn toàn hiếm khi là điều một bài toán thực sự cần.
Xác định hệ thống của bạn nằm ở đâu trên dải này là một trong những việc giúp làm rõ vấn đề nhất mà bạn có thể làm từ sớm. Nó cho bạn biết có thể dựa vào phán đoán của mô hình đến mức nào, cần áp đặt bao nhiêu cấu trúc và rủi ro sẽ tập trung ở đâu.
Vòng lặp của agent
Gạt bỏ tên các framework và lời lẽ marketing, gần như mọi agent đều chạy cùng một vòng lặp. Nó thu thập ngữ cảnh về tình huống, suy luận xem nên làm gì, thực hiện một hành động và quan sát điều gì đã xảy ra. Rồi nó lặp lại, dùng những gì vừa học được, cho đến khi đạt mục tiêu hoặc bỏ cuộc.
Mỗi lượt qua vòng lặp này là một điểm quyết định, và điểm quyết định là nơi mọi thứ đi đúng hoặc đi sai. Một vòng lặp agent tốt không phải là vòng lặp có prompt khéo nhất. Đó là vòng lặp mà ở mỗi giai đoạn, mô hình có vừa đủ thông tin để đưa ra lựa chọn đúng đắn, không hơn. Đưa cho mô hình toàn bộ lịch sử mọi thứ đã xảy ra, nó sẽ mất mạch. Đưa quá ít, nó sẽ hành động mù quáng. Phần lớn tay nghề nằm ở việc quyết định mô hình được thấy gì ở mỗi lượt.
Vòng lặp này cũng giải thích vì sao xây dựng agent mang cảm giác rất khác so với phần mềm thông thường. Với code bình thường, bạn có thể suy xét mọi nhánh thực thi. Ở đây, mô hình có thể chọn một hướng đi bạn chưa từng hình dung, phục hồi sau lỗi theo cách bạn không lên kế hoạch, hoặc đi lạc theo một hướng trông hợp lý trong ba bước rồi đổ vỡ. Bạn không viết ra con đường. Bạn định hình không gian các con đường khả dĩ và cố gắng làm cho những con đường tốt dễ được tìm thấy.
Cấu tạo của một agent
Sẽ dễ hình dung hơn nếu xem agent là một tập nhỏ các thành phần, mỗi thành phần làm một việc. Có mô hình, cung cấp khả năng suy luận và ngôn ngữ. Có công cụ, cho phép hệ thống tác động lên thế giới và đọc dữ liệu trở lại. Có bộ nhớ và ngữ cảnh, mang thông tin liên quan vào mỗi quyết định. Và có lớp điều phối bao quanh tất cả, chạy vòng lặp, áp đặt giới hạn và quyết định khi nào dừng.
Điều nổi bật, sau khi bạn đã xây dựng vài hệ thống như vậy, là phần việc khó thực sự ít liên quan đến bản thân mô hình đến mức nào. Mô hình phần lớn là một lựa chọn cố định. Bạn chọn một mô hình, viết prompt cho nó rồi đi tiếp. Công sức kỹ thuật dồn vào các thành phần xung quanh. Công cụ tốt, xử lý ngữ cảnh tốt và điều phối tốt là những gì phân biệt một bản demo chạy được một lần với một hệ thống bạn có thể để vận hành liên tục. Những đội mải chăm chút câu chữ trong prompt mà bỏ bê các thành phần này thường tạo ra những thứ trông ấn tượng vào thứ Ba và hỏng vào thứ Sáu.
Công cụ và ngữ cảnh mới là bề mặt thực sự
Nếu vòng lặp là bộ khung, thì công cụ và ngữ cảnh là nơi công việc kỹ thuật thực sự diễn ra.
Công cụ là đôi tay của mô hình. Đó là cách agent đọc cơ sở dữ liệu, gửi tin nhắn, chạy truy vấn hay di chuyển tệp. Chất lượng công cụ đặt ra một mức trần cứng cho những gì agent có thể làm, và thiết kế công cụ hóa ra là một nghề thủ công thực thụ. Một công cụ tốt làm một việc rõ ràng, có tên và mô tả cho mô hình biết chính xác khi nào nên dùng nó, kiểm tra đầu vào và trả về kết quả dễ hành động. Một công cụ mơ hồ với mô tả không rõ ràng còn tệ hơn không có công cụ nào, vì mô hình sẽ dùng nó một cách tự tin và sai lầm. Sự chăm chút bạn dành cho việc thiết kế giao diện cho một đồng nghiệp giỏi nhưng mới vào cũng gần bằng sự chăm chút mà một công cụ xứng đáng nhận được, vì tình huống thực tế cũng gần như vậy.
Ngữ cảnh là nửa còn lại. Mô hình chỉ biết những gì được đặt trước mặt nó, nên ở mỗi lượt bạn đang trả lời một câu hỏi thầm lặng: mô hình cần thấy gì ngay lúc này để lựa chọn đúng? Đây là nguồn gốc của thuật ngữ context engineering, và nó đã trở thành một trong những vấn đề trọng tâm của lĩnh vực. Cách làm ngây thơ là cứ nhồi thêm vào cửa sổ ngữ cảnh, thêm lịch sử, thêm tài liệu, thêm chỉ dẫn. Cách này không mở rộng được. Sự chú ý bị pha loãng, chi phí tăng vọt và mô hình bắt đầu bỏ lỡ chính điều quan trọng nhất. Cách làm tốt hơn coi ngữ cảnh là một ngân sách cần chi tiêu có chủ đích. Bạn truy xuất những gì liên quan, tóm tắt những gì đã cũ, loại bỏ những gì đã xong, và giữ tập làm việc nhỏ gọn, sắc nét. Làm đúng điều này thường là khác biệt giữa một agent giữ được sự mạch lạc suốt một tác vụ dài và một agent dần dần lạc mất hướng đi.
Vì sao agent khó
Đây là sự thật khó chịu mà sớm muộn đội nào cũng phát hiện ra. Một lệnh gọi mô hình đơn lẻ khá đáng tin cậy. Nối hai mươi lệnh gọi lại với nhau, những tỷ lệ lỗi nhỏ sẽ cộng dồn thành những hệ thống thất bại nhiều hơn thành công.
Phép tính rất khắc nghiệt. Nếu mỗi bước trong một tác vụ mười bước đúng chín mươi lăm phần trăm số lần, cả tác vụ chỉ thành công khoảng sáu mươi phần trăm số lần, và đó là với giả định các lỗi độc lập với nhau, điều thường không đúng. Một quan sát sai từ sớm có thể đầu độc mọi quyết định theo sau. Sự cộng dồn này là lý do lớn nhất khiến những agent gây choáng ngợp trong bản demo lại chật vật khi lên production. Bản demo là một con đường suôn sẻ. Production là mười nghìn con đường, và phần đuôi dài đầy những đầu vào mà không ai nghĩ tới.
Các kiểu thất bại dần mang những tính cách riêng khi bạn đã chứng kiến đủ nhiều. Agent mắc kẹt trong vòng lặp, gọi cùng một công cụ hết lần này đến lần khác và mong chờ một câu trả lời khác. Chúng ảo giác ra một công cụ hoặc một kết quả chưa từng tồn tại. Chúng tuyên bố thành công khi chưa làm được gì. Chúng lặng lẽ thực hiện sai nhiệm vụ với sự tự tin tuyệt đối. Không cái nào trong số này là bug bạn có thể truy vết bằng stack trace. Chúng là những hành vi bạn phải thiết kế để phòng tránh, phát hiện khi xảy ra và phục hồi một cách êm thấm. Chấp nhận điều này từ sớm, thay vì hy vọng một mô hình tốt hơn sẽ làm mọi thứ biến mất, là điều phân biệt những đội đưa được agent vào vận hành với những đội chỉ dừng ở demo.
Evals và khả năng quan sát
Nếu agent thất bại theo những cách tinh vi, cộng dồn và khó lường, thì thứ quan trọng nhất bạn có thể xây dựng không phải là agent. Đó là khả năng nhìn thấy nó đang làm gì và đo lường xem các thay đổi của bạn có làm nó tốt hơn hay không.
Khả năng quan sát đi trước. Bạn không thể debug thứ bạn không nhìn thấy, và theo mặc định, quá trình suy luận của agent là vô hình. Mỗi lần chạy nên để lại một trace: agent đã thấy gì, đã quyết định gì, đã gọi những công cụ nào, nhận lại được gì và kết thúc ở đâu. Lần đầu tiên một agent production làm điều gì đó khó hiểu, trace đó chính là khác biệt giữa năm phút chẩn đoán và năm giờ. Hãy coi nó là nền tảng thay vì thứ gắn thêm vào sau.
Tiếp theo là evals, và chúng mới là động cơ thực sự của tiến bộ. Một eval là một bài kiểm tra lặp lại được, xem hệ thống của bạn có làm đúng việc cần làm trên những trường hợp bạn quan tâm hay không. Không có chúng, bạn đang bay mù, vì cái bẫy với agent là mọi thay đổi đều có vẻ là cải tiến ngay tại thời điểm đó. Bạn chỉnh một prompt, ví dụ duy nhất bạn đang nhìn tốt lên, và bạn không hề biết mình vừa làm hỏng gì ở mọi chỗ khác. Một bộ eval tốt, được xây dựng từ những thất bại thực tế bạn đã thực sự thấy, biến sự phỏng đoán đó thành phép đo. Những đội cải thiện nhanh nhất không phải là những đội có prompt khéo nhất. Họ là những đội có vòng lặp chặt chẽ nhất giữa quan sát hành vi thực tế, chấm điểm, tìm ra các kiểu thất bại, sửa chúng và kiểm tra rằng bản sửa vẫn giữ vững.
Vòng lặp này không hào nhoáng, nhưng nó là tất cả. Agentic engineering, hơn hầu hết các loại phần mềm khác, là một chuyên ngành thực nghiệm. Bạn không thể suy luận để đi đến một agent đáng tin cậy. Bạn phải đo lường để đến được đó.
Rào chắn, tính tự chủ và con người trong vòng lặp
Vì agent hành động trong thế giới thực, cái giá của một sai lầm không còn là một câu văn sai. Đó là một tệp bị xóa, một tin nhắn gửi nhầm người, một thẻ bị trừ tiền. Điều này thay đổi cách bạn nghĩ về an toàn. Bạn không chỉ cố gắng làm cho mô hình chính xác. Bạn cố gắng đảm bảo rằng khi nó sai, và chắc chắn nó sẽ sai, phạm vi ảnh hưởng vẫn nhỏ.
Đòn bẩy chính là cân xứng mức tự chủ với mức độ rủi ro. Đọc dữ liệu sai thì tốn ít, vì vậy hãy để agent tự do làm việc đó. Những hành động tốn kém hoặc khó hoàn tác cần có ma sát: một bước xác nhận, một hạn mức chi tiêu, một bước kiểm tra mà hành động phải vượt qua trước khi chạy. Kỹ năng nằm ở chỗ dễ dãi ở nơi an toàn và nghiêm ngặt ở nơi không an toàn, thay vì bọc mọi thứ trong cùng một quy trình nặng nề. Một agent phải xin phép cho mọi bước đi chỉ là một chatbot chậm chạp, còn một agent có thể làm bất cứ điều gì lại là một mối nguy.
Con người trong vòng lặp là nửa còn lại, và mục tiêu là thiết kế vòng lặp cho tốt chứ không phải loại bỏ hoàn toàn con người. Những thiết kế tốt nhất đặt con người tại số ít điểm quyết định thực sự quan trọng và để họ đứng ngoài phần còn lại. Một người phải phê duyệt từng bước một sẽ sớm quen bấm đồng ý mà không đọc, điều còn tệ hơn là không có con người nào. Một người được mời vào đúng thời điểm mang rủi ro thực sự, với đủ ngữ cảnh để đưa ra phán đoán thực sự, là một trong những rào chắn hiệu quả nhất.
Nguyên tắc để xây dựng tốt
Nếu có một sợi chỉ xuyên suốt tất cả những điều trên, thì đó là agentic engineering đề cao sự tiết chế và phản hồi hơn là sự khéo léo. Một vài nguyên tắc thường đứng vững.
Bắt đầu với thứ đơn giản nhất có thể hoạt động. Một workflow cố định mà bạn hiểu rõ tốt hơn một agent tự chủ mà bạn không hiểu. Chỉ thêm tính tự chủ khi bài toán thực sự đòi hỏi, và bạn sẽ thấy nhu cầu đó hiếm hơn nhiều so với sự hào hứng xung quanh nó.
Đầu tư vào những phần nhàm chán trước. Công cụ, xử lý ngữ cảnh, trace và evals là nơi độ tin cậy được tạo ra. Chúng kém thú vị hơn những mẹo prompt, nhưng quan trọng hơn rất nhiều.
Thiết kế cho thất bại ngay từ đầu, vì agent của bạn sẽ thất bại. Câu hỏi duy nhất là nó thất bại một cách ồn ào và có thể phục hồi, hay âm thầm và tốn kém, và nhiệm vụ của bạn là dùng kỹ thuật để loại bỏ hoàn toàn trường hợp thứ hai.
Đo lường mọi thứ, và tin vào số đo hơn trực giác. Cảm nhận của bạn về việc một thay đổi có giúp ích hay không gần như luôn sai. Bộ eval mới đúng.
Và giữ con người ở nơi con người thực sự có giá trị. Không phải ở khắp nơi, điều khiến người ta thôi chú ý, và cũng không phải không ở đâu cả, điều loại bỏ tuyến phòng thủ cuối cùng, mà ở những điểm quan trọng, với đủ ngữ cảnh để hành động.
Không nguyên tắc nào trong số này xa lạ. Chúng là những đức tính bình thường của kỹ thuật tốt, áp dụng cho một thành phần tình cờ biết suy nghĩ một chút và thường xuyên làm bạn bất ngờ. Rốt cuộc, đó chính là bản chất của agentic engineering. Nó không phải một loại phép màu mới. Nó là công việc cẩn trọng để xây dựng những hệ thống đáng tin cậy quanh một lõi mạnh mẽ nhưng khó đoán, và làm giỏi việc này phần lớn là chuyện nghiêm túc đối mặt với sự khó đoán đó.




