Skip to content

第五章:工具与资源 ​

学习目标:了解提示词管理平台、评估工具和学习资源,建立系统化的提示词工程实践

预计时间:60-90 分钟

难度:⭐⭐

5.1 提示词管理平台 ​

为什么需要专门的工具? ​

随着提示词数量增多和项目复杂度提升,仅靠文本文件管理会遇到一些问题:

  • 版本混乱: 不清楚哪个版本最优
  • 协作困难: 团队成员难以共享和同步
  • 测试麻烦: 难以系统化地A/B测试
  • 缺乏追踪: 无法追溯历史变更和效果
  • 成本失控: 难以监控token消耗和成本

2026 年的变化: OpenAI 正在弃用 API 中的可复用 prompt 对象(v1/prompts 计划于 2026 年 11 月 30 日关闭),官方建议把提示词放回代码仓库,用类型化参数、PR 评审和测试管理[^6]。第三方平台更适合承担注册表、评测和可观测性,而不是成为唯一事实来源。

PromptLayer ​

定位: 提示词版本管理和A/B测试平台[^1]

核心功能 ​

  1. 提示词注册表 (Prompt Registry)

    • 可视化提示词管理
    • 版本控制和diff对比
    • 元数据标签(团队、用途、语言)
  2. 实验与对比

    • 数据集与实验记录
    • 版本间效果对比
    • 评分与发布门槛
  3. 无代码编辑器

    • 可视化提示词编辑
    • 实时预览
    • 变量管理
  4. 评估框架

    • 批量测试
    • 回归测试
    • 人机和混合评分

适用场景 ​

  • ✅ 中小型团队(1-20人)
  • ✅ 快速迭代和实验
  • ✅ 需要非技术人员协作
  • ❌ 超复杂的Agent工作流

价格(2026 年): Free 5 用户 / 2,500 请求每月;Pro $49/月;Team $500/月;企业版定制。以官网为准。

快速上手 ​

python
# 安装
pip install promptlayer

from promptlayer import PromptLayer

pl = PromptLayer()  # 读取 PROMPTLAYER_API_KEY

# 从 Prompt Registry 取模板、调用模型并记录日志
response = pl.run(
    prompt_name="customer-service-reply",
    prompt_release_label="production",
    input_variables={"role": "客服助手", "task": "回答用户问题"},
    tags=["production"],
)

# 返回原始响应和本次使用的 prompt 版本
print(response["raw_response"])
print(response["prompt_blueprint"]["prompt_template"])

提示词需要先在 Prompt Registry 中创建;模型和供应商在平台侧配置,LLM 密钥只在本地使用。

LangSmith ​

定位: LangChain生态的全生命周期开发平台[^2]

核心功能 ​

  1. 调用追踪

    • 详细的执行链可视化
    • 每一步的输入输出
    • 延迟和成本分析
  2. 数据集管理

    • 创建和管理测试数据集
    • 版本化的数据集
    • 数据集标注工具
  3. 评估器

    • 内置评估指标
    • 自定义评估器
    • LLM-as-a-judge
  4. Playground

    • 交互式测试环境
    • 实时调试
    • 多模型对比

适用场景 ​

  • ✅ 使用LangChain/LangGraph构建应用
  • ✅ 需要深度调试和追踪
  • ✅ 复杂的多步Agent工作流
  • ❌ 简单的单次提示任务

价格(2026 年): Developer 免费(1 席位、5,000 traces/月);Plus $39/席位/月;企业版定制。以官网为准。

快速上手 ​

python
# 安装
pip install -U langsmith

# 配置(当前变量名)
# export LANGSMITH_TRACING=true
# export LANGSMITH_API_KEY="your-key"

from langsmith import Client

client = Client()

# 创建数据集
dataset = client.create_dataset(
    dataset_name="customer-support-dataset",
    description="客服对话测试集",
)
client.create_examples(
    dataset_id=dataset.id,
    examples=[
        {"inputs": {"question": "如何退款?"}, "outputs": {"intent": "refund"}},
        {"inputs": {"question": "物流到哪了?"}, "outputs": {"intent": "logistics"}},
    ],
)

# 评估器:接收 inputs / outputs / reference_outputs
def intent_match(inputs: dict, outputs: dict, reference_outputs: dict) -> bool:
    return outputs["intent"] == reference_outputs["intent"]

