top777 发表于 2025-5-21 14:21

Trae等AI一键编程的提示词生成工具

本帖最后由 top777 于 2025-5-22 08:41 编辑

原作者是头条的“懂营养的小熊”(没想到一个Trae的提示词工具,居然会有这么多人喜欢? - 今日头条)
prompt_generator.py
import sys
import json
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
                           QHBoxLayout, QComboBox, QLabel, QPushButton,
                           QTextEdit, QLineEdit, QGroupBox, QGridLayout,
                           QMessageBox)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from prompt_generator_logic import PromptGeneratorLogic

class PromptGenerator(QMainWindow):
    def __init__(self):
      super().__init__()
      self.setWindowTitle('提示词生成工具')
      self.setGeometry(100, 100, 1200, 800)
      
      # 初始化提示词生成器
      self.prompt_logic = PromptGeneratorLogic()
      
      # 创建主窗口部件
      main_widget = QWidget()
      self.setCentralWidget(main_widget)
      main_layout = QVBoxLayout(main_widget)
      
      # 创建顶部控制区域
      top_control = self.create_top_control()
      main_layout.addWidget(top_control)
      
      # 创建中间内容区域
      content_area = self.create_content_area()
      main_layout.addWidget(content_area)
      
      # 创建底部输出区域
      output_area = self.create_output_area()
      main_layout.addWidget(output_area)
      
      # 初始化数据
      self.init_data()
      
    def create_top_control(self):
      group = QGroupBox("基本设置")
      layout = QGridLayout()
      
      # Ollama模型选择
      layout.addWidget(QLabel("使用本地Ollama模型:"), 0, 0)
      self.ollama_combo = QComboBox()
      self.ollama_combo.addItems(["否", "是"])
      layout.addWidget(self.ollama_combo, 0, 1)
      
      # 本地模型管理
      self.model_combo = QComboBox()
      self.model_combo.setEnabled(False)
      layout.addWidget(self.model_combo, 0, 2)
      
      refresh_btn = QPushButton("刷新模型")
      refresh_btn.setEnabled(False)
      refresh_btn.setObjectName("refresh_btn")
      layout.addWidget(refresh_btn, 0, 3)
      
      load_btn = QPushButton("加载模型")
      load_btn.setEnabled(False)
      load_btn.setObjectName("load_btn")
      layout.addWidget(load_btn, 0, 4)
      
      # 职业选择
      layout.addWidget(QLabel("职业:"), 1, 0)
      self.profession_combo = QComboBox()
      self.profession_combo.addItems([
            "教师", "设计师", "摄影师", "程序员", "医生", "律师", "工程师",
            "作家", "记者", "会计", "销售", "市场专员", "人力资源", "行政",
            "客服", "翻译", "导游", "厨师", "护士", "建筑师", "艺术家",
            "音乐家", "演员", "运动员", "科学家", "研究员", "分析师",
            "顾问", "企业家", "自由职业者"
      ])
      layout.addWidget(self.profession_combo, 1, 1, 1, 4)
      
      # GUI框架选择
      layout.addWidget(QLabel("GUI框架:"), 2, 0)
      self.gui_combo = QComboBox()
      self.gui_combo.addItems(["PyQt5", "Kivy", "Tkinter", "Wax", "Libavg", "PySimpleGUI"])
      layout.addWidget(self.gui_combo, 2, 1, 1, 4)
      
      # 数据库选择
      layout.addWidget(QLabel("数据库:"), 3, 0)
      self.db_combo = QComboBox()
      self.db_combo.addItems(["SQLite3", "PyMySQL", "Psycopg2", "PyMongo", "cx_Oracle", "Redis"])
      layout.addWidget(self.db_combo, 3, 1, 1, 4)
      
      # 界面区块
      layout.addWidget(QLabel("界面区块:"), 4, 0)
      self.blocks_combo = QComboBox()
      self.blocks_combo.addItems(["1", "2", "3", "4", "5"])
      layout.addWidget(self.blocks_combo, 4, 1, 1, 4)
      
      # 界面风格
      layout.addWidget(QLabel("界面风格:"), 5, 0)
      self.style_combo = QComboBox()
      self.style_combo.addItems([
            "浅色系清新简洁", "深色系金属科幻", "自然生态风格",
            "极简主义", "复古怀旧", "未来科技感",
            "商务专业", "艺术创意", "游戏风格",
            "工业风格"
      ])
      layout.addWidget(self.style_combo, 5, 1, 1, 4)
      
      group.setLayout(layout)
      return group
      
    def create_content_area(self):
      group = QGroupBox("界面布局设置")
      layout = QGridLayout()
      
      # 创建五个区域的输入框和粘贴按钮
      positions = ["顶部", "左侧", "中间", "右侧", "底部"]
      self.position_inputs = {}
      for i, pos in enumerate(positions):
            layout.addWidget(QLabel(f"{pos}:"), i, 0)
            line_edit = QLineEdit()
            self.position_inputs = line_edit
            layout.addWidget(line_edit, i, 1)
            paste_btn = QPushButton("粘贴")
            paste_btn.clicked.connect(lambda checked, p=pos: self.paste_text(p))
            layout.addWidget(paste_btn, i, 2)
            
      group.setLayout(layout)
      return group
      
    def create_output_area(self):
      group = QGroupBox("输出区域")
      layout = QVBoxLayout()
      
      # 输出文本框
      self.output_text = QTextEdit()
      self.output_text.setReadOnly(True)
      layout.addWidget(self.output_text)
      
      # 按钮区域
      btn_layout = QHBoxLayout()
      generate_btn = QPushButton("生成提示词")
      generate_btn.clicked.connect(self.generate_prompt)
      copy_btn = QPushButton("复制提示词")
      copy_btn.clicked.connect(self.copy_prompt)
      btn_layout.addWidget(generate_btn)
      btn_layout.addWidget(copy_btn)
      layout.addLayout(btn_layout)
      
      group.setLayout(layout)
      return group
      
    def init_data(self):
      # 连接信号和槽
      self.ollama_combo.currentTextChanged.connect(self.toggle_ollama_options)
      
    def toggle_ollama_options(self, text):
      enabled = text == "是"
      self.model_combo.setEnabled(enabled)
      self.model_combo.parent().findChild(QPushButton, "refresh_btn").setEnabled(enabled)
      self.model_combo.parent().findChild(QPushButton, "load_btn").setEnabled(enabled)
      
    def paste_text(self, position):
      """从剪贴板粘贴文本到指定位置"""
      clipboard = QApplication.clipboard()
      text = clipboard.text()
      if text:
            self.position_inputs.setText(text)
            
    def generate_prompt(self):
      """生成提示词"""
      config = {
            'use_ollama': self.ollama_combo.currentText() == "是",
            'ollama_model': self.model_combo.currentText() if self.ollama_combo.currentText() == "是" else None,
            'profession': self.profession_combo.currentText(),
            'gui_framework': self.gui_combo.currentText(),
            'database': self.db_combo.currentText(),
            'blocks': self.blocks_combo.currentText(),
            'style': self.style_combo.currentText(),
            'top': self.position_inputs["顶部"].text(),
            'left': self.position_inputs["左侧"].text(),
            'center': self.position_inputs["中间"].text(),
            'right': self.position_inputs["右侧"].text(),
            'bottom': self.position_inputs["底部"].text()
      }
      
      prompt = self.prompt_logic.generate_prompt(config)
      self.output_text.setText(prompt)
      
    def copy_prompt(self):
      """复制提示词到剪贴板"""
      text = self.output_text.toPlainText()
      if text:
            clipboard = QApplication.clipboard()
            clipboard.setText(text)
            QMessageBox.information(self, "提示", "提示词已复制到剪贴板!")
      else:
            QMessageBox.warning(self, "警告", "没有可复制的提示词!")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = PromptGenerator()
    window.show()
    sys.exit(app.exec_())

