🎯 Trình duyệt đám mây tùy chỉnh, chống phát hiện được hỗ trợ bởi Chromium tự phát triển, thiết kế dành cho trình thu thập dữ liệu webtác nhân AI. 👉Dùng thử ngay
Quay lại blog

Cách Xây Dựng Một Tác Nhân AI Trong Python

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

29-Jun-2026

Tóm tắt ngắn:

  • Một đại lý AI là một vòng lặp: mô hình chọn một công cụ, mã của bạn chạy nó, kết quả quay lại mô hình. Trí thông minh là mô hình ngôn ngữ; khả năng tiếp cận đến từ các công cụ bạn cung cấp. Đối với nghiên cứu và giám sát, hai công cụ quan trọng là tìm kiếm trên web và lấy trang.
  • Cung cấp cho đại lý những công cụ web thực, không phải một bộ dữ liệu huấn luyện bị đóng băng. Một công cụ web_search được hỗ trợ bởi Deep SerpApi trả về kết quả Google trực tiếp, và một công cụ fetch_page được hỗ trợ bởi Universal Scraping API trả về HTML đã được kết xuất — vì vậy đại lý suy luận dựa trên dữ liệu hiện tại, không phải dữ liệu của năm ngoái.
  • Cả hai công cụ chỉ là một POST HTTP mỗi công cụ. Tìm kiếm thực hiện POST /api/v1/scraper/request với diễn viên scraper.google.search; lấy trang thực hiện POST /api/v1/unlocker/request với js_render được bật. Không cần quản lý trình duyệt, không cần xoay vòng proxy.
  • Mô hình kiểm soát luồng. Bạn tiết lộ các chữ ký công cụ, mô hình quyết định điều gì để gọi và khi nào, và bạn thực hiện và cung cấp kết quả cho đến khi nó trả lời — vòng lặp đó là toàn bộ đại lý.
  • Giữ lớp công cụ xác định và được xác thực. Các cuộc gọi tìm kiếm và lấy trang trả về dữ liệu có cấu trúc mà bạn có thể kiểm tra độc lập với mô hình, điều này tạo ra độ tin cậy.
  • Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm thời gian chạy miễn phí của Deep SerpApi — đăng ký tại app.scrapeless.com.

Giới thiệu: một đại lý chỉ tốt như các công cụ của nó

Một mô hình ngôn ngữ tự nó có thể suy luận, nhưng nó không thể nhìn thấy web ngày nay — nó trả lời từ dữ liệu huấn luyện với một thời điểm cắt bỏ. Một đại lý AI đóng khoảng cách đó bằng cách bao bọc mô hình trong một vòng lặp: mô hình yêu cầu chạy một công cụ, mã của bạn chạy nó trên dữ liệu trực tiếp, và kết quả quay lại trong cuộc hội thoại. Lặp lại cho đến khi mô hình có những gì nó cần để trả lời.

Phần khó khăn thường không phải là vòng lặp — mà là các công cụ. Một đại lý nghiên cứu cần tìm kiếm web mở và đọc các trang mà nó tìm thấy, và cả hai đều gặp khó khăn trên các trang thực: các công cụ tìm kiếm giới hạn tần suất, và các trang mục tiêu được kết xuất với JavaScript hoặc nằm sau bảo vệ bot. Việc tự tay làm điều đó là hầu hết công việc.

Hướng dẫn này xây dựng một đại lý nghiên cứu trong Python, nơi cả hai công cụ đều là các cuộc gọi HTTP được quản lý: web_search chạy trên Scrapeless Deep SerpApi và fetch_page chạy trên Universal Scraping API. Lớp công cụ bên dưới được xác thực với API trực tiếp; vòng lặp suy luận mô hình được thể hiện với mẫu gọi công cụ tiêu chuẩn. Chỉ dữ liệu công khai.


Quy trình tổng quan