# 运行评估
results = client.evaluate(
    my_app,                       # 接受 dict 输入、返回 dict 输出
    data=dataset.name,
    evaluators=[intent_match],
    experiment_prefix="baseline",
    max_concurrency=4,
)

Maxim AI ​

定位: 企业级提示词管理和LLM网关[^3]

核心功能 ​

  1. 统一管理

    • 提示词IDE
    • 版本控制+元数据
    • 团队协作+RBAC
  2. LLM 网关(Bifrost)

    • 开源网关(Apache 2.0),统一 OpenAI 兼容接口
    • 支持 1000+ 模型、多供应商接入
    • 多 provider 路由、自动故障转移、语义缓存
    • MCP 网关与虚拟密钥/预算管理
  3. Agent模拟

    • 多轮对话模拟
    • 工具调用测试
    • 边界情况覆盖
  4. 可观测性

    • Span级别追踪
    • 成本和延迟监控
    • 异常检测和告警

适用场景 ​

  • ✅ 企业级生产环境
  • ✅ 需要高可用和性能
  • ✅ 多provider策略
  • ✅ 严格的合规要求

价格(2026 年): Maxim 平台按企业方案报价;Bifrost 网关开源版免费,企业版定制。

工具对比 ​

特性PromptLayerLangSmithMaxim AI
提示词管理⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
版本控制Registry + 发布标签实验与数据集版本版本 + 元数据
实验对比✅✅✅
可视化⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Agent 模拟❌✅✅
LLM 网关❌❌✅ Bifrost(开源,1000+ 模型)
深度追踪请求级Step 级Span 级
价格(月)Pro $49,Team $500Plus $39/席位企业定制
免费层5 用户 / 2.5k 请求1 席位 / 5k tracesOSS 网关免费

价格与免费额度变动频繁,接入前请核对官网。


5.2 评估和测试工具 ​

评估指标 ​

准确性指标 ​

python
# 准确率 (Accuracy)
correct = sum(1 for p, a in zip(predictions, actuals) if p == a)
accuracy = correct / len(predictions)

# F1分数
from sklearn.metrics import f1_score
f1 = f1_score(actuals, predictions, average='weighted')

# 精确率和召回率
precision = precision_score(actuals, predictions)
recall = recall_score(actuals, predictions)

相似度指标 ​

python
# 余弦相似度
from sklearn.metrics.pairwise import cosine_similarity
similarity = cosine_similarity([embedding1], [embedding2])[0][0]

# BLEU分数(用于文本生成)
from nltk.translate.bleu_score import sentence_bleu
reference = [["this", "is", "a", "test"]]
candidate = ["this", "is", "test"]
score = sentence_bleu(reference, candidate)

# ROUGE分数(用于摘要)
from rouge import Rouge
rouge = Rouge()
scores = rouge.get_scores(hypothesis, reference)

自定义评估器 ​

python
def custom_evaluator(output, expected):
    """自定义评估逻辑"""
    score = 0

    # 检查是否包含关键信息
    if expected['key_info'] in output:
        score += 0.3

    # 检查格式
    if expected['format'] == 'json':
        try:
            json.loads(output)
            score += 0.2
        except:
            pass

    # 检查长度
    if expected['min_length'] <= len(output) <= expected['max_length']:
        score += 0.2

    # 人工评分
    score += human_rating(output) * 0.3

    return score

自动化测试框架 ​

基础测试框架 ​

python
import pytest
from openai import OpenAI

class TestPromptEngine:
    """提示词测试类"""

    @pytest.fixture
    def client(self):
        return OpenAI()

    @pytest.fixture
    def test_cases(self):
        return [
            {
                "input": "测试输入1",
                "expected": {"category": "A", "confidence": 0.9}
            },
            {
                "input": "测试输入2",
                "expected": {"category": "B", "confidence": 0.8}
            }
        ]

    def test_classification_prompt(self, client, test_cases):
        """测试分类提示词"""
        for case in test_cases:
            response = client.chat.completions.create(
                model="gpt-6-astra",  # 换成你实际固定使用的模型快照
                messages=[{
                    "role": "user",
                    "content": f"请分类: {case['input']}"
                }]
            )

            result = parse_response(response.choices[0].message.content)

            # 断言
            assert result['category'] == case['expected']['category']
            assert result['confidence'] >= case['expected']['confidence'] - 0.1

    def test_regression(self, client):
        """回归测试:确保关键字段不会意外改变"""
        # 对比结构化字段,不要对比整段文本(模型措辞天然会变)
        expected = load_baseline("test_baseline.json")

        response = client.chat.completions.create(
            model="gpt-6-astra",
            messages=[...]
        )

        result = parse_response(response.choices[0].message.content)
        assert result["category"] == expected["category"]
        assert result["confidence"] >= expected["confidence"] - 0.1

