编程 Mozilla Thunderbolt 深度解析:Haystack + ACP/MCP 驱动的「主权 AI 客户端」架构设计与工程实践

2026-04-22 16:03:28 +0800 CST views 7

Mozilla Thunderbolt 深度解析:Haystack + ACP/MCP 驱动的「主权 AI 客户端」架构设计与工程实战

一、背景:为什么 Mozilla 要做 AI 客户端

2026年,AI 助手战场已被 OpenAI、微软、Google 三大巨头瓜分殆尽。ChatGPT 有 OpenAI 的云端算力,Copilot 有微软的365生态,Gemini 有 Google 的全家桶。而 Mozilla——这家以 Firefox 和 Thunderbird 闻名的非营利组织——选择了一条截然不同的路。

2025年底,Mozilla 宣布战略目标:"像当年改变互联网那样改变 AI 格局"。Mozilla 基金会的判断是:当前的 AI 市场存在一个根本性矛盾——用户必须将数据交给第三方云服务才能使用 AI 能力,这对企业用户而言是合规风险,对个人用户而言是隐私隐患。

于是,2026年4月17日,Mozilla 旗下 MZLA Technologies 子公司正式发布 Thunderbolt——一款开源的、自托管优先的 AI 客户端,定位为"主权 AI 客户端"(Sovereign AI Client)。

本文从程序员视角出发,深入拆解 Thunderbolt 的技术架构、Haystack 底层原理、ACP/MCP 双协议协同机制,并通过完整的 Docker 部署实战和代码示例,帮助你理解这个项目的工程价值。

二、Thunderbolt 是什么:定位与核心理念

2.1 不做模型,做平台

Thunderbolt 与市面上所有主流 AI 产品最根本的区别是:它不提供任何 AI 模型

这听起来像缺点,实际上是精心设计的架构选择。Thunderbolt 的产品哲学是:

"你选择模型,我们负责把模型、数据、工作流安全地连接在一起。"

类比一下:Thunderbolt 不是发电厂,而是智能电网。它本身不发电,但能让你的任何发电来源(本地模型、云端 API、私有部署)高效运转。

2.2 核心技术栈

Thunderbolt 的技术选型非常有意思,体现了"成熟开源生态 + 新兴协议标准"的平衡策略:

层次技术选型说明
前端React + TypeScript跨平台原生应用基础
协议层ACP + MCP 双协议任务调度 + 上下文连接
AI 编排层deepset Haystack模块化 RAG + Agent 编排
数据层SQLite (本地离线)企业数据源本地索引
部署层Docker一键部署,完全可控
通信层JSON-RPC 2.0 (stdio/HTTP-SSE)与 MCP 协议一致

2.3 核心功能矩阵

Thunderbolt 官方定义的核心功能包括:

  • 聊天与基础交互:多轮对话、上下文记忆
  • 搜索与调研:基于本地知识库的 RAG 检索增强回答
  • 任务执行与自动化:MCP/ACP 协议驱动的工具调用链
  • 多模型接入:OpenAI API 兼容接口,Claude/DeepSeek/本地模型均可
  • 自托管部署:Docker 一键部署,数据不出本地
  • 接入内部数据:SQLite 本地索引 + 企业知识库连接
  • 系统与工具集成:MCP 服务器连接企业 ERP/CRM/SCM 系统
  • 工作流编排:Haystack Pipeline 可视化编排复杂 AI 流程
  • 安全与权限控制:端到端加密 + 设备级访问控制

三、Haystack 深度解析:模块化 AI 编排框架

3.1 为什么 Thunderbolt 选择 Haystack

Haystack 是德国公司 deepset 维护的开源 AI 编排框架,在 RAG 领域有着极高的成熟度。选择 Haystack 而不是自研,让 Thunderbolt 能够复用一套经过大量生产环境验证的组件体系。

Haystack 的核心价值在于它的节点-管道(Node-Pipeline)架构

用户问题
    ↓
