🚀 Prompt Optimizer:跨平台 AI 提示词优化工具开源分享

一个基于 Flutter + Riverpod 的开源项目,用 MVI 架构优雅地解决提示词优化实例
在这里插入图片描述

官网入口

🎯在线体验:https://prompt.jiulang9.com

🌐Android/PC端下载地址 https://app.jiulang9.com

🌐Github开源地址:JIULANG9/PromptOptimizer:

有条件的记得使用自己的 Api key 呀!

如果这个项目对你有帮助,请不要忘记给个 ⭐ Star 支持一下!这对我来说意义重大,也是我持续更新的动力

📌 为什么要做这个项目?

  • 🤔 提示词效果不理想 — 同样的需求,不同的表述方式,AI 的回答质量差异巨大
  • 🔄 手动优化低效 — 反复调整提示词,浪费大量时间
  • 🔐 数据安全顾虑 — API 密钥如何安全存储?历史记录如何保护?

PromptOptimizer 就是为了解决这些痛点而生的:

核心功能 具体体现
🎯 提效工具 一键优化提示词,支持多种优化模板,实时预览结果
🌐 跨平台体验 Android / iOS / Web / Windows / macOS / Linux 无缝切换
🔐 数据安全 AES-256 加密存储 API 密钥,本地数据库管理
🧠 开发友好 开源代码,清晰架构,易于二次开发和定制
💰 完全免费 无付费功能,无广告,无数据上传

📱 项目预览

☀️ 浅色模式

请添加图片描述

🌙 深色模式

请添加图片描述

🔍 功能如何实现?

一、功能设计 — 从用户需求出发

为两种模式

  • 用户提示词优化 — 优化你写给 AI 的指令,让 AI 更理解你的需求
  • 系统提示词优化 — 优化 AI 的系统角色设定,让 AI 更好地扮演特定身份
🔌 多 API 支持

支持 多个主流 AI 提供商

提供商 API 地址 默认模型 适用场景
🔵 OpenAI api.openai.com gpt-4o 通用、高质量
🟠 DashScope(阿里) dashscope.aliyuncs.com qwen-max 国内用户首选
🟣 DeepSeek api.deepseek.com deepseek-chat 性价比高
🌙 Moonshot(月之暗面) api.moonshot.cn moonshot-v1-8k 长文本处理
🧠 Zhipu AI(智谱) open.bigmodel.cn glm-4 中文优化
🐉 Baidu(文心一言) aip.baidubce.com ernie-4.0-8k 国内服务
🎯 Tencent(混元) hunyuan.tencentcloudapi.com hunyuan-lite 腾讯生态
🌐 OpenRouter(聚合) openrouter.ai llama-3.1-8b 模型丰富

关键特性:

  • ✅ 支持 OpenAI 兼容接口(自定义 API 端点)
  • ✅ AES-256 加密存储 API 密钥
  • ✅ 一键切换 API 配置,无需重启应用
📋 模板管理系统
内置 4 个专业模板:
├── 📝 标准优化模板
├── 🎓 学术论文模板
├── 💼 商务文案模板
└── 🔬 技术文档模板

+ 自定义模板支持
  └── 使用 {{originalPrompt}} 占位符

模板示例:

【标准优化模板】
请优化以下提示词,使其更清晰、更具体、更容易被 AI 理解:
{{originalPrompt}}

优化要求:
1. 明确目标和预期输出
2. 提供必要的背景信息
3. 指定输出格式
4. 添加约束条件
💾 数据导入导出
一键备份:
├── API 配置
├── 自定义模板
├── 优化历史
└── UI 偏好设置

支持格式:
├── PC 端:文件夹选择
└── 移动端:系统分享

二、技术架构 — 如何优雅地实现这些功能

🏗️ MVI 架构 + 单向数据流
┌──────────────┐
│   UI Layer   │ ← 用户交互(点击、输入)
│  (Widget)    │
└──────┬───────┘
       │ 发送 Intent
       ↓
┌──────────────────────┐
│  Intent Handler      │ ← 业务逻辑处理
│  (Notifier)          │
└──────┬───────────────┘
       │ 更新 State
       ↓
┌──────────────────────┐
│  Model (State)       │ ← 数据模型
│  (Freezed)           │
└──────┬───────────────┘
       │ 通知 UI 更新
       ↓
┌──────────────┐
│   UI Layer   │ ← 重新渲染
│  (Widget)    │
└──────────────┘

为什么选择 MVI?

特点 优势
单向数据流 数据流向清晰,易于调试
Intent 明确 每个用户操作都有对应的 Intent
State 不可变 使用 Freezed,避免意外修改
易于测试 Intent → State 的映射易于单元测试
🔄 Riverpod 状态管理
// 定义一个优化 Intent
class OptimizeIntent {
  final String originalPrompt;
  final String templateId;
  final String apiConfigId;
}

// Notifier 处理 Intent
class OptimizationNotifier extends StateNotifier<OptimizationState> {
  OptimizationNotifier() : super(OptimizationState.initial());
  
  // 处理优化 Intent
  Future<void> optimize(OptimizeIntent intent) async {
    state = state.copyWith(isLoading: true);
    try {
      final result = await _apiService.optimize(intent);
      state = state.copyWith(
        result: result,
        isLoading: false,
      );
    } catch (e) {
      state = state.copyWith(error: e.toString(), isLoading: false);
    }
  }
}