prompt_generator_logic.py
class PromptGeneratorLogic:
    def __init__(self):
      self.profession_requirements = {
            "教师": "需要具备教学经验,熟悉课程设计,能够进行课堂管理",
            "设计师": "需要具备创意设计能力,熟悉设计软件,了解设计趋势",
            "摄影师": "需要掌握摄影技巧,熟悉后期处理,了解构图原理",
            # ... 其他职业的要求
      }
      
      self.style_descriptions = {
            "浅色系清新简洁": "使用柔和的浅色调,简洁的布局,清晰的视觉层次",
            "深色系金属科幻": "采用深色背景,金属质感元素,科技感十足的界面设计",
            "自然生态风格": "使用自然色调,有机形状,生态友好的设计元素",
            "极简主义": "极简的界面设计,留白空间充足,重点突出核心功能",
            "复古怀旧": "采用复古配色,经典设计元素,怀旧风格的界面",
            "未来科技感": "使用霓虹色调,动态效果,未来感十足的界面设计",
            "商务专业": "采用专业的配色方案,规整的布局,突出商务属性",
            "艺术创意": "富有创意的设计元素,独特的视觉表现,艺术感强",
            "游戏风格": "动感的界面设计,游戏化元素,互动性强",
            "工业风格": "粗犷的设计元素,工业质感,功能性强"
      }
      
    def generate_prompt(self, config):
      """根据配置生成提示词"""
      prompt_parts = []
      
      # 添加职业相关要求
      if config.get('profession') in self.profession_requirements:
            prompt_parts.append(f"职业要求:{self.profession_requirements]}")
      
      # 添加GUI框架相关
      prompt_parts.append(f"使用{config.get('gui_framework', 'PyQt5')}框架开发")
      
      # 添加数据库相关
      prompt_parts.append(f"使用{config.get('database', 'SQLite3')}作为数据库")
      
      # 添加界面区块说明
      prompt_parts.append(f"界面分为{config.get('blocks', '3')}个区块")
      
      # 添加界面风格说明
      style = config.get('style', '浅色系清新简洁')
      if style in self.style_descriptions:
            prompt_parts.append(f"界面风格:{self.style_descriptions}")
      
      # 添加各个区域的具体要求
      for position in ['top', 'left', 'center', 'right', 'bottom']:
            if config.get(position):
                prompt_parts.append(f"{position}区域要求:{config}")
      
      # 添加Ollama模型相关
      if config.get('use_ollama'):
            prompt_parts.append(f"使用本地Ollama模型:{config.get('ollama_model', '默认模型')}")
      
      return "\n".join(prompt_parts)