Promptfoo 评估 ​

promptfoo 是开源(MIT)的评测与红队测试工具,2026 年起由 OpenAI 维护[^7]。

bash
# 安装
npm install -g promptfoo

# 生成示例配置
promptfoo init --example getting-started
yaml
# promptfooconfig.yaml
prompts:
  - file://prompt1.txt
  - file://prompt2.txt

providers:
  - openai:gpt-6-astra
  - anthropic:messages:claude-sonnet-5

tests:
  - vars:
      query: '用户问题'
    assert:
      - type: contains
        value: '期望包含的内容'
      - type: llm-rubric
        value: '回答准确,且没有编造事实'
bash
promptfoo eval   # 运行评估
promptfoo view   # 查看对比矩阵
promptfoo redteam run  # 红队测试(注入、越狱、数据泄露等)

5.3 提示词优化工具 ​

自动优化 ​

自动提示词工程师 ​

python
"""
Auto Prompt Engineer思路:
1. 生成多个候选提示词
2. 在测试集上评估
3. 选择最佳提示词
4. 迭代改进
"""

def auto_optimize_prompt(base_prompt, test_cases, iterations=5):
    best_prompt = base_prompt
    best_score = evaluate_prompt(best_prompt, test_cases)

    for i in range(iterations):
        # 生成变体
        variants = generate_prompt_variants(best_prompt, n=3)

        # 评估每个变体
        for variant in variants:
            score = evaluate_prompt(variant, test_cases)

            if score > best_score:
                best_score = score
                best_prompt = variant
                print(f"Iteration {i}: Improved score to {score:.3f}")

    return best_prompt, best_score

def generate_prompt_variants(prompt, n=3):
    """生成提示词变体"""
    variants = []

    # 策略1: 添加细节
    variants.append(prompt + "\n请仔细思考后回答。")

    # 策略2: 添加示例
    variants.append(prompt + "\n示例: [添加示例]")

    # 策略3: 改写
    variants.append(rewrite_prompt(prompt))

    return variants[:n]

框架化优化: 上面的思路是手写循环。生产中也可以用 DSPy 这类框架,把提示词当作可训练模块,用 GEPA、MIPROv2 等优化器基于评估集自动搜索指令和示例。前提仍然是有可靠的指标和数据集。

A/B测试 ​

python
import random
from typing import Dict, List

class PromptABTest:
    """提示词A/B测试"""

    def __init__(self, prompt_a: str, prompt_b: str):
        self.prompt_a = prompt_a
        self.prompt_b = prompt_b
        self.results_a = []
        self.results_b = []

    def split_traffic(self, traffic_ratio=0.5):
        """随机选择提示词"""
        if random.random() < traffic_ratio:
            return 'A', self.prompt_a
        else:
            return 'B', self.prompt_b

    def record_result(self, variant: str, input: str,
                     output: str, score: float):
        """记录结果"""
        if variant == 'A':
            self.results_a.append({
                'input': input,
                'output': output,
                'score': score
            })
        else:
            self.results_b.append({
                'input': input,
                'output': output,
                'score': score
            })

    def analyze(self):
        """分析A/B测试结果"""
        from scipy import stats

        scores_a = [r['score'] for r in self.results_a]
        scores_b = [r['score'] for r in self.results_b]

        # t检验
        t_stat, p_value = stats.ttest_ind(scores_a, scores_b)

        return {
            'avg_a': sum(scores_a) / len(scores_a),
            'avg_b': sum(scores_b) / len(scores_b),
            'improvement': (sum(scores_b) / len(scores_b) -
                          sum(scores_a) / len(scores_a)),
            'significant': p_value < 0.05,
            'p_value': p_value
        }

# 使用示例
ab_test = PromptABTest(
    prompt_a="原始提示词",
    prompt_b="优化后提示词"
)

for input in test_inputs:
    variant, prompt = ab_test.split_traffic()
    output = call_llm(prompt, input)
    score = evaluate_output(output)
    ab_test.record_result(variant, input, output, score)

results = ab_test.analyze()
print(f"改进幅度: {results['improvement']:.2%}")
print(f"统计显著性: {results['significant']}")

