diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..71cb3ea --- /dev/null +++ b/docs/README.md @@ -0,0 +1,98 @@ +# 提示词大师 (Prompt Master) + +## 项目概述 + +提示词大师是一个基于Flask的Web应用,专门用于管理和优化大模型提示词。该平台提供了提示词的创建、编辑、测试和分享功能,帮助用户更好地利用大语言模型的能力。 + +## 主要功能 + +- **提示词管理**: 创建、编辑、分类和搜索提示词 +- **模板系统**: 提供多种行业和场景的提示词模板 +- **测试功能**: 实时测试提示词效果 +- **用户系统**: 用户注册、登录和权限管理 +- **分享功能**: 提示词分享和协作 + +## 技术栈 + +- **后端**: Python Flask +- **数据库**: SQLite/PostgreSQL +- **前端**: HTML/CSS/JavaScript +- **模板引擎**: Jinja2 +- **ORM**: SQLAlchemy + +## 快速开始 + +### 环境要求 + +- Python 3.8+ +- pip + +### 安装步骤 + +1. 克隆项目 +```bash +git clone +cd aitsc +``` + +2. 创建虚拟环境 +```bash +python -m venv .venv +.venv\Scripts\activate # Windows +# source .venv/bin/activate # Linux/Mac +``` + +3. 安装依赖 +```bash +pip install -r requirements.txt +``` + +4. 初始化数据库 +```bash +python init_db.py +``` + +5. 运行应用 +```bash +python run_dev.py +``` + +访问 http://localhost:5000 开始使用 + +## 项目结构 + +``` +aitsc/ +├── src/flask_prompt_master/ # 主应用代码 +├── config/ # 配置文件 +├── tests/ # 测试文件 +├── docs/ # 项目文档 +├── scripts/ # 管理脚本 +└── requirements.txt # 依赖文件 +``` + +## 文档导航 + +- [API文档](api/) - API接口说明 +- [部署文档](deployment/) - 部署和运维指南 +- [开发文档](development/) - 开发环境搭建和贡献指南 +- [用户文档](user/) - 用户使用手册 + +## 贡献指南 + +欢迎贡献代码!请查看 [开发文档](development/contributing.md) 了解详细的贡献流程。 + +## 许可证 + +本项目采用 MIT 许可证。 + +## 联系方式 + +如有问题或建议,请通过以下方式联系: + +- 项目Issues: [GitHub Issues](https://github.com/your-repo/issues) +- 邮箱: your-email@example.com + +--- + +*最后更新: 2024年8月16日* diff --git a/产品战略文档.txt b/docs/development/产品战略文档.txt similarity index 100% rename from 产品战略文档.txt rename to docs/development/产品战略文档.txt diff --git a/产品线路图.txt b/docs/development/产品线路图.txt similarity index 100% rename from 产品线路图.txt rename to docs/development/产品线路图.txt diff --git a/产品经理常用到的文档.txt b/docs/development/产品经理常用到的文档.txt similarity index 100% rename from 产品经理常用到的文档.txt rename to docs/development/产品经理常用到的文档.txt diff --git a/大模型提示词产品大师知识库文档.txt b/docs/development/大模型提示词产品大师知识库文档.txt similarity index 100% rename from 大模型提示词产品大师知识库文档.txt rename to docs/development/大模型提示词产品大师知识库文档.txt diff --git a/大模型提示词产品大师知识文档.txt b/docs/development/大模型提示词产品大师知识文档.txt similarity index 100% rename from 大模型提示词产品大师知识文档.txt rename to docs/development/大模型提示词产品大师知识文档.txt diff --git a/大模型提示词大师产品市场调研报告.txt b/docs/development/大模型提示词大师产品市场调研报告.txt similarity index 100% rename from 大模型提示词大师产品市场调研报告.txt rename to docs/development/大模型提示词大师产品市场调研报告.txt diff --git a/大模型提示词大师产品测试计划文档.md b/docs/development/大模型提示词大师产品测试计划文档.md similarity index 100% rename from 大模型提示词大师产品测试计划文档.md rename to docs/development/大模型提示词大师产品测试计划文档.md diff --git a/大模型提示词大师平台产品需求PRD文档.txt b/docs/development/大模型提示词大师平台产品需求PRD文档.txt similarity index 100% rename from 大模型提示词大师平台产品需求PRD文档.txt rename to docs/development/大模型提示词大师平台产品需求PRD文档.txt diff --git a/提示词大师产品的敏捷开发相关文档.txt b/docs/development/提示词大师产品的敏捷开发相关文档.txt similarity index 100% rename from 提示词大师产品的敏捷开发相关文档.txt rename to docs/development/提示词大师产品的敏捷开发相关文档.txt diff --git a/提示词大师技术规格说明书.txt b/docs/development/提示词大师技术规格说明书.txt similarity index 100% rename from 提示词大师技术规格说明书.txt rename to docs/development/提示词大师技术规格说明书.txt diff --git a/数据库操作.txt b/docs/development/数据库操作.txt similarity index 100% rename from 数据库操作.txt rename to docs/development/数据库操作.txt diff --git a/项目结构优化方案.md b/docs/development/项目结构优化方案.md similarity index 100% rename from 项目结构优化方案.md rename to docs/development/项目结构优化方案.md diff --git a/项目结构分析报告.md b/docs/development/项目结构分析报告.md similarity index 100% rename from 项目结构分析报告.md rename to docs/development/项目结构分析报告.md diff --git a/项目结构对比分析.md b/docs/development/项目结构对比分析.md similarity index 100% rename from 项目结构对比分析.md rename to docs/development/项目结构对比分析.md diff --git a/项目结构说明.md b/docs/development/项目结构说明.md similarity index 100% rename from 项目结构说明.md rename to docs/development/项目结构说明.md diff --git a/用户体验文档.txt b/docs/user/features.md similarity index 100% rename from 用户体验文档.txt rename to docs/user/features.md diff --git a/大模型提示词大师产品用户手册.txt b/docs/user/getting_started.md similarity index 100% rename from 大模型提示词大师产品用户手册.txt rename to docs/user/getting_started.md diff --git a/docs/user/大模型提示词大师产品用户手册.txt b/docs/user/大模型提示词大师产品用户手册.txt new file mode 100644 index 0000000..0267458 --- /dev/null +++ b/docs/user/大模型提示词大师产品用户手册.txt @@ -0,0 +1,30 @@ +您好,欢迎使用大模型提示词大师产品。我是您的用户体验专家,将为您详细介绍产品的功能和使用方法。如果您有任何疑问或需要帮助,请随时告诉我。 +以下是大模型提示词大师产品的用户手册,帮助您快速了解产品的功能和使用方法: +《大模型提示词大师产品用户手册》 +一、产品功能介绍 +1.1 基本功能 +智能提示词生成:根据用户输入的需求,快速生成高质量的提示词。 +提示词优化:对生成的提示词进行优化,提升其准确性和效率。 +预设提示词库:提供丰富的预设提示词,涵盖不同行业和场景。 +个性化收藏与管理:用户可以收藏常用的提示词,并进行分类管理。 +社区分享与交流:用户可以将自己的提示词分享到社区,与其他用户交流心得。 +1.2 应用场景 +创意文案生成:帮助创作者快速生成创意文案。 +数据分析:辅助用户进行数据分析,生成分析报告。 +知识学习:为学习者提供知识点解析和学习内容。 +二、使用步骤说明 +2.1 输入提示词 +打开产品界面,选择相应的功能模块。 +输入相关主题和关键词作为提示词。 +2.2 调整参数 +根据需要调整生成参数,如字数、风格、难度级别等。 +2.3 获取结果 +点击生成按钮,产品将根据提示词生成结果。 +用户可以根据需要对生成结果进行修改和完善。 +三、常见问题解答 +3.1 问题识别 +用户在使用过程中可能遇到的问题,如提示词生成不准确、结果不符合预期等。 +3.2 解决方案 +提示词生成不准确:检查输入的提示词是否清晰明确,尝试调整参数或优化提示词。 +结果不符合预期:参考预设提示词库中的示例,调整输入的提示词。 +希望这份用户手册能够帮助您更好地使用大模型提示词大师产品。如果您在使用过程中遇到任何问题,欢迎随时联系我们的客服团队。 \ No newline at end of file diff --git a/src/flask_prompt_master/forms/forms.py b/src/flask_prompt_master/forms/forms.py new file mode 100644 index 0000000..f6b5f68 --- /dev/null +++ b/src/flask_prompt_master/forms/forms.py @@ -0,0 +1,12 @@ +from flask_wtf import FlaskForm +from wtforms import TextAreaField, SubmitField, IntegerField +from wtforms.validators import DataRequired, Length, NumberRange + +class PromptForm(FlaskForm): + input_text = TextAreaField('输入文本', validators=[DataRequired(), Length(min=1, max=1000)]) + submit = SubmitField('生成提示词') + +class FeedbackForm(FlaskForm): + rating = IntegerField('评分', validators=[DataRequired(), NumberRange(min=1, max=5)]) + comment = TextAreaField('评论') + submit = SubmitField('提交反馈') \ No newline at end of file diff --git a/src/flask_prompt_master/routes/routes.py b/src/flask_prompt_master/routes/routes.py new file mode 100644 index 0000000..1d205fd --- /dev/null +++ b/src/flask_prompt_master/routes/routes.py @@ -0,0 +1,1177 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify, current_app +from openai import OpenAI +from flask_prompt_master import db +from flask_prompt_master.models import User, Prompt, Feedback, PromptTemplate, WxUser +from flask_prompt_master.forms import PromptForm, FeedbackForm +from config import Config +import pymysql +from datetime import datetime +import requests +import hashlib +import time +import json + +main_bp = Blueprint('main', __name__) + +client = OpenAI(api_key=Config.LLM_API_KEY, base_url=Config.LLM_API_URL) + +# 从配置中获取微信小程序配置 +WX_APPID = Config.WX_APPID +WX_SECRET = Config.WX_SECRET + +def get_system_prompt(template_id=None): + """获取系统提示词模板""" + if template_id: + template = PromptTemplate.query.get(template_id) + if template: + return template.system_prompt + + # 如果没有指定模板ID或模板不存在,返回默认模板 + default_template = PromptTemplate.query.filter_by(is_default=True).first() + if default_template: + return default_template.system_prompt + + # 如果数据库中没有模板,返回硬编码的默认模板 + return """你是一个专业的提示词工程师,擅长将普通的描述转换为结构化、专业的 Prompt。 + +你需要: +1. 分析用户的需求和意图 +2. 将其转换为清晰、详细的提示词 +3. 添加必要的上下文和约束条件 +4. 使用专业的术语和格式 +5. 确保生成的提示词能够获得最佳的 AI 响应 + +请直接返回优化后的提示词,不要添加任何解释或其他内容。""" + +def generate_with_llm(input_text, template_id=None): + """调用大模型API生成提示词""" + try: + system_prompt = get_system_prompt(template_id) + + # 打印参数 + print("\n=== API 调用参数 ===") + print(f"模板ID: {template_id}") + print(f"输入文本: {input_text}") + print(f"系统提示: {system_prompt}") + print("==================\n") + + response = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": input_text} + ], + temperature=0.7, + max_tokens=500 + ) + + # 打印响应 + generated_text = response.choices[0].message.content.strip() + print("\n=== API 响应结果 ===") + print(f"生成的提示词: {generated_text}") + print("==================\n") + + return generated_text + except Exception as e: + current_app.logger.error(f'LLM API调用失败: {str(e)}') + return "提示词生成失败,请稍后重试" + +def get_template_icon(category): + """根据分类返回对应的Font Awesome图标类名""" + icons = { + '通用工具': 'fa-magic', + '内容创作': 'fa-pen-fancy', + '设计创意': 'fa-palette', + '技术研发': 'fa-code', + '商业营销': 'fa-chart-line', + '专业服务': 'fa-briefcase', + '教育培训': 'fa-graduation-cap', + '智慧城市': 'fa-city', + '工业制造': 'fa-industry', + '生活服务': 'fa-concierge-bell' + } + return icons.get(category, 'fa-star') # 默认返回星星图标 + +@main_bp.route('/', methods=['GET', 'POST']) +def index(): + form = PromptForm() + templates = PromptTemplate.query.all() + + # 获取所有可用的分类选项 + industries = sorted(set(t.industry for t in templates if t.industry)) + professions = sorted(set(t.profession for t in templates if t.profession)) + categories = sorted(set(t.category for t in templates if t.category)) + sub_categories = sorted(set(t.sub_category for t in templates if t.sub_category)) + + if form.validate_on_submit(): + template_id = request.form.get('template_id') + generated_text = generate_with_llm(form.input_text.data, template_id) + + # 获取默认用户的 uid + try: + conn = pymysql.connect( + host='localhost', + user='root', + password='123456', + database='food_db', + charset='utf8mb4' + ) + cursor = conn.cursor() + cursor.execute("SELECT uid FROM user WHERE login_name = 'admin' LIMIT 1") + result = cursor.fetchone() + if result: + user_id = result[0] + else: + user_id = 1 # 如果没有找到用户,使用默认值 + cursor.close() + conn.close() + except Exception as e: + print(f"获取用户ID失败: {str(e)}") + user_id = 1 # 如果查询失败,使用默认值 + + prompt = Prompt( + input_text=form.input_text.data, + generated_text=generated_text, + user_id=user_id # 使用查询到的用户ID + ) + db.session.add(prompt) + db.session.commit() + return render_template('generate.html', form=form, prompt=prompt, templates=templates, + get_template_icon=get_template_icon, industries=industries, + professions=professions, categories=categories, + sub_categories=sub_categories) + return render_template('generate.html', form=form, prompt=None, templates=templates, + get_template_icon=get_template_icon, industries=industries, + professions=professions, categories=categories, + sub_categories=sub_categories) + +@main_bp.route('/prompt/') +def show_prompt(prompt_id): + prompt = Prompt.query.get_or_404(prompt_id) + return render_template('prompt.html', prompt=prompt) + +@main_bp.route('/feedback/', methods=['GET', 'POST']) +def submit_feedback(prompt_id): + prompt = Prompt.query.get_or_404(prompt_id) + form = FeedbackForm() + if form.validate_on_submit(): + feedback = Feedback( + rating=form.rating.data, + comment=form.comment.data, + user_id=1, # 临时用户ID + prompt_id=prompt.id + ) + db.session.add(feedback) + db.session.commit() + flash('感谢您的反馈!') + return redirect(url_for('main.show_prompt', prompt_id=prompt.id)) + return render_template('feedback.html', form=form, prompt=prompt) + +# 添加一个API端点来获取模板详情 +@main_bp.route('/api/template/') +def get_template_details(template_id): + template = PromptTemplate.query.get_or_404(template_id) + return jsonify({ + 'id': template.id, + 'name': template.name, + 'description': template.description, + 'system_prompt': template.system_prompt + }) + +# 添加删除模板的API路由 +@main_bp.route('/api/templates/', methods=['DELETE']) +def delete_template(template_id): + try: + # 查找模板 + template = PromptTemplate.query.get_or_404(template_id) + + # 检查是否是默认模板 + if template.is_default: + return jsonify({ + 'success': False, + 'message': '默认模板不能删除' + }), 403 + + # 检查权限(可选:如果需要检查用户是否有权限删除) + # if template.user_id != current_user.id: + # return jsonify({ + # 'success': False, + # 'message': '没有权限删除此模板' + # }), 403 + + # 删除模板 + db.session.delete(template) + db.session.commit() + + return jsonify({ + 'success': True, + 'message': '模板删除成功' + }) + + except Exception as e: + # 回滚事务 + db.session.rollback() + # 记录错误 + current_app.logger.error(f'删除模板失败: {str(e)}') + return jsonify({ + 'success': False, + 'message': '删除模板失败,请稍后重试' + }), 500 + +# 添加微信小程序API路由 +@main_bp.route('/api/wx/generate', methods=['POST']) +def wx_generate_prompt(): + """微信小程序生成提示词接口""" + try: + data = request.get_json() + if not data or 'input_text' not in data or 'uid' not in data: + return jsonify({ + 'code': 400, + 'message': '缺少必要参数', + 'data': None + }) + + input_text = data.get('input_text') + template_id = data.get('template_id') + wx_user_id = data.get('uid') # 使用uid + + # 调用大模型生成提示词 + generated_text = generate_with_llm(input_text, template_id) + + # 保存到数据库 + prompt = Prompt( + input_text=input_text, + generated_text=generated_text, + wx_user_id=wx_user_id, # 使用wx_user_id + created_at=datetime.utcnow() + ) + db.session.add(prompt) + db.session.commit() + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'prompt_id': prompt.id, + 'input_text': prompt.input_text, + 'generated_text': prompt.generated_text, + 'created_at': prompt.created_at.strftime('%Y-%m-%d %H:%M:%S') + } + }) + + except Exception as e: + current_app.logger.error(f"生成提示词失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/templates', methods=['GET']) +def wx_get_templates(): + """获取提示词模板列表""" + try: + # 获取筛选参数 + industry = request.args.get('industry') + profession = request.args.get('profession') + category = request.args.get('category') + sub_category = request.args.get('sub_category') + + # 构建查询 + query = PromptTemplate.query + + if industry: + query = query.filter_by(industry=industry) + if profession: + query = query.filter_by(profession=profession) + if category: + query = query.filter_by(category=category) + if sub_category: + query = query.filter_by(sub_category=sub_category) + + templates = query.all() + + # 返回模板列表 + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': [{ + 'id': t.id, + 'name': t.name, + 'description': t.description, + 'category': t.category, + 'industry': t.industry, + 'profession': t.profession, + 'sub_category': t.sub_category, + 'is_default': t.is_default + } for t in templates] + }) + + except Exception as e: + current_app.logger.error(f"获取模板列表失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/template/', methods=['GET']) +def wx_get_template_detail(template_id): + """获取模板详情""" + try: + template = PromptTemplate.query.get_or_404(template_id) + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'id': template.id, + 'name': template.name, + 'description': template.description, + 'category': template.category, + 'industry': template.industry, + 'profession': template.profession, + 'sub_category': template.sub_category, + 'system_prompt': template.system_prompt, + 'is_default': template.is_default + } + }) + + except Exception as e: + current_app.logger.error(f"获取模板详情失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/login', methods=['POST']) +def wx_login(): + """微信小程序登录接口""" + try: + # 添加调试日志 + print("\n=== 微信登录配置 ===") + print(f"APPID: {WX_APPID}") + print(f"SECRET: {WX_SECRET}") + print("==================\n") + + data = request.get_json() + if not data or 'code' not in data: + return jsonify({ + 'code': 400, + 'message': '缺少code参数', + 'data': None + }) + + code = data.get('code') + print(f"收到的code: {code}") + + # 请求微信接口 + wx_url = 'https://api.weixin.qq.com/sns/jscode2session' + params = { + 'appid': WX_APPID, + 'secret': WX_SECRET, + 'js_code': code, + 'grant_type': 'authorization_code' + } + + response = requests.get(wx_url, params=params) + wx_data = response.json() + print(f"微信返回数据: {wx_data}") + + if 'errcode' in wx_data: + return jsonify({ + 'code': 500, + 'message': f"微信登录失败:{wx_data.get('errmsg')}", + 'data': None + }) + + openid = wx_data.get('openid') + session_key = wx_data.get('session_key') + + # 查找或创建微信用户 + wx_user = WxUser.query.filter_by(openid=openid).first() + if not wx_user: + wx_user = WxUser( + openid=openid, + session_key=session_key + ) + db.session.add(wx_user) + db.session.commit() + else: + wx_user.session_key = session_key + wx_user.last_login = datetime.utcnow() + db.session.commit() + + # 生成登录态token + token = hashlib.md5(f'{openid}{int(time.time())}'.encode()).hexdigest() + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'token': token, + 'openid': openid, + 'uid': wx_user.id, + 'user_info': { + 'id': wx_user.id, + 'nickname': wx_user.nickname, + 'avatar_url': wx_user.avatar_url, + 'gender': wx_user.gender, + 'phone': wx_user.phone + } + } + }) + + except Exception as e: + current_app.logger.error(f"微信登录失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/update_userinfo', methods=['POST']) +def wx_update_userinfo(): + """更新微信用户信息""" + try: + data = request.get_json() + if not data or 'openid' not in data: + return jsonify({ + 'code': 400, + 'message': '缺少必要参数', + 'data': None + }) + + openid = data.get('openid') + wx_user = WxUser.query.filter_by(openid=openid).first() + + if not wx_user: + return jsonify({ + 'code': 404, + 'message': '用户不存在', + 'data': None + }) + + # 更新用户信息 + if 'nickName' in data: + wx_user.nickname = data['nickName'] + if 'avatarUrl' in data: + wx_user.avatar_url = data['avatarUrl'] + if 'gender' in data: + wx_user.gender = data['gender'] + if 'country' in data: + wx_user.country = data['country'] + if 'province' in data: + wx_user.province = data['province'] + if 'city' in data: + wx_user.city = data['city'] + if 'language' in data: + wx_user.language = data['language'] + + wx_user.updated_at = datetime.utcnow() + db.session.commit() + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'id': wx_user.id, + 'nickname': wx_user.nickname, + 'avatar_url': wx_user.avatar_url, + 'gender': wx_user.gender, + 'country': wx_user.country, + 'province': wx_user.province, + 'city': wx_user.city, + 'language': wx_user.language, + 'phone': wx_user.phone + } + }) + + except Exception as e: + current_app.logger.error(f"更新用户信息失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/prompts', methods=['GET']) +def wx_get_prompts(): + """获取用户的提示词历史记录""" + try: + # 获取参数 + uid = request.args.get('uid') + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 10, type=int) + + if not uid: + return jsonify({ + 'code': 400, + 'message': '缺少用户ID', + 'data': None + }) + + # 查询该用户的所有提示词记录 + query = Prompt.query.filter_by(wx_user_id=uid)\ + .order_by(Prompt.created_at.desc()) + + # 分页 + pagination = query.paginate(page=page, per_page=per_page, error_out=False) + prompts = pagination.items + + # 返回数据 + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'prompts': [{ + 'id': p.id, + 'input_text': p.input_text, + 'generated_text': p.generated_text, + 'created_at': p.created_at.strftime('%Y-%m-%d %H:%M:%S') + } for p in prompts], + 'pagination': { + 'total': pagination.total, # 总记录数 + 'pages': pagination.pages, # 总页数 + 'current_page': page, # 当前页 + 'per_page': per_page, # 每页记录数 + 'has_next': pagination.has_next, # 是否有下一页 + 'has_prev': pagination.has_prev # 是否有上一页 + } + } + }) + + except Exception as e: + current_app.logger.error(f"获取提示词历史失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/prompt/', methods=['GET']) +def wx_get_prompt_detail(prompt_id): + """获取提示词详情""" + try: + prompt = Prompt.query.get_or_404(prompt_id) + + # 可以选择性地验证用户身份 + # uid = request.args.get('uid') + # if str(prompt.wx_user_id) != str(uid): + # return jsonify({ + # 'code': 403, + # 'message': '无权访问此记录', + # 'data': None + # }) + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'id': prompt.id, + 'input_text': prompt.input_text, + 'generated_text': prompt.generated_text, + 'created_at': prompt.created_at.strftime('%Y-%m-%d %H:%M:%S'), + 'feedbacks': [{ + 'id': f.id, + 'rating': f.rating, + 'comment': f.comment, + 'created_at': f.created_at.strftime('%Y-%m-%d %H:%M:%S') + } for f in prompt.feedbacks] + } + }) + + except Exception as e: + current_app.logger.error(f"获取提示词详情失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/prompts/count', methods=['GET']) +def wx_get_prompts_count(): + """获取用户的提示词历史记录数量""" + try: + # 获取用户ID + uid = request.args.get('uid') + + if not uid: + return jsonify({ + 'code': 400, + 'message': '缺少用户ID', + 'data': None + }) + + # 查询该用户的提示词记录数量 + count = Prompt.query.filter_by(wx_user_id=uid).count() + + # 获取今日记录数量 + today = datetime.now().date() + today_count = Prompt.query.filter_by(wx_user_id=uid)\ + .filter(db.func.date(Prompt.created_at) == today)\ + .count() + + # 获取本月记录数量 + this_month = today.replace(day=1) + month_count = Prompt.query.filter_by(wx_user_id=uid)\ + .filter(db.func.date(Prompt.created_at) >= this_month)\ + .count() + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'total_count': count, # 总记录数 + 'today_count': today_count, # 今日记录数 + 'month_count': month_count, # 本月记录数 + 'uid': uid + } + }) + + except Exception as e: + current_app.logger.error(f"获取提示词历史数量失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/prompt/', methods=['DELETE']) +def wx_delete_prompt(prompt_id): + """删除提示词记录""" + try: + # 从 URL 参数或请求体中获取用户ID + uid = request.args.get('uid') or request.get_json().get('uid') + if not uid: + return jsonify({ + 'code': 400, + 'message': '缺少用户ID', + 'data': None + }) + + # 查找记录 + prompt = Prompt.query.get_or_404(prompt_id) + + # 验证是否是用户自己的记录 + if str(prompt.wx_user_id) != str(uid): + return jsonify({ + 'code': 403, + 'message': '无权删除此记录', + 'data': None + }) + + # 删除相关的反馈 + Feedback.query.filter_by(prompt_id=prompt_id).delete() + + # 删除提示词记录 + db.session.delete(prompt) + db.session.commit() + + return jsonify({ + 'code': 200, + 'message': '删除成功', + 'data': { + 'id': prompt_id + } + }) + + except Exception as e: + current_app.logger.error(f"删除提示词记录失败: {str(e)}") + db.session.rollback() + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/prompts/search', methods=['GET']) +def wx_search_prompts(): + """搜索提示词接口""" + try: + # 获取参数 + uid = request.args.get('uid') + keyword = request.args.get('keyword', '').strip() + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 10, type=int) + + if not uid: + return jsonify({ + 'code': 400, + 'message': '缺少用户ID', + 'data': None + }) + + # 构建查询 + query = Prompt.query.filter_by(wx_user_id=uid) + + # 如果有关键词,添加搜索条件 + if keyword: + search_condition = ( + Prompt.input_text.ilike(f'%{keyword}%') | # 搜索输入文本 + Prompt.generated_text.ilike(f'%{keyword}%') # 搜索生成的提示词 + ) + query = query.filter(search_condition) + + # 按时间倒序排序并分页 + query = query.order_by(Prompt.created_at.desc()) + pagination = query.paginate(page=page, per_page=per_page, error_out=False) + prompts = pagination.items + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'prompts': [{ + 'id': p.id, + 'input_text': p.input_text, + 'generated_text': p.generated_text, + 'created_at': p.created_at.strftime('%Y-%m-%d %H:%M:%S') + } for p in prompts], + 'pagination': { + 'total': pagination.total, + 'pages': pagination.pages, + 'current_page': page, + 'per_page': per_page, + 'has_next': pagination.has_next, + 'has_prev': pagination.has_prev + } + } + }) + + except Exception as e: + current_app.logger.error(f"搜索提示词失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/templates/search', methods=['GET']) +def wx_search_templates(): + """搜索提示词模板接口""" + try: + # 获取搜索参数 + keyword = request.args.get('keyword', '').strip() + page = request.args.get('page', 1, type=int) + per_page = request.args.get('per_page', 10, type=int) + + # 构建基础查询 + query = PromptTemplate.query + + # 添加搜索条件 + if keyword: + search_condition = ( + PromptTemplate.name.ilike(f'%{keyword}%') | # 搜索模板名称 + PromptTemplate.description.ilike(f'%{keyword}%') | # 搜索模板描述 + PromptTemplate.category.ilike(f'%{keyword}%') | # 搜索分类 + PromptTemplate.industry.ilike(f'%{keyword}%') | # 搜索行业 + PromptTemplate.profession.ilike(f'%{keyword}%') | # 搜索职业 + PromptTemplate.system_prompt.ilike(f'%{keyword}%') # 搜索系统提示词 + ) + query = query.filter(search_condition) + + # 获取筛选参数(可选) + industry = request.args.get('industry') + profession = request.args.get('profession') + category = request.args.get('category') + + # 添加筛选条件 + if industry: + query = query.filter_by(industry=industry) + if profession: + query = query.filter_by(profession=profession) + if category: + query = query.filter_by(category=category) + + # 按是否默认模板和创建时间排序 + query = query.order_by(PromptTemplate.is_default.desc(), + PromptTemplate.created_at.desc()) + + # 分页 + pagination = query.paginate(page=page, per_page=per_page, error_out=False) + templates = pagination.items + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'templates': [{ + 'id': t.id, + 'name': t.name, + 'description': t.description, + 'system_prompt': t.system_prompt, # 添加system_prompt字段 + 'category': t.category, + 'industry': t.industry, + 'profession': t.profession, + 'sub_category': t.sub_category, + 'is_default': t.is_default, + 'created_at': t.created_at.strftime('%Y-%m-%d %H:%M:%S') if t.created_at else None + } for t in templates], + 'pagination': { + 'total': pagination.total, + 'pages': pagination.pages, + 'current_page': page, + 'per_page': per_page, + 'has_next': pagination.has_next, + 'has_prev': pagination.has_prev + } + } + }) + + except Exception as e: + current_app.logger.error(f"搜索模板失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/templates/intent', methods=['POST']) +def wx_get_template_by_intent(): + """根据意图获取提示词模板""" + try: + # 获取参数 + data = request.get_json() + user_input = data.get('input_text', '').strip() + + # 意图识别系统提示词 + intent_system_prompt = """你是一位出色的意图识别专家。请分析用户输入的意图,并仅返回以下类别之一: +- 新闻获取 +- 生成图片 +- 网站开发 +- 文案创作 +- 代码开发 +- 数据分析 +- 市场营销 +- 产品设计 +- 其它 + +只返回分类名称,不要其他任何内容。""" + + # 调用意图识别 + response = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": intent_system_prompt}, + {"role": "user", "content": user_input} + ], + temperature=0.1 + ) + + intent = response.choices[0].message.content.strip() + + # 根据意图获取对应的模板提示词 + intent_prompts = { + "新闻获取": "你是一位专业的新闻编辑,擅长整理和总结新闻信息。请帮助用户获取和理解新闻内容,注意:\n1. 确保信息的准确性和时效性\n2. 提供客观中立的视角\n3. 突出重要信息要点\n4. 适当添加背景信息解释", + + "生成图片": "你是一位专业的图像生成提示词专家,擅长将文字需求转化为详细的图像生成提示词。请注意:\n1. 详细描述图像的视觉元素\n2. 指定图像的风格和氛围\n3. 添加技术参数说明\n4. 包含构图和视角建议", + + "网站开发": "你是一位专业的网站开发专家,擅长将需求转化为具体的开发方案。请注意:\n1. 明确网站的目标用户和核心功能\n2. 建议合适的技术栈\n3. 考虑性能和安全性要求\n4. 提供响应式设计建议", + + "文案创作": "你是一位专业的文案创作专家,擅长创作各类营销和品牌文案。请注意:\n1. 确定目标受众和传播渠道\n2. 突出产品/服务的核心价值\n3. 使用适当的语言风格\n4. 注意文案的节奏和结构", + + "代码开发": "你是一位专业的软件开发工程师,擅长编写高质量的代码。请注意:\n1. 遵循编码规范和最佳实践\n2. 考虑代码的可维护性和扩展性\n3. 注重性能优化\n4. 添加适当的注释和文档", + + "数据分析": "你是一位专业的数据分析师,擅长数据处理和分析。请注意:\n1. 明确分析目标和范围\n2. 选择合适的分析方法\n3. 关注数据质量和准确性\n4. 提供可操作的洞察建议", + + "市场营销": "你是一位专业的市场营销专家,擅长制定营销策略。请注意:\n1. 分析目标市场和竞争环境\n2. 制定明确的营销目标\n3. 选择合适的营销渠道\n4. 设计有效的营销活动", + + "产品设计": "你是一位专业的产品设计师,擅长用户体验和界面设计。请注意:\n1. 理解用户需求和痛点\n2. 遵循设计原则和规范\n3. 注重交互体验\n4. 考虑可实现性", + + "其它": "你是一位专业的AI助手,擅长理解和解决各类问题。请注意:\n1. 仔细理解用户需求\n2. 提供清晰的解决方案\n3. 使用专业的语言表达\n4. 确保回答的实用性" + } + + template_prompt = intent_prompts.get(intent, intent_prompts["其它"]) + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'intent': intent, + 'template_prompt': template_prompt + } + }) + + except Exception as e: + current_app.logger.error(f"获取意图模板失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/api/wx/generate/expert', methods=['POST']) +def wx_generate_expert_prompt(): + """两阶段专家提示词生成系统""" + try: + # 检查请求数据 + if not request.is_json: + return jsonify({ + 'code': 400, + 'message': '请求必须是JSON格式', + 'data': None + }) + + data = request.get_json() + if not data: + return jsonify({ + 'code': 400, + 'message': '请求数据为空', + 'data': None + }) + + # 验证必要参数 + user_input = data.get('input_text') + uid = data.get('uid') + + if not user_input or not uid: + return jsonify({ + 'code': 400, + 'message': '缺少必要参数:input_text 或 uid', + 'data': None + }) + + user_input = user_input.strip() + + # 修改第一阶段:意图识别专家的提示词,使其更严格 + intent_analyst_prompt = """你是一位资深的意图分析专家,请分析用户输入的意图和需求。 + +你必须严格按照以下JSON格式返回,不要添加任何其他内容: +{ + "core_intent": "技术", // 必须是以下选项之一:技术、创意、分析、咨询 + "domain": "web开发", // 具体的专业领域 + "key_requirements": [ // 2-4个关键需求 + "需求1", + "需求2" + ], + "expected_output": "期望输出的具体形式", // 简短描述 + "constraints": [ // 1-3个主要约束 + "约束1", + "约束2" + ], + "keywords": [ // 2-4个关键词 + "关键词1", + "关键词2" + ] +} + +注意: +1. 严格遵守JSON格式 +2. core_intent必须是四个选项之一 +3. 数组至少包含1个元素 +4. 所有字段都必须存在 +5. 不要包含注释 +6. 不要添加任何额外的文本""" + + try: + # 获取意图分析结果 + intent_response = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": intent_analyst_prompt}, + {"role": "user", "content": user_input} + ], + temperature=0.1 # 降低温度,使输出更确定 + ) + + intent_analysis_text = intent_response.choices[0].message.content.strip() + + # 添加日志记录 + current_app.logger.info(f"AI返回的意图分析结果: {intent_analysis_text}") + + # 尝试清理和解析JSON + try: + # 移除可能的markdown代码块标记 + intent_analysis_text = intent_analysis_text.replace('```json', '').replace('```', '').strip() + intent_analysis = json.loads(intent_analysis_text) + + # 验证必要字段 + required_fields = ['core_intent', 'domain', 'key_requirements', + 'expected_output', 'constraints', 'keywords'] + for field in required_fields: + if field not in intent_analysis: + raise ValueError(f"缺少必要字段: {field}") + + # 验证core_intent是否为有效值 + valid_intents = ['技术', '创意', '分析', '咨询'] + if intent_analysis['core_intent'] not in valid_intents: + intent_analysis['core_intent'] = '技术' # 默认使用技术 + + # 确保数组字段非空 + array_fields = ['key_requirements', 'constraints', 'keywords'] + for field in array_fields: + if not isinstance(intent_analysis[field], list) or len(intent_analysis[field]) == 0: + intent_analysis[field] = ['未指定'] + + except json.JSONDecodeError as e: + current_app.logger.error(f"JSON解析失败: {str(e)}, 原始文本: {intent_analysis_text}") + return jsonify({ + 'code': 500, + 'message': 'AI返回的格式有误,请重试', + 'data': None + }) + except ValueError as e: + current_app.logger.error(f"数据验证失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + + except Exception as e: + current_app.logger.error(f"意图分析失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': '意图分析过程出错,请重试', + 'data': None + }) + + # 第二阶段:领域专家提示生成 + domain_expert_templates = { + "技术": """你是一位专业的技术领域提示工程师。基于以下意图分析,生成一个专业的技术任务提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 明确的技术背景和上下文 +2. 具体的技术要求和规范 +3. 性能和质量标准 +4. 技术约束条件 +5. 预期交付成果 +6. 评估标准 + +使用专业技术术语,确保提示词的可执行性和可验证性。""", + + "创意": """你是一位专业的创意领域提示工程师。基于以下意图分析,生成一个创意设计提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 创意方向和灵感来源 +2. 风格和氛围要求 +3. 目标受众定义 +4. 设计元素规范 +5. 创意表现形式 +6. 评估标准 + +使用专业创意术语,确保提示词的创新性和可执行性。""", + + "分析": """你是一位专业的数据分析提示工程师。基于以下意图分析,生成一个数据分析提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 分析目标和范围 +2. 数据要求和规范 +3. 分析方法和工具 +4. 输出格式要求 +5. 关键指标定义 +6. 质量控制标准 + +使用专业分析术语,确保提示词的科学性和可操作性。""", + + "咨询": """你是一位专业的咨询领域提示工程师。基于以下意图分析,生成一个咨询服务提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 咨询问题界定 +2. 背景信息要求 +3. 分析框架设定 +4. 建议输出格式 +5. 实施考虑因素 +6. 效果评估标准 + +使用专业咨询术语,确保提示词的专业性和实用性。""" + } + + # 选择领域专家模板 + expert_prompt = domain_expert_templates.get( + intent_analysis['core_intent'], + """你是一位专业的通用领域提示工程师。基于以下意图分析,生成一个专业的提示词: + +意图分析: +{analysis} + +请生成的提示词包含: +1. 明确的目标定义 +2. 具体要求和规范 +3. 质量标准 +4. 约束条件 +5. 预期输出 +6. 评估标准 + +确保提示词的清晰性和可执行性。""" + ) + + try: + # 生成最终提示词 + final_response = client.chat.completions.create( + model="deepseek-chat", + messages=[ + {"role": "system", "content": expert_prompt.format( + analysis=json.dumps(intent_analysis, ensure_ascii=False, indent=2) + )}, + {"role": "user", "content": user_input} + ], + temperature=0.7 + ) + + generated_prompt = final_response.choices[0].message.content.strip() + + except Exception as e: + current_app.logger.error(f"生成提示词失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': '生成提示词过程出错', + 'data': None + }) + + try: + # 保存到数据库 + prompt = Prompt( + input_text=user_input, + generated_text=generated_prompt, + wx_user_id=uid, + #intent_analysis=json.dumps(intent_analysis, ensure_ascii=False), + created_at=datetime.utcnow() + ) + db.session.add(prompt) + db.session.commit() + + except Exception as e: + current_app.logger.error(f"保存到数据库失败: {str(e)}") + db.session.rollback() + # 即使保存失败,也返回生成的结果 + + return jsonify({ + 'code': 200, + 'message': 'success', + 'data': { + 'prompt_id': prompt.id if 'prompt' in locals() else None, + 'intent_analysis': intent_analysis, + 'generated_prompt': generated_prompt, + 'created_at': prompt.created_at.strftime('%Y-%m-%d %H:%M:%S') if 'prompt' in locals() else None + } + }) + + except Exception as e: + current_app.logger.error(f"生成专家提示词失败: {str(e)}") + return jsonify({ + 'code': 500, + 'message': str(e), + 'data': None + }) + +@main_bp.route('/expert_generate') +def expert_generate(): + """专家提示词生成页面""" + return render_template('expert_generate.html') + +# ... 其他路由保持不变,但要把 @app 改成 @main_bp ... \ No newline at end of file diff --git a/大模型提示词大师产品开发文档.txt b/大模型提示词大师产品开发文档.txt deleted file mode 100644 index e7bb099..0000000 --- a/大模型提示词大师产品开发文档.txt +++ /dev/null @@ -1,48 +0,0 @@ -您好,作为人工智能产品开发专家,我将为您设计一份详细的大模型提示词大师产品的开发文档。以下是基于需求分析、功能设计、技术架构、开发流程、测试计划和用户体验设计的完整文档框架: -《大模型提示词大师产品开发文档》 -一、需求分析 -1.1 目标用户 -需要高效生成提示词的创作者、研究人员、教育工作者等。 -1.2 核心功能 -根据用户输入的需求,快速生成高质量的提示词。 -1.3 用户场景 -用户在进行内容创作、数据分析或教学准备时,通过输入关键词或描述,获得精准的提示词。 -1.4 性能要求 -系统响应时间不超过3秒,提示词生成准确率不低于90%。 -二、功能设计 -2.1 功能模块 -提示词生成模块:根据用户输入,调用大模型生成提示词。 -用户交互模块:提供简洁易用的界面,支持用户输入和操作。 -数据存储模块:存储用户数据和提示词生成记录。 -用户反馈模块:收集用户反馈,用于优化提示词生成。 -2.2 功能流程图 -用户输入需求 -> 提示词生成 -> 显示结果 -> 用户反馈 -> 数据存储。 -三、技术架构 -3.1 技术栈 -前端:html css js -后端:Python flask框架。 -数据库:MySQL。 -大模型:OpenAI API。 -3.2 架构设计 -前端负责用户界面展示和交互,后端处理业务逻辑和数据请求,数据库存储用户数据和提示词生成记录,大模型提供核心的提示词生成能力。 -四、开发流程 -4.1 开发计划 -制定详细的开发计划,包括任务分解、时间安排、开发规范等。 -4.2 任务分解 -将开发任务分解为多个阶段,包括需求分析、设计、编码、测试和部署。 -五、测试计划 -5.1 测试用例 -设计测试用例,覆盖提示词生成、用户交互、数据存储等功能。 -5.2 测试方法 -采用单元测试、集成测试和系统测试,确保产品的质量和稳定性。 -六、用户体验设计 -6.1 界面设计 -设计简洁易用的用户界面,优化用户交互流程。 -6.2 交互优化 -提升用户满意度,确保用户能够快速上手并高效使用产品。 -七、文档编写 -7.1 文档结构 -包含目录、章节标题、详细内容、图表说明等,便于查阅和理解。 -7.2 文档内容 -确保文档的完整性和准确性,能够指导开发团队高效完成产品开发。 -希望这份开发文档能够为您的产品开发提供清晰的指导。如果您有任何具体的想法或建议,欢迎随时与我沟通,以便进一步完善文档。 \ No newline at end of file diff --git a/“提示词大师”运维文档.txt b/提示词大师运维文档.txt similarity index 100% rename from “提示词大师”运维文档.txt rename to 提示词大师运维文档.txt diff --git a/提示词用户测试体验报告.txt b/提示词用户测试体验报告.txt deleted file mode 100644 index 88fd3ad..0000000 --- a/提示词用户测试体验报告.txt +++ /dev/null @@ -1,34 +0,0 @@ -您好,我是“提示词大师”产品的用户体验研究专家。为了帮助您更好地了解产品的使用体验,我将协助您完成用户测试报告。请告诉我您在使用“提示词大师”产品过程中的反馈和建议。 -根据您提供的背景信息和搜索结果,我为您准备了一份用户测试报告的框架和示例内容,您可以根据实际情况进行补充和调整。 -《“提示词大师”用户测试报告》 -一、用户基本信息 -用户年龄:25岁 -职业:软件工程师 -使用频率:每天使用2-3次 -使用场景:主要用于撰写工作邮件、技术文档和创意文案。 -二、测试目的 -本次用户测试旨在评估“提示词大师”产品在功能使用、操作体验、结果准确性和用户满意度方面的表现,识别产品的优势和不足,为后续的产品优化和迭代提供依据。 -三、测试方法 -测试对象:选取10名目标用户,年龄在25-40岁之间,涵盖不同职业背景。 -测试方式:采用实验室测试和远程测试相结合的方式,用户在实际使用场景中操作产品,并填写问卷、参与访谈。 -数据收集:收集用户的操作记录、问卷调查结果和访谈记录,分析用户行为和反馈。 -四、测试结果 -1. 功能使用情况 -功能模块使用频率(%)用户反馈摘要提示词生成60用户认为该功能非常实用,但生成的提示词有时过于复杂,难以理解提示词优化25用户认为优化后的提示词有时偏离原始意图,需要重新调整提示词收藏15用户较少使用该功能,认为收藏的提示词管理不够便捷 -2. 用户满意度 -评价维度满意度评分(满分100分)功能满意度80操作体验满意度70结果准确性满意度65总体满意度75 -3. 问题与痛点 -提示词生成:生成的提示词有时过于复杂,不符合用户预期,需要多次调整。 -提示词优化:优化后的提示词有时偏离原始意图,导致用户需要重新调整。 -提示词收藏:收藏功能不够便捷,用户难以快速找到和管理已收藏的提示词。 -五、分析与建议 -1. 分析 -优势:用户对产品的界面设计和操作体验评价较高,认为界面简洁、操作方便。 -不足:提示词生成和优化功能存在一些问题,主要原因是算法对用户输入的理解不够准确,缺乏对用户意图的深入挖掘。 -2. 建议 -优化提示词生成算法:增加对用户输入的语义理解能力,提高生成提示词的准确性和可理解性。 -改进提示词优化功能:增强对用户意图的跟踪和调整能力,确保优化后的提示词符合用户期望。 -优化提示词收藏功能:增加分类管理、搜索功能,方便用户快速找到和管理收藏的提示词。 -六、结论 -本次用户测试表明,“提示词大师”产品在界面设计和操作体验方面表现出色,但在提示词生成和优化功能上存在一些需要改进的地方。根据用户反馈,我们提出了针对性的改进建议,以期在后续的产品迭代中提升用户体验和产品的市场竞争力。 -希望这份用户测试报告能够为“提示词大师”产品的优化和迭代提供有价值的参考。如果您有任何具体的想法或建议,欢迎随时与我沟通,以便进一步完善产品。 \ No newline at end of file diff --git a/用例文档.txt b/用例文档.txt deleted file mode 100644 index 4b4da47..0000000 --- a/用例文档.txt +++ /dev/null @@ -1,88 +0,0 @@ -您好,我是大模型提示词大师产品的用例文档编写专家。在开始之前,我需要了解一些关于产品的基本信息,例如产品的核心功能、目标用户群体以及您希望实现的业务目标等。请您详细介绍一下,以便我为您编写一份高质量的用例文档。 -以下是根据您提供的产品需求文档(PRD)和搜索结果整理的用例文档示例: -《大模型提示词大师产品用例文档》 -用例编号:UC001 -用例名称:用户登录 -前置条件:用户已注册账号 -后置条件:用户成功登录系统 -主事件流: -用户打开大模型提示词大师产品界面。 -用户输入用户名和密码。 -系统验证用户名和密码。 -验证通过,用户成功登录系统。 -扩展事件流: -用户忘记密码。 -用户点击“忘记密码”链接。 -系统引导用户进行密码重置操作。 -异常事件流: -用户输入错误的用户名或密码。 -系统提示用户名或密码错误。 -用户重新输入用户名和密码。 -用例编号:UC002 -用例名称:创建提示词 -前置条件:用户已登录系统 -后置条件:用户成功创建提示词 -主事件流: -用户点击“创建提示词”按钮。 -系统弹出提示词创建界面。 -用户输入提示词的内容和相关参数。 -用户点击“保存”按钮。 -系统验证输入内容的合法性。 -验证通过,系统保存提示词并返回成功提示。 -扩展事件流: -用户需要参考示例提示词。 -用户点击“查看示例”按钮。 -系统展示示例提示词供用户参考。 -异常事件流: -用户输入的提示词内容不符合要求。 -系统提示输入内容不合法。 -用户修改输入内容后重新保存。 -用例编号:UC003 -用例名称:优化提示词 -前置条件:用户已登录系统 -后置条件:用户成功优化提示词 -主事件流: -用户点击“优化提示词”按钮。 -系统弹出提示词优化界面。 -用户输入待优化的提示词。 -系统根据优化算法提供优化建议。 -用户选择优化建议并确认优化。 -系统返回优化后的提示词。 -异常事件流: -系统无法提供有效的优化建议。 -系统提示用户优化失败,并建议用户调整提示词内容。 -用例编号:UC004 -用例名称:使用预设提示词 -前置条件:用户已登录系统 -后置条件:用户成功使用预设提示词 -主事件流: -用户点击“预设提示词库”按钮。 -系统展示预设提示词库。 -用户选择一个预设提示词。 -系统将选中的预设提示词加载到提示词生成界面。 -异常事件流: -用户未找到合适的预设提示词。 -系统提示用户可以自定义提示词。 -用例编号:UC005 -用例名称:个性化收藏提示词 -前置条件:用户已登录系统 -后置条件:用户成功收藏提示词 -主事件流: -用户在提示词生成界面完成提示词创建。 -用户点击“收藏”按钮。 -系统提示用户收藏成功,并将提示词添加到用户收藏列表。 -异常事件流: -用户尝试收藏已收藏的提示词。 -系统提示用户该提示词已收藏。 -用例编号:UC006 -用例名称:社区分享提示词 -前置条件:用户已登录系统 -后置条件:用户成功分享提示词到社区 -主事件流: -用户在提示词生成界面完成提示词创建。 -用户点击“分享到社区”按钮。 -系统提示用户分享成功,并将提示词发布到社区。 -异常事件流: -用户分享的提示词未通过社区审核。 -系统提示用户分享失败,并建议用户修改提示词内容。 -以上用例文档涵盖了大模型提示词大师产品的核心功能和用户交互流程。如果您需要进一步细化或调整某些用例,欢迎随时与我沟通。 \ No newline at end of file diff --git a/系统维护常用语.txt b/系统维护常用语.txt new file mode 100644 index 0000000..d3692f6 --- /dev/null +++ b/系统维护常用语.txt @@ -0,0 +1,160 @@ +系统维护常用语: +以行业和职业的维度,继续追加生成更多的提示词模板 +以行业和职业的维度,继续追加生成更多不同的技术方向研发工程师的提示词模板 +以行业和职业的维度,继续追加生成更多不同的ui设计方向设计师的提示词模板 +以行业和职业的维度,继续追加生成更多不同的设计软件系统整体架构方向的架构师的提示词模板 +以行业和职业的维度,继续追加生成python全栈开发的架构师的提示词模板 +以行业和职业的维度,继续追加生成软件产品经理的提示词模板 +以行业和职业的维度,继续追加生成微信小程序开发工程师的提示词模板 +以行业和职业的维度,继续追加生成android开发工程师的提示词模板 +以行业和职业的维度,继续追加生成考公的提示词模板 +按照行业和职业的维度,将生成好的提示词模板进行分类 + +将项目中的所有接口都写出文档,保存保存在 flask_prompt_master/docs/api_documentation.txt 路径下 +更新API文档,包含项目中的所有接口。我会在现有文档的基础上添加其他接口的说明 + + +提示词大师 +智能生成高质量提示词,提升您的工作效率。 +基于先进的大模型技术,快速生成精准提示词。 + + +完成核心功能后我们就开始测试mvp + + +常用命令: +初始化数据库 python -m flask_prompt_master.init_db + +更新数据库 python test_db.py + + +# 激活虚拟环境 +.\myenv\Scripts\activate +.venv\Scripts\activate +# 激活虚拟环境 +source venv/bin/activate +启动项目 +python run_dev.py + + + +linux数据库操作 +mysql -uroot -p +数据库密码:123456 +创建数据表 +数据库名:food_db +CREATE DATABASE `food_db` DEFAULT CHARACTER SET = `utf8mb4`; +删除表 DROP DATABASE IF EXISTS food_db; +查看表 +show databases; +进入数据表 +use food_db; +show tables; +select * from user ; +show create table user; + + +1. 开启mysql service mysqld start +2. 查看mysql是否开启 ps -ef |grep mysql + + +创建数据表 +CREATE TABLE `container_orchestration_assistant` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '助手ID', + `name` varchar(100) NOT NULL DEFAULT '' COMMENT '助手名称', + `description` varchar(255) NOT NULL DEFAULT '' COMMENT '助手描述', + `category` varchar(50) NOT NULL DEFAULT '' COMMENT '分类(架构设计)', + `industry` varchar(50) NOT NULL DEFAULT '' COMMENT '行业(技术研发)', + `profession` varchar(50) NOT NULL DEFAULT '' COMMENT '职业(高级工程师)', + `sub_category` varchar(50) NOT NULL DEFAULT '' COMMENT '子分类(容器编排)', + `system_prompt` text NOT NULL COMMENT '系统提示词(容器化需求转换规则)', + `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1-有效,0-无效', + `updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后一次更新时间', + `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_category` (`category`), + KEY `idx_industry` (`industry`), + KEY `idx_profession` (`profession`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Python容器编排助手表'; + + + + +插入一条user数据 +INSERT INTO `user` (`uid`, `nickname`, `mobile`, `email`, `sex`, `avatar`, `login_name`, `login_pwd`, `login_salt`, `status`, `updated_time`, `created_time`) +VALUES + (2, '编程浪子www.54php.cn', '11012345679', 'apanly@163.com', 1, '', '54php.cn', '816440c40b7a9d55ff9eb7b20760862c', 'cF3JfH5FJfQ8B2Ba', 1, '2017-03-15 14:08:48', '2017-03-15 14:08:48'); + + + + + + + +1. 项目结构 +根目录下主要内容如下: +flask_prompt_master/:主应用目录,包含核心业务逻辑 +static/、templates/:静态资源和前端模板 +migrations/:数据库迁移相关 +tests/:测试代码 +scripts/:脚本工具 +config.py:全局配置文件 +run_dev.py:开发环境启动入口 +gunicorn.conf.py:Gunicorn 配置 +start_gunicorn.sh、stop_gunicorn.sh:Gunicorn 启动/停止脚本 +requirements.txt:依赖列表 +各类产品、开发、运维、测试文档 +2. 主要依赖 +Flask 2.x +Flask-SQLAlchemy +Flask-Migrate +Flask-Cors +Gunicorn +其他常用 Flask 扩展 +3. 启动方式 +开发环境:python run_dev.py +生产环境:./start_gunicorn.sh(Gunicorn + Nginx 反向代理) +4. 配置说明 +config.py 负责数据库、API Key、微信小程序等配置 +Gunicorn 监听本地 8001 端口,Nginx 代理 80 端口对外服务 +支持通过环境变量灵活切换配置 +5. 主要功能模块 +用户认证与管理 +提示词管理 +微信小程序集成 +日志与运维 +丰富的产品、测试、运维文档 +6. 典型部署架构 +Gunicorn 只监听本地(127.0.0.1:8001) +Nginx 监听 80 端口,反向代理到 Gunicorn +外部通过域名或 IP 访问 Nginx +若有 SELinux,需允许 Nginx 访问本地端口 +7. 典型问题与解决 +502 Bad Gateway:多为 SELinux 拒绝,需 sudo setsebool -P httpd_can_network_connect 1 +端口冲突:Gunicorn/Nginx 配置端口需唯一 +依赖不兼容:Flask 与 Flask-SQLAlchemy 需版本匹配 + + + + + + +写一个android framework入门教程的设计方案,使用章节形式。 + +写一个android framework高级教程的设计方案,使用章节形式。 + + + + + +代码上库 +TicketNo:3 +Description:历史记录版本 +Team:ruilaizi +Feature or Bugfix:Feature Binary Source:No +PrivateCode(Yes/No):No + + +提交的是Python编译文件(.pyc文件)。通常这些文件不应该被提交到版本控制中。让我先取消暂存这些文件,然后添加一个.gitignore文件来忽略它们: + + \ No newline at end of file diff --git a/设计思路.txt b/设计思路.txt deleted file mode 100644 index eff4cf0..0000000 --- a/设计思路.txt +++ /dev/null @@ -1,36 +0,0 @@ -以下是一个“大模型提示词大师”平台的产品设计思路: -产品定位与目标 -定位:打造一个一站式的大模型提示词生成与优化平台,帮助用户快速生成高质量、专业化的提示词,提升与大模型交互的效率和效果。 -目标:降低用户使用大模型的门槛,使非专业人士也能轻松上手,同时为专业人士提供更强大的工具,提升其工作效率和创作质量。 -核心功能 -智能提示词生成 -用户以对话形式输入需求,平台通过自然语言处理技术理解用户意图,并结合预设的规则和模型训练生成专业的提示词。 -提供多种生成模式,如创意模式、精确模式等,满足不同用户在不同场景下的需求。 -提示词优化 -对用户输入的提示词进行分析和优化,提升其清晰度、准确性和连贯性,确保生成的提示词能够更好地引导大模型输出高质量内容。 -提供优化建议和修改方案,用户可以根据自己的需求进行选择和调整。 -预设提示词库 -按行业、场景分类提供丰富的预设提示词,如写作、绘画、编程、教育等,用户可以直接使用或作为参考进行修改。 -定期更新和扩充提示词库,紧跟行业动态和用户需求变化。 -个性化收藏与管理 -用户可以收藏自己常用的提示词,方便随时调用。 -提供提示词的分类、标签、搜索等功能,帮助用户更好地管理和查找自己的提示词。 -社区分享与交流 -用户可以将自己的优质提示词分享到社区,与其他用户交流经验和心得。 -社区提供热门提示词榜单、推荐系统等,帮助用户发现更多优秀的提示词。 -用户体验设计 -简洁易用的界面:采用简洁直观的操作界面,让用户能够快速上手,无需复杂的操作流程。 -实时反馈与交互:在用户输入提示词时,平台实时给出反馈和建议,增强交互体验。 -多语言支持:支持多种语言,满足不同地区用户的需求。 -技术架构 -后端:采用高性能的服务器和分布式架构,确保平台能够快速响应用户请求。 -模型集成:与多种大模型进行深度集成,如GPT-4、文心一言等,为用户提供多样化的选择。 -数据安全与隐私保护:严格保护用户数据安全和隐私,确保用户信息不被泄露。 -商业模式 -免费基础服务:提供基础的提示词生成和优化服务,吸引用户使用平台。 -高级功能付费:推出高级功能,如更强大的优化工具、个性化定制服务等,用户需要付费使用。 -企业定制服务:为企业提供定制化的提示词解决方案,满足其特定的业务需求。 -市场推广策略 -内容营销:通过博客、文章等形式分享提示词的使用技巧和案例,吸引用户关注。 -社交媒体推广:利用社交媒体平台进行宣传推广,扩大平台知名度。 -用户口碑传播:鼓励用户在社区中分享自己的使用体验和成果,形成口碑传播。 \ No newline at end of file diff --git a/项目计划文档.txt b/项目计划文档.txt deleted file mode 100644 index abda144..0000000 --- a/项目计划文档.txt +++ /dev/null @@ -1,33 +0,0 @@ -您好!作为您的项目管理专家,我将帮助您制定一个清晰、高效的项目计划。请告诉我您的项目背景和具体需求,我们可以开始规划您的项目计划了。 -以下是一个基于国际通用项目管理标准(如PMBOK)的项目计划框架,您可以根据实际情况进行调整和补充: -《项目计划文档》 -一、项目概述 -项目名称:[项目名称] -项目背景:简要描述项目的背景和起因。 -项目目标:明确项目的主要目标,确保目标具体、可衡量、可实现、相关性强、有时限(SMART)。 -项目范围:详细描述项目所涵盖的工作内容,包括主要的交付物和工作成果。 -关键利益相关者:列出项目的主要利益相关者,包括项目发起人、项目经理、团队成员、客户等。 -二、项目目标 -短期目标(1-2年):完成项目的基础功能开发和初步部署。 -中期目标(3-5年):实现项目的功能拓展和市场占有率提升。 -长期目标(5年以上):构建完整的项目生态系统,拓展国际市场。 -三、项目范围 -项目范围定义:明确项目所包含的工作内容和不包含的工作内容。 -范围管理计划:制定范围管理计划,确保项目范围的变更得到控制。 -四、任务分解(WBS) -任务编号任务名称子任务负责人1需求分析1.1 需求调研
1.2 需求文档编写业务分析师2系统设计2.1 架构设计
2.2 数据库设计架构师
数据库管理员3开发3.1 前端开发
3.2 后端开发前端开发团队
后端开发团队4测试4.1 单元测试
4.2 集成测试
4.3 用户验收测试开发团队
测试团队
客户代表5部署5.1 系统部署
5.2 用户培训运维团队
培训师 -五、项目时间表 -任务编号任务名称开始时间结束时间1需求分析2025年01月01日2025年01月15日2系统设计2025年01月16日2025年02月01日3开发2025年02月02日2025年04月30日4测试2025年05月01日2025年05月31日5部署2025年06月01日2025年06月15日 -六、资源分配 -任务编号任务名称资源需求负责人1需求分析业务分析师团队业务分析师2系统设计架构师、数据库管理员架构师3开发前端开发团队、后端开发团队开发团队4测试测试团队测试团队5部署运维团队、培训师运维团队 -七、风险管理 -风险描述可能性影响程度应对措施需求变更频繁高中定期与利益相关者沟通,及时调整计划技术难题导致开发延迟中高预留时间缓冲,增加技术专家支持测试发现严重缺陷中高提前制定测试计划,增加测试资源 -八、沟通计划 -沟通目标:确保所有利益相关者及时了解项目进展。 -沟通方式:定期召开项目会议、发送项目进度报告、使用项目管理软件(如Microsoft Project、Trello)。 -沟通频率:每周一次项目进度会议,每月一次项目总结报告。 -九、审批流程 -项目计划审批:项目计划需经过项目发起人、项目经理和关键利益相关者的审批。 -变更审批:任何项目范围、时间表或资源分配的变更需经过变更控制委员会(CCB)的审批。 -十、结论 -通过上述项目计划框架,您的项目将能够清晰地定义目标、范围和任务,合理分配资源,并有效管理风险。希望这份项目计划能够为您的项目管理提供清晰的指导。如果您有任何具体的想法或建议,欢迎随时与我沟通,以便进一步完善计划。 \ No newline at end of file