LangChain 实战课
黄佳
新加坡科研局首席研究员
8120 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 28 讲
结束语 & 结课测试 (2讲)
LangChain 实战课
15
15
1.0x
00:00/00:00
登录|注册

08|链(上):写一篇完美鲜花推文?用SequencialChain链接不同的组件

你好,我是黄佳。欢迎来到 LangChain 实战课!
到这节课,我们已经学到了不少 LangChain 的应用,也体会到了 LangChain 功能的强大。但也许你心里开始出现了一个疑问:LangChain,其中的 Chain 肯定是关键组件,为什么我们还没有讲到呢?
这的确是个好问题。对于简单的应用程序来说,直接调用 LLM 就已经足够了。因此,在前几节课的示例中,我们主要通过 LangChain 中提供的提示模板、模型接口以及输出解析器就实现了想要的功能。

什么是 Chain

但是,如果你想开发更复杂的应用程序,那么就需要通过 “Chain” 来链接 LangChain 的各个组件和功能——模型之间彼此链接,或模型与其他组件链接。
这种将多个组件相互链接,组合成一个链的想法简单但很强大。它简化了复杂应用程序的实现,并使之更加模块化,能够创建出单一的、连贯的应用程序,从而使调试、维护和改进应用程序变得容易。
说到链的实现和使用,也简单。
首先 LangChain 通过设计好的接口,实现一个具体的链的功能。例如,LLM 链(LLMChain)能够接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化的响应传递给 LLM。这就相当于把整个 Model I/O 的流程封装到链里面。
实现了链的具体功能之后,我们可以通过将多个链组合在一起,或者将链与其他组件组合来构建更复杂的链。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

