langchain 嵌套的ainvoke在追踪中不显示为子项,

yb3bgrhw  于 3个月前  发布在  其他
关注(0)|答案(2)|浏览(42)

检查其他资源

  • 我为这个问题添加了一个非常描述性的标题。
  • 我在集成搜索中搜索了LangChain文档。
  • 我使用GitHub搜索找到了一个类似的问题,但没有找到。
  • 我确信这是LangChain中的一个bug,而不是我的代码。
  • 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此bug。

示例代码

from dotenv import load_dotenv
from langchain_core.runnables import Runnable, RunnableConfig, chain
from langchain_core.tracers.context import tracing_v2_enabled
from phoenix.trace.langchain import LangChainInstrumentor

LangChainInstrumentor().instrument()
load_dotenv()

@chain
def inner_chain(input):
    print("inner chain")
    return {"inner": input}

@chain
def outer_chain(input):
    print("outer chain")
    return inner_chain.invoke(input={"inner": "foo_sync"})

@chain
async def outer_chain_async(input):
    print("outer chain async")
    return await inner_chain.ainvoke(input={"inner": "foo_async"})

async def main_async():
    # call async the outsider that inside has a sync call
    await outer_chain.ainvoke(input={"outer": "foo"})
    # call async the outsider that inside has a async call
    await outer_chain_async.ainvoke(input={"outer": "foo_async_outer"})

def main():
    outer_chain.invoke(input={"outer": "foo"})

if __name__ == "__main__":
    with tracing_v2_enabled(project_name="test"):
        # call sync
        main()
        # call async
        import asyncio

        asyncio.run(main_async())

错误信息和堆栈跟踪(如果适用)

内部链应作为子链附加到外部链。然而,异步调用显示为独立的跟踪。
Arize-phoenix跟踪:

Langsmith跟踪:

描述

我正在分析使用 invokeainvoke 函数在内部调用另一个链的链上生成的跟踪。
对于同步运行,内部链在外部链下被正确跟踪。然而,当在外部链上调用 ainvoke 时,内部链被跟踪为单独的链。
我希望 invokeainvoke 都能产生相同的跟踪结果。
我认为问题可能出在 Runnable.ainvoke 中调用的 run_in_executor 函数上,该函数可能在关于父链上下文的信息方面缺少一些参数。
我用两种不同的跟踪解决方案进行了测试:

  • arize-phoenix
  • langsmith

问题存在于两者之间,因此我认为问题在于langchain或opentelemetry。
环境要求:

langchain
arize-phoenix
python-dotenv
langsmith

环境变量:

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY="<my_key_here>"
LANGCHAIN_PROJECT="test"

系统信息

python -m langchain_core.sys_info :

zqry0prt

zqry0prt1#

请使用Python 3.11进行验证。快速查看似乎不是一个bug,而是用户代码中回调问题。在3.11版本之前,我们无法自动执行此操作,因为它不受asyncio支持。

voase2hg

voase2hg2#

你好,@eyurtsev ,感谢你的回复。我使用Python 3.11进行了调查,一切都如预期般工作。现在跟踪记录显示在同一个根跟踪下😄
我现在将与我的项目一起检查,以使Python版本要求更加严格。

相关问题