Loading

解剖一个桌面级 AI Copilot 的架构:Stargazer AI Copilot(.NET 10 + Avalonia)是怎么“分层”的

🏗️ 拆解 Stargazer AI Copilot:它是如何把 .NET + AI 搭起来的?

很多同学问我:“做一个桌面版 AI Copilot,到底该怎么分层?难道就是界面套个 API 吗?”

今天不聊虚的,直接基于 Stargazer AI Copilot(.NET 10 + Avalonia)的源码结构,用一张图 + 四个核心层,带你看看一个成熟的桌面 Copilot 长什么样。


📐 一张图看懂整体架构

flowchart TB subgraph UI层 A[Views 界面] -->|绑定| B[ViewModels 视图模型] B -->|命令| C[Services 应用服务] end subgraph 大脑层 C --> D[Agent 编排核心] D --> E{Workflow 决策} E -->|Single| F[单Agent] E -->|Sequential| G[流水线] E -->|Handoff| H[接力棒] E -->|Agent-as-Tools| I[主从协作] end subgraph 手脚层 D --> J[Tools 工具集] J --> K[本地工具<br>Bash/Git/File] J --> L[远程工具<br>MCP 协议] end subgraph 外部世界 M[LLM Providers<br>OpenAI/DeepSeek/混元] N[(SQLite 数据库)] O[操作系统<br>Browser/Docker/DB] end D <--> M C <--> N J <--> O

1️⃣ UI 层:为什么 Avalonia + MVVM 是桌面 Copilot 的绝配?

在这个项目里,UI 不仅仅是“输入框 + 气泡”。

核心设计

  • Shell 模式:左侧导航(聊天/Agent/技能/MCP/设置),右侧内容区。
  • 数据驱动ChatViewModel 只负责消息集合和状态,ChatView 只负责渲染。

难点突破:Markdown 渲染

普通的 WebView 太重,这个项目自己写了一个 MarkdownView 控件:

  • ✅ 支持代码块、表格、图片
  • ✅ 图片存本地(file:///),永不失效
  • ✅ 一键复制 Markdown / HTML

经验之谈:做桌面 Copilot,UI 一定要把 “流式输出”“消息持久化” 当成一等公民,否则后期改起来会非常痛苦。


2️⃣ 大脑层:Agent 才是真正的“业务对象”

这是和普通 ChatBot 最大的区别:Agent 不是一段 Prompt,而是一个可配置的对象

Agent 的核心属性

Agent {
    Instructions  // 人格设定
    Provider       // 用哪家 LLM
    Tools          // 能调用什么工具
    Skills         // 挂载什么技能
    Workflow       // 怎么协作
}

四种协作模式(Workflow)

这是架构最精彩的地方:

模式 场景 数据流
Single 简单问答 用户 → AI → 回复
Sequential 流水线作业 搜索 → 分析 → 写作
Handoff 专家会诊 客服 → 技术 → 售后(带完整上下文)
Agent-as-Tools 项目经理模式 主 Agent 按需调用 代码/测试/文档 Agent

3️⃣ 技能系统(Skills):像搭积木一样拼 Prompt

这是 Stargazer 的杀手锏。它解决了 “Prompt 越写越长,越难维护” 的问题。

技能 = 指令 + 工具 + 依赖

想象你在配置一个“全栈开发助手”:

  1. 定义技能

    • 代码审查:指令(关注安全)+ 工具(Git/Bash)
    • 联网搜索:指令(查最新资料)+ 工具(Search)
  2. 组合 Agent

    • Agent 指令:你是一个助手。
    • 勾选技能:✅ 代码审查 + ✅ 联网搜索。
  3. 运行时自动合成

    你是一个助手。

    (追加) 请关注代码安全性...

    (追加) 请先搜索最新资料...

    可用工具:Git + Bash + Search。

这就实现了 Prompt 的模块化复用。


4️⃣ 手脚层:工具(Tools)与安全边界

Agent 必须能干活,但不能“乱干”。

工具分类

类型 示例 安全策略
本地工具 Bash, Git, File 拦截 rm -rf /sudo
浏览器 Playwright 输入操作需用户确认
数据库 MySQL/PG/SQLServer 仅限配置的 Connection String
远程 MCP 企业内部 API JSON-RPC 隔离

MCP 协议的关键作用

通过 Model Context Protocol (MCP),它可以连接远程服务器:

  • 自动发现工具(tools/list
  • 动态注入到 Agent
  • 企业可以把敏感操作放在内网 MCP 服务器上,桌面端只负责调用。

🔄 一条消息的生命周期

为了让你更直观,这是一个消息从发起到回复的全过程:

用户输入
  ↓
ChatViewModel (判断是否带历史 Context)
  ↓
AgentService (加载 Agent 配置 + 解析 Skills)
  ↓
LLM Provider (OpenAI SDK 兼容接口)
  ↓
[AI 思考中...]
  ↓
如果需要调用工具 (Tool Calling)
  ↓
执行工具 (Bash / Search / Browser / MCP)
  ↓
结果返回给 AI
  ↓
流式输出到 UI (MarkdownView 渲染)
  ↓
存入 SQLite (对话历史)

🎯 总结

Stargazer AI Copilot 的架构并不神秘,它只是把混乱的 AI 调用整理成了三层:

  1. 表现层:Avalonia 负责好看、好用。
  2. 编排层:Agent + Skills + Workflow 负责“怎么想”。
  3. 执行层:Tools + MCP 负责“怎么做”,且有安全围栏。

这种架构最大的好处是:无论以后换什么新模型,或者加什么新工具,核心逻辑都不用大改。


💡 如果你也想拥有这样一个完全可控的桌面 Copilot:

📥 立即下载体验
https://pan.baidu.com/s/1QtHeAsaL-AexmfT0alaelg?pwd=pucf 提取码: pucf

💼 商业合作 / 源码授权 / 定制开发
👉 https://work.weixin.qq.com/ca/cawcdeb5a5bd6ac6b8

posted @ 2026-05-26 10:09  黄明基  阅读(13)  评论(0)    收藏  举报