CL-01_Clap 是什么?—— 智能体的交互新范式

Clap 是什么?------ 智能体的交互新范式

当我们谈论 AI Agent 的交互方式时,大多数人想到的是聊天框、API 调用或工具链。但 Clap 正在重新定义这一切------它不是一个框架,不是一套 API,而是一种全新的交互哲学。

前言

2025 年,AI Agent 领域经历了从"能用"到"好用"的关键转折。当 OpenAI、Google、Anthropic 等巨头在模型能力上不断突破时,一个被忽视的瓶颈逐渐浮出水面:智能体与人类、智能体与智能体之间的交互方式,仍然停留在上一个时代。

传统的 GUI 点击、CLI 命令、REST API 调用,本质上都是为"人类直接操作"而设计的。当执行者从人类变成 AI Agent 时,这些交互方式暴露出了大量的冗余和低效。Clap(C ommand L ayer for A gent P rotocol)应运而生,它试图回答一个根本性问题:如果交互的双方都是(或其中一方是)AI Agent,最优的交互形态应该是什么?

本文将深入解读 Clap 的定义、起源、核心设计理念,并通过代码示例展示其在实际场景中的应用。


一、Clap 的定义与起源

1.1 什么是 Clap?

Clap 的全称是 Command Layer for Agent Protocol ,直译为"智能体协议的命令层"。它不是一个具体的软件产品,而是一套交互协议规范,定义了 Agent 与外部世界(人类、其他 Agent、工具、环境)之间进行高效通信的标准化方式。

用一个类比来理解:如果说 HTTP 是 Web 世界的通信协议,MCP(Model Context Protocol)是 Agent 与工具之间的连接协议,那么 Clap 就是 Agent 与"交互对象"之间的行为协议。它关注的不是"传什么数据",而是"以什么方式交互"。

Clap 的核心定义可以概括为三个维度:

  • 意图层(Intent Layer):将用户的自然语言输入解析为结构化的意图表达
  • 动作层(Action Layer):将意图映射为可执行的 Agent 动作序列
  • 反馈层(Feedback Layer):以最小信息熵的方式向用户呈现执行结果

1.2 起源与演进

Clap 的概念最早可以追溯到 2024 年底,当时一批来自 Anthropic 和 Google DeepMind 的研究者开始关注 Agent 交互的"最后一公里"问题。他们在实践中发现:

  1. 传统 GUI 对 Agent 不友好:点击按钮、填写表单这些操作,对人类来说直观,但对 Agent 来说充满了歧义和冗余
  2. 纯 API 调用对人类不友好:Agent 之间的通信效率很高,但人类难以理解和调试
  3. 自然语言交互信息密度太低:用自然语言描述一个复杂操作,往往需要多轮对话,效率远低于结构化命令

2025 年初,随着 A2A(Agent-to-Agent)协议和 MCP 的成熟,交互层的标准化需求变得愈发迫切。Clap 作为"交互协议层"被正式提出,目标是成为 Agent 时代的"交互基础设施"。


二、交互范式的演变

要理解 Clap 的价值,我们需要先回顾人机交互范式的演变历程。

2.1 四代交互范式

代际 交互方式 代表技术 核心特征 局限性
第一代 命令行 CLI, Shell 高效、精确 学习曲线陡峭
第二代 图形界面 GUI, WIMP 直观、易用 操作冗余、对 Agent 不友好
第三代 自然语言 ChatGPT, Claude 低门槛、灵活 信息密度低、易产生歧义
第四代 Agent 协议 Clap, A2A, MCP 结构化意图、高效执行 生态尚在建设中

每一代交互范式的出现,都不是对前一代的完全替代,而是在特定场景下的最优解。Clap 代表的第四代交互范式,其核心突破在于:它为 Agent 量身定制了交互方式,同时保持了人类的可读性和可调试性。

2.2 为什么需要新的交互范式?

让我们通过一个具体场景来理解。假设用户想要完成以下任务:

"帮我查看过去一周 GitHub 上 Star 增长最快的 AI Agent 项目,筛选出 Python 语言的,按 Star 数排序,生成一份 Markdown 报告。"

传统 GUI 方式:打开浏览器 → 搜索 GitHub → 切换到 Trending 页面 → 设置时间范围为一周 → 逐个查看项目 → 手动记录 → 打开编辑器 → 写 Markdown 报告。至少需要 10+ 次点击和多次手动操作。

