一个用于 LLM 提示词工程、测试与评测的桌面级 Web 应用。支持多模型管理、模板变量注入、ReAct 工具模拟、批量测试运行、结果对比分析与 AI 辅助优化。
| 模块 | 说明 |
|---|---|
| 提示词工坊 | 编写提示词模板,支持 {{变量}} 插值语法,实时预览渲染结果,一键格式化与复制,保存版本与备注 |
| 测试场景 | 按分组管理用例,配置变量值、工具 Mock、期望输出与匹配规则(精确 / 包含 / 结构 / LLM 评价) |
| 测试运行 | 单条或并发批量执行测试(可配置并发数 1-50),支持多轮 ReAct 对话、实时时间线、Token 消耗与延迟统计,重复次数最高 50 次 |
| 结果评测 | 查看全部运行记录,通过率、平均分、平均延迟等核心指标,支持展开差异对比 |
| 对比分析 | 多模型 / 多运行横向对比,柱状图可视化得分,高亮文本差异,可设基准运行 |
| AI 助手 | 按场景浏览测试运行记录,手动加载任意运行到对话上下文中与 AI 对话,获取提示词优化建议并一键应用,可折叠上下文消息 |
| 版本历史 | 侧边栏查看历史版本,每个版本关联分组、时间与备注,一键恢复对应分组的提示词 |
| 系统设置 | 管理多供应商模型,设置默认测试/评测模型,配置并发限制、主题切换,数据导入导出 |
- 框架: React 19 + TypeScript
- 构建工具: Vite 7
- 样式: Tailwind CSS 3.4 + shadcn/ui(40+ 组件)
- 状态管理: Zustand(持久化存储到 localStorage)
- 路由: React Router
- 图表: Recharts
- 图标: Lucide React
- Node.js 20+
- npm 或兼容包管理器
# 克隆仓库
git clone https://github.com/yxs19980219/PromptLab.git
cd PromptLab
# 安装依赖
npm install
# 启动开发服务器
npm run dev
# 构建生产版本
npm run build
# 预览生产构建
npm run previewsrc/
components/
ui/ # shadcn/ui 基础组件(Button, Card, Dialog, Tabs 等)
custom/ # 业务组件(AppShell, VersionHistory, DiffViewer 等)
pages/
PromptStudio.tsx # 提示词工坊
Scenarios.tsx # 测试场景管理
TestRunner.tsx # 测试运行
Evaluation.tsx # 结果评测
Compare.tsx # 对比分析
AIAssistant.tsx # AI 助手
SettingsPage.tsx # 系统设置
store/
index.ts # Zustand 全局状态(含模拟运行逻辑与持久化)
types/
index.ts # TypeScript 类型定义
hooks/
use-mobile.ts # 响应式 Hook
lib/
utils.ts # 通用工具函数
App.tsx # 根组件
main.tsx # 应用入口
- 分组(Group):同一类提示词模板的集合,包含模板本体和变量定义
- 场景(Scenario):分组下的具体测试用例,仅存储变量值、工具 Mock 和期望输出
提示词模板中使用 {{variableName}} 声明变量,在场景中填入具体值,运行时自动渲染为完整提示词。支持 string、number、boolean、json 四种类型。
| 匹配模式 | 说明 |
|---|---|
exact |
精确匹配 |
contains |
包含指定关键词(可配置阈值) |
structure |
结构匹配 |
semantic |
LLM 评价:自定义评价提示词,由 LLM 判断通过/失败 |
无需真实调用外部 API,通过配置工具名称、输入模式和模拟响应,即可测试 LLM 的 ReAct 工具调用链路。
工作流程:
- 配置:在场景中添加工具模拟,填写工具名称、输入模式(JSON 格式,如
{"city":"北京"})和模拟响应 - 注入:运行测试时,系统自动将工具列表和输入模式注入 LLM 提示词,引导 LLM 按指定格式输出工具调用
- 解析:LLM 输出
{"name":"工具名","arguments":{参数}}后,系统按工具名匹配对应的 mock - 响应:匹配成功后返回模拟响应作为工具结果,LLM 继续推理直至给出最终答案
说明:
- 输入模式同时作为 LLM 的调用引导和参数示例,LLM 会参考此格式输出
- 同名工具按首次匹配返回;不同工具通过 toolName 区分
- 兼容中文关键词 fallback 匹配("调用/使用/执行 + 工具名")
AI 助手页面展示当前分组下所有场景的测试运行记录:
- 场景卡片可展开/折叠,展开后列出该场景的全部运行
- 每个运行显示状态、得分、延迟、模型等核心指标
- 点击「加载」可将该运行的完整上下文注入到当前对话中(系统提示词、变量值、期望/实际输出、ReAct 执行详情)
- 已加载的运行以青色边框高亮显示「已加载」标签
- 加载的上下文消息在对话中以【测试数据上下文】标签呈现,点击可折叠/展开查看完整内容
- 每次加载会替换旧的上下文消息,确保上下文中仅保留一个运行的数据
- 加载后 AI 自动回复「上下文已加载,请继续提问。」确认成功
批量运行(含重复模式)支持并发执行,大幅提升测试效率:
- 在「系统设置 → 通用偏好」中配置「并发限制」(1–50,默认 5)
- 开启重复模式后,重复次数上限扩展至 50 次
- 并发运行采用 Worker 池模型:N 个 worker 从共享任务队列中拉取场景,完成后自动取下一个
- 点击「停止」立即中断所有进行中的运行
- 每条运行独立记录状态,互不影响
- 在提示词编辑页顶部栏点击「保存版本」,输入版本备注后保存当前分组的提示词快照
- 侧边栏「版本历史」查看所有已保存版本,每个版本展示:分组名、保存时间、版本备注
- 点击「恢复」可将对应分组的提示词回滚到历史版本,恢复操作需二次确认
- 各版本独立存储,互不干扰;恢复时仅覆盖对应分组的提示词,不影响其他分组
系统设置支持为测试运行和语义评测分别指定默认模型:
- 在「系统设置 → 模型厂商」中选择「默认测试模型」和「默认评测模型」
- 进入 TestRunner 时自动选中默认测试模型
- 进入语义评测时自动使用默认评测模型
- 温度参数采用三层优先级:单测手动设置 > 模型默认参数 > 全局默认温度(通用设置)
选择「LLM 评价」匹配模式时,可自定义评价提示词,由 LLM 判断实际输出是否通过:
- 评价提示词完全由用户编写,灵活控制判定逻辑(如:JSON 结构一致性 + 特定字段精确匹配 + 其余字段语义容差)
- 运行测试时,系统将评价提示词 + 期望输出 + 实际输出拼接后调用当前模型
- LLM 回复以
PASS开头即判定通过(100 分),否则失败(0 分),结果二值化 - 适用于需要语义理解或复杂判定规则的场景,弥补程序化匹配的局限性
应用首次启动时自动预置 3 个分组和 7 个场景:
- 天气查询:测试天气类工具调用(北京、上海、东京)
- 数学计算:测试多步数学推理与计算器工具链式调用
- 搜索摘要:测试搜索 + 摘要的多工具组合场景
同时预置 3 个模型占位:GPT-4o、Claude 3.5 Sonnet、GPT-4o-mini。请在 系统设置 > 模型管理 中配置真实 API Key 后使用。
- 提示词模板编辑与变量管理
- 场景分组与工具 Mock 配置
- 单条 / 批量测试运行
- 并发批量测试运行(可配置并发数 1-50,重复次数最高 50 次)
- 结果评测与差异对比
- 多运行横向对比与图表可视化
- AI 助手对话与提示词优化
- AI 助手主动上下文加载(手动选择运行注入上下文,可折叠消息)
- 多供应商模型管理与数据导入导出
- 默认测试/评测模型配置与三层温度优先级
- 接入真实 LLM API(OpenAI 兼容格式)
- 版本历史与一键恢复
- 工具调用 JSON 格式解析与按名匹配
- LLM 评价匹配(自定义评价提示词)
- 团队协作与云端同步
PromptLab 是一个面向提示词工程师和 AI 应用开发者的本地测试工作台,帮助你系统化地迭代、验证和优化 LLM 提示词。