You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kedro中传递用户输入至推理管道?报错咨询

如何将外部用户输入传入Kedro管道?

我有一个包含目标模型的Kedro管道,项目外部有个app.py文件用来搭建用户运行模型的UI/UX,目前先用示例字符串测试,后续会改成用户可输入的文本框。尝试用KedroSession传入用户输入时触发了错误:

ValueError: Pipeline input(s) {'user-input'} not found in the DataCatalog

我的测试代码如下:

from kedro.framework.session import KedroSession
from kedro.framework.startup import bootstrap_project
from kedro.io import MemoryDataSet
import os

bootstrap_project("<project path>")

user_input = "this is a sample text"
user_input = MemoryDataSet(user_input)


with KedroSession.create("project") as session:
    output = session.run(
        "nlp-pipeline", 
        from_inputs={
            "user-input": user_input
        }
    )

print(output)

错误原因

你混淆了session.run()里from_inputs和inputs参数的作用:

  • from_inputs是用来指定管道运行的起始节点/输入,它要求这些输入必须已经在DataCatalog中注册,作用是跳过前面的节点,直接从指定输入开始运行后续流程。
  • 你想传入的用户输入是新的数据集,而from_inputs不支持直接传入未注册的数据集,因此报错。

解决步骤

1. 先在Kedro项目中注册输入数据集

在项目的conf/base/catalog.yml里添加user-input的注册,因为是临时输入,用MemoryDataSet即可:

user-input:
  type: kedro.io.MemoryDataSet

2. 修改app.py代码注入用户输入

有两种可行的写法:

写法一:通过DataCatalog注入
from kedro.framework.session import KedroSession
from kedro.framework.startup import bootstrap_project
from kedro.io import MemoryDataSet
import os

bootstrap_project("<project path>")

user_input_text = "this is a sample text"
user_input_dataset = MemoryDataSet(user_input_text)

with KedroSession.create("project") as session:
    # 获取项目的DataCatalog实例
    catalog = session.load_context().catalog
    # 将用户输入的数据集添加到Catalog中
    catalog.add("user-input", user_input_dataset)
    # 运行指定管道
    output = session.run("nlp-pipeline")

print(output)
写法二:用inputs参数覆盖已有数据集
from kedro.framework.session import KedroSession
from kedro.framework.startup import bootstrap_project
from kedro.io import MemoryDataSet
import os

bootstrap_project("<project path>")

user_input_text = "this is a sample text"
user_input_dataset = MemoryDataSet(user_input_text)

with KedroSession.create("project") as session:
    output = session.run(
        "nlp-pipeline",
        # 用inputs参数覆盖Catalog中已注册的user-input数据集
        inputs={
            "user-input": user_input_dataset
        }
    )

print(output)

内容的提问来源于stack exchange,提问作者João Areias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:35:11