Spiga

分类为读书笔记的文章

AI 辅助编程2:Claude Code

2026-05-16 14:25:09

摘要:一、终端智能体运行机制基础 终端智能体是基于大语言模型的复杂控制系统,依赖三大技术支柱:自动化控制循环逻辑、标准化的工具交互协议,以及严密的安全权限隔离机制。 1. 控制循环 智能体的自主性建立在 “感知 → 思考 → 执行 → 反馈” 的持续循环之上。只要目标未达成或系统未强制停止,循环就会不断重复。 四个核心步骤: 步骤 说明 感知 收集系统环境状态:读取目录结构、配置文件(.csproj)、环境变量、Git 状态、剪贴板内容,并转为结构化文本。 思考 将数据与用户指令一同发送给 LLM,进行任务规划与决策,输出结构化的执行计划(明确要调用的函数)。 执行 客户端执行动作:调用 OS 文件接口、启动子进程(如 dotnet run)、根据 Diff 直接重写源码文件。 反馈 捕获执行结果:文件内容、终端输出、退出码(0 成功,非 0 失败)。若报错,则进入自我纠错闭环。 2. MCP 协议(Model Context Protocol) MCP 是一个开源标准化通信协议,用于统一大语言模型与外部数据源、本地工具的交互方式。 架构组成 MCP Client(终端智能体),管理控制循环,与云端 LLM 通信,向 MCP Server 发送 JSON 请求。 MCP Server(本地/远程服务),将工具或数据源封装成标准接口,提供三类能力: 资源读取:读取静态数据(本地文件、企业知识库)。 工具调用:执行有副作用的操作(git commit、git push)。 提示词模板:提供预定义任务模板,规范业务流程。 核心价值:企业只需编写一个 MCP Server,任何支持 MCP 的智能体即可直接连接,获得运行内部测试用例的能力。 3. 权限管理 权限管理分为四个层级: 白名单操作(静默放行):只读命令自动执行,无需确认,ls、dir、cat、type、git status。 拦截与授权(人工确认):破坏性命令触发暂停,需用户输入 Y/N,curl、安装包、删除文件、复杂 Shell 脚本。 文件系统隔离:权限严格限制在启动时的项目文件夹内,无法使用绝对路径访问上级目录。 敏感数据脱敏:发送到云端前,使用正则扫描并替换密码、密钥为 [REDACTED_SECRET]。 二、Claude Code 简介…… 阅读全文

AI 辅助编程1:概述

2026-05-09 15:19:23

摘要:一、AI 辅助编程技术演进 1. 什么是 AI 辅助编程 传统开发中,程序员是“翻译官”——把模糊的业务需求逐字翻译成计算机能理解的语法。AI 辅助编程在人与计算机之间安插了一个超级智能中间层,我们只需用自然语言表达意图,AI 完成枯燥的翻译工作。 AI 辅助编程的本质:让机器听懂人类的意图,自动将其转化为计算机可执行的指令。 传统开发 vs AI 开发 维度 传统开发流 AI 开发流 工作方式 手动查文档、搜函数 自然语言描述需求即可 节奏 频繁被打断,碎片化工作 完整逻辑几分钟生成 心智负担 重,注意力分散 断崖式下降 关注点 少一个分号就报错 专注架构、业务与体验 角色比喻 体力与脑力消耗 导演与剧组 2. Copilot 时代:代码自动补全 从“死记硬背”的基于规则和 AST 的字典式补全,到基于深度学习的多行逻辑预测——AI 像一个阅读过几十亿行代码的“老中医”,不仅猜下一个词,更猜整段逻辑。 补全技术演进: 规则补全:基于 AST 和词典(精准但无智商) 单行补全:基于深度学习 多行预测:多行逻辑生成 3. Chat 时代:对话式代码助手 当 Copilot 只能被动等待你敲键盘时,Chat 让 AI 变成了随时在线的资深技术导师。 核心能力: 代码解释:高亮任意代码,AI 即时解释其功能与上下文关系。 重构建议:在对话中讨论重构方案,AI 提供多种优化路径。 内联编辑 + Diff 审查:AI 直接在代码区修改,红绿对比一目了然,人类保留最终控制权。 - const color = #3366FF; - btn.addEventListener(click, handler); + const color = #FF4444; + btn.addEventListener(click, shakeAnimation); 4. Agent 时代:自主智能体 Agent 与 AI 助手的本质区别:它长出了手和脚,具备规划能力。 工作流程: 接收任务 → 拆解规划 → 搜索文件 → 执行修改 → 运行测试 → 交付报告 人类从“监督者”升级为“项目经理”。 5. Context 时代:模型上下文协议 (MCP) Agent 撞上了**“上下文缺失”**的墙。MCP 就像 AI 的 USB 接口标准—…… 阅读全文

