Bài 2 — Thiết lập môi trường & chọn công cụ
Trước khi viết logic agent, bạn cần 3 mảnh ghép: một LLM để suy luận, một search API để lấy kết quả web, và một cách fetch nội dung trang. Bài này giúp bạn chọn đúng và cấu hình xong trong 30 phút.
1. Chọn LLM
Tiêu chí thực dụng, không sính model:
- Chất lượng tổng hợp — model có theo được nhiều đoạn context dài không.
- Chi phí/1M token — research agent đọc rất nhiều, token chồng nhanh.
- Hỗ trợ tool calling / structured output — bắt buộc để agent gọi công cụ.
2. Chọn search API
Đừng scrape Google trực tiếp (dễ bị chặn, vi phạm ToS). Dùng search API dành cho developer:
- Tavily / Brave Search API / SerpAPI / Bing API — trả về JSON gồm title, url, snippet.
- Nhiều API có sẵn tham số
include_domains,time_rangerất hợp cho CI.
3. Chọn cách fetch nội dung
Snippet từ search thường không đủ. Bạn cần đọc cả trang:
- HTML tĩnh: thư viện HTTP + trình bóc tách (readability) để lấy phần text chính.
- Trang render bằng JS: cần headless browser (Playwright).
Các bước thiết lập
- Tạo môi trường cô lập.
python -m venv .venv && source .venv/bin/activate
pip install openai tavily-python httpx trafilatura pydantic python-dotenv
- Lưu API key vào
.env, KHÔNG hardcode.
LLM_API_KEY=sk-...
TAVILY_API_KEY=tvly-...
- Viết một client cấu hình gọn.
import os
from dotenv import load_dotenv
load_dotenv()
LLM_KEY = os.environ["LLM_API_KEY"]
SEARCH_KEY = os.environ["TAVILY_API_KEY"]
MODEL_FAST = "gpt-4o-mini" # đọc/lọc nhiều
MODEL_SMART = "gpt-4o" # tổng hợp cuối
MAX_COST_USD = 0.50 # ngân sách 1 lần chạy
- Test khói (smoke test) từng công cụ riêng lẻ trước khi ghép:
from tavily import TavilyClient
tv = TavilyClient(SEARCH_KEY)
print(tv.search("vi dien tu Momo phi rut tien", max_results=3))
Nếu bước này chạy, bạn đã có "đôi mắt" của agent.
- Chọn framework điều phối (orchestration). Bạn có 2 hướng:
Khung quyết định: Build vs Framework
| Yếu tố | Tự viết loop | Framework |
|---|---|---|
| Học hiểu cơ chế | Cao | Thấp |
| Tốc độ ra prototype | Chậm hơn | Nhanh |
| Kiểm soát chi phí | Dễ | Khó nhìn |
| Debug khi lỗi | Dễ | Khó |
Sai lầm thường gặp
- Hardcode API key vào code rồi push lên Git công khai — lộ key, bị bill oan.
- Dùng một model đắt cho mọi bước — đốt tiền vô ích.
- Không đặt ngân sách chi phí ngay từ đầu — agent lặp vô hạn.
- Bỏ qua smoke test — ghép hết rồi mới phát hiện search API trả lỗi 401.
- Scrape thẳng công cụ tìm kiếm — bị chặn IP và vi phạm điều khoản.
Checklist hoàn thành môi trường
- [ ] venv tạo xong, thư viện cài đủ
- [ ] API key nằm trong
.env,.envđã vào.gitignore - [ ] Smoke test search chạy ra kết quả
- [ ] Đã chọn MODEL_FAST và MODEL_SMART
- [ ] Đã đặt MAX_COST_USD
Ví dụ: cấu trúc thư mục dự án gợi ý
ci-agent/
.env # key, không commit
config.py # model, ngân sách
tools/
search.py # gọi search API
fetch.py # tải + làm sạch trang
extract.py # trích xuất có schema
synth.py # tổng hợp báo cáo
run_ci.py # điểm vào, ghép loop
Tách công cụ (search, fetch) khỏi logic (extract, synth) giúp bạn test từng phần độc lập và thay thế nhà cung cấp (đổi từ Tavily sang Brave) mà không đụng phần còn lại. Đây là thói quen kỹ thuật giúp agent dễ bảo trì khi quy mô lớn dần.
Bài 3 ta xây khâu đầu tiên của loop: search và chọn nguồn tốt.