链载Ai

标题: NLWeb:微软的AI网站搜索协议 [打印本页]

作者: 链载Ai    时间: 昨天 18:40
标题: NLWeb:微软的AI网站搜索协议


NLWeb 创建了一个标准协议,将任何网站转变为人类和人工智能代理都可以自然查询的对话界面。


微软最近开源了 NLWeb ,这是一种用于向网站添加对话界面的协议。它利用许多网站已有的 Schema.org 结构化数据,并包含对 MCP(模型上下文协议)的内置支持,从而支持人际对话和代理之间的通信。

NLWeb 解决了什么问题?

目前,网站拥有结构化数据(Schema.org),但缺乏供人工智能代理或对话界面访问的标准方法。所有实现都是定制的。传统的搜索界面难以应对上下文感知的多轮查询。

NLWeb 为对话式访问 Web 内容创建了一个标准协议。如同 RSS 为内容聚合所做的那样,NLWeb 也为 AI 交互提供了标准协议——一个实现既支持人机聊天界面,也支持程序化代理访问。

NLWeb 不是为每个站点构建自定义 NLP,而是利用 LLM 对 Schema.org 的现有理解来创建即时对话界面。

真正的力量来自于保留上下文的多轮对话:

“寻找晚宴食谱”

“仅提供素食选择”

“不到一小时就能准备好”

每个查询都建立在先前的上下文之上——这是传统搜索界面所难以解决的问题。

NLWeb 的工作原理

双组分系统

协议层 :REST API( /ask 端点)和 MCP 服务器( /mcp 端点),接受自然语言查询并返回 Schema.org JSON 响应

实现层 :协调多个 LLM 调用以进行查询处理的参考实现

查询处理管道

用户查询 → 并行预处理 → 向量检索 → LLM 排序 → 响应

─ 相关性检查

─ 去语境化

─ 内存检测

└─ 快速通道

在此流程中,单个查询可能会触发 50 多个有针对性的 LLM 调用:


“快速通道”优化在预处理时启动了一条并行的检索路径(步骤 3),但结果会被阻止,直到相关性检查完成 。



为什么要调用 50 多次大语言模型(LLM)


NLWeb 不会使用一个大提示来处理所有内容,而是将每个查询分解为数十个小的、具体的问题:

“这个查询是关于食谱的吗?”

“它是否引用了之前提到过的东西?”

“用户是否要求记住饮食偏好?”

“这个具体结果有多相关?”

这种方法有两个主要优点:


可以将其想象为拥有一支专家团队,而不是一名通才。

即使您不使用 NLWeb,这种模式(使用许多集中的 LLM 调用而不是一个复杂的提示)也值得借鉴。

快速入门

理解 NLWeb 的最好方法就是尝试一下。

微软提供了使用Behind The TechRSS 提要设置示例 NLWeb 服务器的快速入门指南 。

#设置gitclonehttps://github.com/microsoft/NLWebcdNLWebpython-mvenvmyenv源myenv/bin/activateCD代码pipinstall-r要求.txt#配置(复制.env.模板→.env,更新API密钥)#加载数据python-m工具.db_loadhttps://feeds.libsyn.com/121695/rssBehind-the-Tech#执行python应用程序-文件.py

转到 localhost:8000 您应该有一个可以正常运行的 NLWeb 服务器。

我还注意到,该存储库包含一个 CLI ,用于简化应用程序的配置、测试和执行。然而,我很难让它工作。

服务器运行后,您可以询问以下问题:

curl-XPOSThttp://localhost:8000/ask\-H“内容类型:application/json”\-d'{“查询”:“告诉我有关第一个的更多信息”,“上一页”:“查找有关人工智能的播客,它们涵盖哪些主题”}'


返回的 JSON 响应如下:

{"查询ID":"abc123",“结果”:[{"url":"https://...",“name”:“StuartRussell的人工智能安全”,“得分”:85,“描述”:“关于对齐挑战的讨论...”,“schema_object”:{“@type”:“PodcastEpisode”,...}}]}