Net+AI智能体13:Agent Skills

2025-12-27 16:41:09

摘要:一、Agent Skill 协议概述 1. Agent 的知识困境 假设你正在为公司开发一个 AI 助手,老板要求它能回答费用报销相关的问题: 员工: 出差期间的小费可以报销吗? AI 助手: 一般来说,合理的小费可以报销…… ← ❌ 太模糊! 期望回答: 根据公司政策,餐饮消费中 20% 以内的小费可以报销, 超过 $50 的单笔餐饮需要附上收据。 ← ✅ 精准! 问题在于:模型的参数里没有你们公司的报销政策。 能力与知识的区别,我们先做一个关键区分——这是理解 Agent Skills 的基础: 能力 (Capability) 知识 (Knowledge) 含义 Agent 能做什么 Agent 知道什么 类比 给员工配一台电脑 给员工发一本操作手册 AI 例子 调用天气 API、发送邮件、执行 SQL 公司政策、操作流程、领域规范 技术手段 Function Calling / MCP Tools ??? Function Calling 解决了能做什么的问题——让 Agent 可以调用 API、查数据库、发邮件。 但知道什么呢?这正是 Agent Skills 要解决的问题。 现有方案的局限 方案 做法 问题 ❌ 塞进 System Prompt 把整个政策文档放到系统提示里 Token 浪费严重!20 个领域的知识全量加载,每次请求可能消耗数万 Token ❌ 硬编码 用 if-else 把规则写到代码里 不灵活,业务人员无法维护,改个限额就要重新部署 ⚠️ RAG 建向量索引,语义检索 对结构化的政策文档来说过于复杂,且检索结果不可控 ⚠️ 微调 (Fine-tuning) 收集数据训练模型 成本高($10K+),周期长(数周),需要 ML 专家 我们需要一种方式:像插 U 盘一样,把领域知识按需加载给 Agent,简单、标准化、人人可维护。 2. 什么是 Agent Skills 定义:Agent Skills 是一种开放规范,定义了如何将领域知识打包为模块化、可复用的知识包,供 AI Agent 按需使用。 A simple, open format for giving agents new capabilities and exp…… 阅读全文

Net+AI智能体12:AG-UI解决交互之痛

2025-12-20 19:09:54

