Trace ID 与分布式 tracing
trace ID 是一个唯一标识符,会随着请求在系统中的流转而被携带。在分布式系统中,trace ID 让你能够跨多个服务关联操作,并重建请求的完整生命周期。
默认情况下,Litefuse 会分配 32 位十六进制的 trace ID 和 16 位十六进制的 observation ID。
创建和访问 Trace ID
使用 create_trace_id() 生成 trace ID。如果提供了 seed,则 ID 是确定性的。使用相同的 seed 会得到相同的 ID。这对于将外部 ID 与 Litefuse trace 关联非常有用。
from langfuse import get_client, Langfuse
langfuse = get_client()
external_request_id = "req_12345"
deterministic_trace_id = langfuse.create_trace_id(seed=external_request_id)使用 get_current_trace_id() 获取当前 trace ID,使用 get_current_observation_id 获取当前 observation ID。
你也可以通过 observation.trace_id 和 observation.id 直接从 LangfuseSpan 或 LangfuseGeneration 对象上访问 trace ID 和 observation ID。
from langfuse import get_client, Langfuse
langfuse = get_client()
with langfuse.start_as_current_observation(as_type="span", name="my-op") as current_op:
trace_id = langfuse.get_current_trace_id()
observation_id = langfuse.get_current_observation_id()
print(trace_id, observation_id)设置自定义 Trace ID
在使用 Langfuse SDK 包裹应用代码时,你可以指定一个自定义的 trace ID。
使用 Context Manager
from langfuse import get_client
langfuse = get_client()
# Use a predefined trace ID with trace_context parameter
with langfuse.start_as_current_observation(
as_type="span",
name="my-operation",
trace_context={
"trace_id": "abcdef1234567890abcdef1234567890", # Must be 32 hex chars
"parent_span_id": "fedcba0987654321" # Optional, 16 hex chars
}
) as observation:
print(f"This observation has trace_id: {observation.trace_id}")
# YOUR APPLICATION CODE HERE使用装饰器
from langfuse import observe
@observe()
def my_operation(input):
# YOUR APPLICATION CODE HERE
result = call_llm(input)
return result
process_user_request(
input="Hello",
langfuse_trace_id="abcdef1234567890abcdef1234567890" # Must be 32 hex chars
)这个页面对你有帮助吗?