Đại lý có bốn phần, và chỉ hai phần ở giữa chạm vào web:

  1. Mục tiêu vào — một câu hỏi hoặc nhiệm vụ nghiên cứu từ người dùng.
  2. web_search(query) — kết quả Google trực tiếp qua Deep SerpApi (tiêu đề, liên kết, đoạn trích).
  3. fetch_page(url) — HTML đã được kết xuất cho bất kỳ kết quả nào mà mô hình muốn đọc, qua Universal Scraping API.
  4. Vòng lặp mô hình — mô hình ngôn ngữ quyết định công cụ nào để gọi, đọc kết quả, và gọi một công cụ khác hoặc viết câu trả lời cuối cùng.

Các bước 2 và 3 là các cuộc gọi HTTP xác định mà bạn có thể xác minh độc lập. Bước 4 là mô hình; các bước 1–3 là những gì làm cho câu trả lời của nó hiện tại.


Yêu cầu

  • Python 3.10 hoặc mới hơn
  • pip install requests (cộng thêm SDK của nhà cung cấp mô hình của bạn)
  • Tài khoản Scrapeless và khóa API — đăng ký tại app.scrapeless.com
  • Khóa API của nhà cung cấp mô hình cho vòng lặp suy luận (Bước 3)
bash Copy
export SCRAPELESS_API_KEY="your_api_token_here"

Bước 1 — Công cụ tìm kiếm web

Công cụ tìm kiếm sẽ gửi một truy vấn đến diễn viên Tìm kiếm Google của Deep SerpApi và trả về danh sách kết quả hữu cơ gọn gàng — tiêu đề, liên kết và đoạn trích — đó chính là những gì mà một mô hình cần để quyết định đọc gì tiếp theo:

python Copy
import os
import requests

API = "https://api.scrapeless.com"
HEADERS = {
    "Content-Type": "application/json",
    "x-api-token": os.environ["SCRAPELESS_API_KEY"],
}

def web_search(query: str, count: int = 5):
    r = requests.post(
        f"{API}/api/v1/scraper/request",
        headers=HEADERS,
        json={
            "actor": "scraper.google.search",
            "input": {"q": query, "hl": "en", "gl": "us"},
        },
        timeout=90,
    )
    r.raise_for_status()
    results = r.json().get("organic_results", [])[:count]
    return [
        {"title": x.get("title"), "link": x.get("link"), "snippet": x.get("snippet")}
        for x in results
    ]


# Chạy nó độc lập để xác nhận hình dạng:
hits = web_search("công cụ lấy dữ liệu web tốt nhất 2026", 3)
print(len(hits), "kết quả")
for h in hits:
    print("-", h["title"], "|", h["link"])

Diễn viên trả về organic_results với các trường tìm kiếm tiêu chuẩn; hàm này cắt nó xuống top count để bạn không làm ngập bối cảnh của mô hình với toàn bộ SERP.

Nhận khóa API của bạn trên gói miễn phí: app.scrapeless.com


Bước 2 — Công cụ lấy trang

Khi mô hình chọn một kết quả để đọc, nó cần nội dung trang. Công cụ lấy dữ liệu gửi URL đến API Scraping Toàn cầu với tính năng js_render được bật, vì vậy các trang được render bởi client quay trở lại dưới dạng HTML hoàn chỉnh thay vì một shell trống:

python Copy
import os
import requests

API = "https://api.scrapeless.com"
HEADERS = {
    "Content-Type": "application/json",
    "x-api-token": os.environ["SCRAPELESS_API_KEY"],
}

def fetch_page(url: str):
    r = requests.post(
        f"{API}/api/v1/unlocker/request",
        headers=HEADERS,
        json={
            "actor": "unlocker.webunlocker",
            "input": {"url": url, "method": "GET", "js_render": True},
        },
        timeout=120,
    )
    r.raise_for_status()
    return r.json().get("data", "")


# Lấy một trang đã được render và xác nhận chúng ta nhận được HTML trở lại:
html = fetch_page("https://www.scrapeless.com/en")
print("đã lấy", len(html), "bytes")

Trước khi đưa HTML cho mô hình, hãy chuyển nó thành văn bản (bằng selectolax hoặc BeautifulSoup) để bạn có thể sử dụng bối cảnh cho nội dung chứ không phải markup. Giữ cho công cụ tự nó trả về HTML thô — hãy để tác nhân quyết định bao nhiêu phần cần đọc.