摘要:一、AG-UI 协议概览 1. 为什么需要 AG-UI 随着 AI Agent 技术的发展,传统的 Web 应用交互模式面临新的挑战。AI Agent 的响应具有以下特点: flowchart LR subgraph 传统API A1[请求] --> B1[处理] --> C1[响应] end subgraph AI Agent A2[请求] --> B2[思考...] B2 --> C2[工具调用] C2 --> D2[中间结果] D2 --> E2[继续思考...] E2 --> F2[流式输出] F2 --> G2[最终响应] end style A1 fill:#e1f5ff style C1 fill:#e1f5ff style A2 fill:#ffe1e1 style G2 fill:#ffe1e1 在构建 AI Agent 应用界面时,传统 API 模式面临诸多挑战: 问题 传统 API AI Agent 需求 影响 响应模式 请求/响应(阻塞等待) 流式实时响应 用户体验差,等待时间长 中间过程 无法展示 需要可视化思考/工具调用 用户无法理解 Agent 行为 状态同步 单次请求完成 需要持续状态同步 复杂 UI 状态管理困难 交互模式 确定性 UI 非确定性(Agent 决定 UI) 难以提前规划界面 长时间任务 超时问题 需要进度反馈 无法处理复杂任务 AG-UI (Agent User Interaction Protocol) 专为 AI Agent 与用户界面的交互而设计: flowchart TB subgraph AG-UI协议 direction LR Streaming[流式响应] Events[事件系统] State[状态同步] Tools[工具可视化] end UI[用户界面] -->|AG-UI 协议| AG-UI协议 AG-UI协议 -->|实时交互| Agent[A…… 阅读全文

Net+AI智能体11:A2A多智能体协作

2025-12-13 16:03:39

摘要:一、A2A 协议 1. 为什么需要 A2A 协议? 随着 AI 技术的发展,企业中的 AI Agent 数量不断增加。这些 Agent 可能来自不同的团队、不同的技术栈,甚至不同的组织: flowchart LR subgraph 企业A A1[客服 Agent] A2[销售 Agent] end subgraph 企业B B1[物流 Agent] B2[库存 Agent] end subgraph 第三方服务 C1[支付 Agent] C2[天气 Agent] end A1 -.->|如何通信?| B1 A2 -.->|如何协作?| C1 B2 -.->|如何发现?| C2 style A1 fill:#e1f5ff style A2 fill:#e1f5ff style B1 fill:#ffe1e1 style B2 fill:#ffe1e1 style C1 fill:#e1ffe1 style C2 fill:#e1ffe1 在没有标准协议的情况下,Agent 之间的互联面临诸多挑战: 问题 描述 影响 协议不统一 每个 Agent 使用不同的 API 格式 集成成本高,难以扩展 发现困难 无法自动发现其他 Agent 的能力 需要人工配置,耦合度高 状态不透明 无法追踪跨 Agent 任务的执行状态 调试困难,可靠性差 安全性参差 缺乏统一的认证授权机制 安全风险高 Agent-to-Agent (A2A) Protocol 提供了一套标准化的解决方案,核心价值: 统一发现机制:通过 Agent Card 声明和发现能力 标准化通信:基于 JSON-RPC 2.0 的统一消息格式 任务生命周期:完整的任务状态管理和追踪 流式支持:SSE 实时事件推送 安全机制:内置认证和授权方案 2. 什么是 A2A 协议? Agent-to-Agent (A2A) Protocol 是由 Google 发起并开源的一个开放协议,旨在实现 AI Agent 之间的标准化通信与协…… 阅读全文

Net+AI智能体10:Workflow进阶扩展

2025-12-06 15:07:16

摘要:一、自定义工作流事件 1. 为什么需要自定义事件? 场景 内置事件 自定义事件 粒度 Executor 级别 业务逻辑级别 语义 系统通用 (调用、完成) 业务特定 (审核通过、风险预警) 数据 执行元数据 业务数据 (敏感词、风险分数) 监控 技术监控 业务监控 + 审计 前端 通用进度条 具体业务状态展示 2. 自定义事件类定义 基本定义模式:自定义事件本质上就是继承 WorkflowEvent 的普通 C# 类。让我们从最简单的开始: /// summary /// 表示检测到敏感词的事件 /// /summary public class SensitiveWordDetectedEvent : WorkflowEvent { public SensitiveWordDetectedEvent(string word, int position) : base(data: null) // 可以传递简单数据到 base { Word = word; Position = position; } public string Word { get; } public int Position { get; } } 设计原则 DO (推荐做法): 类名以 Event 结尾,语义清晰 使用只读属性 ({ get; }),确保事件不可变 添加 XML 注释说明事件的业务含义 属性类型尽量简单(string, int, DateTime 等可序列化类型) DON'T (避免做法): 不要在事件类中包含方法逻辑 不要引用不可序列化的对象(如 DbContext, HttpClient) 不要使用可变属性({ get; set; }) 不要在构造函数中执行耗时操作 3. 携带复杂数据的事件 当需要传递更复杂的业务数据时,有两种设计模式: 模式 1: 使用属性传递结构化数据 /// summary /// 风险评估完成事件 /// /summary public class RiskAssessmentCompletedEvent : WorkflowEvent { public RiskAssessmentCom…… 阅读全文