5.4 学习资源 ​

经典指南和教程 ​

  1. Prompt Engineering Guide[^4]

    • 最全面的免费指南
    • 涵盖所有基础模式
    • 支持多语言
    • 定期更新
  2. Learn Prompting[^5]

    • 系统化课程
    • 从零基础到高级
    • 包含互动练习
    • 社区支持
  3. OpenAI 官方文档

  4. Anthropic 官方文档

研究论文 ​

必读论文 ​

  1. Language Models are Few-Shot Learners (GPT-3论文)

  2. Chain-of-Thought Prompting

  3. ReAct: Synergizing Reasoning and Acting in Language Models

社区和博客 ​

  1. PromptLayer Blog

  2. Lil'Log

  3. Anthropic Engineering

  4. Reddit社区

    • r/LocalLLaMA
    • r/ChatGPT
    • r/OpenAI

视频课程 ​

  1. Andrew Ng的AI课程

    • DeepLearning.AI
    • "AI for Everyone"
  2. YouTube频道

    • LangChain
    • Harrison Chase
    • Sam Witteveen

5.5 实用资源库 ​

提示词模板库 ​

Awesome Prompt Engineering ​

markdown
# GitHub Repositories

1. **Awesome ChatGPT Prompts**
   https://github.com/f/awesome-chatgpt-prompts
   - 社区驱动的提示词集合
   - 分类齐全

2. **Prompt Engineering Guide**
   https://github.com/dair-ai/Prompt-Engineering-Guide
   - 指南源项目(含多语言内容)

3. **Learn Prompting**
   https://github.com/trigaten/Learn_Prompting
   - 开源教程

按任务分类的模板 ​

数据分析 ​

python
DATA_ANALYSIS_TEMPLATE = """
你是一位数据分析师。

## 任务
分析以下数据并提取洞察

## 数据
{data}

## 要求
1. 计算关键指标
2. 识别趋势和异常
3. 提供行动建议

## 输出格式
- 使用表格
- 包含图表建议
- 结构化洞察
"""

代码审查 ​

python
CODE_REVIEW_TEMPLATE = """
你是一位资深代码审查专家。

## 代码
```{language}
{code}

审查维度 ​

  1. 代码质量
  2. 性能
  3. 安全性
  4. 最佳实践

输出格式 ​

问题 ​

[按优先级列出]

建议 ​

[具体改进方案]

评分 ​

{score}/10 """


---

## 5.6 建立个人提示词库

### 组织结构

prompt-library/ ├── README.md # 目录说明 ├── categories/ # 分类 │ ├── writing/ │ │ ├── blog-post.md │ │ ├── email.md │ │ └── social-media.md │ ├── coding/ │ │ ├── code-gen.md │ │ ├── code-review.md │ │ └── debug.md │ ├── analysis/ │ │ ├── data-summary.md │ │ └── sentiment.md │ └── business/ │ ├── market-research.md │ └── pricing.md ├── templates/ # 可复用模板 │ ├── few-shot.json │ └── cot.json └── versions/ # 版本历史 └── prompt-name/ ├── v1.0.md ├── v1.1.md └── changelog.md


### 元数据模板

