检查其他资源
- 为这个问题添加了一个非常描述性的标题。
- 使用集成搜索在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
1条答案
按热度按时间oknwwptz1#
另一个解决方法是使用
with_types(input_type=InputData)
和。