这里就是LLMChain
删除后的写法了。
chain = prompt_template | llm
管道是什么?他有什么作用?
其实也不需要追着这个【管道】的定义到处问,只需要关注代码的逻辑就够了。chain
无非就是prompt_template
与llm
求或的结果。
所以,我们直接将问题拆开:
invoke
把当我们调用chain.invoke
的时候,首先访问的是chain
对象,这一点毋庸置疑。
非短路或
在访问chain
对象时,由于非短路的或运算符|
的存在,会按照从左到右的顺序依次访问,并且不会因为某一个对象非None
而直接返回。也就是先访问prompt_template
,再访问llm
,直到所有的对象全部被访问到。
于是,问题就很明显了。
管道的存在实际上就是利用非短路的或运算符,将多个Runnable
子类对象组合成一个Runnable
对象,并且从左到右的顺序正好就是期望大模型执行的顺序。在上面这个案例中,顺序就是优先构建PromptTemplate
对象,再构建LLM
对象。