promptimize
将TDD理念引入LLM提示词工程,实现提示词的自动化测试与量化评估
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将TDD理念引入LLM提示词工程,实现提示词的自动化测试与量化评估
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
做一个 AI 产品,最让人头疼的不是模型本身,而是提示词的不稳定性。
同一条提示词,换个温度参数,输出天差地别;同一版提示词今天能通过,改两个字反而翻车;上线前没测出来的问题,上线后被用户骂到崩溃。这类"概率性bug"在传统软件开发中几乎不存在,但在 LLM 应用中却是家常便饭。
Promptimize 的核心思想很简单:给提示词工程引入 TDD(测试驱动开发)的理念。 就像传统代码有单元测试一样,提示词也可以有"测试用例",每个用例包含:一条输入提示词 + 一个评分函数,系统自动判断这次输出是否"合格"。
这个工具最初由 Maxime Beauchemin 开发,他是 Apache Superset 和 Apache Airflow 的创始贡献者,在数据平台领域有深厚积累。2023年初,随着 ChatGPT 引发的 LLM 应用浪潮,他意识到提示词工程的工业化需求,推出了这个框架。目前在 GitHub 上有约 495 颗星,被多个 AI 应用团队用于提示词质量保障。
框架的核心概念是 PromptCase,每个 PromptCase 包含两部分:
输入提示词:可以是固定字符串,也可以是 Jinja2 模板,根据不同变量生成变体。
评分函数(Evaluator):接收 LLM 返回内容,返回 0~1 之间的分数,0 代表完全失败,1 代表完美匹配。框架内置了多种评分器:
any_word:检查响应中是否包含指定词汇(支持 OR 逻辑)all_words:检查响应中是否包含所有指定词汇(支持 AND 逻辑)percentage_of_words:计算指定词汇在响应中的命中率如果内置评分器不够用,用户可以自定义 Python lambda 函数或普通函数,灵活性极高。
from promptimize.prompt_cases import PromptCase
from promptimize import evals
# 基础用法:固定提示词 + 词汇匹配
simple_prompts = [
PromptCase("hello there!", lambda x: evals.any_word(x.response, ["hi", "hello"])),
PromptCase(
"who are the top 10 best guitar players?",
lambda x: evals.percentage_of_words(
x.response, ["frank zappa", "david gilmore", "carlos santana"]
),
),
]
用 Suite 类将多个 PromptCase 组织成测试套件,一次执行,自动生成汇总报告。框架支持跨模型、跨参数对比:
from promptimize.suite import Suite
suite = Suite(prompts=simple_prompts, name="Guitar Experts Test")
suite.run()
suite.display_report()
CLI 工具 promptimize(别名 p9e)也提供了命令行执行方式:
promptimize ./examples/readme_examples.py
支持 --verbose(详细输出)、--repair(仅重跑失败用例)、--shuffle(打乱顺序)、--human(人工审核)等丰富选项。
框架记录每次运行的详细结果,新版本提示词发布前,可以自动与历史版本对比,快速发现质量退化点。这对于有持续迭代需求的 AI 产品团队尤为重要。
支持 Jinja2 模板动态生成提示词变体,比如针对不同用户画像生成不同措辞的提示词。同时也支持对 temperature、top_p 等 LLM 超参数进行网格搜索(grid search),找到当前提示词的最优参数组合。
从源码结构看,项目非常精简,总共只有约 37 个文件,核心 Python 模块约 10 个:
| 模块 | 职责 |
|---|---|
prompt_cases.py | PromptCase 基类、TemplatedPromptCase 模板提示词、BasePromptCase 抽象基类 |
suite.py | Suite 测试套件管理、执行引擎、结果展示 |
evals.py | 内置评分函数库(any_word、all_words、percentage_of_words 等) |
reports.py | 报告生成,支持 YAML/JSON 序列化 |
crawler.py | 动态发现 Python 文件中的 PromptCase 对象 |
utils.py | 工具函数(序列化、哈希、时间戳、输出格式化) |
simple_jinja.py | 轻量级 Jinja2 模板处理封装 |
cli.py | Click 命令行界面,封装 Suite 的 CLI 入口 |
依赖栈:
prompt_cases.py 导入了 langchain.llms.OpenAI 和 langchain.callbacks.get_openai_callback,负责与 OpenAI API 的交互和 token 用量追踪。架构上属于单仓库 CLI 工具包(Python package),无微服务拆分,无前端界面,部署极简——通过 pip install promptimize 即可使用。
安装方式:直接 pip install promptimize,依赖自动装好。运行示例用例:p9e ./examples/readme_examples.py。
环境要求:Python 3.8+,不需要 GPU,不需要 Docker,不需要任何外部服务(除 OpenAI API 本身)。
门槛点:必须自行准备 OpenAI API Key,且需要向 OpenAI 付费。框架本身不包含 API Key 管理,需要用户自己在环境中配置。
过度依赖 LangChain(版本锁定风险):代码直接导入 langchain.llms.OpenAI,而 LangChain 在 2023 年经历了多次重大 API 变更(从 llms 模块迁移到 chat_models),可能导致未来兼容性问题。
仅支持 OpenAI:虽然理论上 LangChain 支持多后端,但框架中的 API 调用模式是针对 OpenAI 优化的,不易扩展到 Claude、本地模型等。
评分函数的主观性:内置评分器都是基于字符串匹配的"词汇命中"逻辑,无法评估语义质量。真正的语义评估需要引入 embedding 相似度或 GPT-as-Judge 等更复杂的方案。
文档质量有待提升:docs 目录仅有基础的 API reference,缺少实际使用场景的 Tutorial 或最佳实践指南。
Promptimize 代表了 LLM 应用工程化的一个重要方向——提示词质量保障(Prompt QA)。随着 AI Native 应用越来越多,如何系统化管理提示词版本、自动化测试提示词质量、防止提示词退化,将成为 AI 工程团队的核心需求。
类似的概念在业界也在发展:LangChain 有自己的 Evals 模块,OpenAI 推出了 Evals 框架,Azure 也有 Prompt Flow 等工具。Promptimize 的独特价值在于其极简主义和 TDD 思维的贯彻——不需要复杂配置,几行 Python 代码就能上手。
对于** AI 产品团队**来说,建议将 Promptimize 集成到 CI/CD 流水线中:每次提示词变更自动触发测试套件,分数不达标则阻断上线。这套流程虽然简陋,但非常实用。

图1:Promptimize 项目 Logo
分析时间:2026-06-24 | 数据来源:GitHub API + 源码分析 | 分析深度:Level 2 代码分析