AI 大模型与智能应用
实践与技术

专注分享 AI 大模型、Agent 开发、深度学习等技术实战与架构设计;兼具 C#/.NET 后端开发经验

114
技术文章
8
文章分类
516
技术标签
29183
累计字数
同为 XAML + C#:一文说清 WPF、WinUI 3 与 MAUI 的本质差异
后端开发
2026-10-28 • 0k

同为 XAML + C#:一文说清 WPF、WinUI 3 与 MAUI 的本质差异

很多开发者第一次接触 WPF、WinUI、MAUI 时都会有一个疑问:这三者是不是都一样?反正都是 XAML 写界面 + .NET 写逻辑。 答案是:不完全一样。虽然它们在"使用 XAML 进行 UI 声明"和"基于 .NET/C#“这一点上高度相似,但在底层框架、目标平台、XAML 方言细节以及语言支持范围上存在关键差异。 相同点:表面上的"一样” 从开发体验的宏观层面看,三者确实共享同一套核心范式: XAML 声明式 UI:三者都使用 XAML 来定义用户界面布局、数据绑定和样式。XAML 于 2006 年随 WPF 首次推出,后续的 WinUI 和 MAUI 都沿用了这一语法习惯。 .NET 与 C# 后端:业务逻辑主要用 C# 编写,并运行在 .NET 运行时之上。WPF 本身就是 .NET 类型的一个子集。 关键差异:实质上的"不一样" 尽管表面相似,但它们的定位和实现截然不同。 1. 目标平台与定位 WPF:仅限 Windows 桌面。它是一个成熟的、用于构建 Windows 富客户端应用的框架,无法跨平台运行。 WinUI(特指 WinUI 3):仅限 Windows 桌面(及 UWP)。这是微软目前推荐的用于开发新 Windows 原生应用的最现代框架,深度集成 Windows App SDK,支持 Windows 10 1809 及以上版本。 MAUI:真正的 跨平台 框架。它的目标是用一套代码库构建 Android、iOS、macOS 和 Windows 应用。在 Windows 上,MAUI 底层实际上是基于 WinUI 3 来渲染的。 2.

WPF WinUI MAUI
阅读更多
使用 PowerShell 和大模型打造中文 Git 自动提交命令
工具与效率
2026-02-05 • 0k

使用 PowerShell 和大模型打造中文 Git 自动提交命令

在日常开发中,编写规范的 Git 提交信息是一件简单但重复的工作。 为了减少这部分操作,我制作了一个名为 git-ec 的本地命令。它可以自动读取 Git 变更、调用大模型生成中文 Conventional Commit 信息,并完成代码提交。 生成效果如下: feat: 新增提示词设计文档 fix(auth): 修复登录状态失效问题 docs: 补充项目部署说明 文件位置 git-ec 由两个文件组成: C:\Users\raikay\AppData\Local\Programs\GitEasyCommit\git-ec.cmd C:\Users\raikay\AppData\Local\Programs\GitEasyCommit\git-ec.ps1 其中: git-ec.cmd 是命令入口。 git-ec.ps1 包含完整的 Git 检查、模型调用和提交逻辑。 API 配置保存在: C:\Users\raikay\AppData\Local\GitEasyCommit\config.json 首次配置 首次使用前,需要配置模型的 API Key: git-ec -Configure 命令会隐藏输入内容,并使用 Windows 当前用户加密机制保存密钥。 配置文件中的密钥不是明文。其他 Windows 用户或其他计算机无法直接解密。 基本用法 自动生成提交信息并直接提交: git-ec 生成信息后等待人工确认: git-ec -c 如果使用 -c,命令会显示生成的提交信息和文件统计: Commit message: ------------------------ docs: 补充提示词使用说明 ------------------------ content/posts/blog/prompt.md | 486 ++++++++++++++++++++ 确认无误后输入 y 即可提交。 工作原理 整个命令主要分为以下几个阶段。

Git PowerShell AI
阅读更多
AI Agent 工具调用:Function Call、MCP 与 A2A 技术演进
人工智能
2025-12-01 • 0k

AI Agent 工具调用:Function Call、MCP 与 A2A 技术演进

