用 LangGraph 与 Bright Data 构建生产级智能 Web 爬取 Agentagents-towards-production 双路径实战指南【免费下载链接】agents-towards-productionEnd-to-end, code-first tutorials for building production-grade GenAI agents. From prototype to enterprise deployment.项目地址: https://gitcode.com/GitHub_Trending/ag/agents-towards-production本篇技术指南基于开源仓库 agents-towards-production 中的 agent-with-brightdata 教程完整讲解如何将 LangGraph 的 ReActReasoning and Acting框架与 Bright Data 的企业级爬取基础设施相结合构建能够自主搜索、抽取结构化数据、完成多步调研的智能 Web 爬取 Agent。文章覆盖两条可落地的集成路径——基于 MCP 服务器的高级版60 专业工具与基于 LangChain 原生工具的轻量版——并给出全部可运行代码、配置参数与生产化建议读者完成后可直接搭建用于数据采集、市场研究与竞品分析的生产级系统。教程概览与两条技术路径在传统爬虫方案中每接触一个新网站都需要编写、维护独立的爬取脚本成本高且脆弱。本教程要构建的是一套智能体方案Agent 能够根据用户请求自主推理爬取策略、选择合适的工具、适应不同网站结构并以结构化结果返回数据大幅降低开发维护成本。仓库的 agent-with-brightdata 目录 提供了两份可独立运行的 Jupyter Notebook分别对应两种集成深度路径Notebook核心特点适用场景MCP 集成web_scraping_agent.ipynb通过 Model Context Protocol 接入 Bright Data MCP 服务器暴露 60 专业化工具浏览器自动化、平台专属提取器等需要浏览器级交互、复杂平台数据、高级能力的生产场景LangChain 原生集成langgraph_integration.ipynb使用 Bright Data 原生 LangChain 工具BrightDataSERP代码量小、上手快以 SERP 搜索为核心、追求快速集成的场景两条路径共用同一套 LangGraph ReAct Agent 骨架区别仅在于工具接入层前者通过mcp_use将 MCP 服务器工具批量转换为 LangChain 兼容格式后者直接实例化官方 LangChain 工具类。建议初学者先从 LangChain 路径快速跑通再升级到 MCP 路径解锁全部能力。系统架构MCP 路径的整体架构如下摘自 web_scraping_agent.ipynb┌─────────────────┐ ┌──────────────────┐ ┌─────────────────────┐ │ User Query │───▶│ ReAct Agent │───▶│ Bright Data MCP │ │ │ │ (LangGraph) │ │ Server │ └─────────────────┘ │ │ │ │ │ ┌──────────────┐ │ │ ┌─────────────────┐ │ │ │ Reasoning │ │ │ │ Search Engines │ │ │ │ Engine │ │ │ │ Web Scrapers │ │ │ └──────────────┘ │ │ │ Platform APIs │ │ │ ┌──────────────┐ │ │ │ Browser Tools │ │ │ │ Tool │ │ │ └─────────────────┘ │ │ │ Selection │ │ └─────────────────────┘ │ └──────────────┘ │ └──────────────────┘LangChain 路径的架构则聚焦于 SERP 搜索闭环摘自 langgraph_integration.ipynb┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ User Query │───▶│ LangGraph │───▶│ Bright Data │ │ │ │ ReAct Agent │ │ SERP Tool │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ │ ▼ ▼ ┌─────────────┐ ┌─────────────┐ │ Google │ │ Search │ │ Gemini │ │ Results │ │ LLM │ │ (JSON) │ └─────────────┘ └─────────────┘ │ │ └────────┬─────────────────┘ ▼ ┌───────────────┐ │ Structured │ │ Response │ └───────────────┘ReAct Agent 充当智能协调者分析用户请求 → 基于推理选择工具 → 执行动作 → 依据结果迭代决策。这套设计同时保证了灵活性与可靠性可覆盖从单次搜索到多工具编排的各类爬取场景。环境准备与前置条件必备账户与密钥注册 Bright Data 账户在 Bright Data 官网注册新账户可每月获得 5,000 次免费 unlocker 请求unlocker 是用于绕过反爬机制的请求单元足以支撑开发和测试阶段的资源消耗。注册页界面如 Signup.png 所示。获取 Bright Data API Key进入账户设置页面Account Settings找到并复制 API Key该凭证用于 Agent 与 Bright Data 基础设施之间的身份认证。设置界面如 Settings.png 所示。获取 LLM API 访问权限二选一MCP 路径注册 OpenRouter 账户获取 API Key。教程使用 OpenRouter 上的 Gemini 模型google/gemini-2.5-flash-lite-preview-06-17兼顾性能与成本架构上支持任何兼容模型。LangChain 路径使用 Google AI Studio 获取 Google API Key配合langchain-google-genai直接调用 Gemini。Python 开发环境需要 Python 3.8 及以上版本并具备 pip 包管理能力。依赖安装与密钥配置MCP 路径需要安装的包来自 web_scraping_agent.ipynb 的安装单元%pip install langgraph langchain-openai mcp-use python-dotenv asyncio --quiet %load_ext autoreload %autoreload 2LangChain 路径需要安装的包来自 langgraph_integration.ipynb%pip install langchain-brightdata langchain-google-genai langgraph python-dotenv --quiet %load_ext autoreload %autoreload 2各依赖职责langgraph提供 ReAct Agent 编排框架langchain-openai/langchain-google-genai提供 LLM 客户端mcp-use提供 MCP 客户端与 LangChain 适配器langchain-brightdata提供 Bright Data 原生 LangChain 工具python-dotenv负责加载环境变量asyncio提供异步支持。密钥写入.env文件替换为真实密钥注意 MCP 路径示例中的 OpenRouter Key 仅为教程演示占位务必替换为自己申请的密钥# MCP 路径 !echo BRIGHT_DATA_API_TOKENyour-brightdata-api-key .env !echo OPENROUTER_API_KEYyour-openrouter-api-key .env # LangChain 路径 !echo BRIGHT_DATA_API_TOKENyour-brightdata-api-key .env !echo GOOGLE_API_KEYyour-google-api-key .env导入与加载环境变量import asyncio from langchain_openai import ChatOpenAI from langgraph.prebuilt import create_react_agent from mcp_use.client import MCPClient from mcp_use.adapters.langchain_adapter import LangChainAdapter from dotenv import load_dotenv import os load_dotenv() # 验证环境LangChain 路径示例 print(fBright Data API Key loaded: {Yes if os.getenv(BRIGHT_DATA_API_TOKEN) else No}) print(fGoogle API Key loaded: {Yes if os.getenv(GOOGLE_API_KEY) else No})建议在启动 Agent 前先做一次环境校验避免因密钥缺失导致运行期报错。理解 ReAct Agent 框架ReAct 框架是当前自主 Agent 设计的重要范式。与传统基于规则的系统或单纯的 chain-of-thought 不同ReAct Agent 将推理与行动统一在同一个循环中具备三个核心能力动态推理针对每个具体任务现场制定推理策略而非执行预设脚本。工具选择基于推理结果结合数据需求、目标网站特征、期望输出格式等因素从工具集中挑选最合适的工具。迭代精化可连续执行多个动作用前一步的结果指导后续决策这对需要多步流程的复杂爬取场景尤为关键。映射到 Web 爬取场景遇到电商网站Agent 会意识到需要结构化商品数据抽取分析新闻文章时则优先采用内容抽取与摘要技术。这种自适应性让开发者无需为每个网站维护独立爬虫脚本显著降低开发成本并提升系统的可靠性与可维护性。路径一通过 MCP 构建高级 Web 爬取 AgentMCP 集成带来的架构优势Model Context ProtocolMCP是连接外部服务与 LLM 应用的标准化协议。Bright Data 的 MCP 服务器通过统一接口暴露一整套爬取工具相比直接 API 集成具备四点优势标准化接口所有工具遵循一致的函数签名降低集成复杂度自动工具发现MCP 服务器动态暴露可用工具Agent 无需修改代码即可发现并利用新能力内建错误处理内置重试机制提升应对网络抖动与临时服务不可用的可靠性性能优化服务器侧自带缓存与请求优化提升整体吞吐。配置 Bright Data MCP 服务器以下函数建立与 Bright Data MCP 服务器的连接并将工具转换为 LangChain 兼容格式来自 web_scraping_agent.ipynbasync def setup_bright_data_tools(): Configure Bright Data MCP client and create LangChain-compatible tools # Configure the MCP server connection bright_data_config { mcpServers: { Bright Data: { command: npx, args: [brightdata/mcp], env: { API_TOKEN: os.getenv(BRIGHT_DATA_API_TOKEN), } } } } # Create MCP client and adapter client MCPClient.from_dict(bright_data_config) adapter LangChainAdapter() # Convert MCP tools to LangChain-compatible format tools await adapter.create_tools(client) print(f✅ Connected to Bright Data MCP server) print(f Available tools: {len(tools)}) return tools # Test the connection tools await setup_bright_data_tools()关键配置说明command: npxargs: [brightdata/mcp]通过 npx 直接拉起 Bright Data 官方 MCP 服务器包无需预先安装env.API_TOKEN从环境变量注入 Bright Data API Key 完成认证MCPClient.from_dict按标准 MCP 配置结构mcpServers字段实例化客户端LangChainAdapter().create_tools(client)将 MCP 工具批量转换为 LangChain Tool 对象供create_react_agent直接消费。运行成功后日志会输出 Available tools: 60即 Bright Data MCP 服务器当前暴露 60 个工具此数字来自教程运行输出实际数量随服务器版本动态变化。可用工具类别MCP 服务器按用途将工具划分为四大类Agent 会根据任务自动选择搜索引擎集成覆盖 Google、Bing、Yandex 等主流搜索引擎支持按用户查询发现相关内容通用 Web 爬取可从任意网站抽取内容支持 Markdown 与 HTML 等格式内置反机器人检测绕过机制平台专属提取器针对 Amazon、LinkedIn、Instagram、Facebook、XTwitter、TikTok、YouTube、Reddit、Zillow 等平台的定制化抽取器理解各平台特有数据结构比通用爬虫更高效浏览器自动化模拟用户交互导航、点击、输入、截图适用于依赖复杂交互或 JavaScript 执行的网站。工具多样性保证了 Agent 能应对几乎任何爬取场景并在效率与可靠性上取得最优解。初始化语言模型与 ReAct AgentAgent 的创建函数将 LLM 与 Bright Data 工具组合并通过系统提示词约束行为来自 web_scraping_agent.ipynbimport datetime async def create_web_scraper_agent(): Create a ReAct agent configured for intelligent web scraping # Get the tools from Bright Data first tools await setup_bright_data_tools() # Get current date current_date datetime.datetime.now().strftime(%B %d, %Y) # Initialize the language model llm ChatOpenAI( openai_api_keyos.getenv(OPENROUTER_API_KEY), openai_api_basehttps://openrouter.ai/api/v1, model_namegoogle/gemini-2.5-flash-lite-preview-06-17, # Fast and capable model for reasoning temperature0.1 # Low temperature for consistent, focused responses ) # Define comprehensive system prompt for the agent with dynamic date and tool count system_prompt fYou are a web data extraction agent. Todays date is {current_date}. You have {len(tools)} specialized tools for web scraping and data extraction. When users request web data or current information, you MUST use these tools - do not rely on your training data. Available capabilities: - Search engines (Google/Bing/Yandex) - Universal web scraping (any website) - Platform extractors (Amazon, LinkedIn, Instagram, Facebook, X, TikTok, YouTube, Reddit, etc.) - Browser automation Process: 1. Identify data need 2. Select appropriate tool 3. Execute extraction 4. Return structured results Always use tools for current/live data requests. # Create the ReAct agent agent create_react_agent( modelllm, toolstools, promptsystem_prompt ) print( ReAct Web Scraper Agent created successfully!) return agent # Create the agent agent await create_web_scraper_agent()配置要点openai_api_basehttps://openrouter.ai/api/v1OpenRouter 兼容 OpenAI 协议因此可用ChatOpenAI客户端接入temperature0.1低温度保证输出一致、聚焦避免 Agent 决策抖动对生产环境尤为重要系统提示词在创建时动态注入当前日期与工具总数{len(tools)}让 Agent 具备时间感知与工具感知能力。系统提示词设计原则提示词是 Agent 行为的基石本教程体现了五条关键设计原则清晰角色定义确立Web 数据抽取专家身份工具感知明确告知工具数量与类型强调优先使用工具而非训练数据流程框架用四步流程识别数据需求 → 选择工具 → 执行抽取 → 返回结构化结果约束处理路径时间上下文注入当前日期帮助 Agent 判断请求的时间语境、优先最新信息强制工具使用对实时数据请求强制走工具防止输出过时的训练数据。路径二通过 LangChain 原生工具构建搜索 Agent初始化 Gemini 语言模型该路径使用langchain-google-genai直接调用 Gemini来自 langgraph_integration.ipynbllm ChatGoogleGenerativeAI( modelgemini-2.0-flash, # Fast and capable model temperature0.1 # Low temperature for consistent, focused responses )gemini-2.0-flash在速度与能力间取得平衡适合交互式 Agent 应用temperature0.1保证输出一致性。配置 Bright Data SERP 工具SERPSearch Engine Results Page搜索引擎结果页工具通过 Bright Data 的全球代理网络提供企业级搜索能力相比直接调用搜索引擎 API 具备地域多样性、限流管理与数据格式统一等优势。核心配置来自 langgraph_integration.ipynb# Initialize the Bright Data SERP tool serp_tool BrightDataSERP( search_enginegoogle, # Use Google as the search engine countryus, # Search from US perspective languageen, # English language results results_count10, # Get top 10 results parse_resultsTrue, # Automatically parse and structure results )参数说明参数示例值作用与调优建议search_enginegoogle指定搜索引擎支持 Google、Bing 等Google 索引全面、结果质量高Bing 可作为备选countryus国家代码控制搜索结果的地域视角面向不同市场可调整为es西班牙、de等languageen语言代码控制结果语言偏好results_count10返回结果条数10 兼顾覆盖广度与处理效率深度研究可提升至 15~20parse_resultsTrue自动将原始 HTML 解析为结构化 JSON便于 LLM 直接理解处理results_count的权衡很关键结果越多信息面越广但处理时间与 API 消耗也越大parse_resultsTrue则是 LLM 友好性的关键开关省去手写 HTML 解析逻辑。组装 ReAct Agent# Create the ReAct agent with the LLM and tools agent create_react_agent( modelllm, # The language model we initialized tools[serp_tool], # List of tools available to the agent promptYou are a web researcher agent with access to SERP tool, you will HAVE to use the user query, if no specific, country, language, search engine or specific vertical, choose whats best fit users questions )create_react_agent()将 LLM 与工具集成为可自主决策的 Agent。提示词在此起到策略指导作用当用户未指定国家、语言、搜索引擎或垂直领域时Agent 需自行选择最贴合问题的搜索参数——这正是智能搜索策略的实现载体。测试与验证通过流式输出观察 Agent 的逐步推理过程来自 langgraph_integration.ipynbuser_query What are the latest developments and news in AI technology in the US? for step in agent.stream( {messages: [(human, user_query)]}, stream_modevalues, ): step[messages][-1].pretty_print()流式输出可以实时看到 Agent 如何分析查询、决定调用搜索工具、构造检索词、执行搜索并综合结果——这种透明性对调试与行为分析极具价值。Agent 行为分析查询处理管线无论哪条路径Agent 处理查询都遵循同一套决策管线初始分析判断所需信息类型、是否需要实时数据、搜索范围应多宽工具选择逻辑查询是否超出模型训练数据时效、是否涉及需验证的具体事实、信息需求是否详尽——据此决定是否调用工具搜索策略形成从查询中抽取关键概念、组合最优检索词、选择搜索参数结果综合分析多来源信息、归纳为连贯洞察、输出结构化答案并在适当时引用来源。实战能力演示四大典型场景场景一实时新闻检索MCP 路径下用agent.ainvoke执行查询来自 web_scraping_agent.ipynbasync def test_basic_search(): search_result await agent.ainvoke({ messages: [(human, Give me the latest AI news from this week, Include full URLs to source.)], }) print(\n Search Results:) print(search_result[messages][-1].content) return search_result教程运行示例中Agent 正确理解本周的时间要求从多个权威新闻源聚合 AI 相关报道并附上完整来源 URL。这体现了四项能力查询理解含时间语义、工具选择、多源结果处理、内容优先级排序。场景二电商平台结构化数据抽取async def test_ecommerce_scraping(): ecommerce_result await agent.ainvoke({ messages: [(human, Find information about the top-rated wireless headphones on Amazon and compare their features and prices)] }) print(\n E-commerce Analysis:) print(ecommerce_result[messages][-1].content)教程运行示例中Agent 对比了多款主流无线耳机逐一给出功能、价格区间并按预算、降噪、音质、续航、生态等维度给出选购建议。可见其具备产品发现基于评分/评论识别热门款、特征抽取、价格分析、对比框架构建、可执行建议输出等能力——远超单纯的数据搬运。场景三社交媒体内容分析Redditasync def test_social_media_simple(): result await agent.ainvoke({ messages: [(human, Search for electric vehicles reddit and then scrape one of the Reddit discussion pages you find. Show me what people are discussing.)] }) print(\n Reddit Analysis:) print(result[messages][-1].content)该查询演示了先搜索 → 再抓取具体页面 → 再分析的多步动作链。教程运行示例中Agent 定位到 r/electricvehicles 社区的多条近期讨论并归纳出社区聚焦的话题新技术、用车体验、二手车市场体现了平台结构理解、内容聚合、主题识别与社区语境感知能力。场景四复杂多步研究工作流复杂研究是 Agent 最进阶的能力涉及任务分解、工具编排、信息综合与质量校验四个阶段来自 web_scraping_agent.ipynbasync def test_complex_research(): research_result await agent.ainvoke({ messages: [(human, I need to research the current state of the renewable energy market. Please: 1. Find recent news about renewable energy developments 2. Look up major renewable energy companies and their stock performance 3. Analyze social media sentiment about renewable energy 4. Provide a comprehensive market overview with key insights )] }) print(\n Complex Research Results:) print(research_result[messages][-1].content)值得注意的细节教程运行示例中Agent 并未盲目执行而是针对任务中的模糊点近期指多久、具体关注哪些公司、分析哪些社交平台主动请求澄清。这种先规划、后执行的响应体现了需求分析、范围界定、工具映射与质量保障能力符合专业研究的方法论——这也是把 Agent 用于企业级调研场景时极具价值的行为模式。可复用研究助手封装教程最后提供了可直接复用的研究助手函数作为生产级工作流的模板来自 web_scraping_agent.ipynbasync def research_assistant(query: str, max_sources: int 5): A comprehensive research assistant using our web scraping agent Args: query (str): The research question or topic max_sources (int): Maximum number of sources to analyze print(f Starting research on: {query}) print(*60) # Enhanced research prompt research_prompt f Please conduct comprehensive research on: {query} Your research should include: 1. Current news and developments (last 30 days) 2. Expert opinions and analysis 3. Statistical data and trends 4. Social media sentiment (if relevant) 5. Key players and companies involved Use multiple sources and provide a well-structured summary with: - Executive summary - Key findings - Supporting data - Sources used Limit your research to {max_sources} high-quality sources. result await agent.ainvoke({ messages: [(human, research_prompt)] }) print(f\n Research Complete!) print(result[messages][-1].content) return result # Test the research assistant research_result await research_assistant(Impact of artificial intelligence on job markets in 2025, 5)该封装的工程价值在于参数化配置query、max_sources让同一函数适配不同规模的研究任务结构化提示词保证输出格式一致执行摘要、关键发现、支撑数据、来源列表便于对接下游系统限制高质量来源数量实现深度优先于广度的质量控制。高级配置模式LangChain 路径教程给出了三组可直接套用的高级配置来自 langgraph_integration.ipynb多语言研究配置面向西班牙市场spanish_serp BrightDataSERP( search_enginegoogle, countryes, # Spain languagees, # Spanish results_count15, parse_resultsTrue, ) spanish_agent create_react_agent(llm, [spanish_serp])备选搜索引擎集成bing_serp BrightDataSERP( search_enginebing, # Use Bing instead of Google countryus, languageen, results_count10, parse_resultsTrue, ) bing_agent create_react_agent(llm, [bing_serp])高吞吐研究配置research_serp BrightDataSERP( search_enginegoogle, countryus, languageen, results_count20, # More results for comprehensive research parse_resultsTrue, ) research_agent create_react_agent(llm, [research_serp])可参数化研究助手工厂将上述模式封装为工厂函数按需生成不同配置的 Agent来自 langgraph_integration.ipynbdef create_research_assistant(search_enginegoogle, countryus, languageen): Create a specialized research assistant agent Args: search_engine (str): Search engine to use (google or bing) country (str): Country code for localized results language (str): Language code for results Returns: Agent configured for research tasks llm ChatGoogleGenerativeAI(modelgemini-2.0-flash, temperature0.1) serp_tool BrightDataSERP( search_enginesearch_engine, countrycountry, languagelanguage, results_count15, # More results for thorough research parse_resultsTrue, ) agent create_react_agent(llm, [serp_tool]) print(fResearch Assistant created!) print(f Engine: {search_engine.title()}) print(f Location: {country.upper()}) print(f Language: {language.upper()}) return agent # Create the research assistant research_assistant create_research_assistant()生产化部署考量教程在两份 Notebook 的结尾部分都强调了从原型走向生产需要补齐的工程要素限流与 API 用量管理Bright Data 免费额度每月 5,000 次 unlocker 请求用于开发测试生产环境需规划配额与预算监控错误处理与恢复机制依赖 MCP 服务器内建的重试机制同时在 Agent 层补充网络异常、超时的兜底逻辑结果缓存与优化对重复性抓取任务做结果缓存降低 API 消耗与延迟安全与访问控制API Key 通过环境变量注入严禁硬编码生产环境配合密钥管理服务监控与日志利用 LangGraph 的流式输出与消息记录实现全链路可观测定位 Agent 决策异常。扩展方向与应用领域教程指出了五个可继续深化的方向工具集成扩展除搜索外继续接入 Bright Data 的通用爬取、数据解析、内容抽取工具解锁 MCP 全量能力用户界面开发构建 Web 界面提供查询历史、结果导出、研究项目管理降低非技术用户使用门槛数据持久化接入存储方案实现研究结果归档、跨时间趋势分析与机构知识库建设自动化与调度为 Agent 增加定时任务能力实现主题监控、定期报告自动生成领域专业化针对特定行业定制提示词、专用工具与领域知识构建垂直 Agent。这些能力对应的落地场景包括竞争情报与市场监控、学术研究与文献发现、内容策展与趋势分析、价格监控与市场调研、新闻聚合与分析。总结本指南以 agents-towards-production 仓库的 agent-with-brightdata 教程 为骨架完整拆解了两条生产级 Web 爬取 Agent 的构建路径基于 MCP 集成的进阶方案 与基于 LangChain 原生工具的快速方案。二者的共同内核是 LangGraph 的 ReAct 框架——用 LLM 的推理能力驱动 Bright Data 的企业级爬取基础设施实现从写爬虫到指挥 Agent 爬数据的范式转变。读者可依据本指南逐步复现完成环境配置后先跑通 LangChain 路径验证 SERP 搜索闭环再升级至 MCP 路径解锁 60 工具最后以research_assistant封装为模板演进为支撑真实业务的数据采集与研究系统。【免费下载链接】agents-towards-productionEnd-to-end, code-first tutorials for building production-grade GenAI agents. From prototype to enterprise deployment.项目地址: https://gitcode.com/GitHub_Trending/ag/agents-towards-production创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考