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

Jupyter Widgets与HuggingFace预训练QA流水线对接时出现ValueError的问题排查

问题分析与解决方案

首先,我们拆解你遇到的两个核心问题:一是Jupyter Widget无法和QA流水线对接,二是调用transcriptName()时出现的ValueError。

1. Jupyter Widget与QA流水线对接的问题

你的下拉选择组件已经能正常获取用户选中的问题,但目前代码只是在on_change函数里定义了局部变量trial_q,并没有将这个问题传递给QA函数执行。要完成对接,你需要:

  • 提前读取好context内容(文件里的文本),避免每次选择问题重复读文件;
  • 在on_change回调里调用QA函数,传入选中的问题和预加载的context。

修改后的代码示例:

import ipywidgets as widgets

# 预加载context内容
def load_context():
    with open('data/uploaded_file.txt', 'r') as myfile:
        return myfile.read().replace('\n', '')

context = load_context()

# 假设你已正确初始化QA流水线(示例:使用默认模型)
# nlp = pipeline("question-answering")

# 定义QA函数(优化输出格式)
def QA(q, a):
    result = nlp({'question': q, 'context': a})
    print(f"问题: {q}\n答案: {result['answer']}\n置信度: {result['score']:.4f}\n")

# 初始化下拉组件
w = widgets.Dropdown(
    options=['What are the risks of defamation?', 'Are there risks?', 
             'What are the risks of the trial?', 
             'Is the trial risky?'],
    value='What are the risks of defamation?',
    description='Question:',
)

def on_change(change):
    if change['type'] == 'change' and change['name'] == 'value':
        selected_question = change['new']
        # 调用QA函数,传入选中的问题和预加载的context
        QA(selected_question, context)

w.observe(on_change)
display(w)

2. 调用transcriptName()时的ValueError问题

你提到换个固定问题字符串就能正常运行,但用'What are you randomised for?'就报错,结合错误提示Input is not valid. Should be a string...,可能的原因有两个:

原因1:文件读取的context为空或非字符串类型

如果data/uploaded_file.txt是空文件,或者路径错误导致读取失败,data可能是空字符串或非字符串类型。你可以先在transcriptName()里添加验证代码:

def transcriptName():
    with open('data/uploaded_file.txt', 'r') as myfile:
        data = myfile.read().replace('\n', '')
    # 验证context的类型和内容
    print(f"Context类型: {type(data)}, 内容长度: {len(data)}")
    QA('What are you randomised for?', data)

原因2:问题字符串存在隐藏格式问题

极少数情况下,不可见的控制字符会导致流水线识别异常。你可以用repr()查看字符串的原始格式:

test_q = 'What are you randomised for?'
print(repr(test_q))  # 查看字符串的原始表示,确认无隐藏字符

另外,你的QA函数没有return语句,transcriptName()里把QA的返回值赋值给trial_q会得到None——这不会引发ValueError,但属于冗余代码,可根据需求调整。

总结

  • 先确保context正常加载(非空、字符串类型);
  • 修改on_change回调,在用户选择问题时主动调用QA函数并传入正确参数;
  • 检查问题字符串是否存在隐藏格式问题。

内容的提问来源于stack exchange,提问作者DarknessPlusPlus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:34:08