项目简介
NLWeb 是一个开源项目,旨在通过构建“AI Web”的基础层,使网站能够更容易地提供自然语言交互接口,并允许 AI Agent 以标准化的方式访问和利用网站内容。此仓库包含了 NLWeb 后端服务器的一个示例实现,该实现基于 Model Context Protocol (MCP) 构建,并集成了多种 LLM 和向量数据库能力。
主要功能点
- 网站内容资源化: 能够处理和托管网站内容(如 Schema.org JSON-LD 数据、RSS Feed),并将其转化为可供 LLM 访问的结构化资源。
- 标准化的 LLM 交互: 实现 MCP 协议,提供标准接口(如 'list_tools', 'list_prompts', 'get_prompt', 'call_tool')供 LLM 客户端调用,实现与网站内容的自然语言问答。
- 问答与内容生成: 核心功能是处理用户自然语言查询,通过检索相关网站内容,并利用 LLM 进行理解、排序、总结或生成答案。
- 多模型与多数据库支持: 集成多种主流 LLM 提供商(如 OpenAI, Azure OpenAI, Gemini, Anthropic, DeepSeek, Snowflake Cortex)和向量数据库(如 Azure AI Search, Milvus, Qdrant, Snowflake Cortex Search)。
- 灵活的部署: 提供基于 HTTP/SSE 的 Web 服务器接口和基于 Stdio 的接口,支持不同的部署场景。
- Prompt 定制: 允许通过外部文件(如 XML)定义和定制用于问答和内容生成的 Prompt 模板。
安装步骤
- 克隆仓库:
git clone https://github.com/microsoft/NLWeb.git cd NLWeb - 安装 Python 依赖: 确保已安装 Python 3.8+。
pip install -r requirements.txt - 配置环境变量:
- 创建或修改项目根目录下的 '.env' 文件。
- 根据 'code/config' 目录下的示例配置文件('config_llm.yaml', 'config_retrieval.yaml', 'config_webserver.yaml', 'config_nlweb.yaml', 'config_logging.yaml')配置所需的 LLM API 密钥、数据库连接信息、日志级别等。将敏感信息保存在 '.env' 文件中,并在配置文件中引用相应的环境变量。
- 至少需要配置一个 LLM 提供商和一个向量数据库。
- 导入数据到向量数据库:
- 收集网站内容的结构化数据文件(通常是 JSONL 或 CSV 格式)。仓库的 'code/tools' 目录下提供了一些辅助工具(如 'extractMarkup.py', 'rss2schema.py')来帮助提取和格式化数据。
- 使用 'code/tools/db_load.py' 脚本将数据及计算的 Embedding 导入到配置的向量数据库中。例如:
根据您的数据类型和需求运行相应的命令。# 示例:导入 JSONL 文件并计算 Embedding python code/tools/db_load.py /path/to/your/data.jsonl your_site_name # 示例:导入包含 Embedding 的文件 python code/tools/db_load.py /path/to/your/data_with_embeddings.txt your_site_name # 示例:从 URL 列表导入 RSS/XML feeds python code/tools/db_load.py --url-list /path/to/your/urls.txt your_site_name
服务器配置(MCP 客户端使用)
MCP 客户端需要配置服务器连接信息才能与此 NLWeb 后端交互。以下是两种常见的配置方式:
-
Stdio 方式 (适用于本地Agent或命令行工具):
- server name: 例如 'nlweb-stdio-server'
- command: Python 解释器可执行文件路径(例如,如果您在虚拟环境中,可能是 '/path/to/your/venv/bin/python')
- args: 脚本及其参数的列表,用于启动 Stdio 接口并指定连接的 NLWeb Web 服务器地址。例如:
[ "code/chatbot_interface.py", "--server", "http://localhost:8000" ] - 参数注释:
- 'code/chatbot_interface.py': 此脚本启动一个标准的 Stdio MCP 服务器,并将 MCP 请求转发到指定的 NLWeb Web 服务器。
- '--server': 指定 NLWeb Web 服务器监听的地址(默认通常是 'http://localhost:8000'),Stdio 接口通过 HTTP 与其内部 '/mcp' 端点通信。
-
HTTP 方式 (适用于需要通过 HTTP/HTTPS 连接):
- server name: 例如 'nlweb-http-server'
- url: NLWeb Web 服务器上处理 MCP 请求的完整 URL。默认是 'http://localhost:8000/mcp'。如果配置了 SSL,应使用 'https'。
- protocol: 'http' 或 'https'。
- streaming: 可选,'true' 或 'false',表示是否期望流式响应(SSE)。
- 参数注释:
- 'url': NLWeb Web 服务器中专门用于接收 MCP JSON-RPC 请求的端点。
- 'protocol': 使用的传输协议。
- 'streaming': 是否启用服务器发送事件 (SSE) 进行流式响应。
基本使用方法
- 启动 NLWeb 服务器:
这会根据 'config_webserver.yaml' 和 'PORT' 环境变量启动 HTTP 服务器(默认监听 8000 端口)。python code/app-file.py - 连接 MCP 客户端: 使用支持 MCP 协议的 LLM 客户端,并按照上述配置信息连接到运行中的 NLWeb 服务器。
- 调用 MCP 方法: MCP 客户端可以调用标准的 MCP 方法与服务器交互:
- 'list_tools': 获取服务器提供的工具列表(如 'ask')。
- 'list_prompts': 获取服务器支持的 Prompt 模板列表。
- 'get_prompt': 获取特定 Prompt 模板的内容和结构。
- 'call_tool': 调用工具。通常使用 'ask' 工具来向 NLWeb 提问,例如调用 'call_tool' 并传入 'name="ask"' 和 'arguments={ "query": "查找关于矩阵电影的信息" }'。
信息
分类
AI与计算