langfuse交互data和task交互原理
langfuse交互data和task交互原理
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
7. 总结
Data 和 Task 的交互机制:
- Data 提供输入:每个数据项包含输入、期望输出和元数据
- Task 处理数据:接收数据项,执行处理逻辑,返回输出
- Evaluators 评估输出:基于任务输出和期望输出生成评估分数
- Scores 存储结果:评估分数被存储并与追踪记录关联
评估分数生成:
- 通过评估器函数计算
- 基于任务输出与期望输出的比较
- 支持多种数据类型(NUMERIC, BOOLEAN, CATEGORICAL)
- 自动关联到对应的追踪记录
这种设计使得 Langfuse 能够自动追踪实验执行过程,生成详细的评估指标,并提供完整的可观测性。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Roger-Lv's space!
评论



