Tạo AI Agent có khả năng thực thi code an toàn trong workflow
Trong thế hệ mới của AI Agent, vai trò của chúng không chỉ dừng lại ở việc phản hồi hội thoại hay gợi ý văn bản. Một Agent hiện đại có thể tự động sinh, thực thi và đánh giá code ngay trong workflow. Tuy nhiên, việc để mô hình ngôn ngữ lớn (LLM) trực tiếp chạy code luôn tiềm ẩn rủi ro bảo mật nghiêm trọng.
Bài viết này hướng dẫn bạn xây dựng một Code Interpreter Tool cho Agent có thể chạy Python trong sandbox, xử lý lỗi an toàn, và tách biệt hoàn toàn với hệ thống chính.
Tại sao AI Agent cần khả năng chạy code thực tế
Trong môi trường tự động hóa workflow, một Agent không thể chỉ “hiểu lệnh”, nó cần thực thi hành động. Việc cho phép Agent chạy code giúp nâng cấp khả năng xử lý từ lý thuyết sang thực hành, ví dụ:
- Phân tích dữ liệu động: Agent đọc CSV, xử lý bằng pandas hoặc numpy, rồi tự sinh biểu đồ bằng matplotlib.
- Tạo báo cáo định kỳ: Mỗi ngày, Agent tự gọi API (như Google Analytics), tính toán KPI và gửi báo cáo PDF.
- Kiểm thử code: Khi người dùng nhập đoạn script, Agent có thể chạy thử và trả lại log thực thi.
- Mô phỏng logic phức tạp: Trong các bài toán lập kế hoạch hoặc tối ưu, Agent có thể chạy mô phỏng nhiều lần để chọn phương án tốt nhất.
Khả năng thực thi code giúp Agent tự kiểm chứng và phản hồi dựa trên kết quả thật, không chỉ dừng lại ở “dự đoán” từ ngữ.

