Bài này bạn dựng xong bàn làm việc: chọn nền tảng, lấy API key, kết nối tools, và tạo agent "hello world" đầu tiên. Ta đi con đường thực dụng nhất cho người đang dùng Zapier.
Chọn con đường triển khai
Có ba lựa chọn, từ ít code đến nhiều code:
- No-code trong Zapier/Make: dùng bước "AI by Zapier" hoặc "Run agent". Nhanh, nhưng kiểm soát vòng lặp/tool còn hạn chế.
- Nền tảng agent chuyên dụng (n8n AI Agent node, Make + OpenAI): kéo thả nhưng cho phép tool-calling và loop thật.
- Code (Python): dùng SDK của nhà cung cấp LLM. Kiểm soát tối đa. Đây là con đường ta dùng để dạy nguyên lý.
Các bước thiết lập
- Tạo tài khoản nhà cung cấp LLM và lấy API key.
- Lưu key vào biến môi trường, không hardcode.
- Cài SDK (ví dụ Python) và thư viện HTTP cho các tool bên ngoài.
- Chuẩn bị credential cho tools bạn sẽ dùng lại từ Zapier (Google Sheets, Slack...).
- Viết một agent nhỏ gọi được đúng 1 tool để kiểm tra đường ống.
# Lưu key an toàn
export LLM_API_KEY="sk-..."
export SLACK_WEBHOOK="https://hooks.slack.com/..."
pip install openai requests
Agent "hello world" với một tool
Dưới đây là khung tối giản: một tool tính thời tiết giả lập, agent tự quyết định có gọi hay không.
import os, json
from openai import OpenAI
client = OpenAI(api_key=os.environ["LLM_API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Lấy thời tiết hiện tại của một thành phố",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
}]
def get_weather(city):
return {"city": city, "temp": 31, "sky": "nắng"}
msg = [{"role": "user", "content": "Đà Nẵng giờ thời tiết sao?"}]
resp = client.chat.completions.create(model="gpt-4o-mini", messages=msg, tools=tools)
call = resp.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
print(get_weather(**args)) # {'city': 'Đà Nẵng', 'temp': 31, 'sky': 'nắng'}
Điểm mấu chốt: bạn không viết if city then.... LLM tự trích city từ câu hỏi tự nhiên và chọn tool. Đó là bước nhảy khỏi tư duy Zapier.
Khung quyết định: no-code hay code?
- Cần ship trong hôm nay, logic đơn giản → no-code (Zapier/n8n).
- Cần tool-calling nhiều bước, kiểm soát loop → n8n hoặc code.
- Cần bảo mật/tùy biến/tối ưu chi phí cao → code.
Kết nối lại tools cũ từ Zapier
Bạn không cần bỏ Zapier. Cách lai phổ biến: agent (code hoặc n8n) là "não", còn Zapier giữ vai trò cầu nối tới hàng nghìn app. Agent gọi một Zapier Webhook như một tool, Zap thực thi hành động (tạo sự kiện Calendar, gửi SMS...). Tận dụng thứ bạn đã dựng.
Chọn model khởi đầu cho đúng túi tiền
Đừng vội dùng model mạnh nhất. Với hầu hết tác vụ phân loại và trích xuất, một model nhỏ, rẻ đã đủ tốt và nhanh hơn nhiều. Chiến lược thực dụng: bắt đầu bằng model rẻ, đo chất lượng bằng vài ca thật, chỉ nâng lên model mạnh khi thấy agent suy luận sai ở các tình huống phức tạp. Bạn có thể dùng model mạnh cho bước 'lập kế hoạch' và model rẻ cho các bước thực thi lặp lại — cách phối này tiết kiệm đáng kể mà không hy sinh chất lượng.
# Định tuyến model theo độ khó của bước
def pick_model(step_kind):
if step_kind == "reasoning_hard":
return "gpt-4o" # suy luận sâu, ít gọi
return "gpt-4o-mini" # phân loại/trích xuất, gọi nhiều
Ghi lại chi phí mỗi lần chạy ngay từ ngày đầu. Thói quen này giúp bạn phát hiện sớm khi một thay đổi prompt vô tình làm agent gọi tool nhiều hơn cần thiết.
Sai lầm thường gặp
- Hardcode API key rồi commit lên git — rò rỉ, tốn tiền, mất an toàn.
- Chọn code khi no-code là đủ: kéo dài thời gian ra mắt vô ích.
- Không test đường ống tool trước: nhảy thẳng vào agent phức tạp rồi loay hoay không biết lỗi ở LLM hay ở tool.
- Dùng model quá mạnh/quá đắt cho task đơn giản: bắt đầu bằng model rẻ, nâng cấp khi cần.
Tổng kết
Bạn đã có môi trường, key an toàn, và một agent gọi được tool đầu tiên. Bài 4 ta biến workflow Zapier thật thành agent — bước chuyển đổi cốt lõi của khóa học.