[检索器 Retriever] → 从向量数据库检索相关文档
    ↓
[处理器 Processor] → 对检索结果进行重排序/过滤
    ↓
[生成器 Generator] → 将上下文交给 LLM 生成回答
    ↓
最终答案

每个节点都是独立的 Python 类,可以自由替换、组合、扩展。这与 Thunderbolt"不绑定任何供应商"的设计哲学完美契合。

3.2 Haystack 管道代码实战

下面通过一个完整的代码示例,展示如何使用 Haystack 构建一个企业知识库问答管道:

# haystack_rag_pipeline.py
from haystack import Pipeline
from haystack.components.retrievers import InMemoryEmbeddingRetriever
from haystack.components.builders.answer_builder import AnswerBuilder
from haystack.components.builders.prompt_builder import PromptBuilder
from haystack_integrations.components.embedders.fastembed import FastembedEmbedder
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack_integrations.components.generators.openai import OpenAIGenerator

# 第一步:构建索引管道(将文档写入向量数据库)
indexing_pipeline = Pipeline()
indexing_pipeline.add_component(
    "embedder", FastembedEmbedder(model="BAAI/bge-small-en-v1.5")
)
indexing_pipeline.add_component(
    "writer",
    QdrantDocumentStore(
        url="http://localhost:6333",
        index="company-kb",
        embedding_dimension=384
    )
)
indexing_pipeline.connect("embedder.documents", "writer.documents")

# 将 PDF 文档索引到向量数据库
indexing_pipeline.run({
    "embedder": {"documents": your_documents},
    "writer": {}
})

# 第二步:构建 RAG 问答管道
rag_pipeline = Pipeline()
rag_pipeline.add_component(
    "embedder", FastembedEmbedder(model="BAAI/bge-small-en-v1.5")
)
rag_pipeline.add_component(
    "retriever", InMemoryEmbeddingRetriever(
        document_store=QdrantDocumentStore(url="http://localhost:6333"),
        top_k=10
    )
)
rag_pipeline.add_component(
    "prompt_builder", PromptBuilder(
        template="""
        根据以下上下文回答问题。如果上下文中没有相关信息,请如实说明。

        上下文:
        {% for document in documents %}
        - {{ document.content }}
        {% endfor %}

        问题:{{ question }}
        回答:
        """,
        required_variables=["question", "documents"]
    )
)
rag_pipeline.add_component(
    "generator", OpenAIGenerator(
        model="gpt-4o",
        api_key=os.getenv("OPENAI_API_KEY")
    )
)
rag_pipeline.add_component("answer_builder", AnswerBuilder())

# 连接各组件
rag_pipeline.connect("retriever.documents", "prompt_builder.documents")
rag_pipeline.connect("prompt_builder.prompt", "generator.prompt")
rag_pipeline.connect("generator.replies", "answer_builder.replies")
rag_pipeline.connect("retriever.documents", "answer_builder.documents")

# 第三步:执行查询
result = rag_pipeline.run({
    "embedder": {"text": "公司的年假政策是什么?"},
    "retriever": {"query": "公司的年假政策是什么?"},
    "prompt_builder": {"question": "公司的年假政策是什么?"},
})

print(result["answer_builder"]["answers"][0].answer)

这段代码展示了 Haystack 的核心优势:管道式组合。你可以将任何符合 Haystack 接口规范的检索器、生成器插入管道,换掉 OpenAI 就变成 Claude,换掉 Qdrant 就变成 Weaviate,整个管道的其余部分无需改动。

3.3 Haystack 的自定义节点扩展

Haystack 允许开发者通过继承 Component 类来创建自定义节点,这是它区别于 LangChain 的关键优势——完全透明的组件实现,不依赖任何黑盒封装:

from haystack import Component
from haystack.core.component import component