导读 如果你曾经尝试过让大模型(LLM)帮你查天气、订机票或操作数据库,你多半已经接触过"Function Call"技术。但你是否真正理解它的底层逻辑?当听到 MCP 和 A2A 这些新概念时,你是否感到困惑? 本文将带你深入理解 AI Agent 工具调用的核心技术,从最基础的 Function Call 原理讲起,逐步演进到 LangChain 框架的封装,最后解析 MCP 和 A2A 这两项前沿协议。读完本文,你将不仅理解“如何调用”,更能看清“调用什么”和“谁来调用”的全貌。 一、Function Call: 最容易被误解的技术 1.1 一个常见的认知误区 很多人认为 Function Call 就是"大模型自己去调用工具"。这个说法只对了一半。 大模型本身并不执行任何代码,它只负责"决策"——输出一个结构化的指令。真正的"调用"动作,必须由你的应用程序 (宿主代码) 来完成。 这个认知偏差源于 OpenAI 等官方 SDK 封装得过于"丝滑",让开发者误以为一次 API 调用就完成了所有事情。实际上,在那些看似简单的 API 背后,隐藏着严格分离的职责边界。 1.2 Function Call 的完整四步流程 为了清晰理解,我们把一次完整的 Function Call 拆解为四个标准步骤: 第一步:注册工具 你将工具的名称、功能描述以及参数结构(JSON Schema)放入系统提示词或 API 的 tools 参数中。这相当于告诉大模型:“我有这些工具可用,它们各自做什么,需要什么参数。” 第二步:大模型决策 收到用户问题后,大模型不会直接回答。如果它判断需要借助工具,就会输出一个结构化的 JSON 对象,其中明确包含 tool_name(工具名) 和 parameters(参数值)。 第三步:宿主代码执行 这是最关键的一步。你的后端代码监听到大模型输出的 JSON 后,通过 if 判断或 switch 结构,由你的代码去真正执行对应的函数。大模型全程没有执行任何代码,它只是给出了指令。

Function Call LangChain MCP
阅读更多
C# AI Agent 选型与框架推荐 - 2025最新指南
人工智能
2025-11-07 • 0k

C# AI Agent 选型与框架推荐 - 2025最新指南

以下是 当前主流的开源 C# AI Agent 框架 / 项目(按成熟度、活跃度排序),涵盖通用 Agent 框架、垂直场景 Agent 实现,以及基于 C# 生态(.NET 6+)的轻量化方案,方便开发者直接复用或二次开发: 一、通用型开源 C# AI Agent 框架(核心推荐) 这类框架提供 Agent 的核心能力(任务规划、工具调用、记忆管理、多轮对话),支持对接主流大模型(OpenAI、本地 LLaMA/Phi 等),灵活性强。 1. Semantic Kernel(微软官方) 核心定位:.NET 生态首选的开源 AI Agent 开发框架(微软主导,跨语言支持 C#/Python/Java),专注于「将 AI 能力与传统代码、工具链融合」。 关键特性: 内置 Agent 生命周期管理(规划、执行、记忆、工具调用); 支持函数调用(工具注册)、向量数据库集成(记忆存储)、多轮对话上下文管理; 无缝对接 OpenAI、Azure OpenAI、本地大模型(通过 Ollama、LM Studio 适配); 丰富的插件生态(文件操作、HTTP 请求、数据库访问等现成工具)。 开源地址:https://github.com/microsoft/semantic-kernel 技术栈:.NET 6+(C# 10+),支持 Windows/macOS/Linux

AI Agent C#
阅读更多
WCF已退休?.NET分布式技术的历史演进与现代替代方案分析
架构与设计
2025-11-07 • 0k

WCF已退休?.NET分布式技术的历史演进与现代替代方案分析