自然语言方式:向 Agent 描述需求 → Agent 可能需要多轮澄清("Python 语言是指项目主要语言还是包含 Python?") → Agent 执行 → 用户检查结果。需要 3-5 轮对话。

Clap 方式 :用户发出结构化意图 → Agent 一次性理解并执行 → 结果以最优格式呈现。一轮交互,零歧义。

yaml 复制代码
# Clap 意图表达示例
intent:
  action: research
  target: github_trending
  filters:
    time_range: 7d
    language: python
    topic: ai-agent
  sort:
    by: stars
    order: desc
  output:
    format: markdown
    include:
      - name
      - description
      - stars
      - growth_rate
      - language

这种结构化但人类可读的意图表达方式,正是 Clap 的典型特征。


三、Clap 的核心设计理念

Clap 的设计遵循五个核心原则,这些原则共同定义了它的交互哲学。

3.1 意图优先(Intent-First)

传统交互关注"怎么做"(How),Clap 关注"要做什么"(What)。用户(或 Agent)只需要声明意图,具体的执行路径由接收方 Agent 自行规划。

这一理念借鉴了声明式编程的思想------就像 Kubernetes 中你声明"我要 3 个副本",而不是"先创建 Pod,再配置 Service,再设置负载均衡"。Clap 将这种声明式理念引入了 Agent 交互领域。

3.2 最小信息熵(Minimum Information Entropy)

Clap 要求每一次交互传递的信息恰好是完成任务所需的最小信息量------不多也不少。这解决了两个极端问题:

  • 信息过载:传统 API 返回大量冗余字段,Agent 需要花大量 Token 解析
  • 信息不足:自然语言交互常因歧义导致多轮澄清

Clap 通过结构化 Schema + 上下文感知来实现最小信息熵。交互双方共享一个上下文(Context),只有在该上下文中无法推断的信息才需要显式传递。

3.3 双向可读(Human-Agent Readable)

Clap 的协议格式同时满足两个需求:

  • Agent 可解析:结构化、无歧义、可直接用于推理
  • 人类可阅读:YAML/JSON 格式、语义化命名、附带注释

这使得人类开发者可以轻松地审查、调试和修改 Agent 之间的交互过程,而不需要额外的翻译工具。

3.4 渐进式复杂度(Progressive Complexity)

Clap 的设计允许从最简单的单步交互开始,逐步扩展到复杂的多步编排:

  • Level 1:单意图、单动作、单结果
  • Level 2:多意图、多动作、流式结果
  • Level 3:意图链(Intent Chain)、条件分支、循环
  • Level 4:多 Agent 协作、分布式执行、冲突解决

这种渐进式设计确保了 Clap 既可以用于简单的任务,也能支撑复杂的 Agent 编排场景。

3.5 环境感知(Environment-Aware)

Clap 协议内置了环境上下文的传递机制。Agent 在交互时,不仅传递意图和数据,还传递环境信息(如当前时间、用户偏好、系统状态),这使得接收方可以做出更精准的响应,而不需要额外的查询。


四、代码示例:Clap 交互演示

4.1 基础 Clap 交互

以下是一个使用 Python 实现的基础 Clap 交互演示,展示了用户 Agent 与工具 Agent 之间的通信过程:

python 复制代码
"""
Clap 交互基础演示
展示 Agent-to-Agent 的 Clap 协议通信
"""

from dataclasses import dataclass, field
from typing import Any, Optional
from enum import Enum
import json
import uuid
from datetime import datetime


class IntentType(Enum):
    """Clap 意图类型枚举"""
    QUERY = "query"           # 查询意图
    ACTION = "action"         # 执行意图
    STREAM = "stream"         # 流式意图
    CHAIN = "chain"           # 链式意图


@dataclass
class ClapContext:
    """Clap 上下文 - 环境感知的核心"""
    session_id: str = field(default_factory=lambda: str(uuid.uuid4()))
    timestamp: str = field(default_factory=lambda: datetime.now().isoformat())
    user_preferences: dict = field(default_factory=dict)
    environment: dict = field(default_factory=dict)
    history: list = field(default_factory=list)


