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

使用RunnableSequence替代LLMChain报错,LangChain升级适配求助

修正LangChain中HuggingFacePipeline的RunnableSequence调用错误

问题根源

HuggingFacePipeline与HuggingFaceEndpoint的输出格式存在差异:

  • HuggingFaceEndpoint直接返回字符串结果
  • HuggingFacePipeline返回模型原生输出结构(比如摘要任务会返回[{"summary_text": "摘要内容"}]这样的字典列表),直接用prompt | llm | StrOutputParser会因为格式不匹配触发TypeError。

解决方案

需要先提取HuggingFacePipeline输出中的目标文本,再进行字符串解析。以下两种方式都可以解决问题:

方式1:自定义提取函数

from transformers import pipeline
from langchain.llms import HuggingFacePipeline
from langchain.prompts import PromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.schema.runnable import RunnablePassthrough

# 初始化transformers文本摘要pipeline
text_summarizer = pipeline(
    task="summarization",
    model="facebook/bart-large-cnn",
    max_length=150,
    min_length=40,
    truncation=True,
    return_full_text=False
)

# 包装为LangChain的HuggingFacePipeline实例
llm = HuggingFacePipeline(pipeline=text_summarizer)

# 定义提示模板
prompt = PromptTemplate(
    input_variables=["book_content"],
    template="请总结以下书籍内容:\n\n{book_content}"
)

# 自定义提取函数,从模型输出中取出摘要文本
def extract_summary(output):
    return output[0]["summary_text"]

# 构建完整的Runnable序列
summarization_chain = (
    {"book_content": RunnablePassthrough()}  # 传递输入参数
    | prompt
    | llm
    | extract_summary
    | StrOutputParser()
)

# 测试调用
sample_book_text = """你的书籍正文内容,比如一段长篇文本..."""
result = summarization_chain.invoke(sample_book_text)
print(result)

方式2:使用LangChain内置的TransformersPipelineOutputParser

LangChain提供了专门适配Transformers Pipeline输出的解析器,无需自定义函数:

from transformers import pipeline
from langchain.llms import HuggingFacePipeline
from langchain.prompts import PromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.output_parsers import TransformersPipelineOutputParser
from langchain.schema.runnable import RunnablePassthrough

# 初始化pipeline与LLM实例(同方式1)
text_summarizer = pipeline(
    task="summarization",
    model="facebook/bart-large-cnn",
    max_length=150,
    min_length=40,
    truncation=True,
    return_full_text=False
)
llm = HuggingFacePipeline(pipeline=text_summarizer)

# 定义提示模板
prompt = PromptTemplate(
    input_variables=["book_content"],
    template="请总结以下书籍内容:\n\n{book_content}"
)

# 使用内置解析器处理Pipeline输出
pipeline_parser = TransformersPipelineOutputParser()

# 构建Runnable序列
summarization_chain = (
    {"book_content": RunnablePassthrough()}
    | prompt
    | llm
    | pipeline_parser
    | StrOutputParser()
)

# 测试调用
sample_book_text = """你的书籍正文内容..."""
result = summarization_chain.invoke(sample_book_text)
print(result)

关键说明

  • 确保初始化Transformers Pipeline时设置return_full_text=False(针对摘要任务),避免返回原始输入文本干扰结果。
  • 若使用其他NLP任务(如文本生成),需根据模型输出结构调整提取逻辑(比如文本生成任务可能直接返回字符串列表,提取时取output[0]即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:45:11