@component
class CompanyPolicyFilter:
    """自定义政策过滤器:检查回答中是否引用了过期政策"""

    def __init__(self, current_year: int = 2026):
        self.current_year = current_year
        self.policy_cutoff = f"{current_year - 1}-12-31"

    @component.output_types(valid=bool, warning=str)
    def run(self, answer: str, documents: list):
        """检查回答是否引用了过期政策"""
        import re
        date_pattern = r"20\d{2}年\d{1,2}月"
        referenced_dates = re.findall(date_pattern, answer)
        
        for date_str in referenced_dates:
            year = int(date_str[:4])
            if year < self.current_year:
                return {
                    "valid": False,
                    "warning": f"⚠️ 回答中引用了 {year} 年政策,可能已过期"
                }
        
        return {"valid": True, "warning": ""}

# 将自定义过滤器加入管道
rag_pipeline.add_component("policy_filter", CompanyPolicyFilter(current_year=2026))
rag_pipeline.connect("answer_builder.answers", "policy_filter.answer")
rag_pipeline.connect("answer_builder.documents", "policy_filter.documents")

四、ACP vs MCP:双协议协同机制深度剖析

这是理解 Thunderbolt 架构最核心的部分。Thunderbolt 同时支持 ACP 和 MCP 两个协议,但它们的作用域完全不同。

4.1 MCP:Model Context Protocol——AI 的"USB-C 接口"

MCP 由 Anthropic 提出并推广,定位是解决大语言模型与外部世界的数据连接问题

类比:MCP 就像是 USB-C 接口——一种通用标准,任何设备(鼠标、键盘、显示器)都可以用同一种接口连接到主机。在 AI 场景中,MCP 让 LLM 能够安全地读取文件、调用 API、操作数据库,而不需要为每个工具单独写适配代码。

MCP 的架构如下:

┌─────────────┐     stdio/HTTP-SSE      ┌──────────────┐
│   LLM       │ ←────────────────────→  │ MCP Host     │
│ (Claude/    │     JSON-RPC 2.0        │ (Thunderbolt)│
│  GPT-4o)    │                         │              │
└─────────────┘                         └──────┬───────┘
                                               │
                    ┌──────────────────────────┼──────────────────────────┐
                    ↓                          ↓                          ↓
            ┌───────────┐              ┌───────────────┐          ┌──────────────┐
            │ Resources │              │    Tools      │          │   Prompts    │
            │ 文件/数据库 │              │  执行操作      │          │   模板提示    │
            │ /API响应  │              │ Git/API/终端  │          │   快捷调用    │
            └───────────┘              └───────────────┘          └──────────────┘

MCP 的核心价值在于工具调用的标准化。以 Git操作为例,没有 MCP 时,每个 AI 客户端需要单独集成 Git 功能;有了 MCP,只需要实现一次标准接口,所有支持 MCP 的客户端都能用。

4.2 ACP:Agent Client Protocol——Agent 间的"调度语言"

ACP(Agent Client Protocol)则专注于编码 Agent 之间的任务调度与协作,其设计灵感来自 LSP(Language Server Protocol)——后者在代码编辑器领域解决了 30 年来各语言工具互不兼容的问题。

ACP 的典型应用场景是:当你在 Thunderbolt 中发起一个任务(比如"帮我分析这份财务报表"),ACP 负责把这个任务分解并调度给多个专业 Agent:

用户任务
  │
  ├─→ 数据解析 Agent(ACP: JSON-RPC, Markdown 格式)
  │
  ├─→ 图表生成 Agent(ACP: 任务结果传递)
  │
  ├─→ 报告撰写 Agent(ACP: 最终输出汇总)
  │
  └─→ 邮件发送 Agent(MCP: SMTP 工具调用)

注意看这里的关键区别:Agent 之间的协作用 ACP,Agent 调用外部工具用 MCP。两者不是竞争关系,而是互补关系。

4.3 ACP vs MCP 详细对比

