Bỏ qua điều hướng

Hướng dẫn tự xây dựng một coding agent tối giản

Hướng dẫn xây dựng coding agent bằng Python để tự động hóa lập trình qua vòng lặp ReAct. Triển khai bộ công cụ đọc, ghi, sửa và chạy shell an toàn.

Tuan Tran Van
9 phút đọc
Mục lục (9 phần)
  1. Bước 1 — Dựng vòng lặp hội thoại với model
  2. Bước 2 — Khai báo công cụ đầu tiên và bắt tín hiệu tool_use (dành cho thành viên)
  3. Bước 3 — Hoàn thiện bộ công cụ đọc, ghi và sửa file (dành cho thành viên)
  4. Bước 4 — Cho agent chạy lệnh shell kèm lớp phê duyệt (dành cho thành viên)
  5. Bước 5 — Chạy agent trên một repo thật và kiểm chứng kết quả (dành cho thành viên)
  6. Bảng tra cứu bộ công cụ tối thiểu (dành cho thành viên)
  7. Xử lý sự cố thường gặp (dành cho thành viên)
  8. Bước tiếp theo (dành cho thành viên)
  9. Tài liệu tham khảo (dành cho thành viên)

Bạn sẽ có một coding agent chạy trên terminal: nó tự đọc mã nguồn, thực thi lệnh shell, chỉnh sửa file và sửa lỗi dựa trên kết quả kiểm thử.

Agent vận hành qua một vòng lặp phản hồi liên tục, nhờ đó tự sửa lỗi mà không cần bạn can thiệp từng bước.

Điều kiện tiên quyết: Python 3.10 trở lên, SDK Anthropic (pip install anthropic) và một API key đặt trong biến môi trường ANTHROPIC_API_KEY. Toàn bộ ví dụ dưới đây dùng model Claude Sonnet 5 làm bộ suy luận chính.

Mã nguồn hoàn chỉnh của dự án mẫu trong bài có sẵn trên GitHub: camnangai-public-sources/coding-agent-demo.

Một coding agent tối giản chạy trong terminal, ghép từ ba phần: mô hình ngôn ngữ, vòng lặp và bộ công cụ

Bước 1 — Dựng vòng lặp hội thoại với model

Cài đặt thư viện: pip install anthropic. Agent cần một lớp quản lý lịch sử hội thoại để duy trì trạng thái giữa các lượt gọi model.

Vòng lặp hội thoại: lịch sử được gửi lên mô hình, mô hình trả lời, câu trả lời nối vào lịch sử rồi lặp lại

Triển khai cấu trúc cơ bản của agent:

python
import anthropic
import os
 
class Agent:
    def __init__(self):
        self.client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
        self.model = "claude-sonnet-5"
        self.history = []
 
    def run_inference(self, system_prompt, tools):
        response = self.client.messages.create(
            model=self.model,
            max_tokens=4096,
            system=system_prompt,
            tools=tools,
            messages=self.history,
            thinking={"type": "adaptive"},  # model tự quyết định mức suy luận cho từng task
        )
        return response

Kiểm chứng: Gọi run_inference với một nội dung văn bản. Terminal phải in ra phản hồi từ Claude để xác nhận kết nối SDK và API key hoạt động bình thường.

Giải thích: Agent thực chất là một vòng lặp gửi liên tục lịch sử hội thoại. Model không lưu trữ dữ liệu; toàn bộ ngữ cảnh được phía client gửi lên trong mỗi lượt tương tác để model "ghi nhớ" các bước đã thực hiện.

Chia sẻ bài viết

X / TwitterFacebookLinkedIn