🎯 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

LangGraph + Scrapeless: Kết Nối Các Công Cụ Web Trực Tuyến Vào Đồ Thị Đại Diện Của Bạn

Ava Wilson
Ava Wilson

Expert in Web Scraping Technologies

22-Jul-2026

Tóm tắt:

  • LangGraph tải công cụ của Máy chủ MCP không cần thu thập dữ liệu Scrapeless thông qua langchain-mcp-adapters và chuyển tất cả 21 công cụ cho một đồ thị đại lý, từ scrape_markdown đến một bộ trình duyệt đầy đủ.
  • MultiServerMCPClient.get_tools thực hiện việc bắt tay và trả về các công cụ; không cần khóa nhà cung cấp mô hình để tải chúng hoặc gọi một công cụ trực tiếp.
  • langchain-mcp-adapters trả về kết quả của mỗi công cụ dưới dạng danh sách các khối nội dung, vì vậy bạn đọc result[0]["text"] thay vì chuyển đổi danh sách thành chuỗi.
  • Đại lý tự nó được xây dựng với from langchain.agents import create_agent, thay thế hiện tại cho create_react_agent đã lỗi thời.
  • Chỉ có đồ thị create_agent và việc chạy ainvoke cần một khóa mô hình; việc tải và gọi các công cụ không cần đến điều đó.
  • Bắt đầu với gói miễn phí Scrapeless và cung cấp cho đồ thị của bạn các công cụ web thực tế.

LangGraph xây dựng một đại lý dưới dạng đồ thị: một máy trạng thái lặp lại giữa mô hình và các công cụ của nó cho đến khi nhiệm vụ hoàn thành. Thiết kế đó chỉ có ích như các công cụ trong đồ thị, và một đại lý LangGraph trống rỗng không có công cụ nào để truy cập web trực tiếp. Giao thức Ngữ cảnh Mô hình lấp đầy khoảng trống đó. Định hướng bộ điều hợp MCP của LangGraph đến một máy chủ và mọi công cụ mà nó đưa ra trở thành công cụ LangChain mà đồ thị của bạn có thể gọi.

Hướng dẫn này kết nối LangGraph với Máy chủ MCP không cần thu thập dữ liệu Scrapeless, tải 21 công cụ của nó, gọi một công cụ thực sự và cho thấy chính xác nơi mà một khóa nhà cung cấp mô hình trở nên cần thiết. Việc tải công cụ và cuộc gọi trực tiếp được xác thực với máy chủ trực tiếp; bước tạo ra được đánh dấu là điều kiện tiên quyết mà nó cần.

Tại sao chọn Scrapeless MCP

Máy chủ MCP không cần thu thập dữ liệu Scrapeless cung cấp các công cụ thu thập dữ liệu web và trình duyệt mà một đại lý có thể gọi trực tiếp, vì vậy lớp thu thập dữ liệu không phải là thứ bạn xây dựng hoặc lưu trữ. Một kết nối phục vụ 21 công cụ: scrape_markdownscrape_html cho nội dung, google_searchgoogle_trends cho dữ liệu tìm kiếm, scrape_screenshot cho việc chụp ảnh, và một bộ đầy đủ browser_* điều khiển một trình duyệt trên đám mây. LangGraph đã có một câu chuyện MCP mạnh mẽ thông qua langchain-mcp-adapters, biến những công cụ đó thành các công cụ LangChain tiêu chuẩn mà không cần mã ghép 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 đại lý có thể điều hướng một trang tương tác và đọc những gì được thể hiện, tất cả trên hạ tầng Scrapeless thay vì một nhóm trình duyệt cục bộ. Nếu bạn đang sử dụng LangChain thông thường thay vì LangGraph, bài viết LangChain + Scrapeless MCP đề cập đến cùng một máy chủ từ phía đó.

Điều kiện tiên quyết

  • Python 3.10 trở lên.
  • Một khóa API Scrapeless từ bảng điều khiển, được xuất ra dưới dạng SCRAPELESS_API_KEY.
  • Một khóa nhà cung cấp mô hình (như OPENAI_API_KEY) chỉ dành cho chạy đại lý. Việc tải và gọi các công cụ không cần đến nó.

Cài đặt

Cài đặt LangGraph, LangChain và bộ điều hợp MCP.

bash Copy
pip install langgraph langchain langchain-mcp-adapters