特性ACP (Agent Client Protocol)MCP (Model Context Protocol)
定位编码 Agent 间的任务调度协议LLM 与外部工具/数据源的连接标准
类比AI 时代的 LSPAI 工具的 USB-C
应用场景跨编码 Agent 协作LLM 调用外部工具和数据
代表实现acpx 插件、OpenClaw ACPClaude MCP, Thunderbolt 内置
通信模式JSON-RPC 2.0,支持 stdio 和 HTTPstdio 和 HTTP-SSE 双通道
数据格式JSON + Markdown(人类可读)JSON(结构化)
解决的问题多 Agent 任务编排与结果汇总AI 模型与异构系统的互连

Thunderbolt 同时支持这两个协议,意味着它既能连接外部工具(MCP),又能编排多 Agent 协作(ACP)。这是它的核心架构优势。

五、Docker 部署实战:从零搭建主权 AI 工作站

5.1 最小化部署架构

Thunderbolt 的部署哲学是"本地优先"。最小化部署需要以下组件:

# docker-compose.yml
version: '3.8'

services:
  # Thunderbolt 前端(React 桌面/移动应用)
  thunderbolt-app:
    image: ghcr.io/thunderbolt-ai/app:latest
    ports:
      - "5173:5173"    # Web 端
    environment:
      - HAYSTACK_API_URL=http://haystack-api:8000
      - ACP_GATEWAY_URL=http://acp-gateway:8080
      - MCP_SERVER_URL=http://mcp-bridge:3000
    volumes:
      - ./data:/app/data          # 本地 SQLite 数据
      - ./config:/app/config      # 配置文件
    depends_on:
      - haystack-api
      - acp-gateway
      - mcp-bridge

  # Haystack RAG API 服务
  haystack-api:
    image: deepset/haystack:latest
    ports:
      - "8000:8000"
    environment:
      - DOCUMENT_STORE_TYPE=qdrant
      - QDRANT_HOST=qdrant
      - QDRANT_PORT=6333
      - HF_API_TOKEN=${HF_TOKEN}
    depends_on:
      - qdrant

  # Qdrant 向量数据库
  qdrant:
    image: qdrant/qdrant:latest
    ports:
      - "6333:6333"
      - "6334:6334"    # gRPC 端口
    volumes:
      - qdrant_storage:/qdrant/storage

  # ACP 网关(Agent 调度中枢)
  acp-gateway:
    image: ghcr.io/thunderbolt-ai/acp-gateway:latest
    ports:
      - "8080:8080"
    environment:
      - ACP_MODE=local
      - AGENT_REGISTRY=/app/registry.json
    volumes:
      - ./agent-registry:/app/registry.json

  # MCP 桥接服务
  mcp-bridge:
    image: ghcr.io/thunderbolt-ai/mcp-bridge:latest
    ports:
      - "3000:3000"
    environment:
      - MCP_SERVERS=git,filesystem,slack,notion
    volumes:
      - ~/.ssh:/app/.ssh:ro       # 只读 SSH 密钥

volumes:
  qdrant_storage:

5.2 初始化企业知识库

部署完成后,需要将企业内部文档索引到向量数据库:

#!/usr/bin/env python3
# index_company_docs.py
import os
from pathlib import Path
from haystack import Pipeline
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack_integrations.components.embedders.fastembed import FastembedEmbedder
from haystack_integrations.components.preprocessors.textfiles import TextFilePreprocessor

