返回博客

Electron 与 Rust 混合开发实战:构建本地优先的 AI 编程助手

2026/9/122 分钟阅读
Electron 与 Rust 混合开发实战:构建本地优先的 AI 编程助手

Electron 与 Rust 混合开发实战:构建本地优先的 AI 编程助手

我倾向于使用 Tauri(而非原生 Electron 捆绑 Rust)来构建这类本地优先的 AI 助手。它能提供 Electron 级的前端灵活性,同时将二进制体积压缩至数 MB 以内,并通过 Rust 内核保障本地代码执行与 AI 推理的安全性。

架构设计:为什么选 Tauri

对于 AI 编程助手,本地处理意味着代码片段和 Prompt 不会上传云端,这解决了隐私痛点。我选择 Tauri 是经历了惨痛教训后的结果。

Electron 与 Rust 混合开发实战:构建本地优先的 AI 编程助手 - 插图 1

我试过直接在 Electron 的 preload.js 里调用 wasm llama.cpp,结果 JS 堆内存爆到 2GB —— 改用 Tauri 后,Rust 管理推理上下文,前端只传字符串,内存稳在 80MB。模型加载、token 编解码、AST 解析这些 CPU 密集型操作,全交给 Rust,利用多线程跑满 M2 芯片性能。

核心步骤:Rust 后端开发

我用 Rust 定义了两个核心结构:Agent(接收任务)和 PluginManager(管理扩展)。

// src-tauri/src/main.rs 核心逻辑
use tauri::Manager;
use std::sync::Mutex;

struct AppState {
    context: Mutex<AgentContext>,
}

#[derive(Clone, Serialize)]
struct AgentResponse {
    output: String,
    status: String,
}

#[tauri::command]
async fn process_code(context: tauri::State<AppState>, code: String) -> Result<AgentResponse, String> {
    // 接入 AI 模型推理,例如通过 reqwest 调用本地 Ollama (localhost:11434)
    let response = call_local_llm(&code)
        .await
        .map_err(|e| e.to_string())?;
    Ok(AgentResponse { output: response, status: "ok".into() })
}

前端:Electron 风格的交互层

前端我用 Vue 3 或 React 搭建,重点实现 Agent Harness 界面:一个聊天窗口 + 代码预览面板。通过 Tauri 的 invoke 调用后端命令。

// frontend/src/App.vue
import { invoke } from '@tauri-apps/api/tauri'

async function handleQuery(query) {
  const result = await invoke('process_code', { code: query })
  console.log(result.output)
}

插件系统与本地优先策略

为了支持用户安装的插件,我在 Rust 侧实现了一个动态加载器,允许 .wasm 或编译好的 .so/.dll 插件注入到 Agent 运行时。这在安全沙箱内运行,防止恶意插件破坏主程序。

本地优先不仅是隐私问题,更是速度问题。通过预装轻量级模型(如 Phi-2 量化版),助手在没有网络的情况下也能完成基础的代码补全和建议。

常见问题与优化

  • 冷启动慢:Rust 编译出的二进制启动极快,但首次加载模型可能需几秒,我建议在托盘区后台预加载模型。
  • 调试困难:Rust 后端的日志需用 tracing 宏,并配置前端 DevTools 查看网络请求。

延伸阅读

若你想深入 Rust 异步编程或 AI 模型本地化部署,可查阅 Tauri 官方文档或相关 Rust AI 生态库的使用说明。

原文出处

本文首发于 Electron 与 Rust 混合开发实战:构建本地优先的 AI 编程助手 — https://lyxq.com.cn/zh/blog/electron-rust-local-ai-agent

转载或引用请注明出处,商业使用请联系作者获得授权。