@dataclass
class ClapIntent:
    """Clap 意图 - 交互的基本单元"""
    intent_id: str = field(default_factory=lambda: str(uuid.uuid4()))
    intent_type: IntentType = IntentType.ACTION
    action: str = ""
    target: str = ""
    parameters: dict = field(default_factory=dict)
    constraints: dict = field(default_factory=dict)
    expected_output: dict = field(default_factory=dict)

    def to_clap_message(self, context: ClapContext) -> dict:
        """将意图转换为 Clap 协议消息"""
        return {
            "clap_version": "1.0",
            "intent_id": self.intent_id,
            "type": self.intent_type.value,
            "action": self.action,
            "target": self.target,
            "parameters": self.parameters,
            "constraints": self.constraints,
            "expected_output": self.expected_output,
            "context": {
                "session_id": context.session_id,
                "timestamp": context.timestamp,
                "preferences": context.user_preferences,
                "environment": context.environment,
            }
        }


@dataclass
class ClapResponse:
    """Clap 响应 - 最小信息熵的执行结果"""
    intent_id: str
    status: str  # "success" | "partial" | "error"
    data: Any = None
    metadata: dict = field(default_factory=dict)
    suggestions: list = field(default_factory=list)


class ClapAgent:
    """Clap 协议的 Agent 实现"""

    def __init__(self, name: str, capabilities: list[str]):
        self.name = name
        self.capabilities = capabilities
        self.context = ClapContext()

    def send_intent(self, intent: ClapIntent, target_agent: "ClapAgent") -> ClapResponse:
        """向目标 Agent 发送 Clap 意图"""
        message = intent.to_clap_message(self.context)
        # 记录到上下文历史
        self.context.history.append({
            "direction": "outbound",
            "intent_id": intent.intent_id,
            "timestamp": datetime.now().isoformat()
        })
        # 目标 Agent 处理意图
        return target_agent.receive_intent(message)

    def receive_intent(self, message: dict) -> ClapResponse:
        """接收并处理 Clap 意图"""
        action = message.get("action", "")
        target = message.get("target", "")

        # 检查能力匹配
        if target not in self.capabilities:
            return ClapResponse(
                intent_id=message.get("intent_id", ""),
                status="error",
                metadata={"reason": f"Agent {self.name} 不支持目标: {target}"}
            )

        # 模拟执行
        result_data = self._execute_action(action, message.get("parameters", {}))

        return ClapResponse(
            intent_id=message.get("intent_id", ""),
            status="success",
            data=result_data,
            metadata={"agent": self.name, "execution_time_ms": 42}
        )

    def _execute_action(self, action: str, params: dict) -> Any:
        """执行具体动作(示例实现)"""
        if action == "search":
            return {"results": [{"name": "demo-project", "stars": 1500}]}
        elif action == "analyze":
            return {"summary": "分析完成", "insights": ["洞察1", "洞察2"]}
        return {"message": f"执行了动作: {action}"}


# 使用示例
if __name__ == "__main__":
    # 创建两个 Clap Agent
    user_agent = ClapAgent("UserAgent", capabilities=["request"])
    research_agent = ClapAgent("ResearchAgent", capabilities=["github", "arxiv", "web"])

    # 构建 Clap 意图
    intent = ClapIntent(
        intent_type=IntentType.QUERY,
        action="search",
        target="github",
        parameters={
            "query": "AI agent",
            "language": "python",
            "time_range": "7d",
            "sort": "stars"
        },
        expected_output={
            "format": "list",
            "fields": ["name", "stars", "description"]
        }
    )

    # 发送 Clap 意图
    response = user_agent.send_intent(intent, research_agent)

    # 输出结果
    print(f"状态: {response.status}")
    print(f"数据: {json.dumps(response.data, ensure_ascii=False, indent=2)}")
    print(f"元数据: {response.metadata}")

4.2 Clap 意图链(Intent Chain)

Clap 的强大之处在于意图链------多个意图可以串联成一个执行流水线,实现复杂的多步任务:

python 复制代码
"""
Clap 意图链示例
展示如何将多个 Clap 意图串联为执行流水线
"""

from dataclasses import dataclass, field
from typing import Any, Callable
import asyncio


@dataclass
class ChainStep:
    """意图链中的一个步骤"""
    name: str
    action: str
    transform: Callable[[Any], dict] = lambda x: {}
    condition: Callable[[Any], bool] = lambda x: True