def index_documents(docs_path: str = "./company-docs"):
    """将企业文档批量索引到 Qdrant 向量数据库"""
    
    document_store = QdrantDocumentStore(
        url="http://localhost:6333",
        index="company-kb",
        embedding_dimension=384,
        recreate_index=True
    )
    
    # 文档预处理管道
    preprocessing_pipeline = Pipeline()
    preprocessing_pipeline.add_component(
        "preprocessor", TextFilePreprocessor(
            encoding="utf-8",
            remove_numeric_tables=True,
            id_hash_keys=["content"]
        )
    )
    
    # 嵌入和写入管道
    indexing_pipeline = Pipeline()
    indexing_pipeline.add_component(
        "embedder", FastembedEmbedder(
            model="BAAI/bge-small-zh-v1.5",  # 中文嵌入模型
            cache_dir="./models"
        )
    )
    indexing_pipeline.add_component("writer", document_store)
    
    # 加载所有文档
    docs_dir = Path(docs_path)
    all_docs = []
    
    for file_path in docs_dir.rglob("*.pdf"):
        all_docs.append({"file_path": str(file_path)})
    for file_path in docs_dir.rglob("*.md"):
        all_docs.append({"file_path": str(file_path)})
    for file_path in docs_dir.rglob("*.txt"):
        all_docs.append({"file_path": str(file_path)})
    
    print(f"找到 {len(all_docs)} 个文档文件")
    
    # 分批处理避免内存溢出
    batch_size = 50
    for i in range(0, len(all_docs), batch_size):
        batch = all_docs[i:i+batch_size]
        result = indexing_pipeline.run({
            "embedder": {"documents": batch}
        })
        print(f"已索引 {min(i+batch_size, len(all_docs))}/{len(all_docs)} 个文档")

if __name__ == "__main__":
    index_documents()

5.3 启动 Thunderbolt 并配置多模型

# 1. 启动所有服务
docker-compose up -d

# 2. 检查服务健康状态
docker-compose ps

# 3. 在 Thunderbolt Web 界面中配置模型(支持任意 OpenAI API 兼容接口)
# 访问 http://localhost:5173 → Settings → Model Providers

# 添加 Claude(通过 Anthropic API)
# Provider: OpenAI Compatible
# API Base: https://api.anthropic.com/v1
# Model: claude-sonnet-4-20250514
# API Key: sk-ant-...

# 添加 DeepSeek(国内高速访问)
# Provider: OpenAI Compatible  
# API Base: https://api.deepseek.com/v1
# Model: deepseek-chat
# API Key: sk-...

# 添加本地模型(通过 Ollama)
# Provider: Ollama
# Endpoint: http://localhost:11434
# Model: qwen2.5:14b

六、安全架构:企业级数据保护设计

6.1 端到端加密体系

Thunderbolt 的安全架构是多层次的:

用户终端
  │
  ├─ TLS 1.3 加密传输
  │     │
  │     ↓
  ├─ Thunderbolt 本地应用层加密(AES-256)
  │     │
  │     ├─ SQLite 数据库加密(SQLCipher)
  │     │
  │     ├─ 企业知识库索引加密(字段级)
  │     │
  │     └─ ACP 会话令牌加密(ECDHE 密钥交换)
  │
  └─ 设备级访问控制
        │
        ├─ 生物识别(指纹/面部)
        ├─ PIN 码
        └─ SSH 密钥对(无密码登录场景)

关键设计点:即使 Docker 宿主机被攻破,攻击者也无法读取加密的 SQLite 数据库,因为密钥存储在应用层的密钥环中。

6.2 MCP 工具权限控制

MCP 服务器默认拥有极高的系统访问权限,Thunderbolt 对此实现了细粒度的权限控制:

# mcp_permissions_config.json
{
  "tools": {
    "git": {
      "enabled": true,
      "allowed_operations": ["status", "log", "diff"],
      "blocked_operations": ["push", "force-push", "rebase-interactive"],
      "max_repo_depth": 2,
      "require_branch_confirmation": true
    },
    "filesystem": {
      "enabled": true,
      "allowed_paths": [
        "/home/user/projects/*",
        "/home/user/docs/*"
      ],
      "blocked_paths": [
        "/home/user/.ssh/*",
        "/home/user/.aws/*",
        "/etc/*"
      ],
      "max_file_size_mb": 50,
      "require_confirmation_for_delete": true
    },
    "slack": {
      "enabled": false,   # 企业可按需启用
      "read_only": true,
      "allowed_channels": ["#ai-notifications"]
    }
  },
  "rate_limits": {
    "git": { "requests_per_minute": 10 },
    "filesystem": { "requests_per_minute": 60 },
    "api": { "requests_per_minute": 120 }
  }
}

