Langfuse Prompt 管理
约 670 字大约 2 分钟
LangfusePromptLLM Observability
2026-09-01
为什么要把 Prompt 管起来
很多项目里 prompt 是这样的一套流程:
- prompt 直接硬编码在代码里,改一次要发一次版
- 改完不知道线上哪个版本、哪个用户看到的是哪版
- 无法回退、无法对比
Langfuse 的 Prompt Management 把 prompt 从「代码里的字符串」升级成「可版本管理的资源」,集中管理、动态获取、可回退、可 A/B。
基本用法
创建 prompt
prompt 是带变量的文本模板,变量用 {{variable}} 占位:
你是一个{{role}},请用简洁的中文回答用户的问题。
问题:{{question}}可以在 UI 里创建,也可以通过 SDK 上传。
在代码里获取并填充
from langfuse import Langfuse
langfuse = Langfuse()
# 获取名为 summarizer 的 prompt(默认取 production 标签的版本)
prompt = langfuse.get_prompt("summarizer")
# 用变量填充成最终文本
text = prompt.compile(role="技术助手", question="什么是 Langfuse?")拿到填充后的 text 后,再交给任意 LLM 调用即可。
版本与标签
每个 prompt 都有一个版本号,可以用标签(label)标记语义状态:
| 标签 | 含义 |
|---|---|
production | 线上正式使用 |
latest | 最新版本 |
| 自定义 | 如 staging、experiment-a 等 |
langfuse.get_prompt("name", label="experiment-a") 可以指定取哪个标签。回退就是「把 production 标签指向回旧版本」这么简单。
每个版本还支持配置默认的模型、温度等参数(config),让 prompt 版本和模型参数绑定在一起迭代。
A/B 测试
Prompt 管理 + 标签机制,让 A/B 测试变得很自然:
import random
def answer(question):
if random.random() < 0.5:
prompt = langfuse.get_prompt("answer", label="production")
else:
prompt = langfuse.get_prompt("answer", label="experiment-a")
text = prompt.compile(question=question)
result = llm.invoke(text)
# 记录本次用了哪个版本,方便回看效果
langfuse.trace(name="answer").generation(
name="llm",
input=text,
output=result.content,
version=prompt.version, # 关键:把版本写进 trace
)
return result.content两个版本同时在生产跑,配合 Tracing 记录 version,再配合 Evals 对比,就能用数据决定哪个版本胜出——而不是靠直觉。
与 Tracing 的联动
Prompt 管理的一个关键价值是「可追溯」:
- 每次 generation 里记录下
prompt.version - 追溯某次 trace 时,能精确知道它用的是哪个版本的 prompt
- 用户反馈差分时,能定位到具体是哪个 prompt 版本的问题
这正是把 prompt 当「资源」管、而不是当「字符串」写的意义所在。
小结
Prompt Management 带来三点变化:集中管理(改 prompt 不用发版)、版本可控(可回退、可对比)、可追溯可 A/B(每次调用绑定版本)。它和 Tracing、Evals 一起,构成了 Langfuse「观测 → 评估 → 优化」闭环里负责「改」的一环。