Đặt khóa Scrapeless của bạn trong shell. Sử dụng khóa thực tế trong thời gian chạy và giữ cho khóa tạm thời ra khỏi mã nguồn của bạn.

bash Copy
export SCRAPELESS_API_KEY="sk_your_key_here"

Tải các Công cụ

MultiServerMCPClient nhận một ánh xạ tên máy chủ đến cấu hình kết nối. Mỗi cấu hình định danh phương tiện, URL và tiêu đề; khóa Scrapeless được đặt trong tiêu đề x-api-token. get_tools thực hiện việc bắt tay và trả về các công cụ dưới dạng công cụ LangChain.

python Copy
import asyncio
import os

from langchain_mcp_adapters.client import MultiServerMCPClient

client = MultiServerMCPClient(
    {
        "scrapeless": {
            "url": "https://api.scrapeless.com/mcp",
            "transport": "streamable_http",
            "headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
        }
    }
)


async def main() -> None:
    tools = await client.get_tools()
    names = sorted(t.name for t in tools)
    print("số lượng công cụ:", len(names))
    print("công cụ:", ", ".join(names))


asyncio.run(main())

Máy chủ trực tiếp trả về 21 công cụ, chỉ với khóa Scrapeless được thiết lập.

text Copy
số lượng công cụ: 21
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

Khách hàng được gọi là MultiServerMCPClient vì nó liên kết nhiều máy chủ MCP cùng một lúc; ở đây nó giữ một máy chủ, và việc thêm một máy chủ khác là một mục khác trong ánh xạ, không phải là một thay đổi đối với tác nhân. Lớp vận chuyển và lớp tin nhắn theo đặc tả của Giao thức Ngữ cảnh Mô hình, dựa trên đặc tả JSON-RPC 2.0.

Gọi một Công cụ

Gọi một công cụ bằng tay trước khi kết nối nó vào một đồ thị. Mỗi công cụ đã tải là một công cụ LangChain với phương thức ainvoke, vì vậy bạn truyền các tham số và đọc kết quả. Một chi tiết quan trọng: bộ chuyển đổi trả về một danh sách các khối nội dung, không phải một chuỗi đơn giản, vì vậy hãy lấy văn bản từ khối đầu tiên.

python Copy
import asyncio
import os

from langchain_mcp_adapters.client import MultiServerMCPClient

client = MultiServerMCPClient(
    {
        "scrapeless": {
            "url": "https://api.scrapeless.com/mcp",
            "transport": "streamable_http",
            "headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
        }
    }
)


