AutoGen + Scrapeless: Cung cấp công cụ web trực tiếp cho nhân viên của bạn qua MCP
Lead Scraping Automation Engineer
Tóm tắt:
- AutoGen tải công cụ của Máy chủ MCP Scrapeless với
mcp_server_toolsvà chuyển toàn bộ 21 công cụ cho một tác nhân, từscrape_markdownđến bộ trình duyệt đầy đủ. - Kết nối là một đối tượng,
StreamableHttpServerParams, mang theo điểm kết nối và tiêu đềx-api-token; không cần khách hàng mô hình để tải hoặc gọi các công cụ. - Mỗi công cụ đến dưới dạng
StreamableHttpMcpToolAdapter, vì vậy bạn có thể gọi trực tiếp một công cụ vớirun_json({...}, CancellationToken())trước khi kết nối nó với một tác nhân. - Chỉ
AssistantAgent.runcần một khóa nhà cung cấp mô hình; việc tải các công cụ và gọiscrape_markdownthì không cần. - Một lần gọi
scrape_markdowntrả về trang mục tiêu dưới dạng Markdown, sẵn sàng cho tác nhân suy luận. - Bắt đầu với gói miễn phí Scrapeless và cung cấp cho các tác nhân AutoGen của bạn các công cụ web thực sự.
AutoGen là khung ứng dụng đa tác nhân của Microsoft, và các tác nhân của nó chỉ có khả năng như các công cụ mà chúng nắm giữ. Ngay khi đem ra sử dụng, không một trong số những công cụ đó có khả năng truy cập web trực tiếp. Giao thức Ngữ cảnh Mô hình (Model Context Protocol) thu hẹp khoảng cách đó: chỉ cần hướng AutoGen đến một máy chủ MCP và mọi công cụ mà nó cung cấp trở thành công cụ AutoGen mà tác nhân của bạn có thể gọi, với cùng một giao diện như bất kỳ công cụ chức năng nào.
Hướng dẫn này kết nối AutoGen với Máy chủ MCP Scrapeless, tải 21 công cụ của nó, gọi một công cụ thực sự và gắn bộ công cụ vào một AssistantAgent — tất cả đều được xác minh với máy chủ trực tiếp. Bước duy nhất cần một khóa nhà cung cấp mô hình là cuộc gọi tạo tác nhân của tác nhân, và bài viết này rõ ràng về nơi mà dòng đó nằm.
Tại sao chọn Scrapeless MCP
Máy chủ MCP Scrapeless cung cấp các công cụ thu thập dữ liệu web và trình duyệt mà tác nhân có thể gọi trực tiếp, vì vậy bạn không cần xây dựng hoặc lưu trữ lớp thu thập dữ liệu cho riêng mình. Một kết nối phục vụ 21 công cụ: scrape_markdown và scrape_html cho nội dung, google_search và google_trends cho dữ liệu tìm kiếm, scrape_screenshot cho ảnh chụp và một bộ đầy đủ browser_* điều khiển một trình duyệt đám mây. AutoGen biến mỗi công cụ trong số đó thành một công cụ bản địa thông qua mcp_server_tools, mà không cần viết mã bộ chuyển đổi.
Các công cụ browser_* điều khiển trình duyệt đám mây Scrapeless, vì vậy một tác nhân có thể điều hướng một trang tương tác và đọc những gì được hiển thị, tất cả trên cơ sở hạ tầng Scrapeless. Đối với cùng một máy chủ được kết nối với một khung khác, bài viết LangChain + Scrapeless MCP đề cập đến phần LangChain.
Điều kiện tiên quyết
- Python 3.10 hoặc mới hơn.
- Một khóa API Scrapeless từ bảng điều khiển, được xuất dưới dạng
SCRAPELESS_API_KEY. - Một khóa nhà cung cấp mô hình (chẳng hạn như
OPENAI_API_KEY) chỉ cho cuộc gọi tác nhân. Việc tải và gọi các công cụ không cần một khóa.
Cài đặt
Cài đặt AutoGen với gói MCP bổ sung và gói tác nhân.
bash
pip install "autogen-ext[mcp]" autogen-agentchat
Đặt khóa Scrapeless của bạn trong shell. Sử dụng khóa thực tại thời gian chạy và giữ chỗ này ra khỏi mã nguồn của bạn.
bash
export SCRAPELESS_API_KEY="sk_your_key_here"
Tải Công Cụ
StreamableHttpServerParams tên điểm kết nối và mang theo khóa API trong tiêu đề x-api-token. mcp_server_tools thực hiện quá trình chào hỏi và trả về các công cụ của máy chủ dưới dạng công cụ AutoGen.
python
import asyncio
import os
from autogen_ext.tools.mcp import StreamableHttpServerParams, mcp_server_tools
async def main() -> None:
params = StreamableHttpServerParams(
url="https://api.scrapeless.com/mcp",
headers={"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
)
tools = await mcp_server_tools(params)
names = sorted(tool.name for tool in tools)
print("số lượng công cụ:", len(names))
print("các công cụ:", ", ".join(names))
asyncio.run(main())
Máy chủ trực tiếp trả về 21 công cụ, được tải chỉ với khóa Scrapeless đã được thiết lập.
text
số lượng công cụ: 21
các công cụ: browser_click, browser_close, browser_create, browser_get_html, browser_get_text, browser_go_back, browser_go_forward, browser_goto, browser_press_key, browser_screenshot, browser_scroll, browser_scroll_to, browser_snapshot, browser_type, browser_wait, browser_wait_for, google_search, google_trends, scrape_html, scrape_markdown, scrape_screenshot
Lớp vận chuyển và thông điệp tuân theo đặc tả Giao thức Ngữ cảnh Mô hình, dựa trên đặc tả JSON-RPC 2.0. Đối với máy chủ cục bộ, AutoGen cũng cung cấp StdioServerParams; máy chủ Scrapeless là một điểm kết nối HTTP được lưu trữ, vì vậy hướng dẫn này sử dụng các tham số HTTP có thể truyền.
Gọi Một Công Cụ
Mỗi công cụ đã tải là một StreamableHttpMcpToolAdapter, và bạn có thể gọi một công cụ trực tiếp trước khi giao cho tác nhân. run_json nhận các tham số và một token hủy bỏ và trả về kết quả của công cụ.
python
import asyncio
import os
from autogen_core import CancellationToken
from autogen_ext.tools.mcp import StreamableHttpServerParams, mcp_server_tools
async def main() -> None:
params = StreamableHttpServerParams(
url="https://api.scrapeless.com/mcp",
headers={"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
)
tools = await mcp_server_tools(params)
scrape_markdown = next(tool for tool in tools if tool.name == "scrape_markdown")
result = await scrape_markdown.run_json({"url": "https://quotes.toscrape.com/"}, CancellationToken())
text = result if isinstance(result, str) else str(result)
print("ký tự markdown:", len(text))
print("chứa một câu trích dẫn:", "Thế giới như chúng ta đã tạo ra" in text)
asyncio.run(main())
Lời gọi trả về trang dưới dạng Markdown và kiểm tra nội dung xác nhận có một câu trích dẫn thực sự.
text
ký tự markdown: 4424
chứa một câu trích dẫn: True
Đây là hình thức mà tác nhân nhận lại: nội dung trang mà nó có thể lý luận. Tài liệu tài liệu tham khảo công cụ AutoGen MCP mô tả đầy đủ các tham số và bộ điều hợp.
Gắn các Công cụ vào một Tác nhân
Chuyển các công cụ đến một AssistantAgent bên cạnh một khách hàng mô hình, và tác nhân gọi chúng khi nhiệm vụ cần. Đây là bước cần một khóa nhà cung cấp mô hình.
Lưu ý:
AssistantAgent.runcần một khóa nhà cung cấp mô hình nhưOPENAI_API_KEY, khóa này không được thiết lập ở đây. Tải 21 công cụ và lời gọi trực tiếpscrape_markdownở trên hoạt động mà không cần nó. Khối này được hiển thị với hình dạng chính xác của nó; chỉ bước vòng qua mô hình là một thiếu sót tiên quyết.
python
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient
async def run_agent(tools) -> None:
model_client = OpenAIChatCompletionClient(model="gpt-4o")
agent = AssistantAgent("web_agent", model_client=model_client, tools=tools)
result = await agent.run(
task="Sử dụng scrape_markdown để lấy https://quotes.toscrape.com/ và liệt kê ba câu trích dẫn đầu tiên cùng với tác giả."
)
print(result.messages[-1].content)
Tại thời điểm thực thi, mô hình đọc nhiệm vụ, gọi scrape_markdown với URL, nhận Markdown mà lời gọi trực tiếp đã trình bày, và viết câu trả lời. Các công cụ là cùng một đối tượng dù mô hình gọi chúng hay bạn làm.
Kết luận
AutoGen cộng với Scrapeless MCP Server là con đường ngắn từ một tác nhân trống rỗng đến một tác nhân có thể đọc web sống. mcp_server_tools tải 21 công cụ, run_json chứng minh một công cụ hoạt động, và một tham số tools trên AssistantAgent gắn tất cả vào nhau. Chỉ bước sinh của tác nhân cần một khóa mô hình, vì vậy bạn có thể tải và kiểm tra toàn bộ bề mặt công cụ trước. Bắt đầu từ các đoạn mã ở trên, giới hạn các công cụ theo những gì tác nhân cần, và để mô hình điều khiển.
Tạo một tài khoản miễn phí trên Scrapeless để nhận một khóa API, và kiểm tra giá cả Scrapeless khi bạn lên kế hoạch cho một tác nhân định kỳ.
Câu hỏi thường gặp
H: AutoGen có cần một khách hàng mô hình để tải các công cụ MCP không?
Không. mcp_server_tools thực hiện bắt tay và trả về các công cụ chỉ với khóa API Scrapeless được thiết lập, và mỗi công cụ có thể được gọi trực tiếp với run_json. Chỉ cần một khách hàng mô hình khi bạn gắn các công cụ vào một AssistantAgent và gọi run, vì đó là khi mô hình quyết định gọi công cụ nào.
H: Làm thế nào để tôi gọi một công cụ MCP mà không cần một tác nhân?
Mỗi công cụ từ mcp_server_tools là một StreamableHttpMcpToolAdapter với phương thức run_json. Chuyển một từ điển các tham số và một CancellationToken, và nó sẽ trả về kết quả của công cụ. Đây là cách nhanh nhất để xác nhận kết nối và kiểm tra đầu ra của một công cụ trước khi kết nối vào một tác nhân.
H: Làm thế nào để tôi kết nối với một máy chủ MCP stdio thay vì HTTP?
Thay thế các tham số. Sử dụng StdioServerParams với lệnh máy chủ thay vì StreamableHttpServerParams với URL, sau đó chuyển nó đến cùng một lời gọi mcp_server_tools. Scrapeless MCP Server là một điểm cuối HTTP được lưu trữ, vì vậy hướng dẫn này sử dụng các tham số HTTP có thể phát.
H: Làm thế nào để tôi chỉ cung cấp cho một tác nhân một số công cụ?
mcp_server_tools trả về một danh sách, vì vậy hãy lọc nó trước khi chuyển cho AssistantAgent. Việc chỉ cung cấp cho một tác nhân scrape_markdown và google_search là an toàn hơn so với toàn bộ bộ 21 công cụ khi nhiệm vụ chỉ cần nội dung và tìm kiếm.
H: Các công cụ nào mà máy chủ Scrapeless cung cấp?
Hai mươi mốt: scrape_markdown, scrape_html, scrape_screenshot, google_search, google_trends, và một bộ công cụ browser_* 16 công cụ để điều hướng, nhấp chuột, gõ, cuộn và chờ trên trình duyệt đám mây. Tất cả chúng cùng nhau bao phủ việc trích xuất nội dung, tìm kiếm, và tương tác trình duyệt hoàn chỉnh.
**H: Việc thu thập dữ liệu qua các công cụ có bị ràng buộc bởi quy định của mục tiêu không?**
Có. Các công cụ thu thập các trang công khai, và bạn vẫn có trách nhiệm tôn trọng các điều khoản của từng mục tiêu và các <a href="https://datatracker.ietf.org/doc/html/rfc9309" rel="nofollow"><strong>Chỉ thị về loại trừ Robots</strong></a> trong giao thức. Hãy giữ cho khối lượng dữ liệu hạn chế và công khai, và xác định phạm vi của tác nhân phù hợp với những công cụ mà nhiệm vụ thực sự cần.
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.



