AI

将 Bright Data 的 Web MCP 集成到 Semantic Kernel AI 代理中

了解如何将 Semantic Kernel AI 代理连接到 Bright Data 的 Web MCP,使你的 C# AI 工作流能够实时访问网页数据。
4 分钟阅读
Semantic Kernel × Bright Data 的 MCP 集成

在本教程中,你将了解:

  • 什么是 Semantic Kernel、它提供的核心功能以及其工作方式。
  • 为什么用 MCP 扩展它会更强大。
  • 如何使用 Semantic Kernel 集成 Bright Data Web MCP 来构建一个 AI 代理。

让我们开始吧!

什么是 Semantic Kernel?

Semantic Kernel 是由微软开发的开源 SDK,帮助你将 AI 模型和大语言模型(LLM)集成到应用中,以构建 AI 代理和先进的生成式 AI 解决方案。它充当可用于生产的中间件,提供到多个 AI 服务的连接器,并支持语义(基于提示)和原生(基于代码)的函数执行。

该 SDK 提供 C#、Python 和 Java 版本。它是一个灵活的解决方案,可用于生成文本、执行聊天补全,或连接外部数据源与服务。截至撰写时,该项目的 GitHub 仓库已有超过 26k 颗星。

主要功能

Semantic Kernel 提供的主要特性包括:

  • AI 模型集成:通过统一接口连接 OpenAI、Azure OpenAI 等服务,实现聊天补全、文本生成等。
  • 插件系统:支持使用语义函数(提示)和原生函数(C#、Python 或 Java)的插件,扩展 AI 能力。
  • AI 代理:让你构建能解释用户请求、协调多个插件与服务以解决复杂任务的代理。
  • 规划与函数调用:帮助代理将多步骤任务拆解执行,并选择合适的插件或函数。
  • 检索增强生成(RAG):通过搜索与数据连接器将真实数据注入提示,产出更准确、最新的响应。

Semantic Kernel 的工作原理

理解该库的运行方式,有助于了解其主要组件:

  • 核心内核:编排 AI 服务与插件。
  • AI 服务连接器:通过通用接口将应用代码连接到不同的 AI 模型与服务。
  • 插件:包含扩展代理能力的语义与原生函数。
  • AI 代理:构建在内核之上,利用插件处理请求并运行工作流。

为什么要通过 MCP 集成来扩展 Semantic Kernel

Semantic Kernel 是与模型无关的 SDK,允许你构建、编排并部署复杂的 AI 代理、工作流,甚至多代理系统。无论架构多么复杂,这些工作流与代理依然需要底层的 AI 模型来运行。

无论是 OpenAI、Azure OpenAI 还是其他 LLM,所有模型都存在同样的根本限制:它们的知识是静态的…

LLM 是在某一时间点的快照数据上训练的,这意味着其知识很快会过时。更重要的是,它们无法原生与在线网站或外部数据源互动。

这正是 Semantic Kernel 通过插件可扩展性带来不同之处的原因。通过集成 Bright Data 的 Web MCP,你可以让 AI 代理突破静态知识的限制,直接从网络检索最新、高质量的数据。

这个开源的 Web MCP 服务器提供对 60 多个开箱即用的 AI 工具 的访问,这些工具都由 Bright Data 的网页交互与数据采集基础设施驱动。

即使在免费层,你的 AI 代理也已可使用两个强大的工具:

工具 描述
search_engine 从 Google、Bing 或 Yandex 获取搜索结果,格式为 JSON 或 Markdown。
scrape_as_markdown 将任意网页抓取为干净的 Markdown 格式,绕过机器人检测与 CAPTCHA。

除此之外,Web MCP 还解锁数十种专用工具,可在 Amazon、LinkedIn、Yahoo Finance、TikTok 等平台进行结构化数据采集。更多信息可查看 官方 GitHub 页面

简而言之,将 Semantic Kernel 与 Web MCP 结合,可把静态工作流转化为能与在线网站交互、访问网页数据并产出贴近真实世界洞见的动态 AI 代理。

如何在 Semantic Kernel 中构建连接 Bright Data Web MCP 的 AI 代理

在这一引导部分,你将学习如何将 Bright Data 的 Web MCP 连接到一个用 C# 编写的 Semantic Kernel AI 代理。具体而言,你将使用该集成来构建一个 Reddit 分析 AI 代理,它将:

  1. 利用 Bright Data Web MCP 工具检索来自 Reddit 帖子的信息。
  2. 使用 OpenAI 的 GPT-5 模型处理检索到的数据。
  3. 以 Markdown 报告的形式返回结果。

注意:以下代码使用 .NET 9 的 C# 编写。但你也可以轻松将其转换为 Python 或 Java,这两种语言同样受支持。

按如下步骤开始!

前提条件

开始之前,请确保你已:

无需担心 Bright Data 账户的设置,我们会在后续步骤中引导你完成。

步骤 1:创建你的 .NET C# 项目

使用以下命令初始化一个名为 SK_MCP_Agent 的 .NET 控制台项目:

dotnet new console -n SK_MCP_Agent

然后进入项目文件夹:

cd SK_MCP_Agent

此时你应看到如下目录结构:

SK_MCP_Agent/
├── Program.cs
├── SK_MCP_Agent.csproj
└── obj/
    ├── project.assets.json
    ├── project.nuget.cache
    ├── SK_MCP_Agent.csproj.nuget.dgspec.json
    ├── SK_MCP_Agent.csproj.nuget.g.props
    └── SK_MCP_Agent.csproj.nuget.g.targets

具体来说,Program.cs 目前包含一个默认的 “Hello, World” 程序。你将把 Semantic Kernel AI 代理的逻辑写在这个文件中。

现在,在 .NET C# IDE(如 Visual StudioVisual Studio Code)中打开项目文件夹。在 IDE 的终端中,通过以下命令安装所需依赖:

dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.EnvironmentVariables
dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Microsoft.SemanticKernel --prerelease
dotnet add package Microsoft.SemanticKernel.Agents.Core --prerelease
dotnet add package ModelContextProtocol --prerelease
dotnet add package System.Linq.AsyncEnumerable --prerelease

所需的 NuGet 包包括:

注意--prerelease 标志告诉 .NET CLI 安装某个 NuGet 包的最新(预发布)版本。这对于仍在开发或实验阶段的部分包是必须的。

完成!你的 .NET 开发环境已准备好使用 Semantic Kernel 构建集成 Bright Data Web MCP 的 C# AI 代理。

步骤 2:配置机密加载

你的 AI 代理将依赖第三方组件,如 OpenAI 模型与 Bright Data Web MCP 服务器。这两项集成都需要通过 API 密钥令牌进行身份验证。为避免在代码中直接暴露这些密钥,请使用 .NET 的用户机密存储系统或环境变量安全存储。

为此,先导入配置包:

using Microsoft.Extensions.Configuration;

然后,将机密加载到一个 config 对象:

var config = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .AddEnvironmentVariables()
    .Build();

你现在可以像这样访问代码中的机密:

config["<secret_name>"]

在项目文件夹中运行以下命令初始化用户机密存储:

dotnet user-secrets init

这会为你的机密(即 API 密钥)创建一个安全的本地存储。

很好!你的 C# 程序现已可以安全处理敏感凭据,而无需在源代码中暴露它们。

步骤 3:测试 Bright Data 的 Web MCP

在将 Bright Data 的 Web MCP 连接到你的代理之前,先验证你的机器可以运行 MCP 服务器。

如果你还没有 Bright Data 账户,请新建一个。如果已有账户,直接登录。为了快速设置,请进入控制台的 “MCP” 页面并按照指引操作:

你 Bright Data 账户中的 “MCP” 区域

否则,请先生成一个 Bright Data API 密钥。然后将其妥善保存,稍后将用到。本节将假设该 API 密钥具有 Admin 权限,因为这能简化 Web MCP 的集成过程。

运行以下命令在系统中全局安装 Web MCP:

npm install -g @brightdata/mcp

接着,通过执行以下命令检查本地 MCP 服务器是否工作正常:

$Env:API_TOKEN="<YOUR_BRIGHT_DATA_API>"; npx -y @brightdata/mcp

或在 Linux/macOS 上等效命令:

API_TOKEN="<YOUR_BRIGHT_DATA_API>" npx -y @brightdata/mcp

<YOUR_BRIGHT_DATA_API> 替换为你的实际 Bright Data API 令牌。该命令会设置所需的 API_TOKEN 环境变量,并通过 @brightdata/mcp 包启动 Web MCP。

如果成功,你应看到类似如下的日志:

Bright Data Web MCP 的启动日志

首次启动时,Web MCP 会在你的 Bright Data 账户中自动创建两个默认的 Zone:

  • mcp_unlocker:用于 Web Unlocker
  • mcp_browser:用于 Browser API
    MCP 服务器依赖这两个 Zone 来驱动全部 60+ 工具。

要确认这些 Zone 已创建,请登录 Bright Data 控制台,进入 “Proxies & Scraping Infrastructure” 页面,你应能在 Zone 列表中看到它们:

Web MCP 启动时创建的 mcp_unlocker 与 mcp_browser 区域

如果你的 API 令牌没有 Admin 权限,这些 Zone 将不会为你自动创建。在这种情况下,你需要在控制台中手动创建它们,并通过环境变量配置其名称(详见 GitHub 页面)。

重要:默认情况下,MCP 服务器只暴露 search_enginescrape_as_markdown(及其批处理版本)这两个工具。这些工具包含在 Web MCP 免费层中。

要解锁高级工具(如浏览器自动化与结构化数据源),你需要启用 专业模式。方法是在启动 Web MCP 前设置 PRO_MODE="true" 环境变量:

$Env:API_TOKEN="<YOUR_BRIGHT_DATA_API>"; $Env:PRO_MODE="true"; npx -y @brightdata/mcp

或在 Linux/macOS 上:

API_TOKEN="<YOUR_BRIGHT_DATA_API>" PRO_MODE="true" npx -y @brightdata/mcp

专业模式 会解锁全部 60+ 工具,但不包含在免费层内,并会产生额外费用。

成功!你刚刚验证了 Web MCP 服务器可以在你的机器上运行。先结束 MCP 进程,接下来你将配置 Semantic Kernel 代理来启动该服务器并连接到它。

步骤 4:配置 Web MCP 集成

既然你的机器可以运行 Web MCP,首先将之前获取到的 Bright Data API 密钥添加到用户机密中:

dotnet user-secrets set "BrightData:ApiKey" "<YOUR_BRIGHT_DATA_API_KEY>"

<YOUR_BRIGHT_DATA_API_KEY> 替换为你的实际 API 密钥。该命令会将密钥安全地存储在项目的机密存储中。

你也可以通过设置环境变量实现同样的效果:

$Env:BrightData__ApiKey="<YOUR_BRIGHT_DATA_API_KEY>"

或在 macOS/Linux 上:

export BrightData__ApiKey="<YOUR_BRIGHT_DATA_API_KEY>"

注意Microsoft.Extensions.Configuration 会自动将 BrightData__ApiKey 转换为 BrightData:ApiKey

接着,使用来自 ModelContextProtocolMcpClientFactory 来定义 MCP 客户端并连接到 Web MCP:

await using var mcpClient = await McpClientFactory.CreateAsync(new StdioClientTransport(new()
{
    Name = "BrightDataWebMCP",
    Command = "npx",
    Arguments = ["-y", "@brightdata/mcp"],
    EnvironmentVariables = new Dictionary<string, string?>
    {
        { "API_TOKEN", config["BrightData:ApiKey"] },
        // { "PRO_MODE", "true" }, // <-- Optional: enable Pro Mode
    }
}));

上述配置会生成与先前步骤相同的 npx 命令,并设置所需环境变量。注意 PRO_MODE 为可选,而 API_TOKEN 则从先前定义的 BrightData:ApiKey 机密中读取。

然后,加载所有可用的工具列表:

var tools = await mcpClient.ListToolsAsync().ConfigureAwait(false);

脚本会执行 npx 命令以本地进程方式启动 Web MCP 并与其连接,从而访问其暴露的工具。

你可以通过日志打印所有工具来验证是否已成功连接到 Web MCP 且拥有对这些工具的访问权:

foreach (var tool in tools)
{
    Console.WriteLine($"{tool.Name}: {tool.Description}");
}

如果此时运行脚本,你应看到类似如下的输出:

工具列表输出

这些是 Web MCP 在免费层中暴露的 2 个默认工具(加 2 个批处理版本)。在 专业模式 下,你将能访问全部 60+ 工具。

太棒了!上述输出表明 Web MCP 集成工作正常!

步骤 5:构建可访问 MCP 工具的 Kernel

在 Semantic Kernel 中,内核(kernel) 充当一个依赖注入容器,用于管理运行你的 AI 应用所需的全部服务与插件。一旦你将服务与插件提供给内核,AI 就可以在需要时调用它们。

现在是时候创建一个支持通过 MCP 调用工具的 OpenAI 集成内核了。先把你的 OpenAI API 密钥加入用户机密:

dotnet user-secrets set "OpenAI:ApiKey" "<YOUR_OPENAI_KEY>"

如前所述,你也可以设置同名环境变量 OpenAI__ApiKey

然后,定义一个连接到 OpenAI 的新内核:

var builder = Kernel.CreateBuilder();
builder.Services
    .AddOpenAIChatCompletion(
        modelId: "gpt-5-mini",
        apiKey: config["OpenAI:ApiKey"]
    );
Kernel kernel = builder.Build();

在该示例中,内核使用存储在用户机密中的 API 密钥连接到 gpt-5-mini 模型(你也可以配置为其他任意 OpenAI 模型)。

随后,为内核添加一个用于调用工具的插件:

kernel.Plugins.AddFromFunctions("BrightData", tools.Select(aiFunction => aiFunction.AsKernelFunction()));

这行代码会将你的 MCP 工具转换为内核可调用的函数,从而由指定的 AI 模型调用。

本节所需的导入如下:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;

完美!现在你已经拥有一个完全配置好的内核,它是你的 Semantic Kernel AI 应用的核心。

步骤 6:定义 AI 代理

先从 SemanticKernel 导入 Agents 类:

using Microsoft.SemanticKernel.Agents;

接着,使用内核初始化一个自动调用工具的 AI 代理:

var executionSettings = new OpenAIPromptExecutionSettings()
{
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() // Enable automatic function calling for the LLM
};

var agent = new ChatCompletionAgent()
{
    Name = "RedditAgent",
    Kernel = kernel,
    Arguments = new KernelArguments(executionSettings),
};

本质上,这个代理可以在 AI 模型判断需要一个或多个工具来完成输入提示描述的目标时,执行 Bright Data Web MCP 暴露的工具。

注意我们将该代理命名为 “RedditAgent”,因为本教程聚焦于构建一个面向 Reddit 的代理。如果你要为其他目的创建 Semantic Kernel AI 代理,请根据项目需要调整名称。

很好!下一步就是使用该代理执行一个提示。

步骤 7:在代理中执行任务

要测试由 Bright Data Web MCP 提供工具增强后的 AI 代理的网页数据检索能力,你需要一个合适的提示。例如,你可以让 AI 代理从特定 subreddit 检索信息,如下:

var prompt = @"
Scrape pages from the following subreddit:
https://www.reddit.com/r/webscraping/

From the scraped content, generate a Markdown report that includes:
- The official description of the subreddit and key stats (community type, creation date)
- A list of URLs for the ~10 most recent posts
";

这是一个用于测试网页检索能力的理想任务。标准的 OpenAI 模型在面对这样的提示时会失败,因为它们无法以编程方式访问 Reddit 页面以获取实时数据:

给定提示下的 ChatGPT 表现

注意:上述输出并不可靠,其中大多数内容要么是错误的,要么完全是捏造的。没有像 Bright Data 这类外部工具的帮助,OpenAI 模型无法可靠地从网络抓取最新数据。

得益于 Web MCP 提供的工具,你的代理将能够检索所需的 Reddit 数据,并呈现准确的结果。使用以下代码执行任务并在终端打印结果:

ChatMessageContent response = await agent.InvokeAsync(prompt).FirstAsync();
Console.WriteLine($"\n\nResponse:\n{response.Content}");

这已经足以测试单个提示。在真实场景中,你通常希望让代理持续运行并具备上下文感知能力,可通过实现带有记忆的 REPL 循环来跟踪历史交互

大功告成!你基于 Semantic Kernel 并集成 Bright Data Web MCP 的 Reddit 专家型 AI 代理现已可以正常工作。

步骤 8:整体整合

Program.cs 中的最终代码如下:

using Microsoft.Extensions.Configuration;
using ModelContextProtocol.Client;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Agents;

// Load user secrets and environment variables for API keys
var config = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .AddEnvironmentVariables()
    .Build();

// Create an MCP client for the Bright Data Web MCP server
await using var mcpClient = await McpClientFactory.CreateAsync(new StdioClientTransport(new()
{
    Name = "BrightDataWebMCP",
    Command = "npx",
    Arguments = ["-y", "@brightdata/mcp"],
    EnvironmentVariables = new Dictionary<string, string?>
    {
        { "API_TOKEN", config["BrightData:ApiKey"] },
        // { "PRO_MODE", "true" }, // <-- Optional: enable Pro Mode
    }
}));

// Retrieve the list of tools available on the Bright Data Web MCP server
var tools = await mcpClient.ListToolsAsync().ConfigureAwait(false);

// Build a Semantic Kernel and register the MCP tools as kernel functions
var builder = Kernel.CreateBuilder();
builder.Services
    .AddOpenAIChatCompletion(
        modelId: "gpt-5-mini",
        apiKey: config["OpenAI:ApiKey"]
    );
Kernel kernel = builder.Build();
// Create a plugin from the MCP tools and add it to the kernel's plugin collection
kernel.Plugins.AddFromFunctions("BrightData", tools.Select(aiFunction => aiFunction.AsKernelFunction()));

// Enable automatic function calling for the LLM
var executionSettings = new OpenAIPromptExecutionSettings()
{
    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};

// Define the AI agent with MCP integration
var agent = new ChatCompletionAgent()
{
    Name = "RedditAgent",
    Kernel = kernel,
    Arguments = new KernelArguments(executionSettings), // Pass settings for MCP tool calls
};

// Test the AI agent with a subreddit scraping prompt
var prompt = @"
Scrape pages from the following subreddit:
https://www.reddit.com/r/webscraping/

From the scraped content, generate a Markdown report that includes:
- The official description of the subreddit and key stats (community type, creation date)
- A list of URLs for the ~10 most recent posts
";

ChatMessageContent response = await agent.InvokeAsync(prompt).FirstAsync();
Console.WriteLine($"\n\nResponse:\n{response.Content}");

哇!仅用大约 65 行 C# 代码,你就构建了一个集成 Bright Data Web MCP 的 Semantic Kernel AI 代理。

通过以下命令运行你的代理:

dotnet run

输出应类似如下:

AI 代理产生的输出

注意代理如何抓取 /about 页面以获取 subreddit 信息,然后抓取 /new 页面以获取最新帖子。

输出中显示的所有数据都是准确的,你可以访问该 subreddit 的 /about 页面进行验证:

r/webscraping 子版块的 /about 页面

AI 代理输出中的数据与该页面显示完全一致。对最新帖子同样适用,你可以在该 subreddit 的 /new 页面找到它们。

唯一的差异在于帖子顺序,其由 Reddit 的前端决定,这里无需关心。

抓取 Reddit 具有挑战性,因为其由反机器人系统保护,会阻断自动化请求。借助 Bright Data Web MCP 服务器提供的具备反机器人绕过能力的网页抓取功能,你的 AI 代理可以使用强大的网页数据检索、交互与搜索工具集。

此示例仅展示了诸多可能场景中的一个。通过 Semantic Kernel 获取的广泛 Bright Data 工具,你可以构建更复杂的代理,覆盖更多用例

大功告成!你已经在 C# 的 Semantic Kernel AI 代理中体验了 Bright Data Web MCP 集成的强大能力。

结论

在这篇博文中,你看到了如何将使用 Semantic Kernel 构建的 AI 代理连接到 Bright Data 的 Web MCP(现已提供免费套餐!)。这种集成为你的代理带来更强的能力,包括网页搜索、数据提取以及实时交互。

若要构建更高级的 AI 代理,欢迎探索更广泛的产品与服务——Bright Data 的 AI 基础设施。这些工具旨在为多样化的 AI 工作流和代理型用例提供动力。

立即注册免费的 Bright Data 账户,开始体验面向 AI 的网页数据解决方案!

支持支付宝等多种支付方式