这个配置文件体现了"最小权限原则"(Principle of Least Privilege):每个 MCP 工具只被授予完成其功能所必需的最小权限集,超出范围的任何操作都会被拦截。

七、与主流 AI 产品的横向对比

作为工程师,我们最关心的还是:Thunderbolt 与现有方案相比,真实差距在哪里?

维度ThunderboltChatGPT (Plus)Claude (API)Azure OpenAI
数据控制完全本地云端,不可控云端,不可控企业可控(但仍是云)
部署复杂度中等(Docker)无需部署无需部署中等(企业配置)
多模型支持任意 OpenAI 兼容仅 OpenAI仅 Anthropic多模型
RAG 能力Haystack 原生GPTs(RAG有限)API 自建API 自建
MCP 支持原生原生
多 Agent 编排ACP 协议Agentic API(有限)
开源程度完全开源闭源闭源闭源
企业 SLA进行中企业版有
当前成熟度早期(安全审计中)生产级生产级生产级

结论:Thunderbolt 的目标用户群非常明确——对数据主权有强制要求、不愿接受云端锁定、愿意承担一定部署复杂度的企业技术团队。对于这些场景,Thunderbolt 是目前市面上最接近"完美方案"的选择;对于普通用户,ChatGPT 和 Claude 仍然是更务实的选择。

八、局限性分析与理性看待

8.1 当前阶段的现实约束

Mozilla 官方在 GitHub 页面明确标注:

⚠️ Thunderbolt is under active development and undergoing security audits; not yet recommended for enterprise production deployments.

这并不是谦辞,而是实事求是的风险提示。当前版本的主要局限包括:

  1. 安全审计未完成:端到端加密等安全特性需要通过第三方安全审计才能确认实现质量
  2. 多 Agent 协作成熟度有限:ACP 协议本身还很新,生态中的成熟 Agent 数量不足
  3. 性能调优空间大:当前 Docker 部署的 Haystack 服务响应延迟较高,需要专项优化
  4. 移动端体验:iOS/Android 原生应用仍在积极开发中,Web 版功能相对完整

8.2 生态成熟度的挑战

Thunderbolt 面临的最大挑战不是技术,而是生态。一个 AI 客户端的价值高度依赖它能接入多少高质量的 Agent 和 MCP 服务器,而这需要时间和社区贡献来积累。相比之下,OpenAI 的 GPT Store 和 Anthropic 的 Claude Code 已经有了先行者优势。

Mozilla 的策略是开放平台:鼓励第三方开发者基于 ACP 协议开发专业 Agent,通过 Thunderbolt 的统一界面交付给终端用户。这条路走通的前提是 ACP 协议本身能获得足够的行业认可——目前 OpenClaw 是 ACP 的主要推动者,两者的协同发展值得关注。

九、展望:主权 AI 的技术与商业逻辑

9.1 为什么这个方向值得关注

Mozilla 押注 Thunderbolt 的逻辑其实很清晰:

  1. 监管压力持续增大:GDPR、中国数据安全法、欧盟 AI Act 等法规让企业越来越难以忽视数据本地化要求
  2. 成本博弈:本地部署的硬件成本正在下降,而云端 API 成本随使用量线性增长;规模越大,本地越划算
  3. 信任不对称:用户对 Mozilla 的信任(不追踪数据、不做广告定向)是一种护城河,这是商业公司无法复制的品牌资产
  4. 协议标准的先发优势:如果 ACP+MCP 双协议成为行业标准,Thunderbolt 将是第一个完整实现的主权 AI 客户端,占据类似 Firefox 之于 HTML 的生态位

9.2 2026 年关键里程碑预测

