乐于分享
好东西不私藏

手搓一个桌面AI助手,我也就花了两周

手搓一个桌面AI助手,我也就花了两周

1. 手搓一个桌面AI助手,我也就花了两周

先说结论:自己搭一个能用的桌面AI助手,比想象中简单。但要搭到Loomy那个水平,比想象中难。

Loomy是讯飞最近出的一款AI桌面工具——能聊天、能管文件、能接微信飞书、能定时干活。我用了几天,确实好用。但作为一个技术号,我更想聊聊:如果自己动手,要怎么做?

这篇文章就把整个搭建思路拆开,从架构到代码,从前端到AI,一步步说清楚。


1.1 整体架构

先画个蓝图。一个桌面AI助手,不管叫什么名字,底层就四层:


  
    
    
    
  
  bash
┌──────────────────────────────────┐
│          桌面客户端               │
│   聊天窗口  |  文件管理  |  设置  │
└──────────────────┬───────────────┘
┌──────────────────▼───────────────┐
│         AI 编排引擎              │
│   LLM适配器 → 任务拆解 → 工具调用 │
└──────────────────┬───────────────┘
┌──────────────────▼───────────────┐
│          连接层                  │
│   微信/飞书/钉钉  |  WebSocket   │
└──────────────────┬───────────────┘
┌──────────────────▼───────────────┐
│          存储层                  │
│   本地文件(不上云) | 配置文件    │
└──────────────────────────────────┘

每一层都能单独拆开做。下面挨个说。


1.2 第一步:桌面客户端

最省事的方案是 Tauri。比Electron轻得多,打包出来不到10MB,性能也好。

你需要写的基本结构就三样:

前端(随便用什么框架,Vue/React都行):

  • 一个聊天对话框(类似ChatGPT那种)
  • 一个文件目录树(显示授权的文件夹)
  • 一个设置面板(填API Key、配Bot)

核心逻辑(Rust):


  
    
    
    
  
  rust
