From 1ac2fd6a439c55894e3e6636e48ba2319486de59 Mon Sep 17 00:00:00 2001 From: arch3rPro <30855883+arch3rPro@users.noreply.github.com> Date: Mon, 21 Jul 2025 17:28:39 +0800 Subject: [PATCH] feat: add app prompt-optimizer --- apps/prompt-optimizer/1.3.1/data.yml | 68 ++++++++++++++++++ .../prompt-optimizer/1.3.1/docker-compose.yml | 31 ++++++++ apps/prompt-optimizer/README.md | 48 +++++++++++++ apps/prompt-optimizer/README_EN.md | 49 +++++++++++++ apps/prompt-optimizer/data.yml | 31 ++++++++ apps/prompt-optimizer/latest/data.yml | 68 ++++++++++++++++++ .../latest/docker-compose.yml | 31 ++++++++ apps/prompt-optimizer/logo.png | Bin 0 -> 27855 bytes 8 files changed, 326 insertions(+) create mode 100644 apps/prompt-optimizer/1.3.1/data.yml create mode 100644 apps/prompt-optimizer/1.3.1/docker-compose.yml create mode 100644 apps/prompt-optimizer/README.md create mode 100644 apps/prompt-optimizer/README_EN.md create mode 100644 apps/prompt-optimizer/data.yml create mode 100644 apps/prompt-optimizer/latest/data.yml create mode 100644 apps/prompt-optimizer/latest/docker-compose.yml create mode 100644 apps/prompt-optimizer/logo.png diff --git a/apps/prompt-optimizer/1.3.1/data.yml b/apps/prompt-optimizer/1.3.1/data.yml new file mode 100644 index 0000000..26c2972 --- /dev/null +++ b/apps/prompt-optimizer/1.3.1/data.yml @@ -0,0 +1,68 @@ +additionalProperties: + formFields: + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web端口 + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: PROMPT_OPTIMIZER_PASSWORD + labelEn: Basic Auth Password (Optional) + labelZh: 访问密码 (可选) + random: true + required: false + rule: paramComplexity + type: password + - default: "" + edit: true + envKey: VITE_OPENAI_API_KEY + labelEn: OpenAI API Key (Optional) + labelZh: OpenAI API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_GEMINI_API_KEY + labelEn: Gemini API Key (Optional) + labelZh: Gemini API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_DEEPSEEK_API_KEY + labelEn: DeepSeek API Key (Optional) + labelZh: DeepSeek API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_SILICONFLOW_API_KEY + labelEn: SiliconFlow API Key (Optional) + labelZh: SiliconFlow API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_CUSTOM_API_KEY + labelEn: Custom API Key (Optional) + labelZh: 自定义 API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_CUSTOM_API_BASE_URL + labelEn: Custom API Base URL (Optional) + labelZh: 自定义 API 地址 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_CUSTOM_API_MODEL + labelEn: Custom API Model (Optional) + labelZh: 自定义 API 模型 (可选) + required: false + type: text \ No newline at end of file diff --git a/apps/prompt-optimizer/1.3.1/docker-compose.yml b/apps/prompt-optimizer/1.3.1/docker-compose.yml new file mode 100644 index 0000000..3c8720d --- /dev/null +++ b/apps/prompt-optimizer/1.3.1/docker-compose.yml @@ -0,0 +1,31 @@ +services: + prompt-optimizer: + image: linshen/prompt-optimizer:1.3.1 + container_name: ${CONTAINER_NAME} + restart: unless-stopped + ports: + - "${PANEL_APP_PORT_HTTP}:80" + environment: + ACCESS_USERNAME: "admin" + ACCESS_PASSWORD: "${PROMPT_OPTIMIZER_PASSWORD}" + VITE_OPENAI_API_KEY: "${VITE_OPENAI_API_KEY}" + VITE_GEMINI_API_KEY: "${VITE_GEMINI_API_KEY}" + VITE_DEEPSEEK_API_KEY: "${VITE_DEEPSEEK_API_KEY}" + VITE_SILICONFLOW_API_KEY: "${VITE_SILICONFLOW_API_KEY}" + VITE_CUSTOM_API_KEY: "${VITE_CUSTOM_API_KEY}" + VITE_CUSTOM_API_BASE_URL: "${VITE_CUSTOM_API_BASE_URL}" + VITE_CUSTOM_API_MODEL: "${VITE_CUSTOM_API_MODEL}" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 5s + labels: + createdBy: "Apps" + networks: + - 1panel-network + +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/prompt-optimizer/README.md b/apps/prompt-optimizer/README.md new file mode 100644 index 0000000..9321639 --- /dev/null +++ b/apps/prompt-optimizer/README.md @@ -0,0 +1,48 @@ +# Prompt Optimizer (提示词优化器) 🚀 + +## 📖 项目简介 +Prompt Optimizer 是一款强大的 AI 提示词优化工具,旨在帮助用户轻松编写、优化和测试高质量的提示词。它支持多种主流的大语言模型,并提供直观的可视化界面,让提示词工程变得简单高效。 + +![](https://cdn.jsdelivr.net/gh/xiaoY233/PicList@main/public/assets/prompt-optimizer.png) + +![](https://img.shields.io/badge/Copyright-arch3rPro-ff9800?style=flat&logo=github&logoColor=white) + +## ✨ 核心特性 +- **智能优化**:一键优化提示词,支持多轮迭代改进,提升AI回复准确度。 +- **双模式优化**:支持系统提示词优化和用户提示词优化,满足不同使用场景。 +- **对比测试**:支持原始提示词和优化后提示词的实时对比,直观展示优化效果。 +- **多模型集成**:支持 OpenAI、Gemini、DeepSeek、智谱 AI、SiliconFlow 等主流 AI 模型,并支持自定义 API。 +- **安全架构**:纯客户端处理,数据直接与 AI 服务商交互,不经过中间服务器。 +- **访问控制**:支持密码保护功能,保障部署安全。 + +## ⚙️ API密钥配置 +### 方式一:通过界面配置(推荐) +1. 点击界面右上角的"⚙️设置"按钮 +2. 选择"模型管理"选项卡 +3. 点击需要配置的模型(如OpenAI、Gemini、DeepSeek等) +4. 在弹出的配置框中输入对应的API密钥 +5. 点击"保存"即可 + +支持的模型:OpenAI、Gemini、DeepSeek、Zhipu智谱、SiliconFlow、自定义API(OpenAI兼容接口) + +### 方式二:通过环境变量配置 +你可以在安装应用时,在表单中直接填写常用的 API 密钥。支持的环境变量如下: +- `VITE_OPENAI_API_KEY` +- `VITE_GEMINI_API_KEY` +- `VITE_DEEPSEEK_API_KEY` +- `VITE_SILICONFLOW_API_KEY` +- `VITE_CUSTOM_API_KEY` +- `VITE_CUSTOM_API_BASE_URL` +- `VITE_CUSTOM_API_MODEL` + +## 常见问题 FAQ +- **Q: 为什么配置好 API 密钥后仍然无法连接?** + A: 大多数情况是由网络或跨域问题(CORS)导致的。如果你的模型服务部署在本地(如 Ollama),请确保正确配置了跨域策略。对于云服务商,如果遇到连接问题,可以尝试在模型设置中开启 Vercel 代理(如果可用)。 +- **Q: 如何修改访问密码?** + A: 你需要重新配置应用,在安装时设置新的密码。 + +## 相关链接 +- 官网: [https://prompt.always200.com/](https://prompt.always200.com/) +- GitHub: [https://github.com/linshenkx/prompt-optimizer](https://github.com/linshenkx/prompt-optimizer) +- 文档: [https://github.com/linshenkx/prompt-optimizer/blob/develop/docs/index.md](https://github.com/linshenkx/prompt-optimizer/blob/develop/docs/index.md) + diff --git a/apps/prompt-optimizer/README_EN.md b/apps/prompt-optimizer/README_EN.md new file mode 100644 index 0000000..a94643a --- /dev/null +++ b/apps/prompt-optimizer/README_EN.md @@ -0,0 +1,49 @@ +# Prompt Optimizer 🚀 + +## 📖 Project Introduction +Prompt Optimizer is a powerful AI prompt optimization tool that helps you write better AI prompts and improve the quality of AI outputs. It supports various mainstream large language models and provides an intuitive visual interface, making prompt engineering simple and efficient. + + +![](https://cdn.jsdelivr.net/gh/xiaoY233/PicList@main/public/assets/prompt-optimizer.png) + +![](https://img.shields.io/badge/Copyright-arch3rPro-ff9800?style=flat&logo=github&logoColor=white) + + +## ✨ Core Features +- **Intelligent Optimization**: One-click optimization of prompts with support for multi-round iterative improvements to enhance AI response accuracy. +- **Dual Mode Optimization**: Supports both system prompt and user prompt optimization to meet different usage scenarios. +- **Comparison Testing**: Allows real-time comparison between original and optimized prompts to intuitively demonstrate the optimization effect. +- **Multi-Model Integration**: Supports mainstream AI models such as OpenAI, Gemini, DeepSeek, Zhipu AI, SiliconFlow, and custom APIs. +- **Secure Architecture**: Pure client-side processing, with data directly interacting with AI service providers without passing through intermediate servers. +- **Access Control**: Supports password protection to secure your deployment. + +## ⚙️ API Key Configuration +### Method 1: Via Interface (Recommended) +1. Click the "⚙️Settings" button in the upper right corner. +2. Select the "Model Management" tab. +3. Click on the model you need to configure (e.g., OpenAI, Gemini, DeepSeek). +4. Enter the corresponding API key in the configuration box. +5. Click "Save". + +Supported models: OpenAI, Gemini, DeepSeek, Zhipu AI, SiliconFlow, Custom API (OpenAI compatible interface). + +### Method 2: Via Environment Variables +You can fill in common API keys directly in the form when installing the application. The following environment variables are supported: +- `VITE_OPENAI_API_KEY` +- `VITE_GEMINI_API_KEY` +- `VITE_DEEPSEEK_API_KEY` +- `VITE_SILICONFLOW_API_KEY` +- `VITE_CUSTOM_API_KEY` +- `VITE_CUSTOM_API_BASE_URL` +- `VITE_CUSTOM_API_MODEL` + +## FAQ +- **Q: Why can't I connect after configuring the API key?** + A: Most connection issues are caused by network problems or Cross-Origin Resource Sharing (CORS). If your model service is deployed locally (e.g., Ollama), ensure that CORS is configured correctly. For cloud providers, if you encounter connection problems, try enabling the Vercel proxy in the model settings if available. +- **Q: How to change the access password?** + A: You need to reconfigure the application and set a new password during installation. + +## Links +- Website: [https://prompt.always200.com/](https://prompt.always200.com/) +- GitHub: [https://github.com/linshenkx/prompt-optimizer](https://github.com/linshenkx/prompt-optimizer) +- Docs: [https://github.com/linshenkx/prompt-optimizer/blob/develop/docs/index.md](https://github.com/linshenkx/prompt-optimizer/blob/develop/docs/index.md) \ No newline at end of file diff --git a/apps/prompt-optimizer/data.yml b/apps/prompt-optimizer/data.yml new file mode 100644 index 0000000..b1463ec --- /dev/null +++ b/apps/prompt-optimizer/data.yml @@ -0,0 +1,31 @@ +name: Prompt Optimizer + +tags: + - AI + - LLM + - Prompt +title: 高质量提示词优化器 +description: 一款提示词优化器,助力于编写高质量的提示词,支持多种大语言模型,提供可视化界面和 API。 +additionalProperties: + key: prompt-optimizer + name: Prompt Optimizer + tags: + - AI + - LLM + - Prompt + - Tool + shortDescZh: 一款提示词优化器,助力于编写高质量的提示词。 + shortDescEn: An optimizer for crafting high-quality prompts. + description: + zh: Prompt Optimizer 是一款强大的提示词(Prompt)优化工具,旨在帮助用户轻松编写、优化和测试高质量的提示词。它支持多种主流的大语言模型(LLM),并提供直观的可视化界面,让提示词工程变得简单高效。 + en: Prompt Optimizer is a powerful tool designed to help users easily write, optimize, and test high-quality prompts. It supports various mainstream Large Language Models (LLMs) and provides an intuitive visual interface to make prompt engineering simple and efficient. + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://prompt.always200.com/ + github: https://github.com/linshenkx/prompt-optimizer + document: https://github.com/linshenkx/prompt-optimizer/blob/develop/docs/index.md + architectures: + - amd64 + - arm64 \ No newline at end of file diff --git a/apps/prompt-optimizer/latest/data.yml b/apps/prompt-optimizer/latest/data.yml new file mode 100644 index 0000000..26c2972 --- /dev/null +++ b/apps/prompt-optimizer/latest/data.yml @@ -0,0 +1,68 @@ +additionalProperties: + formFields: + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web端口 + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: PROMPT_OPTIMIZER_PASSWORD + labelEn: Basic Auth Password (Optional) + labelZh: 访问密码 (可选) + random: true + required: false + rule: paramComplexity + type: password + - default: "" + edit: true + envKey: VITE_OPENAI_API_KEY + labelEn: OpenAI API Key (Optional) + labelZh: OpenAI API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_GEMINI_API_KEY + labelEn: Gemini API Key (Optional) + labelZh: Gemini API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_DEEPSEEK_API_KEY + labelEn: DeepSeek API Key (Optional) + labelZh: DeepSeek API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_SILICONFLOW_API_KEY + labelEn: SiliconFlow API Key (Optional) + labelZh: SiliconFlow API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_CUSTOM_API_KEY + labelEn: Custom API Key (Optional) + labelZh: 自定义 API 密钥 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_CUSTOM_API_BASE_URL + labelEn: Custom API Base URL (Optional) + labelZh: 自定义 API 地址 (可选) + required: false + type: text + - default: "" + edit: true + envKey: VITE_CUSTOM_API_MODEL + labelEn: Custom API Model (Optional) + labelZh: 自定义 API 模型 (可选) + required: false + type: text \ No newline at end of file diff --git a/apps/prompt-optimizer/latest/docker-compose.yml b/apps/prompt-optimizer/latest/docker-compose.yml new file mode 100644 index 0000000..c8e9ae5 --- /dev/null +++ b/apps/prompt-optimizer/latest/docker-compose.yml @@ -0,0 +1,31 @@ +services: + prompt-optimizer: + image: linshen/prompt-optimizer:latest + container_name: ${CONTAINER_NAME} + restart: unless-stopped + ports: + - "${PANEL_APP_PORT_HTTP}:80" + environment: + ACCESS_USERNAME: "admin" + ACCESS_PASSWORD: "${PROMPT_OPTIMIZER_PASSWORD}" + VITE_OPENAI_API_KEY: "${VITE_OPENAI_API_KEY}" + VITE_GEMINI_API_KEY: "${VITE_GEMINI_API_KEY}" + VITE_DEEPSEEK_API_KEY: "${VITE_DEEPSEEK_API_KEY}" + VITE_SILICONFLOW_API_KEY: "${VITE_SILICONFLOW_API_KEY}" + VITE_CUSTOM_API_KEY: "${VITE_CUSTOM_API_KEY}" + VITE_CUSTOM_API_BASE_URL: "${VITE_CUSTOM_API_BASE_URL}" + VITE_CUSTOM_API_MODEL: "${VITE_CUSTOM_API_MODEL}" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:80"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 5s + labels: + createdBy: "Apps" + networks: + - 1panel-network + +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/prompt-optimizer/logo.png b/apps/prompt-optimizer/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5059ea365e7bd902735b4dee1da44f3e8eb32299 GIT binary patch literal 27855 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