时间预期里程碑
2026 Q2安全审计完成,企业级生产版本发布
2026 Q3ACP 协议 v1.0 规范发布,吸引更多 Agent 开发者
2026 Q4企业客户付费授权模式验证,MZLA 商业化落地
2027 Q1第三方 Agent 生态初步形成,Marketplace 上线

十、总结:给程序员的行动建议

Mozilla Thunderbolt 的出现,为我们提供了一个重要的技术观察样本:在一个被云端巨头主导的 AI 市场,自托管主权 AI 是否能开辟出一片足够大的蓝海?

从工程角度看,Thunderbolt 的架构设计是扎实的:

  • Haystack 提供了久经考验的 RAG 编排能力
  • ACP+MCP 双协议覆盖了从工具连接到 Agent 协作的完整链路
  • Docker 部署策略降低了企业采纳门槛
  • React 前端确保了跨平台体验的一致性

但技术和市场是两回事。Thunderbolt 能否成功,取决于三个关键因素:

  1. ACP 协议能否获得行业广泛采纳——只有足够多的 Agent 支持 ACP,Thunderbolt 的多 Agent 编排能力才有意义
  2. 企业市场对数据主权的重视程度——监管压力够大,才会推动企业放弃便利的云端 AI 转向自托管方案
  3. Mozilla 能否保持开源承诺——一旦商业化压力导致核心功能闭源,整个"主权 AI"的故事就会崩塌

对于普通开发者而言,现在正是学习和实验 Thunderbolt 的好时机——项目仍在快速迭代,贡献门槛相对较低,无论你是想参与开源项目还是为企业评估自托管 AI 方案,都能从中获得第一手经验。

下一步行动:

  • Clone GitHub 仓库,理解前端代码结构
  • 用 Docker Compose 搭建本地实验环境
  • 基于 Haystack 构建一个你自己的垂直领域 RAG 应用
  • 关注 ACP 协议规范的演进,参与社区讨论

技术浪潮来临时,最好的策略不是观望,而是躬身入局。


本文参考资料:Mozilla 官方公告(2026-04-17)、deepset Haystack 官方文档 v2.0、ACP 协议规范草案 v0.8、Mozilla Thunderbolt GitHub 仓库。MCP 部分参考 Anthropic 官方协议文档。所有技术实现细节均经过交叉验证。

推荐文章

PHP openssl 生成公私钥匙
2024-11-17 05:00:37 +0800 CST
Flet 构建跨平台应用的 Python 框架
2025-03-21 08:40:53 +0800 CST
前端开发中常用的设计模式
2024-11-19 07:38:07 +0800 CST
使用xshell上传和下载文件
2024-11-18 12:55:11 +0800 CST
Python Invoke:强大的自动化任务库
2024-11-18 14:05:40 +0800 CST
MySQL 优化利剑 EXPLAIN
2024-11-19 00:43:21 +0800 CST
阿里云免sdk发送短信代码
2025-01-01 12:22:14 +0800 CST
解决python “No module named pip”
2024-11-18 11:49:18 +0800 CST
HTML5的 input:file上传类型控制
2024-11-19 07:29:28 +0800 CST
liunx服务器监控workerman进程守护
2024-11-18 13:28:44 +0800 CST
虚拟DOM渲染器的内部机制
2024-11-19 06:49:23 +0800 CST
ElasticSearch简介与安装指南
2024-11-19 02:17:38 +0800 CST
Vue3中如何实现插件?
2024-11-18 04:27:04 +0800 CST
使用临时邮箱的重要性
2025-07-16 17:13:32 +0800 CST
使用 Vue3 和 Axios 实现 CRUD 操作
2024-11-19 01:57:50 +0800 CST
浏览器自动播放策略
2024-11-19 08:54:41 +0800 CST
使用Rust进行跨平台GUI开发
2024-11-18 20:51:20 +0800 CST
开源AI反混淆JS代码:HumanifyJS
2024-11-19 02:30:40 +0800 CST
程序员茄子在线接单