如何运行完整的演示
如果您有 NodeJS(带有pnpm
或npm
),只需在终端中运行此命令:
npx @huggingface/mcp-client
或者如果使用pnpm
:
pnpx @huggingface/mcp-client
这会将我的包安装到临时文件夹中,然后执行其命令。
您将看到您的简单代理连接到两个不同的 MCP 服务器(本地运行),加载他们的工具,然后提示您进行对话。
默认情况下,我们的示例代理连接到以下两个 MCP 服务器:
- “规范”文件系统服务器,可以访问您的桌面,
- 以及Playwright MCP服务器,它知道如何为您使用沙盒 Chromium 浏览器。
注意:这有点违反直觉,但目前,所有 MCP 服务器实际上都是本地进程(尽管远程服务器即将推出)。
我们对第一个视频的输入是:
写一首关于 Hugging Face 社区的俳句,并将其写入我的桌面上名为“hf.txt”的文件中
现在让我们尝试一下涉及一些 Web 浏览的提示:
在 Brave Search 上搜索 HF 推理提供商,并打开前 3 个结果
默认模型和提供程序
就模型/提供者对而言,我们的示例代理默认使用:
所有这些都可以通过环境变量进行配置!参见:
const agent = new Agent({
provider: process.env.PROVIDER ?? "nebius",
model: process.env.MODEL_ID ?? "Qwen/Qwen2.5-72B-Instruct",
apiKey: process.env.HF_TOKEN,
servers: SERVERS,
});
其基础是:LLM 中的工具调用本机支持。
使整个博文变得非常简单的原因是,最近一批 LLM(封闭式和开放式)已经接受了函数调用(又称工具使用)的训练。
工具由其名称、描述以及其参数的 JSONSchema 表示形式定义。从某种意义上说,它是任何函数接口的不透明表示,从外部来看(这意味着 LLM 并不关心该函数的实际实现方式)。
const weatherTool = {
type: "function",
function: {
name: "get_weather",
description: "Get current temperature for a given location.",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "City and country e.g. Bogotá, Colombia",
},
},
},
},
};
我将在此处链接的规范文档是OpenAI 的函数调用文档。(是的……OpenAI 几乎为整个社区定义了 LLM 标准😅)。
推理引擎允许您在调用 LLM 时传递一个工具列表,而 LLM 可以自由调用零个、一个或多个这些工具。作为开发人员,您可以运行这些工具并将其结果反馈给 LLM 以继续生成。
请注意,在后端(在推理引擎级别),这些工具只是以特殊格式传递给模型
chat_template
,就像任何其他消息一样,然后从响应中解析出来(使用特定于模型的特殊标记)以将它们公开为工具调用。
在 InferenceClient 之上实现 MCP 客户端
现在我们知道了最近的 LLM 中的工具是什么,让我们实现实际的 MCP 客户端。
官方文档https://modelcontextprotocol.io/quickstart/client写得相当好。你只需将 Anthropic 客户端 SDK 替换为任何其他兼容 OpenAI 的客户端 SDK 即可。(此外,还有一个llms.txt文件,你可以将其输入到你选择的 LLM 课程中,以帮助你编写代码)。
提醒一下,我们使用 HFInferenceClient
作为推理客户端。
如果您想使用实际代码进行操作,完整的
McpClient.ts
代码文件在这里🤓
我们McpClient
班有:
- 推理客户端(可与任何推理提供商配合使用,并
huggingface/inference
支持远程和本地端点) - 一组 MCP 客户端会话,每个连接的 MCP 服务器对应一个会话(是的,我们希望支持多个服务器)
- 以及将从连接的服务器填充的可用工具列表,只需稍微重新格式化即可。
export class McpClient {
protected client: InferenceClient;
protected provider: string;
protected model: string;
private clients: Map<ToolName, Client> = new Map()