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助手】领取;需要进一步了解的也可以私信我沟通。
夜雨聆风