Bước 3 — Vòng lặp mô hình

Với cả hai công cụ đã được xác minh, tác nhân là vòng lặp cho phép mô hình gọi chúng. Tiết lộ hai chữ ký công cụ cho API gọi công cụ của nhà cung cấp mô hình của bạn, sau đó chạy chu trình tiêu chuẩn: gửi cuộc trò chuyện, và trong khi mô hình trả về một cuộc gọi công cụ, thực thi nó và thêm kết quả vào; khi nó trả lại văn bản, đó là câu trả lời.

Lưu ý: bước này gọi đến nhà cung cấp mô hình của bạn và yêu cầu khóa API của nhà cung cấp đó. Các chức năng công cụ ở trên hoàn toàn có thể chạy độc lập; vòng lặp dưới đây là mẫu gọi công cụ tiêu chuẩn được kết nối với chúng.

python Copy
TOOLS = [
    {
        "name": "web_search",
        "description": "Tìm kiếm Google cho một truy vấn; trả về tiêu đề, liên kết, trích dẫn.",
        "input_schema": {
            "type": "object",
            "properties": {"query": {"type": "string"}},
            "required": ["query"],
        },
    },
    {
        "name": "fetch_page",
        "description": "Lấy HTML đã được render của một URL.",
        "input_schema": {
            "type": "object",
            "properties": {"url": {"type": "string"}},
            "required": ["url"],
        },
    },
]

DISPATCH = {"web_search": web_search, "fetch_page": fetch_page}

def run_agent(client, goal: str):
    messages = [{"role": "user", "content": goal}]
    while True:
        reply = client.run(messages=messages, tools=TOOLS)  # cuộc gọi công cụ của nhà cung cấp
        if reply.tool_call:
            name, args = reply.tool_call.name, reply.tool_call.args
            result = DISPATCH[name](**args)
            messages.append({"role": "tool", "name": name, "content": result})
            continue
        return reply.text

Hình dạng này là không phụ thuộc vào nhà cung cấp: mọi API gọi công cụ chính đều cung cấp cho bạn "mô hình muốn gọi công cụ X với các tham số Y", bạn chạy DISPATCH[X](**Y), thêm kết quả vào và lặp lại. Khả năng của tác nhân đến từ hai công cụ trả về dữ liệu thực, hiện tại — đó là phần mà hướng dẫn này đã xác minh.


Những gì bạn nhận lại

Mỗi kết quả web_search là một bản ghi phẳng mà mô hình có thể lý luận trực tiếp:

json Copy
[
  {
    "title": "Các Công Cụ Web Scraping Tốt Nhất Năm 2026",
    "link": "https://dev.to/nitinfab/best-web-scraping-tools-in-2026-i-tested-30-tools-and-these-are-the-only-ones-worth-using-11l3",
    "snippet": "Một so sánh thực tế giữa các công cụ scraping về render, proxy và giá cả ..."
  }
]
// Sơ đồ phản ánh chính xác những gì web_search trả về. Giá trị trường là mẫu minh họa.

Một vài quan sát chân thực:

  • Cắt ngắn kết quả tìm kiếm trước khi chúng đến mô hình. Ba đến năm kết quả hàng đầu thường là đủ; toàn bộ SERP lãng phí bối cảnh và tiền bạc.
  • Chuyển đổi HTML thành văn bản trong tác nhân, không phải trong công cụ. Giữ cho fetch_page trả về HTML thô để nó vẫn có thể dự đoán; thực hiện việc dọn dẹp ở nơi bạn kiểm soát ngân sách token.
  • Giới hạn vòng lặp. Đưa ra cho tác nhân một số lần gọi công cụ tối đa để một lần chạy nhầm không thể quay vòng — một giới hạn cứng, không phải chạy lại.
  • Các công cụ có thể được kiểm tra độc lập. Bởi vì tìm kiếm và lấy dữ liệu là HTTP đơn giản, bạn có thể kiểm tra đơn vị chúng mà không cần mô hình trong vòng lặp, đó là nơi độ tin cậy sống.