引言 提到 WCF(Windows Communication Foundation),很多.NET 开发者并不陌生 —— 它曾是.NET Framework 时代分布式系统通信的 “全能选手”。但如今,REST API、gRPC 等技术早已成为主流,有人疑惑:WCF 是不是已经没有意义了?它真的只是 “API 不普及时代的临时替代” 吗? 其实,WCF 的价值远比 “临时替代” 复杂。它的兴起源于特定时代的技术需求,衰落则是技术迭代的必然,而其设计思想至今仍在影响着现代分布式通信技术。今天我们就从时代背景、现状价值、技术替代三个维度,彻底说清 WCF 的 “前世今生”。 一、先澄清:WCF 不是 “临时 API 替代”,而是当年的 “全能服务框架” 很多人对 WCF 的认知停留在 “服务调用”,但这只是它的冰山一角。WCF 的核心定位是微软为.NET Framework 打造的「统一服务开发框架」,目标是让开发者用一套代码,兼容多种通信场景,而非简单替代早期功能单一的 WebService 或 ASHX。 它的核心能力远超 “基础 API 调用”: 多协议支持:覆盖 HTTP(REST/SOAP)、TCP、命名管道(Named Pipe)、MSMQ、WS-* 等,既能满足简单接口通信,也能支撑企业级复杂协议(如事务、安全、可靠消息); 多交互模式:支持请求 - 响应、单向通信、发布订阅、流传输(大文件 / 实时数据)等,适配不同分布式场景; 企业级特性:内置 Windows 认证、证书认证、自定义授权、数据加密、分布式事务等,无需额外开发即可满足企业级安全和一致性需求。 而早期的 “API”(如简单 WebService)功能单一、缺乏统一配置能力,WCF 的出现本质是为了解决「企业级分布式系统的复杂通信痛点」,而非 “临时过渡”。 二、现在的 WCF:新项目零价值,存量系统仍需 “续命” 1.

WCF 分布式技术 .NET
阅读更多
数据防篡改实用方案:从原理到落地实现 - 数字签名与HMAC详解
后端开发
2025-11-07 • 0k

数据防篡改实用方案:从原理到落地实现 - 数字签名与HMAC详解

数据防篡改实用方案:从原理到落地实现 在后端服务、文件传输、接口通信等场景中,数据完整性是不可忽视的安全底线 —— 无论是网络传输中的字节丢失,还是恶意攻击者篡改核心业务数据(如转账金额、订单信息),都可能引发严重的业务风险。 很多开发者知道用散列算法(如 SHA256)做数据校验,但容易陷入一个误区:如果篡改者同时修改数据和对应的散列值,接收方该如何识别?本文将从底层原理出发,拆解单纯散列校验的漏洞,通过简洁的代码示意,演示 “数字签名” 和 “HMAC” 两种防篡改方案,帮你快速落地数据完整性防护。 一、数据校验的核心逻辑:给数据加 “唯一指纹” 1. 基础原理 数据校验的本质是通过数学算法,将任意长度的原始数据转换为固定长度、独一无二的特征值(类似人类指纹),这个特征值被称为 “校验值”(散列值、校验位等)。 核心流程: 发送方:原始数据 → 校验算法(如 SHA256)→ 校验值 → 发送 “数据 + 校验值” 接收方:接收数据 → 相同校验算法 → 新校验值 → 对比 “新校验值” 与 “接收的校验值” 结论:一致则数据未篡改,不一致则数据异常 2. 散列算法的关键特性 散列算法是防篡改的基础,其安全性依赖两个核心特性: 抗碰撞性:不同数据几乎不可能生成相同散列值,哪怕修改 1 个字符(如 “123” 改为 “124”),散列值也会完全不同; 不可逆性:只能通过原始数据计算散列值,无法通过散列值反推原始数据。 3. 单纯散列校验的致命漏洞 单纯的 “数据 + 散列值” 方案存在明显缺陷:如果篡改者修改原始数据后,对篡改数据重新计算散列值,再将 “篡改数据 + 新散列值” 一起发送,接收方会误以为数据合法 —— 因为散列值本身没有 “身份标识”,无法证明是合法发送方生成的。

RSA HMAC 数字签名
阅读更多
LangGraph记忆避坑指南:自动管理为什么还不够?
人工智能
2025-10-06 • 0k

LangGraph记忆避坑指南:自动管理为什么还不够?