Net+AI智能体9:Workflow基础篇

2025-11-29 19:00:55

摘要:一、快速开始 1. 什么是 Workflow Orchestration 在企业级 AI 应用开发中,我们经常面临以下挑战: 单个 Agent 难以处理复杂任务:一个 Agent 无法同时擅长需求分析、代码生成、测试等多个领域 业务逻辑与 AI 调用耦合:复杂的条件判断、循环、并发控制分散在代码各处 流程难以可视化和维护:多步骤的 AI 处理流程缺乏清晰的结构 缺乏统一的状态管理:多个步骤之间的数据传递和状态共享容易出错 Workflow Orchestration (工作流编排) 正是为了解决这些问题而生: 模块化设计:将复杂任务拆分为独立的 Executor 和 Agent 清晰的流程定义:使用 Builder API 构建可读、可维护的流程图 灵活的流程控制:支持条件分支、循环迭代、并发执行等复杂模式 统一的状态管理:内置 WorkflowContext 管理跨步骤的状态和数据 实时流式反馈:通过事件机制实时监控工作流的执行进度 MAF Workflow 位于应用层和 Agent 层之间,负责: 编排多个 Agent:决定 Agent 的执行顺序、条件和并发策略 管理数据流:在 Agent 和 Executor 之间传递数据 监控执行状态:实时报告工作流的执行进度和结果 错误处理:统一处理执行过程中的异常和重试逻辑 2. 第一个工作流:文本处理管道 业务场景:将用户输入的文本 → 转为大写 → 反转顺序 步骤 1:定义第一个 Executor - 大写转换。 继承 ExecutorTInput, TOutput: TInput = string:接收字符串输入 TOutput = string:返回字符串输出 构造函数传入 UppercaseExecutor 作为唯一标识符 实现 HandleAsync 方法: message:接收上一个步骤传递的数据 (对于第一个 Executor,是工作流的输入) context:工作流上下文,用于访问共享状态、发布事件等 (后续课程详解) cancellationToken:用于取消操作 返回值:会自动作为消息沿着 Edge 传递给下一个 Executor 业务逻辑: 使用 ToUpperInvariant() 进行文化无关的大写转换 返回 ValueTask (高性能异…… 阅读全文

Net+AI智能体8:Workflow概念篇

2025-11-22 18:21:43

摘要:一、核心概念 1. Executor(执行器) Executor(执行器) 是 Workflow 中的最小工作单元,类似于: 类比 说明 工厂里的工人 每个工人负责一道工序 乐高积木块 每个积木有特定功能,组合成整体 电路中的元件 接收输入信号,输出处理结果 flowchart LR Input[输入消息] --> Executor[Executor\n执行器] Executor --> Output[输出消息] style Executor fill:#4CAF50,color:white Executor 的核心特征 唯一标识(Id):每个 Executor 有一个唯一的 ID,用于在 Workflow 中引用 消息处理:接收特定类型的输入消息,处理后产生输出消息 路由配置:通过 ConfigureRoutes 方法定义能处理哪些类型的消息 状态感知:可以通过 IWorkflowContext 访问和修改工作流状态 Executor 的类型层次:MAF 提供了多种 Executor 类型,满足不同场景需求 classDiagram class Executor { +string Id +ExecuteAsync() #ConfigureRoutes() } class Executor~TInput~ { +HandleAsync(TInput) } class Executor~TInput,TOutput~ { +HandleAsync(TInput) TOutput } class FunctionExecutor~TInput~ { +委托函数处理 } class FunctionExecutor~TInput,TOutput~ { +委托函数处理 } class StatefulExecutor~TState~ { +TState State +ReadStateAsync() …… 阅读全文

Net+AI智能体7:自定义Agent

2025-11-15 21:29:53

摘要:一、自定义 Agent 的实现 1. 场景分析 在大多数场景下,使用 chatClient.CreateAIAgent() 创建的标准 Agent 已经足够强大。但在某些特殊场景下,自定义 Agent 实现能带来更大的价值: 场景 1:规则引擎替代 AI(成本优化) 问题:客服系统每天处理数万次重复性问题(营业时间?,退货流程?),每次调用 AI 模型都会产生成本。 解决方案:自定义 Agent 使用 FAQ 知识库进行关键词匹配,只在无法匹配时才调用 AI。 收益: 成本降低 70-90%(高频简单问题零成本) 响应速度提升 10 倍(无需等待 AI 推理) 答案一致性更高(预定义标准答案) 场景 2:遗留系统集成(ERP/CRM/工作流引擎) 问题:企业内部有成熟的审批工作流引擎,需要将其包装为 Agent 供统一调度。 解决方案:自定义 Agent 作为适配器,将工作流引擎的 API 转换为 Agent 接口。 收益: 无缝集成现有系统(无需重构) 复用企业级规则引擎(审批、权限、流程) 数据安全可控(不发送敏感数据到外部 AI) 场景 3:测试模拟(Mock Agent) 问题:开发和测试环境中,不希望调用真实 AI 模型(成本、稳定性、可预测性)。 解决方案:自定义 Agent 返回固定或可配置的测试数据。 收益: 单元测试更可靠(确定性输出) 开发环境零成本 CI/CD 管道更快(无需等待 AI 响应) 场景 4:混合模式(规则 + AI) 问题:希望结合规则引擎的确定性和 AI 的灵活性。 解决方案:自定义 Agent 先尝试规则匹配,失败后转发给 AI Agent。 收益: 平衡成本与效果 灵活的分流策略(按优先级、置信度) 逐步优化规则库(分析 AI 处理的高频问题) 对比: 标准 Agent vs 自定义 Agent 特性 ChatClientAgent(标准) 自定义 Agent 说明 创建方式 chatClient.CreateAIAgent() 继承 AIAgent 抽象类 标准方式更简单 开发复杂度 低 高 自定义需实现所有核心方法 灵活性 受限于 IChatClient 能力 完全可控 自定义可实现任意逻辑 成本 按 Token 计费…… 阅读全文

Net+AI智能体6:Agent进阶扩展

2025-11-08 18:11:37

摘要:一、自定义文件消息存储 1. ChatMessageStore 架构概览 classDiagram class ChatMessageStore { abstract>> #IChatReducer? ChatReducer +AddMessagesAsync(messages) +GetMessagesAsync() +ClearAsync() +Serialize() +Deserialize(state) } class InMemoryChatMessageStore { -List~ChatMessage~ _messages +AddMessagesAsync() +GetMessagesAsync() +ClearAsync() } class FileChatMessageStore { -string _filePath -SemaphoreSlim _lock +AddMessagesAsync() +GetMessagesAsync() +ClearAsync() } class RedisChatMessageStore { -IConnectionMultiplexer _redis +AddMessagesAsync() +GetMessagesAsync() +ClearAsync() } ChatMessageStore |-- InMemoryChatMessageStore ChatMessageStore |-- FileChatMessageStore ChatMessageStore |-- RedisChatMessageStore ChatMessageStore 抽象类核心方法职责 方法 职责 使用场景 AddMessagesAsync 添加新消…… 阅读全文

1 2 3 4 5 ... 7 下一页