Kết luận: các công cụ tạo nên tác nhân

Một đại lý nghiên cứu là một vòng lặp nhỏ quanh một mô hình có khả năng — sức mạnh nằm ở các công cụ. Hỗ trợ web_search bằng Deep SerpApi và fetch_page bằng Universal Scraping API, và đại lý này lý luận trên các kết quả Google trực tiếp và các trang đã được render thay vì dữ liệu huấn luyện cũ kỹ, mà không cần duy trì đội duyệt web hay xoay vòng proxy. Xây dựng các công cụ trước, xác minh chúng một cách độc lập, sau đó bọc vòng lặp mô hình quanh chúng. Đối với một đại lý điều khiển một trình duyệt đầy đủ thay vì các cuộc gọi HTTP, xem xây dựng một đại lý tìm kiếm trên Scraping Browser; trang sản phẩm Deep SerpApitài liệu bao quát mọi yếu tố. Xác minh các công cụ, để mô hình điều khiển, và giới hạn vòng lặp.


Sẵn Sàng Xây Dựng Quy Trình Dữ Liệu Được Tăng Cường Bằng AI?

Tham gia cộng đồng của chúng tôi để nhận một gói miễn phí và kết nối với các nhà phát triển xây dựng các đại lý và quy trình nghiên cứu: Discord · Telegram.

Đăng ký tại app.scrapeless.com để có thời gian chạy Deep SerpApi miễn phí và kết nối các công cụ tìm kiếm và lấy dữ liệu vào cấu trúc đại lý mà bạn đã sử dụng. Xem giá cả để mở rộng.


Câu Hỏi Thường Gặp

Q: Tôi có cần một nhà cung cấp mô hình cụ thể để xây dựng cái này không?
Không. Vòng lặp là độc lập với nhà cung cấp — bất kỳ API gọi công cụ nào cũng hoạt động. Thay client.run(...) bằng của nhà cung cấp của bạn; các công cụ web_searchfetch_page vẫn giữ nguyên.

Q: Tại sao lại sử dụng các API được quản lý cho các công cụ thay vì requests và một trình duyệt đầu không có giao diện?
Bởi vì web mở chiến đấu với các trình cạo dữ liệu thô: các công cụ tìm kiếm giới hạn tốc độ và các trang render phía client hoặc đặt ra thách thức. Deep SerpApi và Universal Scraping API xử lý việc render và truy cập, vì vậy các công cụ trả về dữ liệu sạch thay vì các khối.

Q: Liệu quyền truy cập web của đại lý có hợp pháp không?
Đại lý thu thập dữ liệu công khai. Cách bạn lưu trữ và sử dụng chúng bị chi phối bởi Điều Khoản Dịch Vụ của từng trang và luật địa phương — chỉ truy cập dữ liệu công khai, tôn trọng Điều Khoản Dịch Vụ, và tham khảo ý kiến luật sư cho trường hợp sử dụng của bạn.

Q: Làm thế nào để ngăn đại lý lặp lại mãi mãi?
Giới hạn số lần gọi công cụ mỗi lần chạy và dừng khi đạt giới hạn. Đó là một giới hạn cứng về luồng điều khiển, không phải là xử lý lỗi.

Q: Các trang lấy được có thể lớn bao nhiêu?
Rất lớn — một trang nội dung đơn lẻ có thể trả về hàng trăm kilobyte HTML. Chuyển đổi sang văn bản và cắt ngắn trước khi truyền cho mô hình để bạn kiểm soát ngân sách ngữ cảnh.

Q: Đại lý có thể sử dụng nhiều hơn hai công cụ không?
Có. Thêm bất kỳ công cụ nào trả về dữ liệu có cấu trúc — một yếu tố Google Maps, một tìm kiếm tin tức, một truy vấn cơ sở dữ liệu — vào danh sách TOOLS và bản đồ DISPATCH, và mô hình có thể gọi nó theo cùng một cách.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục