orailnoor/cross-platform-llm-client

GitHub: orailnoor/cross-platform-llm-client

一个基于 Flutter 构建的跨平台 AI 聊天客户端,支持 Android/iOS 本地离线 LLM 推理与多云端 API 的无缝切换。

Stars: 614 | Forks: 126

# PrivateLM [![在线 Web 应用](https://img.shields.io/badge/Live_Demo-Try_Web_App-02569B?style=for-the-badge&logo=flutter&logoColor=white)](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 步快速图像生成](https://raw.githubusercontent.com/orailnoor/cross-platform-llm-client/main/PrivateLM.png) _在 Moto G71 (Snapdragon)、Oneplus 10r (Mediatek)、Pixel 6A (Tensor)、Poco F1 (Snapdragon)、Samsung s23 (Snapdragon) 上测试的 4 步快速图像生成_ ![在 pixel 6 上使用 20 步生成的图像](https://raw.githubusercontent.com/orailnoor/cross-platform-llm-client/main/IMG_2390.png) _在 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绕过, 跨平台应用