# 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.

Nguồn: https://camnangai.com/ung-dung-ai/lap-trinh-vien/tu-xay-dung-coding-agent  
Xuất bản: 2026-08-07

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](https://github.com/tuanhadev/camnangai-public-sources/tree/main/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ụ](https://camnangai.com/articles/tu-xay-dung-coding-agent/01-infographic-vn.webp)

## 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](https://camnangai.com/articles/tu-xay-dung-coding-agent/02-vn.webp)

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.

_Phần còn lại của bài viết dành cho thành viên. Đọc toàn bộ tại https://camnangai.com/ung-dung-ai/lap-trinh-vien/tu-xay-dung-coding-agent_
