PromptHub CLI - Git风格版本控制系统实现方案

📅 发布时间:2026/7/6 13:42:40 👁️ 浏览次数:
PromptHub CLI - Git风格版本控制系统实现方案
目录概述核心概念映射数据结构设计核心功能实现技术架构使用示例最佳实践概述PromptHub CLI是一个为AI提示设计的版本控制系统,借鉴了Git的核心思想和设计模式。该项目实现了类似Git的版本控制功能,包括分支管理、版本历史追踪、差异比较、谱系管理等,专门针对AI提示的特性和需求进行了优化。设计理念Git风格操作:使用与Git相似的命令和概念,降低学习成本轻量级存储:基于文件系统的存储,无需数据库依赖协作友好:支持远程存储和团队协作AI原生:针对AI提示的特性进行优化,支持模型执行和响应存储主要特性版本历史管理分支和变体管理谱系追踪差异比较远程存储支持(S3、GitHub、REST API)CI/CD集成A/B测试支持核心概念映射PromptHub将Git的核心概念映射到AI提示管理中:Git概念PromptHub概念说明CommitPrompt版本每个保存的提示都是一个版本Branch分支用于隔离不同的提示变体ForkFork从现有提示创建变体Parent CommitParent Prompt提示的父版本git logLineage显示提示的完整谱系git diffdiff比较两个提示版本git checkoutrestore恢复到指定版本git remoteremote远程存储配置数据结构设计1. 提示数据模型每个提示版本存储为一个独立的JSON文件,包含以下结构:{"id":"abc123",// 唯一标识符"prompt":"Your prompt text",// 提示文本"response":"Model response",// AI模型响应(可选)"model":"gpt-4",// 使用的AI模型"created_at":"2024-02-20T12:34:56.789Z",// 创建时间戳"parent_id":null,// 父提示ID(类似git的parent commit)"branch":"main",// 所属分支"metadata":{// 元数据"executed":true,// 是否已执行"source":"cli",// 来源(cli/file/api)"metrics":{// 性能指标"tokens":150,"latency":2500,"cost":0.03},"test_results":[],// A/B测试结果"ci":{// CI/CD信息"pipeline":"prompt-validation","run_id":"ci123","status":"passed"}}}2. 标签索引标签存储在独立的tags.json文件中,实现快速标签查询:{"base":["abc123","def456"],"variant":["ghi789","jkl012"],"production":["abc123"]}3. 配置文件配置使用YAML格式存储在.prompthub/config.yml:version:"1.0.0"provider:OPENAIdefault_model:gpt-4max_tokens:2000storage:type:filepath:.prompthub/promptsremote:type:githubrepo:owner/repodisplay:color:trueformat:table核心功能实现1. 版本保存实现原理保存提示时,系统会:生成唯一ID可选地执行AI模型获取响应保存为独立的JSON文件更新标签索引检查并提示过时的变体核心代码exportasyncfunctionsavePrompt(options){constid=generateId();letresponse=null;// 执行AI模型(可选)if(options.execute!==false){constopenai=initializeOpenAI();constcompletion=awaitopenai.chat.completions.create({model:options.model||'gpt-3.5-turbo',messages:[{role:'user',content:promptText}],});response=completion.choices[0].message.content;}// 保存提示awaitstore.savePrompt(id,promptText,response,options.model,tags,{executed:options.execute!==falseresponse!==null,source:options.file?'file':'cli',},options.parentId);// 传递父ID建立版本关系// 检查过时提示if(!options.skipOutdatedCheck){constoutdated=awaitstore.checkOutdated();if(outdated.length0){console.log('⚠️ Outdated prompts detected:');}}}存储实现asyncsavePrompt(id,prompt,response,model,tags=[],metadata={},parentId=null)