top777 发表于 2025-5-22 08:21

保温板 发表于 2025-5-22 00:34
感谢楼主分享,再发个成品吧

不是我的原创,传播成品要征求原作者意见。不好意思。

追风营销 发表于 2025-5-21 15:00

提示词工具原理整体所有AI模型系统自带提示词按照格式输出优化后的词语 最后达到ai让ai帮我们绘图等。

wapj2900958 发表于 2025-5-21 14:35

请教,为什么我的系统,运行一闪,没有窗口?

top777 发表于 2025-5-21 14:42

本帖最后由 top777 于 2025-5-21 14:53 编辑

wapj2900958 发表于 2025-5-21 14:35
请教,为什么我的系统,运行一闪,没有窗口?
是不是没装QT5模块?建议下载trae,放到里面进行运行,这样报错信息能够被trae捕捉并提出建议。

追风营销 发表于 2025-5-21 15:01

追风营销 发表于 2025-5-21 15:00
提示词工具原理整体所有AI模型系统自带提示词按照格式输出优化后的词语 最后达到ai让ai帮我们绘图等。

你这个设计的只是简单人工词语组合 不能称为提示词工具

52PJ070 发表于 2025-5-21 15:25

下载试试看,感谢提供原创分享!

bydlyzx 发表于 2025-5-21 19:47

已经在trae上运行起来啦,
不过不会用啊,
怎么填写呢?

ylixx 发表于 2025-5-21 20:14

感觉很高大上的样子,不知道使用效果是不是特别明显

ank 发表于 2025-5-21 21:16

可以优化的余地还有很多,加油

lan771 发表于 2025-5-21 22:11

烦请大佬提供一下 使用方法
页: [1] 2 3
查看完整版本: Trae等AI一键编程的提示词生成工具