使用LangGraph开发多轮对话应用时,很多人都会疑惑: LangGraph已经提供了Checkpointer,为什么真实项目还要自己保存聊天记录、截取最近几轮,再手动传给大模型? 答案是:保存状态、管理上下文、让模型正确理解历史,是三件不同的事。 LangGraph能帮助我们保存和恢复状态,但它不知道哪些历史对当前任务有用,也不会自动完成问题改写、长期存储和业务数据管理。 一、大模型本身没有记忆 调用大模型API时,每次请求都是独立的。 第一轮发送: [{"role": "user", "content": "我叫小明"}] 第二轮如果只发送: [{"role": "user", "content": "我叫什么名字?"}] 模型无法知道答案。要让它回答“小明”,应用必须在第二次调用时重新提供第一轮对话。 所以,聊天记忆的本质是: 应用保存过去的信息,并在后续调用时重新提供给模型。 模型不是自然地“回忆”起来,而是重新阅读了上下文。 二、LangGraph自动记忆做了什么 典型写法如下: from langgraph.checkpoint.memory import InMemorySaver from langgraph.graph import MessagesState, StateGraph builder = StateGraph(MessagesState) graph = builder.compile(checkpointer=InMemorySaver()) 调用时提供固定的会话标识: config = { "configurable": { "thread_id": "session-001" } } 它主要完成三件事: 根据thread_id找到对应会话; 在图运行前恢复上一次保存的状态; 将本轮消息合并进去,并保存新状态。 MessagesState已经为messages配置了消息合并规则,因此标准聊天场景不需要反复手写: history.append(user_message) history.append(assistant_message) 但要注意: Checkpointer自动保存的是“图状态”,不是业务意义上的完整记忆。 即使状态中保存了100条消息,如果节点调用模型时只传当前问题: llm.invoke([current_question]) 模型仍然看不到历史。历史必须真正进入模型输入才会生效。 三、为什么真实项目仍要手动管理 普通聊天机器人可以直接把消息列表交给模型,但真实应用通常还有意图识别、知识库检索、SQL生成、工具调用和多智能体协作。 1. 不同节点需要不同的上下文 假设用户连续提问:

LangGraph 记忆管理 Checkpointer
阅读更多
LangChain 与 LangGraph 实战指南
人工智能
2025-08-12 • 0k

LangChain 与 LangGraph 实战指南

LangChain 和 LangGraph 是两个强大的人工智能开发框架。 一、为什么需要 LangGraph? LangChain 虽然提供了丰富的工具链和 Agent 能力,但在实际企业级应用中面临一些挑战: 复杂状态管理困难: 传统 Chain 难以维护跨多个步骤的状态 循环流程不支持: 无法自然表达人类交互中的"重试 - 修正"过程 调试复杂度高: 执行流不透明,问题定位困难 长期任务控制弱: 缺乏对执行流的精确干预能力 LangGraph 通过图结构解决了这些问题,让你能够构建可预测、可控的智能体系统。 二、核心概念:图 vs 链 2.1 语言模型的三种执行模式 # 1. Prompt → LLM (最基础) response = llm(prompt) # 2. Chain (串行流程) # question -> retriever -> prompt -> LLM -> answer # 3. Graph (图结构) # 节点之间可以有任意连接关系(包括循环) 2.2 关键术语 Node: 计算单元,如 retrieval_node、llm_node、tool_node Edge: 节点之间的连接,定义执行流方向 State: 图的共享状态,所有节点读写同一份状态 Cycle: 循环边,允许流程回到之前的节点 三、实战示例:状态管理的艺术 3.

LangChain LangGraph AI Agent
阅读更多
langgraph 和 langchain 区别,实际工作中怎么使用
人工智能
2025-06-18 • 0k

langgraph 和 langchain 区别,实际工作中怎么使用

