orailnoor/cross-platform-llm-client
GitHub: orailnoor/cross-platform-llm-client
一个基于 Flutter 构建的跨平台 AI 聊天客户端,支持 Android/iOS 本地离线 LLM 推理与多云端 API 的无缝切换。
Stars: 614 | Forks: 126
# PrivateLM
[](https://ai-chat-orailnoor.web.app/)
一个基于 Flutter 构建、生产就绪的跨平台 AI 聊天客户端。它将 Android 设备上的本地 LLM 推理与云端 API 访问相统一,让用户能够完全控制其模型的运行方式。

_在 Moto G71 (Snapdragon)、Oneplus 10r (Mediatek)、Pixel 6A (Tensor)、Poco F1 (Snapdragon)、Samsung s23 (Snapdragon) 上测试的 4 步快速图像生成_

_在 pixel 6 上使用 20 步生成的图像_
## 功能介绍
- **Android 本地推理** — 使用 GPU 加速推理 直接在手机上下载并运行 GGUF 模型。下载后无需联网。
- **云端 API 回退机制** — 当您需要更强大的算力或在不受支持的平台上时,可无缝切换至 OpenAI、Anthropic、Google Gemini 或 Kimi (Moonshot AI)。
- **多模态聊天** — 在对话中发送文本和图像。视觉支持同时适用于本地模型 (Qwen2-VL) 和云端服务提供商。
- **持久化会话** — 所有聊天、任务和设置均通过 Hive 存储在本地。除非您明确选择云端模式,否则任何数据都不会离开您的设备。
- **后台服务** — 集成 Firebase Cloud Messaging,用于推送更新和后台任务处理。
- **智能自动配置** — 首次启动时,应用会检测设备的 RAM,并自动推荐最佳的上下文大小和 token 限制。
- **任务管理** — 提供专用的任务视图,用于结构化的 AI 辅助工作流以及自由形式的聊天。
## 技术架构
### 技术栈
- **框架:** Flutter 3.x (Dart >=3.3.0)
- **状态管理:** GetX
- **本地存储:** Hive
- **网络请求:** Dio + `package:http`
- **后台执行:** `flutter_background_service` + `flutter_local_notifications`
- **推送通知:** Firebase Core + Firebase Messaging
### 推理流程
```
┌─────────────────────────────────────────────────────────────┐
│ UI Layer │
│ ChatView / TaskView / ModelView / SettingsView │
└──────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────┐
│ Controllers (GetX) │
│ ChatController · TaskController · ModelController │
│ SettingsController · HomeController │
└──────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────┐
│ Services │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ InferenceService│ │ CloudService │ │DownloadSvc │ │
│ │ (local GGUF) │ │ (OpenAI/Claude/ │ │ (model dl) │ │
│ │ │ │ Gemini/Kimi) │ │ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────┘ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ HiveService │ │ DeviceInfoSvc │ │ExecutionSvc │ │
│ │ ( persistence) │ │ (RAM/GPU tier) │ │ (bg tasks) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### 本地推理 (Android)
该应用使用 `llama_flutter_android`,这是一个封装了 `llama.cpp` 的自定义 Flutter 插件,专为 ARM64 设备设计。在运行时,它会:
1. 通过 Vulkan **检测 GPU 能力**,以确定可卸载的层数。
2. 根据设备等级 (ultra / high / mid / low) **选择线程数**。
3. 带有进度流地**加载 GGUF 模型**。
4. 通过 `generateChat()` **生成 token**,并原生支持聊天模板 (ChatML, Llama-3, Gemma, Phi)。
5. 如果原生模板失败,则**回退**到手动构建 prompt。
空闲检测 (5秒) 和硬超时 (180秒) 确保即使在性能较弱的硬件上也能保持流畅的用户体验。
### 云端推理
`CloudService` 将四种不同的 API 结构统一到了一个接口中:
- **OpenAI** — 标准 `/v1/chat/completions`
- **Anthropic** — 带有独立 system 参数的 Messages API
- **Google Gemini** — 包含内联 base64 图像的 `generateContent`
- **Kimi** — 来自 Moonshot AI 的 OpenAI 兼容 endpoint
API 密钥存储在 Hive 中,除了发送至提供商的 endpoint 外,绝不会传输到任何其他地方。
### 跨平台抽象
本地推理是条件编译的:
- **Android** → `inference_android.dart` (完整的 llama.cpp 引擎)
- **Web** → `inference_stub.dart` (仅限云端,本地支持即将推出)
- **iOS** → `inference_android.dart` (通过 Metal GPU 实现完整的 llama.cpp 引擎)
`InferenceService` 暴露了 `supportsLocalInference` 属性,以便 UI 能够在不受支持的平台上隐藏本地模型的操作界面。
## 支持的平台
| 平台 | 本地推理 | 云端 API | 备注 |
| -------- | --------------- | ---------- | ------------------------------- |
| Android | ✅ 是 | ✅ 是 | 通过 NEON 实现 CPU 卸载;minSdk 28 |
| iOS | ✅ 是 | ✅ 是 | Metal GPU 加速 |
| Web | ❌ 否 | ✅ 是 | 仅限云端 (本地支持即将推出) |
### iOS / iPad
iPad 版本以独立的 ZIP 压缩包形式分发,用于侧载。从 [Releases](https://github.com/orailnoor/cross-platform-llm-client/releases) 页面下载最新的 `PrivateLM-iOS.zip`,解压后,通过 AltStore、Sideloadly 或 Xcode 安装 `.ipa` 文件。对 iPhone 的支持仍处于实验阶段 — 由于本地模型对 RAM 的需求,推荐使用 iPad 作为 iOS 目标平台。
## 构建配置
### 前置条件
- Flutter SDK >=3.3.0
- Android SDK (API 26+)
- JDK 17
- NDK (包含在 Android SDK 中)
### Android
```
flutter pub get
cd android
./gradlew assembleDebug # or assembleRelease
```
对于发布版本的构建,您应该在 `android/app/build.gradle.kts` 中配置自己的签名:
```
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
```
### iOS
```
flutter pub get
cd ios
pod install
flutter build ios
```
### Web
```
flutter pub get
flutter build web --release
```
## 许可证
MIT — 详情请参阅 [LICENSE](./LICENSE)。
标签:Flutter, 云API集成, 人工智能, 多模态对话, 本地大模型推理, 用户模式Hook绕过, 跨平台应用