Bài này bạn sẽ dựng môi trường sạch, giấu API key an toàn, và gọi thành công LLM lần đầu — nền móng cho mọi thứ về sau.
Chọn công cụ
Chúng ta dùng Python (phổ biến nhất cho agent) và một LLM có API (ví dụ OpenAI, Anthropic Claude, hoặc DeepSeek). Nguyên tắc trong khóa: code provider-agnostic — tách phần gọi LLM ra một hàm riêng để đổi nhà cung cấp dễ dàng.
Các bước thiết lập
- Tạo thư mục dự án và môi trường ảo:
mkdir my-agent && cd my-agent
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install openai python-dotenv
- Tạo file
.envđể giấu key và thêm vào.gitignorengay:
# .env
OPENAI_API_KEY=sk-xxxxxxxx
# .gitignore
.env
.venv/
__pycache__/
- Viết hàm gọi LLM đầu tiên trong
llm.py:
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def call_llm(messages, model="gpt-4o-mini", temperature=0):
resp = client.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
)
return resp.choices[0].message.content
- Test nhanh:
from llm import call_llm
out = call_llm([
{"role": "system", "content": "Bạn là trợ lý ngắn gọn."},
{"role": "user", "content": "Chào bạn, 2+2 bằng mấy?"},
])
print(out)
- Chạy
python test.py. Thấy "4" là môi trường đã thông.
Giải thích các khái niệm quan trọng
messages: danh sách hội thoại, mỗi phần tử córole(system/user/assistant) vàcontent. Đây là toàn bộ ngữ cảnh mà LLM thấy — LLM không nhớ gì ngoài những gì bạn gửi.systemprompt: đặt vai trò và luật chơi cho agent. Sau này ta nhét mô tả tool và quy tắc vào đây.temperature=0: cho output ổn định, dễ debug. Với agent, gần như luôn để 0 hoặc thấp.- Model rẻ để dev: dùng model nhỏ/rẻ khi phát triển, chỉ nâng cấp khi cần chất lượng.
Khung tư duy: tách lớp ngay từ đầu
[ Ứng dụng ] -> [ Agent loop ] -> [ call_llm() ] -> [ Nhà cung cấp LLM ]
Mỗi lớp làm một việc. Nhờ tách call_llm() riêng, đổi từ OpenAI sang provider khác chỉ sửa một file, không đụng logic agent.
Checklist trước khi qua bài sau
- [ ]
.envchứa key và đã nằm trong.gitignore. - [ ] Gọi
call_llm()trả về kết quả không lỗi. - [ ] Biết cách đổi
modelvàtemperature. - [ ] Hiểu
messageslà toàn bộ trí nhớ tạm của LLM.
Sai lầm thường gặp
- Hardcode API key trong code rồi push lên GitHub. Key bị lộ, bị lạm dụng, tốn tiền. Luôn dùng biến môi trường.
- Quên
.gitignore, khiến.envbị commit. Kiểm tra bằnggit statustrước khi commit. - Để
temperaturecao khi debug khiến kết quả nhảy loạn, khó biết lỗi do code hay do model. - Gọi thẳng SDK ở khắp nơi thay vì qua một hàm chung — về sau muốn đổi provider hay thêm retry/log sẽ phải sửa hàng chục chỗ.
- Không xử lý lỗi mạng/timeout. API có thể lỗi 429 (quá tải) hoặc timeout; hãy thêm try/except và retry ở bài sau.
Mẹo tiết kiệm chi phí ngay từ ngày đầu
Trong giai đoạn phát triển, mỗi lần chạy thử agent có thể gọi LLM nhiều lần trong một vòng lặp, nên chi phí cộng dồn nhanh hơn bạn tưởng. Ba thói quen giúp bạn tiết kiệm: (1) luôn dùng model rẻ nhất đủ dùng khi dev, chỉ nâng cấp ở bước cuối; (2) đặt max_tokens hợp lý cho output để tránh model "nói dài"; (3) in ra số token và chi phí ước tính sau mỗi lần chạy để bạn cảm nhận được "giá" của mỗi thay đổi. Thói quen quan sát chi phí từ ngày đầu sẽ giúp bạn tránh cú sốc hóa đơn khi agent chạy thật ở Bài 8.
Môi trường đã sẵn sàng. Bài 3 chúng ta thiết kế system prompt và định hình "tính cách" cùng ranh giới cho agent.