Glama NLWeb 服务器

在撰写本文的过程中,我使用 Node.js 构建了一个简单的 NLWeb 服务器。您可以使用它来查询我们的 MCP 服务器目录:

curl-XPOSThttps://glama.ai/nlweb/ask\-H“内容类型:application/json”\-d'{"query":"用于GitHub的MCP服务器"}'

据我所知,这是第一个公共 NLWeb 端点!由于 LLM 呼叫量较大,因此需要几秒钟才能做出响应。

或者,如果您想继续对话:

curl-XPOSThttps://glama.ai/nlweb/ask\-H“内容类型:application/json”\-d'{"query":"可以创建PR的服务器","prev":"用于与GitHub协作的MCP服务器"}'

或者,如果您想总结结果:

curl-XPOSThttps://glama.ai/nlweb/ask\-H“内容类型:application/json”\-d'{"query":"用于与GitHub协作的MCP服务器",“模式”:“总结”}'

当您想要概览而不是结果列表时很有用。

或者,如果您想生成响应:

curl-XPOSThttps://glama.ai/nlweb/ask\-H“内容类型:application/json”\-d'{"query":"用于与GitHub协作的MCP服务器",“模式”:“生成”}'

此模式尝试使用检索到的结果来回答问题(如传统的 RAG),使其易于实现的事情:


当我实施这个时我想到了一些问题:


毫不奇怪,管道中最慢的部分是 LLM 调用。

REST API

目前,NLWeb 在 /ask 和 /mcp 端点上支持两个 API。这两个 /mcp 的参数相同,大部分功能也相同。/mcp /mcp 以 MCP 客户端可以使用的格式返回答案。/mcp 端点还支持核心 MCP 方法( list_tools 、 list_prompts 、 call_tool 和 get_prompt )。

/ask 端点支持以下参数:

范围类型描述
querystring自然语言问题
sitestring特定数据子集的范围
prevstring以逗号分隔的先前查询
decontextualized_querystring如果提供,跳过去语境化
streamingbool启用 SSE 流
query_idstring追踪对话
modestringlistsummarizegenerate


与 MCP 集成

由于 NLWeb 默认包含 MCP 服务器,因此您可以配置 Claude for Desktop 来与 NLWeb 通信。

如果您已运行 NLWeb 服务器,则只需将以下内容添加到您的 ~/Library/Application Support/Claude/claude_desktop_config.json 配置即可:

{"mcp服务器":{“ask_nlw”:{“命令”:“/Users/yourname/NLWeb/myenv/bin/python”,"参数":[“/Users/你的名字/NLWeb/code/chatbot_interface.py”,“-服务器”,“http://localhost:8000”,“--endpoint”,“/mcp”],"cwd":"/用户/你的名字/NLWeb/code"}}}


实施基础

文档表明,如果您有现有的 Schema.org 标记或 RSS 提要,您可以快速运行基本原型。

其实很简单:


需要更多努力的是:


我已经准备好了很多组件,所以能够在一小时内就运行一个基本的原型。然而,为了让它投入生产,我需要花更多时间考虑 LLM 调用的成本。

你应该关心吗?

是,如果:


如果:则否


结论

NLWeb 作为一个战略方向比作为现有技术更有趣。NLWeb 由 RV Guha(Schema.org、RSS 和 RDF 的创建者)构思和开发,他现在是微软的 CVP 和技术研究员。这可谓资历深厚。

O'Reilly 的原型证明了它对于内容密集型网站来说是可行的。快速上手也表明它对开发者来说很容易上手。但“几天内完成原型”并不意味着“几周内就能投入生产”。

可以将其视为一项投资,旨在让您的内容原生对话化。其技术基础扎实——REST API、标准格式、成熟的矢量存储。愿景令人瞩目。代码尚需改进。

想尝试一下吗?克隆代码库并尝试上面的快速入门。






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5