返回市场
提示实验室

提示实验室

作者:iRahulPandey6 星标更新:2025-04-12

项目介绍

PromptLab: 使用MLflow集成增强AI查询

PromptLab是一个智能系统,它利用MLflow提示注册表将基本用户查询转换为优化后的AI系统提示。该系统动态匹配用户请求到最合适的提示模板,并应用提取的参数。

🔍 概述

PromptLab结合了MLflow提示注册表与动态提示匹配,创建了一个强大且灵活的提示工程系统:

  • 集中式提示管理:在MLflow中存储、版本控制和管理提示
  • 动态匹配:智能地将用户查询匹配到最佳提示模板
  • 版本控制:通过生产别名和归档别名跟踪提示历史
  • 可扩展性:无需更改代码即可轻松添加新的提示类型

🏗️ 架构

该系统由三个主要组件组成:

  1. 提示注册表 (register_prompts.py) - 在MLflow中注册和管理提示的工具
  2. 服务器 (promptlab_server.py) - 具有动态提示匹配和LangGraph工作流的服务器
  3. 客户端 (promptlab_client.py) - 处理用户查询的轻量级客户端

工作流程

PromptLab 工作流程

  1. 提示注册:在MLflow中注册提示模板,包括版本控制和别名
  2. 提示加载:服务器启动时从MLflow加载所有可用提示
  3. 查询提交:用户通过客户端提交自然语言查询
  4. 智能匹配:LLM分析查询并选择最合适的提示模板
  5. 参数提取:系统从查询中提取所需参数
  6. 模板应用:应用选定的模板及其提取的参数
  7. 验证与调整:如果需要,验证并调整增强后的提示
  8. 响应生成:优化后的提示产生高质量的响应

📂 代码结构

promptlab/
├── promptlab_server.py            # 主服务器,具有LangGraph工作流
├── promptlab_client.py            # 查询处理客户端
├── register_prompts.py            # MLflow提示管理工具
├── requirements.txt               # 项目依赖
├── advanced_prompts.json          # 额外的提示模板
└── README.md                      # 项目文档

核心组件:

register_prompts.py

  • 目的:在MLflow注册表中管理提示
  • 关键函数
    • register_prompt():注册新提示或版本
    • update_prompt():更新现有提示(归档之前的生产版本)
    • list_prompts():列出所有已注册的提示
  • register_from_file():从JSON文件注册多个提示
  • register_sample_prompts():初始化标准提示

promptlab_server.py

  • 目的:使用LangGraph工作流处理查询
  • 关键组件
    • load_all_prompts():从MLflow加载提示
    • match_prompt():将查询匹配到适当的模板
    • enhance_query():应用选定的模板
    • validate_query():验证增强后的查询
    • LangGraph工作流:协调查询增强过程

promptlab_client.py

  • 目的:提供服务的用户界面
  • 关键特性
    • 使用增强提示处理查询
    • 列出可用提示
    • 显示详细的提示匹配信息

🚀 快速开始

前提条件

  • Python 3.12
  • requirements.txt中的依赖项
  • OpenAI API密钥以启用LLM功能

安装

# 克隆仓库
git clone https://github.com/iRahulPandey/PromptLab.git
cd PromptLab

# 安装依赖项
pip install -r requirements.txt

# 设置环境变量
export OPENAI_API_KEY="your-openai-api-key"

注册提示

在使用PromptLab之前,您需要在MLflow中注册提示:

# 注册示例提示(论文、邮件、技术、创意)
python register_prompts.py register-samples

# 注册额外的提示类型(推荐)
python register_prompts.py register-file --file advanced_prompts.json

# 验证已注册的提示
python register_prompts.py list

运行服务器

# 启动服务器
python promptlab_server.py

使用客户端

# 处理查询
python promptlab_client.py "写一篇关于机器学习的博客文章"

# 列出可用提示
python promptlab_client.py --list

# 启用详细输出
python promptlab_client.py --verbose "创建一份关于气候变化的演示文稿"

📋 提示管理

可用提示类型

PromptLab支持广泛的提示类型:

提示类型描述示例用例
essay_prompt学术写作研究论文、分析
email_prompt邮件撰写专业沟通
technical_prompt技术解释概念、技术
creative_prompt创意写作故事、诗歌、小说
code_prompt代码生成函数、算法
summary_prompt内容总结文章、文档
analysis_prompt批判性分析数据、文本、概念
qa_prompt问答基于上下文的答案
social_media_prompt社交媒体内容平台特定帖子
blog_prompt博客文章撰写在线文章
report_prompt正式报告商业、技术报告
letter_prompt正式信函覆盖、推荐信
presentation_prompt演讲大纲幻灯片、演讲
review_prompt评论产品、媒体、服务
comparison_prompt对比产品、概念、选项
instruction_prompt指南分步指南
custom_prompt自定义模板特定用途

注册新提示

您可以通过多种方式注册新提示:

1. 从命令行

python register_prompts.py register \
  --name "new_prompt" \
  --template "您的模板,包含{{变量}}" \
  --message "初始版本" \
  --tags '{"type": "custom", "task": "specialized"}'

2. 从模板文件

# 创建一个包含您模板的文本文件
echo "模板内容,包含{{变量}}" > template.txt

# 使用文件注册
python register_prompts.py register \
  --name "long_prompt" \
  --template template.txt \
  --message "复杂模板"

3. 从JSON文件

创建一个包含多个提示的JSON文件:

{
  "prompts": [
    {
      "name": "prompt_name",
      "template": "模板,包含{{变量}}",
      "commit_message": "描述",
      "tags": {"type": "类别", "task": "目的"}
    }
  ]
}

然后注册它们:

python register_prompts.py register-file --file your_prompts.json

更新现有提示

当您更新现有提示时,系统会自动:

  1. 归档之前的生产版本
  2. 将新版本设置为生产
python register_prompts.py update \
  --name "essay_prompt" \
  --template "改进的新模板,包含{{变量}}" \
  --message "增强了清晰度和结构"

查看提示详情

# 列出所有提示
python register_prompts.py list

# 查看特定提示的详细信息
python register_prompts.py details --name "essay_prompt"

🛠️ 高级用法

模板变量

模板使用{{变量}}格式的变量:

写一封{{formality}}邮件给我的{{recipient_type}}关于{{topic}},其中应包括:
- 清晰的主题行
- 适当的问候语
...

在匹配查询时,系统会自动提取这些变量的值。

生产和归档别名

每个提示可以有不同的版本别名:

  • 生产:当前活动版本(默认使用)
  • 归档:之前的生产版本

这允许:

  • 如果需要,回滚到以前的版本
  • 跟踪提示变化的历史

自定义提示注册

对于特定用途,您可以创建高度定制化的提示:

python register_prompts.py register \
  --name "specialized_prompt" \
  --template "您是一位{{role}},在{{domain}}领域拥有专业知识。创建一份关于{{topic}}的{{document_type}},展示{{quality}}。" \
  --message "特定化模板" \
  --tags '{"type": "custom", "task": "specialized", "domain": "finance"}'

🔧 故障排除

未找到匹配提示

如果系统无法将查询匹配到任何提示模板,它将:

  1. 记录未找到匹配的消息
  2. 使用原始查询而不进行增强
  3. 仍然生成响应

您可以添加更多多样化的提示模板来提高匹配度。

LLM连接问题

如果LLM服务不可用,系统将退回到:

  1. 关键词匹配用于提示选择
  2. 简单参数提取
  3. 基本提示增强

这确保即使没有LLM访问,系统仍能正常运行。