Tiny Agents:由 MCP 驱动的 50 行代码代理

如何运行完整的演示

如果您有 NodeJS(带有pnpmnpm),只需在终端中运行此命令:

npx @huggingface/mcp-client

或者如果使用pnpm

pnpx @huggingface/mcp-client

这会将我的包安装到临时文件夹中,然后执行其命令。

您将看到您的简单代理连接到两个不同的 MCP 服务器(本地运行),加载他们的工具,然后提示您进行对话。

默认情况下,我们的示例代理连接到以下两个 MCP 服务器:

注意:这有点违反直觉,但目前,所有 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值