async def main() -> None:
    tools = await client.get_tools()
    scrape_markdown = next(t for t in tools if t.name == "scrape_markdown")
    result = await scrape_markdown.ainvoke({"url": "https://quotes.toscrape.com/"})
    # langchain-mcp-adapters trả về một danh sách các khối nội dung; lấy khối văn bản
    text = result[0]["text"] if isinstance(result, list) and result else str(result)
    print("ký tự markdown:", len(text))
    print("chứa một câu trích dẫn:", "Thế giới mà 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 rằng một câu trích dẫn thực sự có mặt.

text Copy
ký tự markdown: 4308
chứa một câu trích dẫn: True

Đọc result[0]["text"] là phần mà mã ngây thơ sai: chuyển đổi toàn bộ danh sách thành chuỗi cung cấp cho bạn một repr Python với các chuỗi thoát, không phải Markdown sạch. Hướng dẫn hướng dẫn bộ chuyển đổi LangChain MCP tài liệu cho khách hàng và hình dạng của kết quả một cách đầy đủ.

Xây dựng Đồ thị Tác nhân

Với các công cụ đã tải, tác nhân chỉ là một lời gọi. create_agent xây dựng một đồ thị kiểu ReAct mà quay giữa mô hình và các công cụ, và đây là sự thay thế hiện tại cho create_react_agent đã bị ngừng sử dụng. Đây là bước cần một khóa nhà cung cấp mô hình: đồ thị chạy mô hình, và mô hình quyết định khi nào gọi scrape_markdown hoặc bất kỳ công cụ nào khác.

Chú ý: việc xây dựng và chạy đồ thị cần một khóa nhà cung cấp mô hình như OPENAI_API_KEY, mà không được thiết lập ở đây. Việc tải 21 công cụ và lời gọi trực tiếp scrape_markdown ở trên chạy 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ỉ cần vòng tròn mô hình là một khoảng cách yêu cầu.

python Copy
from langchain.agents import create_agent


async def run_graph(tools) -> None:
    agent = create_agent("openai:gpt-4o", tools)
    result = await agent.ainvoke(
        {"messages": [{"role": "user", "content": "Lấy https://quotes.toscrape.com/ với scrape_markdown và liệt kê ba câu trích dẫn đầu tiên với tác giả."}]}
    )
    print(result["messages"][-1].content)

Tại thời gian chạy, đồ thị chuyển tiếp lời nhắc đến mô hình, mô hình gọi scrape_markdown với URL, công cụ trở về Markdown mà lời gọi trực tiếp đã chứng minh, và mô hình viết đáp án. Các công cụ là những đối tượng giống nhau dù mô hình gọi chúng hay bạn thực hiện.

Kết luận

LangGraph cộng với Máy chủ Scrapeless MCP là con đường ngắn từ một đồ thị trống đến một đồ thị có thể đọc web trực tiếp. MultiServerMCPClient tải 21 công cụ, ainvoke chứng minh một cái hoạt động và cho thấy cách đọc các khối nội dung của nó, và create_agent biến các công cụ thành một đồ thị đang chạy. Chỉ bước cuối cùng 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 kịch bản ở trên, giới hạn các công cụ theo những gì đồ thị cần, và để mô hình dẫn dắt.

Tạo một tài khoản Scrapeless miễn phí để nhận khóa API, và kiểm tra giá 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: LangGraph có cần một khóa mô hình để tải các công cụ MCP không?

Không. MultiServerMCPClient.get_tools thực hiện bắt tay và trả về các công cụ với chỉ khóa API Scrapeless được thiết lập, và mỗi công cụ có thể được gọi trực tiếp bằng ainvoke. Một khóa nhà cung cấp mô hình chỉ cần khi bạn xây dựng và chạy đồ thị tác nhân với create_agent, vì đó là khi mô hình tự quyết định công cụ nào nên gọi.

H: Tại sao kết quả công cụ lại trả về dưới dạng danh sách thay vì một chuỗi?
langchain-mcp-adapters trả về mỗi kết quả công cụ MCP dưới dạng một danh sách các khối nội dung, đây là cách mà MCP biểu diễn đầu ra của công cụ. Đọc văn bản từ khối đầu tiên với result[0]["text"]; việc chuyển đổi toàn bộ danh sách thành chuỗi sẽ cho bạn một repr với các ký tự thoát thay vì nội dung sạch.

Hỏi: Tôi nên sử dụng create_react_agent hay create_agent?

Sử dụng create_agent từ langchain.agents. create_react_agent đã được chuyển ra khỏi langgraph.prebuilt trong LangGraph 1.0 và hiện tại xuất ra một cảnh báo về sự ngừng sử dụng, vì vậy cách hiện tại, không có cảnh báo là from langchain.agents import create_agent với các đối số mô hình và công cụ giống nhau.

Hỏi: MultiServerMCPClient là gì nếu tôi chỉ có một máy chủ?

Khách hàng được thiết kế để liên kết nhiều máy chủ MCP cùng một lúc, nhưng nó vẫn hoạt động với một máy chủ như là một ánh xạ của một mục. Việc sử dụng nó bây giờ có nghĩa là thêm một máy chủ thứ hai sau này chỉ là một mục khác trong cấu hình, mà không thay đổi cách mà tác nhân tiêu thụ các công cụ.

Hỏi: Làm thế nào để tôi chỉ cung cấp một số công cụ cho đồ thị?

get_tools trả về một danh sách, vì vậy hãy lọc nó trước khi chuyển cho create_agent. Cung cấp cho đồ thị chỉ scrape_markdowngoogle_search là an toàn hơn so với tập hợp 21 công cụ đầy đủ khi nhiệm vụ chỉ cần nội dung và tìm kiếm.

Hỏi: Việc thu thập thông tin qua các công cụ có bị ràng buộc bởi quy tắc của mục tiêu không?

Có. Các công cụ truy cập các trang công khai, và bạn vẫn chịu trách nhiệm cho việc tôn trọng các điều khoản của mỗi mục tiêu và các chỉ thị trong Giao thức loại trừ Robots. Giữ cho khối lượng có giới hạn và dữ liệu công khai, và xác định phạm vi đồ thị theo các 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.

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

Danh mục