Những rủi ro khi để Agent tự chạy code
Khi LLM có quyền thực thi mã, bạn đang trao quyền trực tiếp truy cập tài nguyên backend. Nếu không kiểm soát, hệ thống có thể bị tấn công hoặc sập chỉ từ một dòng code:
| Rủi ro | Mô tả |
|---|---|
| Truy cập hệ thống | Mã độc như os.remove() hoặc đọc file /etc/passwd. |
| Rò rỉ dữ liệu | Agent đọc/ghi nhầm vào thư mục dùng chung hoặc file người khác. |
| Vòng lặp vô hạn | Code while True: khiến CPU bị treo. |
| Chiếm dụng tài nguyên | Các phép tính nặng khiến RAM hoặc CPU bị đầy. |
Giải pháp: Xây dựng sandbox cô lập, giới hạn quyền truy cập file, thời gian chạy, tài nguyên và kết nối mạng.
Kiến trúc sandbox an toàn cho Code Interpreter
Một sandbox execution module là lớp bảo vệ giữa Agent và môi trường thật. Nó cho phép chạy code trong container độc lập, đồng thời đảm bảo log, timeout, và cleanup được xử lý tự động.
Kiến trúc tổng quát:
User Prompt → LLM → Code Generation → Sandbox Execution → Output Response
Demo: Tạo Code Interpreter an toàn bằng Python
Bước 1: Viết tool thực thi code
from langchain.tools import tool
import subprocess, tempfile, os
@tool("safe_code_interpreter", return_direct=True)
def safe_code_interpreter(code: str) -> str:
"""
Thực thi code Python trong môi trường sandbox tách biệt
"""
with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False) as tmp:
tmp.write(code)
tmp_path = tmp.name
try:
result = subprocess.run(
["python3", tmp_path],
capture_output=True,
text=True,
timeout=5 # Giới hạn thời gian chạy 5 giây
)
return result.stdout or result.stderr
except subprocess.TimeoutExpired:
return "⏰ Code vượt quá thời gian cho phép (timeout)."
finally:
os.remove(tmp_path)
Phân tích kỹ thuật:
tempfile: tạo file tạm, không can thiệp hệ thống thật.subprocess.run: chạy trong process độc lập.timeout: chặn code chạy quá lâu.capture_output: thu toàn bộ log stdout/stderr.
Bước 2: Gắn tool vào Agent
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
agent = initialize_agent(
tools=[safe_code_interpreter],
llm=llm,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
agent.run("Viết một đoạn code Python in ra 5 số Fibonacci đầu tiên và chạy thử.")
Kết quả thực thi:
def fibonacci(n):
seq = [0, 1]
for i in range(2, n):
seq.append(seq[-1] + seq[-2])
return seq
print(fibonacci(5))
Trả về: [0, 1, 1, 2, 3]
Nâng cấp sandbox bằng Docker
Để đạt mức bảo mật cao hơn, bạn có thể chạy code trong container riêng biệt:
docker run --rm \
-m 256m --cpus="1.0" \
--network=none \
-v $(pwd)/sandbox:/app \
python:3.11 \
python /app/tmp_code.py
Ý nghĩa các tham số:
- --network=none: chặn toàn bộ kết nối mạng.
- -m 256m, --cpus=1.0: giới hạn tài nguyên.
- --rm: tự xóa container sau khi chạy xong.
Từ đây, bạn có thể xây dựng API nội bộ để Agent gửi mã code đến sandbox container và nhận output an toàn.
Cơ chế bảo mật & giám sát khi triển khai thực tế
| Mục tiêu | Cách thực hiện |
|---|---|
| Ngăn code độc hại | Regex lọc từ khóa nguy hiểm (os, subprocess, socket, open, …) |
| Giới hạn tài nguyên | Sử dụng Docker, ulimit, timeout |
| Ghi log & trace | Lưu input/output + thời gian chạy |
| Tự phục hồi khi lỗi | Agent tự nhận diện lỗi và retry |
| Tách dữ liệu người dùng | Không lưu output trên ổ đĩa chung |
| Tích hợp pipeline | Gắn vào n8n, LangGraph, hoặc orchestrator nội bộ |
Ví dụ với n8n: Agent sinh code → gửi đến module sandbox → nhận log kết quả → kích hoạt bước tiếp theo (gửi báo cáo, cập nhật CRM...).
Ứng dụng thực tế
- Data Analyst Agent: sinh code xử lý dữ liệu, vẽ biểu đồ, xuất file PDF.
- AI Learning Platform: chạy ví dụ code trực tiếp như Code Interpreter của ChatGPT.
- BizChatAI Agent Workflow: khi tích hợp trong hệ sinh thái Bizfly, sandbox có thể được triển khai trên Bizfly Cloud, đảm bảo an toàn, mở rộng và dễ bảo trì.
Hướng phát triển nâng cao
- Container Pool: tạo nhiều container song song để giảm latency.
- Centralized Logging: lưu log vào hệ thống ELK/Supabase.
- Prompt Guard: lọc prompt trước khi sinh code.
- Role-based Restriction: chỉ role “DevOpsBot” hoặc “AnalystBot” được phép thực thi.
- Secure Gateway: chạy sandbox như một microservice riêng có token xác thực.
Kết luận
Khả năng thực thi code giúp AI Agent chuyển từ “người trả lời” sang “người hành động”. Tuy nhiên, để khai thác an toàn và hiệu quả, developer cần xây dựng sandbox cô lập, giới hạn tài nguyên, và ghi log chi tiết. Khi được triển khai đúng cách, đây chính là bước tiến biến AI Agent thành một lập trình viên tự động thực thụ trong hệ thống workflow của doanh nghiệp.
Nguồn tham khảo: https://bizfly.vn/techblog/tao-code-interpreter-bang-ai-agent-thuc-thi-trong-workflow.html
All rights reserved