什么是chain:
Chain将多个组件(如模型、提示模板、解析器)连接成一个连贯的工作流。
通过模块化设计,简化了复杂应用的实现、调试、维护和扩展。
chain如何工作:
-
Chain的封装功能,LLMChain,它接收用户输入,通过提示模板格式化后传递给LLM处理。
-
可以通过组合多个Chain或将Chain与其他组件连接,构建更高级的系统
总结来说,Chain是LangChain模块化架构的核心,帮助开发者高效地构建强大且易于维护的应用程序。
LLMChain 是 LangChain 中最基础的链,用于简化语言模型的输入和输出操作。它将 PromptTemplat(提示模板)、语言模型(如 LLM 或聊天模型)以及 Output parser 整合在一起,把整个模型的输入输出流程封装为一个连贯的操作。
使用前后对比
不用链:
创建提示模板,通过 PromptTemplate 格式化输入。
调用模型实例(如 OpenAI 接口),传递格式化的提示,并获取结果。
提示构建和模型调用是独立的两个步骤,代码冗长。
使用LLMChain:
使用 LLMChain,将提示模板和模型调用流程封装在一起。
简化了代码结构,更直观且易于维护。
LangChain 提供了多种调用链的方法:
-
直接调用:通过 “call” 方法,直接调用链对象,可以传递单个输入或字典形式的多个输入。
-
run:等价于直接调用,用于传递单个输入。
-
predict:通过关键字参数传递输入。
-
apply:一次性处理多个输入,用于批量操作。
-
generate:类似于 apply,但返回更详细的 LLMResult 对象,包含模型生成过程的附加信息。
顺序链,将多输出链在一起输出一个最终结果
示例:
-
第一步:生成鲜花的知识性说明
-
第二步:生成评论
-
第三步:生成社交媒体文案
思考题1:
RouterChain和MultiPromptChain
实现一个鲜花运营智能客服系统,根据用户问题的类型(鲜花养护或鲜花装饰)动态选择不同的处理逻辑。
RouterChain:
- RouterChain 动态选择处理。
- 系统根据用户输入内容,使用路由器链决定问题类型,并选择相应的处理模板。
- 如果问题不匹配任何已定义模板,则由默认链处理。
通过key查找匹配的模板,使用prompt_infos列表,存储每个模板的key、描述(description)和内容(template)。
遍历 prompt_infos 列表,为每个模板构建一个 LLMChain。 将链存储在字典 chain_map 中,供后续路由选择。
使用 LLMRouterChain 构建一个路由器链: 定义路由模板 router_template,列出候选模板的名称和描述。 构造 router_prompt,引导大语言模型根据用户输入选择合适的模板。定义一个默认链 default_chain,处理无法分类的问题。最后使用 MultiPromptChain 整合所有链。 思考题1: 将MultiPromptChain中verbose设为False时报错,只改变其他verbose时字体会改变,输出更简洁。 思考题2: