这个坑值得记一笔。升级到新版本后,原来调用的 load_qa_chain 报属性不存在,整条问答链路直接跑不起来。

刚开始盯着「自定义提示词模板的输入变量名变了」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。旧版链式接口被新的组合式写法取代;依赖的三个包版本不一致,混用了新旧 API;回调与流式接口的调用方式变化。

第一件事是改装新版组合写法

chain = prompt | llm | StrOutputParser()

随后用检索器直接拼装问答链

chain = create_stuff_documents_chain(llm, prompt) | RunnableLambda(lambda x: x)

然后核对模板变量名与检索输出字段

python -c "print(prompt.input_variables)"

剩下的就是跑通一条端到端用例

python -c "print(chain.invoke({'context': docs, 'question': q}))"

别只看报错消失,验证要多做一步。新写法返回结果与旧版一致,流式输出可用,链路的日志与回调也能正常采集。

大版本升级最好锁死依赖并写一条回归用例,靠人肉改调用点在链路长的时候非常容易漏。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189