核心区别 LangChain:组件库与线性链。提供模型调用、RAG、工具等基础模块,适合构建线性、确定性的流程(如简单的问答机器人)。 LangGraph:状态机与循环图。基于 LangChain 构建,专为有状态、多步骤、含循环/条件分支的复杂 Agent 设计。它解决了 LangChain 难以处理“循环推理”和“持久化记忆”的痛点。 举例说明 场景 LangChain LangGraph 简单 RAG 检索 → 生成回答(一次性线性流程) ❌ 杀鸡用牛刀 代码生成 Agent ❌ 难以实现“生成→测试→报错→修改→再测试”的自动循环 ✅ 定义节点(生成/测试/修复)+ 条件边(通过/失败),自动循环直到成功 多 Agent 协作 需手动编排消息传递,状态管理困难 ✅ 原生支持 Supervisor/Swarm 模式,共享全局 State 实际工作中的使用策略 选型原则:流程是 DAG(有向无环图)选 LangChain;只要涉及 “循环”、“人工介入(Human-in-the-loop)”、“长期记忆”,直接上 LangGraph。 开发范式:将业务拆解为 State(数据结构)、Nodes(函数逻辑)、Edges(流转规则)。不要写成面条式代码,而是画成图。 生产落地:利用 LangGraph 的 Checkpointing 机制保存中间状态,支持任务暂停/恢复和断点调试;配合 LangSmith 进行 Trace 可视化监控。

LangChain LangGraph AI Agent
阅读更多
RAG系统评估指南:基于RAG Assessment的指标体系与实现
人工智能
2025-04-24 • 0k

RAG系统评估指南:基于RAG Assessment的指标体系与实现

本文讲解如何利用RAG Assessment框架,完成RAG(检索增强生成)系统的量化评估,覆盖核心指标体系与实操实现路径。 一、RAG系统基础流程 一套标准RAG系统的核心链路为:用户问题经Embedding模型向量化后,通过余弦相似度从向量库中召回Top K个相关文本块;将召回的上下文与问题拼接后填入约束型Prompt模板,输入大语言模型生成最终回答,以此减少模型幻觉。 二、RAG Assessment框架概述 该框架专为RAG系统评估设计,无需人工标注,可分别量化检索模块与生成模块的性能,解决两大核心痛点:一是为业务落地的RAG应用提供可量化的效果标准,替代主观判断;二是为集成检索器、父子文档等高阶优化方案提供客观的效果验证依据。 框架输入包含四类数据:用户问题、模型生成答案、检索上下文、标准答案;输出为多维度的量化评估得分。 三、四大核心评估指标 所有指标取值范围均为0-1,分数越高代表对应维度性能越好: 忠实度(Faithfulness):衡量生成答案与检索上下文的事实一致性,基于答案与上下文计算。将答案拆分为多个事实片段,统计有上下文支撑的片段占比,反映模型幻觉程度。 答案相关性(Answer Relevance):衡量生成答案与用户问题的匹配度,基于问题与答案计算。通过答案反向生成问题,计算反向问题与原问题的相似度均值,反映回答的完整性与冗余度。 上下文精确度(Context Precision):衡量相关信息在检索结果中的排序位置,基于问题与上下文计算。统计Top K结果中相关内容的排序占比,反映检索排序的准确性。 上下文召回率(Context Recall):衡量标准答案信息在检索结果中的覆盖程度,基于标准答案与上下文计算。拆分标准答案的事实点,统计能被检索上下文命中的占比,反映检索的完整性。 四、指标对应模块与优化方向 RAG系统的整体性能需结合所有指标综合评判,不同指标可定位不同环节的问题: 检索模块:对应上下文精确度、召回率。得分偏低时,可更换优质Embedding模型,或引入重排序、集成检索器等方案优化。 生成模块:对应忠实度、答案相关性。得分偏低时,可更换能力更强的大语言模型,或优化Prompt约束规则。 五、基于LangChain与Ragas的评估实现 核心实现步骤如下: 环境准备:安装langchain、ragas、arxiv加载工具、ChromaDB向量库等依赖,配置API密钥。 知识库构建:加载目标文档(如RAG Assessment原论文),完成文本分块、向量化,存入ChromaDB并定义检索器。 搭建RAG链路:编写约束型Prompt模板,串联检索、Prompt拼接、大模型生成的完整流程。 构建评估集:准备测试问题与标准答案,通过RAG链路批量生成对应答案与检索上下文,整理为标准评估数据集。 执行评估:调用Ragas的evaluate方法,传入数据集与四大评估指标,生成量化结果;可转为表格形式查看单题得分,定位系统短板并针对性优化。

RAG RAGAS 评估指标
阅读更多