class ClapIntentChain:
    """Clap 意图链 - 顺序执行多个意图"""

    def __init__(self, chain_id: str):
        self.chain_id = chain_id
        self.steps: list[ChainStep] = []
        self.results: list[Any] = []

    def add_step(self, step: ChainStep) -> "ClapIntentChain":
        """添加步骤到链中(支持链式调用)"""
        self.steps.append(step)
        return self

    async def execute(self, agent: Any, initial_input: dict) -> dict:
        """异步执行整个意图链"""
        current_input = initial_input

        for i, step in enumerate(self.steps):
            # 条件检查
            if not step.condition(current_input):
                print(f"  ⏭ 步骤 {i+1} [{step.name}] 跳过(条件不满足)")
                continue

            print(f"  ▶ 步骤 {i+1}/{len(self.steps)} [{step.name}] 执行中...")

            # 构建 Clap 意图
            intent_params = step.transform(current_input)

            # 执行动作
            result = await self._execute_step(agent, step, intent_params)
            self.results.append(result)

            # 将结果传递给下一步
            current_input = result
            print(f"  ✅ 步骤 [{step.name}] 完成")

        return {
            "chain_id": self.chain_id,
            "steps_executed": len(self.results),
            "final_result": self.results[-1] if self.results else None,
            "all_results": self.results
        }

    async def _execute_step(self, agent: Any, step: ChainStep, params: dict) -> Any:
        """执行单个步骤"""
        await asyncio.sleep(0.01)  # 模拟异步执行
        return {"step": step.name, "action": step.action, "data": params}


# 使用示例:构建一个研究分析意图链
async def main():
    chain = ClapIntentChain("research-analysis-v1")

    # 步骤 1:搜索
    chain.add_step(ChainStep(
        name="搜索 GitHub 热门项目",
        action="search",
        transform=lambda x: {
            "source": "github",
            "query": x.get("query", "AI agent"),
            "time_range": "7d"
        }
    ))

    # 步骤 2:筛选
    chain.add_step(ChainStep(
        name="筛选 Python 项目",
        action="filter",
        transform=lambda x: {
            "data": x.get("data", []),
            "filter": {"language": "python"}
        }
    ))

    # 步骤 3:分析
    chain.add_step(ChainStep(
        name="生成分析报告",
        action="analyze",
        transform=lambda x: {
            "items": x.get("data", []),
            "metrics": ["stars", "growth_rate", "commit_frequency"]
        }
    ))

    # 执行意图链
    agent = None  # 实际使用中替换为真实的 ClapAgent
    result = await chain.execute(agent, {"query": "AI agent framework"})
    print(f"\n意图链执行完成: {result['steps_executed']} 步")


# asyncio.run(main())

4.3 Clap 上下文管理器

上下文感知是 Clap 区别于其他协议的关键特性。以下是一个上下文管理器的实现:

python 复制代码
"""
Clap 上下文管理器
实现环境感知和上下文共享
"""

from dataclasses import dataclass, field
from typing import Any, Optional
from datetime import datetime, timedelta
import hashlib
import json


@dataclass
class ContextSnapshot:
    """上下文快照 - 用于回溯和调试"""
    snapshot_id: str
    timestamp: str
    state: dict
    trigger: str  # 触发快照的原因


