-
可调用性:每个组件必须实现
__call__
或invoke
方法 -
输入输出兼容:
-
prompt
输出必须是聊天模型(chat
)可接受的输入格式 -
chat
的输出必须是StrOutputParser
可解析的格式
-
-
类型匹配:
-
ChatPromptTemplate
输出 ->List[ChatMessage]
-
ChatOpenAI
接收List[ChatMessage]
,输出ChatMessage
-
StrOutputParser
接收ChatMessage
,输出str
-
错误案例:
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_template("tell me a joke about {topic}. 帮我翻译成英文 {model}")# 错误写法:chain = prompt | chat | StrOutputParser# 正确写法:chain = prompt | chat | StrOutputParser()r = chain.invoke({"topic": "bears", "model": "帐篷"})
print(r)
TypeError: BaseModel.__init__() takes 1 positional argument but 2 were given
TypeError: BaseModel.__init__() 需要1个位置参数,但传入了2个
错误分析:
StrOutputParser
使用错误:StrOutputParser()
需要实例化(加括号)
总结,差一个括号就会影响程序运行,深层原因是chain链接受的是实例化的对象,而StrOutputParser是类,没有实例化,这样写的话会直接调用类的初始化函数,所以造成参数不匹配。