LangChain中的文章介绍了如何使用SequentialChain和LLMChain来创建一个完美的鲜花推文。文章首先解释了Chain的概念,然后详细介绍了LLMChain的基本用法,包括直接调用、run方法、predict方法、apply方法和generate方法。接着,文章引入了SequentialChain,展示了如何将多个LLMChain串联起来,形成一个顺序链,以实现一个完整的任务流程。最后,文章提供了示例代码,演示了如何使用SequentialChain来生成鲜花的知识性介绍、评论和运营文案。整篇文章结构清晰,通过具体的示例代码帮助读者理解了LangChain中链的使用方法。LangChain为读者提供了好用的“链”,帮助将多个组件连接起来,还介绍了其他类型的链,如RouterChain。读者可以根据开发需求选择不同的链,同时还提供了思考题,引导读者进一步学习和尝试使用LangChain中的链。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《LangChain 实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 在路上
    Chain有三个能力,有状态,可观测,可组合。 有状态:Chain类定义了memory: Optional[BaseMemory]成员变量,记录了chain执行过程的状态。调用chain._call(inputs)可得到输出对象outputs,之后会调用chain.prep_outputs(inputs, outputs)加输入和输出对象成对放入memory对象。 可观测:Chain类定义了callbacks: Callbacks成员变量,在chain执行过程中回调on_xxx()方法。 可组合:比如SequentialChain类定义了chains: List[Chain]成员变量,会遍历chains列表调用,将初始输入inputs和已调用的chain的outputs合并到一个字典,作为当前chain的inputs,具体可阅读SequentialChain._call()。

    作者回复: 非常棒的思考!!! 也总结的很精辟! Memory - 让对话拥有了状态 SequentialChain - 可以组合一系列的链 Callback - 提供了回调机制,可以生成Log

    2023-09-21归属地:广东
    3
  • Nikola
    上面的例子是不是也可以用思维链来实现?这样可以只调用一次模型。 思维链和langChain的chain组件的使用场景上有区别?

    作者回复: 当然可以通过思维链实现。不管黑猫白猫,能够激发LLM的思考,让LLM完成你的需求就是好猫。

    2023-10-03归属地:上海
    2
  • 悟尘
    from langchain import PromptTemplate, OpenAI, LLMChain 这行代码,为什么会有warning呢? 换成下面的import后,就没有告警了 from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.chains import LLMChain

    作者回复: 因为LangChain觉得以后它不想从根目录直接支持内部模块的导入了!

    2023-11-09归属地:北京
    2
  • 一面湖水
    为什么生成的文案不完整呢?看起来是被截断了。

    作者回复: 具体是哪个程序啊?有没有具体代码?有几个可能的原因: 1. 生成的文本超过了字符限制,被强制截断。可以尝试增加字符限制。max_tokens --- 这个是OpenAI API最大Token数限制的参数。 2. 或者是输出解析器配置错误,截断了内容。可以检查输出解析器的实现。 3. 可以在提示语里面要求模型说话简短一点点。

    2023-10-17归属地:四川
  • 在路上
    # -*- coding: utf-8 -*- import os # 设置网络代理 os.environ["http_proxy"] = "http://127.0.0.1:7890" os.environ["https_proxy"] = "http://127.0.0.1:7890" # 通过.env管理api_token from dotenv import load_dotenv load_dotenv() from langchain.llms import OpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate llm = OpenAI(temperature=.7, verbose=True) # 导入结构化输出解析器和ResponseSchema from langchain.output_parsers import StructuredOutputParser, ResponseSchema # 定义我们想要接收的响应模式 response_schemas = [ ResponseSchema(name="description", description="鲜花的描述文案"), ResponseSchema(name="reason", description="问什么要这样写这个文案") ] # 创建输出解析器 output_parser = StructuredOutputParser.from_response_schemas(response_schemas) print(output_parser.get_format_instructions()) # 创建原始提示模板 prompt_template = """ 您是一位专业的鲜花店文案撰写员。 对于售价为 {price} 元的 {flower} ,您能提供一个吸引人的简短描述吗? 输出格式: {format_instructions} """ prompt = PromptTemplate( template=prompt_template, input_variables=["flower", "price"], partial_variables={"format_instructions": output_parser.get_format_instructions()}, output_parser=output_parser) chain = LLMChain(llm=llm, prompt=prompt) # 数据准备 flowers = ["玫瑰", "百合", "康乃馨"] prices = ["50", "30", "20"] for flower, price in zip(flowers, prices): result = chain.run({ "flower": flower, "price": price }) print(result)

    作者回复: 🈵

    2023-09-21归属地:广东
  • 赤色闪电
    老师,您好!在文中构造顺序链的过程中,chains=[introduction_chain, review_chain, social_post_chain]中的social_post_chain是从哪里定义的?

    作者回复: 好的,同学。谢谢你提出的问题,目前代码中,经过了三轮LLM的构建,social_post_chain也已经构建出来了。最后的顺序链把它们串在一起输出。

    2023-09-21归属地:北京
    2
  • .。。。
    老师,您好!学习了langchain后,实现了咱们课程中讲的case,但是有个疑问请假下,通过langchain框架调用的模型,如何对正在运行的模型进行停止呢?

    作者回复: 当你得到了模型的返回结果之后,模型就自动停止了,这好像SaaS一样。模型给你提供的是云端服务。本地模型也是一样。随着你的调用结束,模型就不再一直倾听你了,因此,模型自己没有Memory!它不是一个一直侦听响应的进程,没有状态。这就是为什么,我们在应用程序设计的时候,要增加Memory这个内容,你可以把Memory视为记忆或者内存。 对于模型调用来说,它在乎的是你一次Pass给他多少个Token,以及你一分钟调用它多少次。太多Token不行,过多次也不行。

    2023-09-21归属地:陕西
  • 冬青
    今日加更,快冲快冲!!!
    2023-09-21归属地:北京
    2
  • 黎楚萱
    为什么我的result会把所有的prompt都拼接在一起?有谁遇到同样的情况吗 我的输出是这样的: introduction:\n你是一个植物学家,给定花的名称和类型,你需要为这种花写一个100字左右的介绍。\n花名:玫瑰\n颜色:red\n植物学家:这是关于上述花的介绍:\n玫瑰是一种美丽的花卉,通常被种植在花园或庭院中。它们通常有红色的花朵,通常有五到六片花瓣。玫瑰花的花瓣通常有五到六片,它们通常有红色的花粉,这使得它们成为一种非常受欢迎的花卉。玫瑰花通常需要充足的阳光和水分,以保持其健康和美丽。 review:\n你是一个鲜花评论家,给定一种花的介绍,你需要为这种花写一个200字左右的评论。\n鲜花介绍:\n\n你是一个植物学家,给定花的名称和类型,你需要为这种花写一个100字左右的介绍。\n花名:玫瑰\n颜色:red\n植物学家:这是关于上述花的介绍:\n玫瑰是一种美丽的花卉,通常被种植在花园或庭院中。它们通常有红色的花朵,通常有五到六片花瓣。玫瑰花的花瓣通常有五到六片,它们通常有红色的花粉,这使得它们成为一种非常受欢迎的花卉。玫瑰花通常需要充足的阳光和水分,以保持其健康和美丽。\n花评人对上述花的评论:\n玫瑰是一种非常美丽的花卉,它们通常有红色的花朵,通常有五到六片花瓣。玫瑰花的花瓣通常有五到六片,它们通常有红色的花粉,这使得它们成为一种非常受欢迎的花卉。玫瑰花通常需要充足的阳光和水分,以保持其健康和美丽。 ...
    2024-03-07归属地:泰国
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部