要解决的问题:

  1. session_id/user_id没传入
  2. 执行一次由3条Trace https://github.com/langflow-ai/langflow/issues/6746
  3. 嵌套关系修复 https://github.com/langflow-ai/langflow/issues/6846

LangFuse提供的Trace方式

  1. HTTP/RPC的API方式
  2. Python SDK(虽然实际还是调用http接口)
    1. @observe()注解 肯定没用这个了
    2. 底层函数 https://langfuse.com/docs/sdk/python/low-level-sdk#tracing
    3. LangChainCallback https://langfuse.com/docs/integrations/langchain/tracing
    4. Drop-in 替换OpenAI https://langfuse.com/docs/integrations/openai/python/get-started
      1. “OpenAI-generation”
      2. .venv/lib/python3.11/site-packages/langfuse/openai.py

TrackingService

从下面service设计感觉, trackingservice是单例的; 是的.

其中的self._tracers["langfuse"]也是单例的, 不是

   async def initialize_tracers(self) -> None:
       if self.deactivated:
           return
       try:
           await self.start()

           self._initialize_langsmith_tracer()
           self._initialize_langwatch_tracer()
           self._initialize_langfuse_tracer()
           self._initialize_arize_phoenix_tracer()

见下 调试tracer的init/add_trace/end/trace

关键内部逻辑

start(): 启动一个协程 self.worker_task = asyncio.create_task(self.log_worker()) , 消费logs_queue执行log_func

initialize_tracers() 只在graph的initialize_run里, 而它在3个地方被调用