```markdown
---
name: "Customer Service Email Response"
category: "Writing"
tags: ["customer-service", "email", "business"]
version: "1.2"
last_updated: "2026-10-23"
author: "Your Name"
performance:
  accuracy: 0.92
  avg_tokens: 450
  cost_per_call: 0.009
variants:
  - v1.0: "Initial version"
  - v1.1: "Added empathy guidelines"
  - v1.2: "Optimized for length"
---

## Prompt
[提示词内容]

## Usage Examples
[使用示例]

## Notes
[使用注意事项]

5.7 实战练习 ​

练习1:选择合适的工具 ​

根据以下场景,推荐最合适的提示词管理工具:

  1. 一个3人的创业团队,使用ChatGPT API快速构建MVP
  2. 一个使用LangChain构建复杂Agent的20人团队
  3. 一个大型企业,需要高可用和严格合规
查看推荐
  1. PromptLayer - 成本友好,快速上手,适合小团队
  2. LangSmith - 与LangChain深度集成,强大的追踪能力
  3. Maxim AI - 企业级功能,网关和高可用性

练习2:设计评估框架 ​

为一个"客户情感分析"提示词设计评估框架。

查看参考方案
python
# 评估维度
dimensions = {
    "accuracy": "分类准确率",
    "f1_score": "F1分数(考虑类别不平衡)",
    "response_time": "响应时间",
    "cost": "每次调用成本",
    "consistency": "相同输入的一致性"
}

# 测试集
test_cases = [
    {
        "input": "产品太棒了!",
        "expected": "positive"
    },
    {
        "input": "质量一般,价格偏贵",
        "expected": "neutral"
    },
    # ... 更多测试案例
]

# 评估函数
def evaluate_sentiment_prompt(prompt, test_cases):
    results = []

    for case in test_cases:
        output = call_llm(prompt, case['input'])
        prediction = parse_sentiment(output)

        results.append({
            'input': case['input'],
            'expected': case['expected'],
            'predicted': prediction,
            'correct': prediction == case['expected']
        })

    accuracy = sum(r['correct'] for r in results) / len(results)

    return {
        'accuracy': accuracy,
        'detailed_results': results
    }

练习3:建立个人提示词库 ​

创建你的第一个提示词库,包含至少3个常用提示词。

查看组织建议
  1. 选择你最常做的3类任务
  2. 为每类任务设计优化过的提示词
  3. 使用元数据模板记录
  4. 建立版本控制
  5. 编写使用文档

推荐工具:

  • GitHub/GitLab: 版本控制
  • Notion/Obsidian: 知识管理
  • 专用平台: PromptLayer/LangSmith

5.8 本章小结 ​

核心要点 ​

  1. 管理平台: PromptLayer、LangSmith、Maxim AI 各有优势;OpenAI 已弃用 API 侧 prompt 对象,提示词应作为代码管理
  2. 评估工具: 准确性指标、相似度指标、自定义评估器,以及 promptfoo 的评测和红队测试
  3. 优化方法: 实验对比、自动优化(DSPy/GEPA)和迭代改进
  4. 学习资源: 官方文档、研究论文和社区博客
  5. 个人实践: 建立自己的提示词库

工具选择决策树 ​

是否愿意把提示词交给托管平台?
├─ 否 → 代码仓库 + promptfoo(开源评测)
└─ 是 → 团队规模?
    ├─ 1-5人 → PromptLayer Free/Pro
    └─ 5+人
        ├─ 使用LangChain? → LangSmith
        └─ 不使用 → Maxim AI / PromptLayer Team

是否需要LLM网关?
├─ 是 → Maxim AI(Bifrost,开源版免费)
└─ 否 → PromptLayer/LangSmith

预算?
├─ 免费 → GitHub 管理 + promptfoo
├─ 低 → PromptLayer Pro($49/月)或 LangSmith Developer(免费)
└─ 高 → LangSmith Plus / Maxim 企业版

下一步行动 ​

  1. 选择一个管理平台并开始试用
  2. 建立个人提示词库
  3. 设置评估框架测试你的提示词
  4. 加入社区持续学习

思考题 ​

  1. 根据你当前的项目和团队,哪个提示词管理平台最适合?为什么?

  2. 如何平衡使用第三方工具和自己构建简单工具的利弊?

  3. 设计一个评估框架来衡量"好"的提示词,应该包含哪些指标?

  4. 如何在团队中建立提示词的最佳实践和知识共享机制?


← 返回模块三 | 返回课程目录


🎉 恭喜你完成了模块三的学习!

现在你已经掌握了提示词工程的核心知识和实践技能。下一步建议:

  1. 在实际项目中应用所学知识
  2. 建立自己的提示词库
  3. 持续学习和优化
  4. 分享你的经验和最佳实践

💡 终身学习: 提示词工程是一个快速发展的领域,保持学习的心态,关注最新研究和工具,你会不断进步!


扩展资源汇总 ​

工具平台 ​

学习资源 ​

开源项目 ​

社区 ​

  • r/LocalLLaMA - Reddit社区
  • Discord - AI开发者社区
  • GitHub - 开源项目

参考来源:

[^1]: PromptLayer, https://promptlayer.com [^2]: LangSmith, https://smith.langchain.com [^3]: Maxim AI / Bifrost, https://www.getmaxim.ai/bifrost/pricing [^4]: Prompt Engineering Guide, https://www.promptingguide.ai/zh [^5]: Learn Prompting, https://learnprompting.org/zh-Hans [^6]: OpenAI, "Prompting", https://developers.openai.com/api/docs/guides/prompting [^7]: promptfoo, https://www.promptfoo.dev

最近更新

基于 MIT LICENSE 许可发布