class ClapContextManager:
    """Clap 上下文管理器 - 管理交互上下文的生命周期"""

    def __init__(self, session_id: str):
        self.session_id = session_id
        self.shared_state: dict = {
            "user_preferences": {},
            "environment": {},
            "cached_results": {},
            "active_intents": [],
        }
        self.snapshots: list[ContextSnapshot] = []
        self.ttl_seconds = 3600  # 上下文默认 1 小时过期

    def update_state(self, key: str, value: Any, source: str = "user"):
        """更新共享状态"""
        self.shared_state[key] = {
            "value": value,
            "source": source,
            "updated_at": datetime.now().isoformat(),
        }
        self._create_snapshot(f"state_update:{key}")

    def get_relevant_context(self, intent_type: str, target: str) -> dict:
        """
        根据意图类型和目标,返回最小相关上下文
        这是实现"最小信息熵"的关键方法
        """
        relevant = {}

        # 用户偏好 - 几乎所有意图都需要
        if self.shared_state.get("user_preferences"):
            relevant["preferences"] = self.shared_state["user_preferences"]["value"]

        # 缓存结果 - 查询类意图可以复用
        if intent_type == "query":
            cache_key = f"{target}"
            cached = self.shared_state.get("cached_results", {}).get(cache_key)
            if cached:
                age = datetime.now() - datetime.fromisoformat(cached["cached_at"])
                if age < timedelta(minutes=30):
                    relevant["cached_result"] = cached["value"]
                    relevant["cache_age_minutes"] = age.seconds // 60

        # 环境信息 - 根据目标筛选相关环境变量
        env = self.shared_state.get("environment", {}).get("value", {})
        if target.startswith("github"):
            relevant["env"] = {k: v for k, v in env.items()
                             if k in ["github_token", "default_org"]}
        elif target.startswith("arxiv"):
            relevant["env"] = {k: v for k, v in env.items()
                             if k in ["arxiv_categories"]}

        return relevant

    def compress_for_transmission(self, context: dict) -> str:
        """
        压缩上下文用于传输
        大上下文场景下减少 Token 消耗
        """
        serialized = json.dumps(context, sort_keys=True)
        # 简单的哈希压缩示意
        if len(serialized) > 1000:
            return json.dumps({
                "compressed": True,
                "hash": hashlib.md5(serialized.encode()).hexdigest()[:12],
                "summary": {k: type(v).__name__ for k, v in context.items()},
                "full_context_ref": f"ctx://{self.session_id}/{len(self.snapshots)}"
            })
        return serialized

    def _create_snapshot(self, trigger: str):
        """创建上下文快照"""
        snapshot = ContextSnapshot(
            snapshot_id=f"snap-{len(self.snapshots):04d}",
            timestamp=datetime.now().isoformat(),
            state=self.shared_state.copy(),
            trigger=trigger
        )
        self.snapshots.append(snapshot)

    def get_debug_trace(self) -> list[dict]:
        """获取调试追踪信息"""
        return [
            {
                "id": s.snapshot_id,
                "time": s.timestamp,
                "trigger": s.trigger,
            }
            for s in self.snapshots
        ]

五、与传统交互方式的对比

为了更直观地理解 Clap 的优势,我们将它与几种主流交互方式进行多维度对比:

维度 REST API 自然语言 (Chat) MCP A2A Clap
设计对象 人类开发者 终端用户 Agent ↔ 工具 Agent ↔ Agent Agent ↔ 任何对象
信息密度 极高
歧义性 极低
人类可读性
Agent 可解析性 极高
上下文传递 无(无状态) 有限 有限 原生支持
多步编排 需额外实现 自然但低效 不支持 有限 原生支持
错误处理 HTTP 状态码 模糊描述 结构化 结构化 意图级回退
学习成本 中低
适用场景 系统集成 人机对话 工具调用 Agent 协作 通用交互

从上表可以看出,Clap 在大多数维度上都表现优异,尤其是在信息密度上下文传递多步编排方面具有显著优势。这并不意味着 Clap 要取代其他交互方式------它们各有适用场景------但 Clap 确实为 Agent 时代的交互提供了一个更优的通用解。

与 MCP 的关系

一个常见的误解是 Clap 与 MCP 竞争。实际上,它们处于不同的层次:

  • MCP:解决的是 Agent 如何发现和调用工具(Tool)的问题
  • Clap:解决的是 Agent 如何与任意对象高效交互的问题

在实际架构中,Clap 通常位于 MCP 之上。一个典型的调用链是:

复制代码
用户意图 → Clap 意图解析 → Agent 决策 → MCP 工具调用 → 执行结果 → Clap 格式化响应

与 A2A 的关系

A2A(Agent-to-Agent)协议专注于 Agent 之间的通信标准,而 Clap 的范围更广------它涵盖了 Agent 与人类、Agent 与工具、Agent 与环境的所有交互场景。在 Agent-to-Agent 通信场景中,Clap 的意图格式可以作为 A2A 消息的 payload,两者是互补关系。


六、Clap 的应用场景

6.1 复杂任务编排

Clap 最大的优势在于处理复杂任务。例如,一个"竞品分析"任务可以被 Clap 意图链完美表达:

  1. 搜索意图:收集竞品信息
  2. 分析意图:提取关键指标
  3. 比较意图:生成对比矩阵
  4. 报告意图:输出可视化报告

每个步骤的输出自动成为下一步的输入,整个过程无需人工干预。

6.2 多 Agent 协作

