在 LangChain 应用开发中,Batch 调用是一种处理多个主题的方式。例如,调用笑话对象时,传入一个主题字符串的列表,就可以得到一个笑话字符串的列表,如 joke.batch(["dog","cat","banana"])。它能够同时处理多个任务,提高处理效率。
为了更好地理解LCEL语法的优势,我们可以将它与传统的编程语言进行对比,看看如果不使用LCEL语法,我们需要做哪些额外的工作。我们仍以上述笑话的生成链为例。这段代码非常简洁和清晰,只需要几行就可以实现我们想要的功能。而且,这段代码还具有很高的可扩展性和灵活性,例如:如果我们想要以流式的方式获取笑话,我们只需要改变调用方法,使用stream代替invoke:调用笑话对象,传入一个主题字符串,得到一个笑话字符串的流joke.stream("dog")如果我们想要同时处理多个主题,我们只需要改变调用方法,使用batch代替invoke:调用笑话对象,传入一个主题字符串的列表,得到一个笑话字符串的列表joke.batch(["dog","cat","banana"])如果我们想让请求异步执行只需要模型的变更也十分简单,只需要变更modal变量的定义即可prompt=BasePromptTemplate("tell me a short joke about{topic}")改用gpt-3.5-turbo的llm model=OpenAI(model="gpt-3.5-turbo")output_parser=StrOutputParser()joke=({"topic":RunnablePassthrough()}|prompt|model|output_parser)同时LCEL标准模型中的对象都可以直接增加同类型对象作为fallbacks,操作上只需要执行with_fallbacks方法即可。由于整条链亦是LCEL标准模型,因而链亦可配置fallbacks