// UI 层监听状态

Widget build(BuildContext context, WidgetRef ref) {
  final state = ref.watch(optimizationProvider);
  
  return state.when(
    loading: () => LoadingWidget(),
    data: (result) => ResultWidget(result),
    error: (error) => ErrorWidget(error),
  );
}

Riverpod 的优势:

  • ✅ 编译时安全 — 依赖注入在编译期检查
  • ✅ 自动代码生成 — 使用 @riverpod 注解
  • ✅ 灵活的依赖管理 — 支持 override、watch、select
  • ✅ 性能优化 — 精细化的重建控制
🗄️ 数据库设计 — Drift + Hive
┌─────────────────────────────────────┐
│         数据存储层                   │
├─────────────────────────────────────┤
│  Drift (SQLite)                     │
│  ├── api_configs 表                 │
│  ├── prompt_templates 表            │
│  └── optimization_histories 表      │
│                                     │
│  Hive (KV 存储)                     │
│  ├── app_settings Box               │
│  │   ├── themeMode                  │
│  │   └── locale                     │
│  └── 其他偏好设置                   │
└─────────────────────────────────────┘

为什么这样设计?

存储方案 用途 原因
Drift API 配置、模板、历史 结构化数据,需要复杂查询
Hive UI 偏好设置 简单 KV 数据,快速读写
🔐 AES-256 加密
API 密钥存储流程:
┌──────────────────┐
│  用户输入密钥     │
└────────┬─────────┘
         │
         ↓
┌──────────────────┐
│  AES-256 加密    │
│  (256-bit key)   │
└────────┬─────────┘
         │
         ↓
┌──────────────────┐
│  Base64 编码     │
└────────┬─────────┘
         │
         ↓
┌──────────────────┐
│  存储到数据库     │
└──────────────────┘

使用时反向解密:
数据库 → Base64 解码 → AES-256 解密 → 获得原始密钥

AesCryptoService:

class AesCryptoService {
  static const String _encryptionKey = 'your-256-bit-key-here';
  
  // 加密
  static String encrypt(String plaintext) {
    final key = Key.fromUtf8(_encryptionKey);
    final iv = IV.fromSecureRandom(16);
    final cipher = Encrypter(AES(key, mode: AESMode.cbc));
    
    final encrypted = cipher.encrypt(plaintext, iv: iv);
    return '${iv.base64}:${encrypted.base64}';
  }
  
  // 解密
  static String decrypt(String encrypted) {
    final parts = encrypted.split(':');
    final iv = IV.fromBase64(parts[0]);
    final cipher = Encrypter(AES(Key.fromUtf8(_encryptionKey), mode: AESMode.cbc));
    
    return cipher.decrypt64(parts[1], iv: iv);
  }
}
🔄 GitHub Actions 工作流 CI/CD 流程
┌─────────────────────────────────────┐
│  Git 推送                            │
├─────────────────────────────────────┤
│  分支推送 (main)                    │
│  └── 代码分析 + Debug 构建          │
│                                     │
│  Tag 推送 (v1.0.0)                  │
│  └── 完整构建 + 自动发布            │
│      ├── Android (APK + AAB)        │
│      ├── Windows (ZIP)              │
│      ├── macOS (ZIP)                │
│      ├── Linux (TAR.GZ)             │
│      └── Web (TAR.GZ)               │
└─────────────────────────────────────┘

💡核心技术亮点

1️⃣ 单向数据流的优雅实现

问题: 传统 setState 容易导致状态混乱,难以追踪数据变化

解决方案: MVI 架构 + Riverpod

Intent (用户操作) 
  → Notifier (业务逻辑) 
  → State (数据模型) 
  → UI (重新渲染)

优势:

  • 数据流向一目了然
  • 易于调试和测试
  • 支持时间旅行调试(DevTools)

2️⃣ 流式响应的高效处理

问题: 大型 AI 响应可能很长,一次性加载会卡顿

解决方案: SSE 流式处理 + 增量更新

// 接收 SSE 流
final stream = _apiService.optimizeStream(prompt);

// 逐 token 处理
await for (final token in stream) {
  state = state.copyWith(
    result: state.result + token, // 增量拼接
  );
}

3️⃣ 跨平台数据同步

实现在多个设备间切换,配置和历史数据不同步

// 导出数据
Future<void> exportData() async {
  final data = {
    'apiConfigs': await _apiConfigDao.getAllConfigs(),
    'templates': await _templateDao.getAllTemplates(),
    'histories': await _historyDao.getAllHistories(),
    'settings': await _settingsService.getSettings(),
  };
  
  final json = jsonEncode(data);
  // 保存到文件或分享
}

// 导入数据
Future<void> importData(String jsonData) async {
  final data = jsonDecode(jsonData);
  
  await _apiConfigDao.insertConfigs(data['apiConfigs']);
  await _templateDao.insertTemplates(data['templates']);
  await _historyDao.insertHistories(data['histories']);
  await _settingsService.updateSettings(data['settings']);
}

致敬

linshenkx 大佬开发的提示词优化器

请添加图片描述

开源地址

linshenkx 大佬开发的提示词优化器 一款提示词优化器

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