langchain 如果子运行时输入模式使用了TypedDict,那么RunnableParallel输入模式将为空,

x33g5p2x  于 3个月前  发布在  其他
关注(0)|答案(1)|浏览(27)

检查其他资源

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

示例代码

from typing import TypedDict
from langchain_core.runnables import RunnableParallel, RunnableLambda

class Foo(TypedDict):
    foo: str

class InputData(Foo):
    bar: str

def forward_foo(input_data: InputData):
    return input_data["foo"]

def transform_input(input_data: InputData):
    foo = input_data["foo"]
    bar = input_data["bar"]

    return {
        "transformed": foo + bar
    }

foo_runnable = RunnableLambda(forward_foo)
other_runnable = RunnableLambda(transform_input)

parallel = RunnableParallel(
    foo=foo_runnable,
    other=other_runnable,
)

repr(parallel.input_schema.validate({ "foo": "Y", "bar": "Z" }))
# 'RunnableParallel<foo,other>Input()'

# If we remove the type annotations on forward_foo and transform_input
# args, validate() gives us the right result:
# "RunnableParallel<foo,other>Input(foo='Y', bar='Z')"

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

  • 无响应*

描述

当使用 TypedDict 子类来注解 RunnableParallel 子元素的参数时,从子元素模式中无法正确推断出 RunnableParallel 模式。
RunnableParallel 模式为空,即 parallel.input_schema.schema() 输出:

{'title': 'RunnableParallel<foo,other>Input',
 'type': 'object',
 'properties': {}}

parallel.input_schema.validate() 对任何输入都返回一个空字典。
这在使用Langserve公开 RunnableParallel 链时是一个问题,因为Langserve通过 schema.validate() 将端点输入传递过去,这实际上会清除任何输入,因为它返回一个空的 dict
我们迄今为止发现的唯一解决方法是:

  • RunnableParallel 子函数上删除类型注解
  • RunnableParallel 之前管道一个 RunnablePassthrough : parallel = RunnablePassthrough() | RunnableParallel()

系统信息

系统信息

操作系统:Darwin
OS版本:Darwin内核版本23.5.0:Wed May 1 20:12:58 PDT 2024;root:xnu-10063.121.3~5/RELEASE_ARM64_T6000
Python版本:3.10.13 (main, Aug 24 2023, 12:59:26) [Clang 15.0.0 (clang-1500.1.0.2.5)]

软件包信息

langchain_core: 0.2.20
langchain: 0.2.8
langchain_community: 0.2.7
langsmith: 0.1.88
langchain_anthropic: 0.1.20
langchain_cli: 0.0.25
langchain_openai: 0.1.16
langchain_text_splitters: 0.2.2
langchainhub: 0.1.20
langserve: 0.2.2

没有安装的软件包(不一定是个问题)

以下软件包未找到:
langgraph

oknwwptz

oknwwptz1#

另一个解决方法是使用 with_types(input_type=InputData)

parallel = RunnableParallel(
    foo=foo_runnable,
    other=other_runnable,
).with_types(input_type=InputData)

相关问题