Lỗ hổng logic trong các AI Chatbot truyền thống
Các triển khai LLM tiêu chuẩn thường gặp khó khăn khi đối mặt với các phép tính số học phức tạp hoặc dữ liệu thời gian thực. Có lẽ bạn đã từng thấy một mô hình tự tin khẳng định rằng $1.1^{10}$ xấp xỉ 2.0, trong khi giá trị thực tế gần bằng 2.59. Những lỗi này xảy ra vì hầu hết các chatbot về bản chất là các công cụ gợi ý từ (autocomplete) tiên tiến. Chúng dự đoán token tiếp theo dựa trên các mẫu trong dữ liệu huấn luyện tĩnh thay vì thực hiện tính toán chủ động.
Các framework như LangChain hay CrewAI thường giải quyết vấn đề này thông qua “Tool Calling” qua JSON. Tuy nhiên, quy trình này nổi tiếng là dễ lỗi (brittle). LLM phải tạo ra một chuỗi JSON có định dạng hoàn hảo để backend có thể phân tích và thực thi. Chỉ cần thiếu một dấu ngoặc đóng hoặc dư một dấu phẩy cũng có thể làm hỏng toàn bộ quy trình. Rào cản này khiến việc xây dựng các agent tự trị đôi khi giống như đang debug các mẫu regex hơn là kỹ thuật hóa trí tuệ thực thụ.
Tại sao Smolagents là một lựa chọn thay thế tốt hơn
Hugging Face vừa phát hành smolagents, một thư viện giúp đơn giản hóa quy trình làm việc của agent. Thay vì ép buộc LLM phải xuất ra JSON có cấu trúc, nó cho phép mô hình viết và thực thi mã Python trực tiếp. Cách tiếp cận này được gọi là “Code-as-Actions” (Mã nguồn là hành động).
Cách tiếp cận này đang trở thành tiêu chuẩn cho các AI sẵn sàng triển khai thực tế (production-ready). Nó chuyển gánh nặng logic từ những dự đoán mang tính xác suất của LLM sang sự chính xác tất định của trình thông dịch Python. Nếu một agent cần tìm căn bậc 15 của một số nguyên tố hoặc cào dữ liệu từ một trang web động, nó chỉ đơn giản là viết một đoạn script để thực hiện việc đó. Trong các thử nghiệm của tôi, phương pháp này giúp giảm đáng kể hiện tượng ảo giác (hallucination) và cải thiện tỷ lệ thành công của tác vụ thêm gần 30% so với phương pháp prompt JSON truyền thống.
Thực thi mã nguồn như một hành động chính
Hầu hết các framework dựa trên vòng lặp “Reasoning and Acting” (ReAct). Trong smolagents, class CodeAgent trao quyền cho mô hình hành động bằng cách tạo ra các đoạn mã Python. Thư viện sẽ thực thi mã này trong một môi trường an toàn và bị giới hạn. Thiết lập này xử lý được các logic phức tạp—như vòng lặp lồng nhau và rẽ nhánh có điều kiện—những thứ mà tool-calling tiêu chuẩn thường không quản lý được một cách chính xác.
Thiết lập môi trường phát triển
Để bắt đầu, bạn sẽ cần môi trường Python 3.10+. Tôi khuyên bạn nên sử dụng môi trường ảo (virtual environment) để giữ cho các gói cài đặt hệ thống luôn gọn gàng. Bạn cũng sẽ cần một API key từ Hugging Face hoặc OpenAI.
# Tạo và kích hoạt môi trường ảo
python -m venv venv
source venv/bin/activate # Trên Windows: venv\Scripts\activate
# Cài đặt smolagents và thư viện tìm kiếm phụ thuộc
pip install smolagents duckduckgo-search
Chúng ta sử dụng duckduckgo-search ở đây vì nó cung cấp một cách đơn giản, không cần xác thực để cấp quyền truy cập internet cho agent. Mặc dù thư viện smolagents cực kỳ nhẹ—chỉ khoảng vài nghìn dòng mã—nhưng nó tận dụng hệ sinh thái transformers khổng lồ để giao tiếp với mô hình.
Xây dựng AI Agent lấy mã nguồn làm trung tâm đầu tiên của bạn
Chúng ta sẽ xây dựng một agent có thể tìm kiếm web và thực hiện các phép tính trên dữ liệu tìm được. Điều này vượt xa khả năng tóm tắt cơ bản.
Bước 1: Cấu hình mô hình ngôn ngữ
Bạn có thể sử dụng bất kỳ mô hình nào được hỗ trợ bởi litellm hoặc Hugging Face Inference API. Trong hướng dẫn này, chúng ta sẽ sử dụng Hugging Face Hub.
from smolagents import HfApiModel, CodeAgent, DuckDuckGoSearchTool
# Khởi tạo mô hình
# Lấy token của bạn tại hf.co/settings/tokens
model = HfApiModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
Tôi chọn Qwen2.5-Coder-32B vì nó hiện đang cạnh tranh sòng phẳng với các mô hình lớn hơn nhiều trong các bài benchmark về lập trình Python. Đây là “động cơ” hoàn hảo để vận hành một agent lấy mã nguồn làm trung tâm.
Bước 2: Định nghĩa các công cụ và Agent
Tiếp theo, chúng ta định nghĩa các công cụ. smolagents bao gồm một số tiện ích có sẵn. Chúng ta sẽ sử dụng DuckDuckGoSearchTool để cấp quyền truy cập web theo thời gian thực cho agent.
# Khởi tạo công cụ tìm kiếm
search_tool = DuckDuckGoSearchTool()
# Tạo agent
agent = CodeAgent(
tools=[search_tool],
model=model,
add_base_tools=True # Bao gồm các công cụ định dạng và tiện ích cơ bản
)
Bước 3: Chạy một truy vấn phức tạp
Hãy kiểm tra agent với một tác vụ yêu cầu cả dữ liệu bên ngoài và tính toán: “Tìm giá thị trường hiện tại của Bitcoin và Ethereum, sau đó tính tỷ lệ giữa chúng.”
response = agent.run(
"Tìm giá thị trường hiện tại của Bitcoin và Ethereum bằng USD. "
"Sau đó, tính xem có thể mua được bao nhiêu token Ethereum bằng 1 Bitcoin."
)
print(response)
Trong quá trình thực thi, terminal sẽ hiển thị quá trình suy nghĩ của agent. Nó sẽ không đoán giá dựa trên dữ liệu huấn luyện cũ. Thay vào đó, nó viết một đoạn mã Python để gọi công cụ tìm kiếm, trích xuất các giá trị số từ kết quả và thực hiện phép chia. Sự minh bạch này là cực kỳ quan trọng để debug các tác vụ ở cấp độ production.
Triển khai thực tế: Trường hợp sử dụng công cụ tùy chỉnh
Trong môi trường chuyên nghiệp, bạn thường cần lấy dữ liệu từ các API nội bộ. Bạn có thể đóng gói bất kỳ hàm Python nào thành một công cụ bằng cách sử dụng một decorator đơn giản. Dưới đây là ví dụ về việc lấy dữ liệu định giá nội bộ.
import requests
from smolagents import tool
@tool
def get_internal_valuation(ticker: str) -> str:
"""
Lấy định giá nội bộ của công ty cho một mã chứng khoán cụ thể.
Tham số:
ticker: Mã chứng khoán (ví dụ: 'AAPL').
"""
# Giả lập cho một cuộc gọi cơ sở dữ liệu hoặc API thực tế
return f"Định giá nội bộ cho {ticker} là $150.25."
# Cập nhật agent
agent = CodeAgent(tools=[get_internal_valuation, search_tool], model=model)
agent.run("So sánh giá nội bộ của AAPL với tin tức thị trường mới nhất.")
Docstring trong hàm @tool là cực kỳ quan trọng. Smolagents phân tích văn bản này để giải thích mục đích của công cụ cho LLM. Các mô tả rõ ràng, súc tích là bí quyết để có một agent đáng tin cậy. Nếu mô tả mơ hồ, LLM có thể sẽ do dự hoặc sử dụng công cụ sai cách.
Bảo mật và thực thi mã nguồn
Chạy mã nguồn do AI tạo ra luôn tiềm ẩn rủi ro. Yêu cầu một agent “dọn dẹp thư mục của tôi” có thể dẫn đến mất dữ liệu ngoài ý muốn. Smolagents giảm thiểu điều này bằng cách chạy mã trong một môi trường cục bộ bị giới hạn. Tuy nhiên, đối với các ứng dụng doanh nghiệp, tôi khuyên bạn nên sử dụng thêm một lớp cô lập. Sử dụng Docker container hoặc một sandbox chuyên dụng như E2B đảm bảo rằng các hành động của AI không thể ảnh hưởng đến máy chủ của bạn.
Lời kết
Việc chuyển hướng sang các agent lấy mã nguồn làm trung tâm giúp các hệ thống AI trở nên dễ dự đoán và mạnh mẽ hơn. Bằng cách sử dụng smolagents, bạn đang xây dựng một hệ thống có thể lập luận, tự viết logic và tương tác với thế giới thông qua một cầu nối Python đáng tin cậy.
Khi bạn mở rộng quy mô, hãy cân nhắc kết hợp thư viện này với các công cụ chạy mô hình cục bộ như Ollama. Điều này cho phép bạn xử lý dữ liệu nhạy cảm tại chỗ trong khi vẫn duy trì được các khả năng tự trị. Framework này là một lựa chọn tuyệt vời cho các nhà phát triển đã sẵn sàng tiến xa hơn RAG cơ bản để bước vào thế giới của các trợ lý AI đa năng và giàu tính logic.

