检查其他资源
- 我为这个问题添加了一个非常描述性的标题。
- 我在集成搜索中搜索了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跟踪:
描述
我正在分析使用 invoke
和 ainvoke
函数在内部调用另一个链的链上生成的跟踪。
对于同步运行,内部链在外部链下被正确跟踪。然而,当在外部链上调用 ainvoke
时,内部链被跟踪为单独的链。
我希望 invoke
和 ainvoke
都能产生相同的跟踪结果。
我认为问题可能出在 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
:
2条答案
按热度按时间zqry0prt1#
请使用Python 3.11进行验证。快速查看似乎不是一个bug,而是用户代码中回调问题。在3.11版本之前,我们无法自动执行此操作,因为它不受asyncio支持。
voase2hg2#
你好,@eyurtsev ,感谢你的回复。我使用Python 3.11进行了调查,一切都如预期般工作。现在跟踪记录显示在同一个根跟踪下😄
我现在将与我的项目一起检查,以使Python版本要求更加严格。