langfuse交互data和task交互原理
langfuse交互data和task交互原理
langfuse实战:https://zhuanlan.zhihu.com/p/708647880
1. run_experiment 方法核心流程
根据 Langfuse.run_experiment() 方法的实现,data 和 task 的交互过程如下:
1 | def run_experiment( |
2. Data 和 Task 的交互过程
2.1 数据准备阶段
- data: 可以是两种类型:
- 字典列表:包含
input,expected_output,metadata键 - Langfuse DatasetItem 对象:来自
dataset.items
- 字典列表:包含
2.2 任务执行阶段
在 _process_experiment_item() 方法中:
1 | async def _process_experiment_item( |
关键交互步骤:
-
任务执行:
1
output = await _run_task(task, item)
- 调用
_run_task()辅助函数 - 将
item作为参数传递给task函数 - 支持同步和异步任务函数
- 调用
-
追踪记录:
1
2
3
4
5
6with self.start_as_current_span(name=span_name) as span:
span.update(
input=input_data, # 从 item 中提取
output=output, # task 函数的返回值
metadata=final_metadata, # 合并的元数据
)
3. 评估分数生成机制
3.1 评估器执行
在任务执行后,调用评估器:
1 | # 运行评估器 |
3.2 评估分数存储
每个评估结果被转换为分数并存储:
1 | # 存储评估结果为分数 |
4. 完整的交互流程
sequenceDiagram
participant D as Data Items
participant T as Task Function
participant E as Evaluators
participant S as Score System
participant L as Langfuse Tracing
loop For each data item
D->>T: item (input, expected_output, metadata)
T->>T: Process item
T->>L: Create trace span
T->>L: Record input/output
T->>E: Return output
E->>E: Evaluate output
E->>S: Generate evaluation results
S->>L: Store scores with trace_id
end
Note over D,S: All executions are traced
and linked for analysis
5. 关键数据结构
5.1 评估结果结构
从 Evaluation 类:
1 | class Evaluation(TypedDict, total=False): |
5.2 实验项结果
从 ExperimentItemResult 类:
1 | class ExperimentItemResult(TypedDict, total=False): |
6. 评估分数生成示例
假设有以下配置:
1 | # 数据项 |
交互过程:
data_item传递给answer_question任务函数- 任务返回输出:“The capital of France is Paris.”
accuracy_evaluator接收:input: “What is the capital of France?”output: “The capital of France is Paris.”expected_output: “Paris”
- 评估器检查 “Paris” 是否在输出中,返回准确率分数 1.0
- 分数被存储到 Langfuse,关联到对应的追踪ID
在Langfuse和评估框架中,Trace、Observation和Session是三个层次化的概念:
Session(会话):
- 定义:用户会话,包含多个相关Trace
- 粒度:最粗,时间跨度最长(分钟到小时)
- 示例:一个完整的客服对话周期
- 在代码中:
session_id关联多个Trace
Trace(追踪):
- 定义:完整的LLM应用执行过程
- 粒度:中等,包含完整工作流
- 示例:处理单个用户请求的完整对话
- 在代码中:
trace_id关联多个Observation
Observation(观察点):
- 定义:Trace中的单个步骤或操作
- 粒度:最细,单个操作步骤
- 示例:LLM调用、工具执行、函数调用
- 在代码中:
observation_id标识具体步骤
层次关系:
1 | Session (用户会话) |
评估应用:
- Trace级别:评估整个对话的质量
- Observation级别:评估单个步骤的质量
- Session级别:分析整体用户体验
这种层次结构支持从宏观到微观的全面评估分析。
7. 总结
Data 和 Task 的交互机制:
- Data 提供输入:每个数据项包含输入、期望输出和元数据
- Task 处理数据:接收数据项,执行处理逻辑,返回输出
- Evaluators 评估输出:基于任务输出和期望输出生成评估分数
- Scores 存储结果:评估分数被存储并与追踪记录关联
评估分数生成:
- 通过评估器函数计算
- 基于任务输出与期望输出的比较
- 支持多种数据类型(NUMERIC, BOOLEAN, CATEGORICAL)
- 自动关联到对应的追踪记录
这种设计使得 Langfuse 能够自动追踪实验执行过程,生成详细的评估指标,并提供完整的可观测性。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Roger-Lv's space!
评论