// 读取用户授权的目录
fn read_workspace(path: &str-> Vec<String> {
    let mut files = vec![];
    for entry in WalkDir::new(path).max_depth(3) {
        if let Ok(entry) = entry {
            if entry.path().extension().map_or(false, |e| {
                ["md""txt""docx"].contains(&e.to_str().unwrap())
            }) {
                files.push(entry.path().to_string_lossy().to_string());
            }
        }
    }
    files
}

关键设计: 文件操作默认在本地完成,不上传到任何云端。只有用户明确选中发送给AI的文本内容,才会通过API发出去。这一点Loomy做得很到位,咱们也得这么干。


1.3 第二步:接AI

这一步最简单。LLM适配器本质就是一个HTTP调用:


  
    
    
    
  
  python
import requests

class LLMAdapter:
    def __init__(self, api_key, base_url, model):
        self.api_key = api_key
        self.base_url = base_url
        self.model = model
    
    def chat(self, messages, tools=None):
        payload = {
            "model"self.model,
            "messages": messages,
            "tools": tools or [],
        }
        headers = {
            "Authorization"f"Bearer {self.api_key}",
            "Content-Type""application/json"
        }
        resp = requests.post(
            f"{self.base_url}/v1/chat/completions",
            json=payload, headers=headers
        )
        return resp.json()

支持多种模型切换:OpenAI、Claude、DeepSeek、本地Ollama。用户自填Key就行,咱们平台不托管。

真正的难点不在调API,在让AI知道它能做什么。你需要一个System Prompt告诉它的能力边界:


  
    
    
    
  
  bash
你是用户的桌面AI助手。你可以:
1. 读取用户授权目录下的文件
2. 总结文档内容
3. 生成待办事项
4. 发送消息到飞书/钉钉
5. 定时执行任务

当你需要调用工具时,返回JSON格式的工具调用请求。

1.4 第三步:工具调用(MCP协议)

这是整个系统的核心。Loomy的工具箱本质上就是一套MCP Server集合。

MCP(Model Context Protocol)是今年AI圈最大的基础设施事件之一。它定义了AI应用怎么调用外部工具的标准化接口。

一个最小的MCP Server长这样:


  
    
    
    
  
  python
from mcp import Server, Tool

server = Server("my-tools")

@server.register_tool(Tool(
    name="read_file",
    description="读取指定文件的文本内容",
    parameters={
        "path": {"type""string""description""文件路径"}
    }
)
)

async def read_file(path: str) -> str:
    with open(path, "r", encoding="utf-8"as f:
        return f.read()

server.run()

你每加一个能力,就写一个MCP Server。比如:

  • 文件MCP:读取、搜索、汇总文件
  • 浏览器MCP:打开网页、截图
  • IM MCP:发送消息到飞书/钉钉
  • 定时MCP:管理cron任务

Loomy的技能广场就是干这个的。你也可以自己写,或者用社区已有的300多个MCP Server。


1.5 第四步:IM机器人(飞书/钉钉)

微信机器人现在有封号风险,所以推荐走飞书或钉钉的官方Bot API。

飞书Bot接入(最简单):


  
    
    
    
  
  python
from flask import Flask, request
import json

app = Flask(__name__)

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.json
    # 解析飞书消息
    content = json.loads(data["event"]["message"]["content"])
    user_message = content["text"]
    
    # 调用AI处理
    ai_response = llm.chat(user_message)
    
    # 回复
    send_feishu_message(data["event"]["message"]["chat_id"], ai_response)
    
    return {"code"0}

app.run(port=8888)

飞书的Bot API是合规的,没有封号风险。钉钉同理。


1.6 第五步:远程控制

当人不在电脑前时,通过手机给电脑发指令。核心就是WebSocket通信:

电脑端(客户端启动时连接中转服务器):


  
    
    
    
  
  javascript
const ws = new WebSocket("wss://your-relay-server.com/ws");
ws.onmessage = (event) => {
    const command = JSON.parse(event.data);
    execute(command); // 执行远程指令
};

手机端(通过飞书/钉钉发消息):

  • 用户发消息给Bot:“帮我看看桌面上那个文档”
  • Bot后台收到 → 通过WebSocket转发给桌面客户端
  • 桌面客户端读取文件 → 结果返回 → Bot回复用户

这套方案的好处是不需要公网IP,客户端主动连中转服务器,防火墙挡不住。


1.7 自己搭要多久?

我拆成三个版本,你自己掂量:

版本 功能范围 耗时 难度
极简版 Tauri窗口 + 接任意LLM + 读文件 2-3天 ⭐⭐
标准版 极简版 + MCP工具 + 飞书Bot 1-2周 ⭐⭐⭐
完整版 标准版 + 远程控制 + 定时任务 + 技能广场 4-6周 ⭐⭐⭐⭐

如果你有技术底子,建议从极简版开始,一周内跑通再说。


1.8 但我劝你一句

上面写了这么多,其实我真正想说的是:

自己搭一个AI助手,最大的成本不是代码,是后面没完没了的维护。

LLM的API版本在变、MCP协议在更新、飞书Bot的接口在迭代。你花两周搭出来的东西,可能一个月后某个依赖就炸了。你还得修。

所以我的建议是:

如果你想练技术,按上面的思路自己搭一遍,收获会很大。架构设计、MCP协议、IM Bot集成——这些都是2026年很值钱的技能。

但如果你只是想要一个能用的桌面AI助手,别折腾了。直接下Loomy,30分钟配置好就能用。它帮你踩完了上面所有的坑——微信机器人怎么过风控、文件权限怎么设计、技能广场谁来维护。这些不是一个人两周能搞定的。

推广链接放这了,需要自取:

https://loomy.cgref.cn/s/xpn8xxoezw

如果你还是想自己搭,遇到卡住的地方欢迎来问。备注"AI信号站"就行。


📮 关注「AI信号实验室」,追踪前沿信号,动手实验每一个新能力。 有想了解的主题?评论区告诉我,下期安排。


文中提到的MCP Server示例代码、飞书Bot接入模板、以及完整的系统架构图我整理了一份文档。回复关键词【AI助手】领取;需要进一步了解的也可以私信我沟通。