在多 Agent 系统中,Clap 为不同角色的 Agent 提供了统一的交互语言。一个研究 Agent、一个写作 Agent 和一个审核 Agent 可以通过 Clap 意图无缝协作,每个 Agent 只需要理解 Clap 协议,而不需要了解其他 Agent 的内部实现。

6.3 人机混合交互

Clap 的双向可读性使其非常适合人机混合场景。人类可以审查和修改 Clap 意图,Agent 可以自动执行,两者在同一个协议框架下协作。


七、挑战与展望

尽管 Clap 展现出了巨大的潜力,但它仍面临一些挑战:

  1. 标准化进程:Clap 目前还处于早期阶段,协议规范尚未完全稳定
  2. 生态建设:需要更多的 Agent 框架和工具支持 Clap 协议
  3. 性能开销:结构化意图的序列化和解析会引入一定的性能开销
  4. 学习曲线:虽然比纯 API 友好,但仍然需要开发者理解意图设计的最佳实践

展望未来,随着 Agent 生态的进一步成熟,Clap 有望成为 Agent 交互的事实标准。正如 HTTP 统一了 Web 通信、SQL 统一了数据查询,Clap 可能会统一 Agent 时代的交互方式。


总结

Clap 代表了 AI Agent 交互范式的一次重要进化。它的核心贡献在于:

  1. 提出了"意图优先"的交互哲学,将关注点从"怎么做"转移到"要做什么"
  2. 实现了最小信息熵,让 Agent 之间的通信更加高效
  3. 保持了双向可读性,兼顾了 Agent 的解析效率和人类的可调试性
  4. 支持渐进式复杂度,从简单任务到复杂编排都能优雅应对
  5. 内置环境感知,让交互更加智能和上下文化

Clap 不是要取代现有的交互方式,而是在 Agent 时代提供了一个更优的交互层选择。对于正在构建 Agent 系统的开发者来说,理解和采用 Clap 协议,将为系统的可扩展性和可维护性带来显著的提升。


参考文献

  1. Anthropic. (2024). "Model Context Protocol (MCP) Specification." Anthropic Technical Documentation.
  2. Google DeepMind. (2025). "Agent-to-Agent (A2A) Protocol: Enabling Multi-Agent Communication." Google AI Technical Report.
  3. Park, J. S., et al. (2023). "Generative Agents: Interactive Simulacra of Human Behavior." Proceedings of the 36th Annual ACM Symposium on User Interface Software and Technology (UIST).
  4. Xi, Z., et al. (2023). "The Rise and Potential of Large Language Model Based Agents: A Survey." arXiv preprint arXiv:2309.07864.
  5. Wang, L., et al. (2024). "A Survey on Large Language Model based Autonomous Agents." Frontiers of Computer Science, 18(6).

本系列覆盖 AI 大模型基础、Agent 开发、MCP 协议、Skill 开发、RAG、模型微调、部署推理 七大方向,从入门到实战的全栈内容持续更新中。

所有文章的 Markdown 源文件、可运行代码、高清配图已整理成完整资料包。

👍 点赞 + ⭐ 关注,评论区扣「1」,挨个发你领取方式 👇

相关推荐
海盗12344 小时前
微软技术日报 2026-09-11:VS Code 语音与定时自动化上线,Copilot 键终于可改映射
microsoft·自动化·copilot
工业HMI实战笔记19 小时前
玩具制造HMI:注塑成型的快速换模与质量监控界面
人工智能·学习·交互·制造
兰亭妙微UI设计公司1 天前
UI设计外包项目复盘沉淀|兰亭妙微:交互设计复盘,到底要写哪些内容
交互
海盗12341 天前
微软技术日报 2026-09-10:Project Zenith 开发者设备亮相,.NET 11 RC1 可投产
microsoft·r语言·.net
躺柒1 天前
读数据可视化29可视化中的交互(下)
信息可视化·人机交互·交互·可视化·数据可视化·交互技术
小白学大数据1 天前
Codex 里的 GPT 6 Astra、GPT 5.6 Sol、Terra、Luna 怎么选
开发语言·gpt·microsoft
YCOSA20252 天前
系统工具使用检测.exe (仅供娱乐)
python·microsoft
ly76892 天前
Spring WebFlux背压机制在生产环境的调优与陷阱
java·spring·microsoft·webflux·project reactor·背压·响应式流
ituff2 天前
ShareOneList:一个应用,串起三种 Microsoft 365 账户
microsoft·sharepoint·shareonelist