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

03|模型I/O:输入提示、调用模型、解析输出

你好,我是黄佳,欢迎来到 LangChain 实战课!
从这节课开始,我们将对 LangChain 中的六大核心组件一一进行详细的剖析。
模型,位于 LangChain 框架的最底层,它是基于语言模型构建的应用的核心元素,因为所谓 LangChain 应用开发,就是以 LangChain 作为框架,通过 API 调用大模型来解决具体问题的过程。
可以说,整个 LangChain 框架的逻辑都是由 LLM 这个发动机来驱动的。没有模型,LangChain 这个框架也就失去了它存在的意义。那么这节课我们就详细讲讲模型,最后你会收获一个能够自动生成鲜花文案的应用程序。

Model I/O

我们可以把对模型的使用过程拆解成三块,分别是输入提示(对应图中的 Format)、调用模型(对应图中的 Predict)和输出解析(对应图中的 Parse)。这三块形成了一个整体,因此在 LangChain 中这个过程被统称为 Model I/O(Input/Output)。
Model I/O:从输入到输出
在模型 I/O 的每个环节,LangChain 都为咱们提供了模板和工具,快捷地形成调用各种语言模型的接口。
提示模板:使用模型的第一个环节是把提示信息输入到模型中,你可以创建 LangChain 模板,根据实际需求动态选择不同的输入,针对特定的任务和应用调整输入。
语言模型:LangChain 允许你通过通用接口来调用语言模型。这意味着无论你要使用的是哪种语言模型,都可以通过同一种方式进行调用,这样就提高了灵活性和便利性。
输出解析:LangChain 还提供了从模型输出中提取信息的功能。通过输出解析器,你可以精确地从模型的输出中获取需要的信息,而不需要处理冗余或不相关的数据,更重要的是还可以把大模型给回的非结构化文本,转换成程序可以处理的结构化数据。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

LangChain框架模型I/O操作方法及原理详解 本文深入介绍了LangChain框架中模型的使用方法和原理。首先介绍了模型I/O的三个环节:输入提示、调用模型和输出解析。强调LangChain提供了模板和工具来快速形成调用各种语言模型的接口。详细介绍了如何创建LangChain提示模板,以及如何使用模板生成提示并输入到大语言模型中。展示了LangChain支持的三大类模型,并以OpenAI模型为例展示了如何调用模型生成文案的过程。文章突出了LangChain框架的灵活性和便利性,以及如何利用LangChain提供的模板和工具快速构建和使用提示模板。通过示例展示了如何使用LangChain调用不同类型的语言模型,并展示了模型输出的结果。另外,介绍了LangChain提供的解析模型输出的功能,使开发者能够更容易地从模型输出中获取结构化的信息,从而加快基于语言模型进行应用开发的效率。总体而言,本文对LangChain框架中模型的使用进行了详细的介绍,适合读者快速了解LangChain框架中模型I/O的基本原理和操作方法。 在下节课中,我们将继续深入探索LangChain中的提示模板,看一看如何通过高质量的提示工程让模型创造出更为精准、更高质量的输出。文章还提出了思考题,引发读者对LangChain调用大语言模型来做应用开发的优势进行思考。同时,延伸阅读部分提供了吴恩达老师的相关课程和LangChain官方文档的资料,为读者提供了进一步学习的机会。

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

全部留言(22)

  • 最新
  • 精选
  • 阿斯蒂芬
    prompt中的{format_instructions} 实际填充的是按照 response_schemas 格式构建的一个预期大模型响应的“格式”,然后通过 StructuredOutputParser 来进行解析。 在本例中,打印完整的prompt,会看到末尾有含有 "description" 和 "reason" 属性的json,以告知大模型按json格式响应。 OutputParser 的设计将prompt 的预期响应和大模型实际响应部分关联起来了,方便开发者使用。 不过大模型并没有对此打包票,反而是尽力而为。在我run自己代码的时候,就出现过返回的response“看起来像是”json,但实际上缺了一个逗号,导致格式解析失败。而且这是偶现的。 因此即使使用了解析器,应该还是要在健壮性上做一些错误处理比较好。

    作者回复: 嗯,同学的回答太棒了!!!掌握了LangChain提示模板的精髓。 而且,也发现了LLM应用开发的最主要问题,就是精确性方面,还要更上一层楼。 同学,加油,期待你更多LangChain实战过程中的心得分享。

    2023-09-15归属地:广东
    9
  • 海滨
    问题 4,还是有可能的,输出解析器本质上是在 prompt 中插入了需要返回的格式说明,LLM完全有可能忽略这部分的要求。所以还是需要在业务层面进行判断再重试

    作者回复: 对的,对于逻辑思辨能力不够强的模型来说,它是有可能忽略你的指示的。但未来的大模型会越来越厉害,厉害到我们可以很信赖。GPT-4已经不错,更期待未来的GPT-5.

    2023-09-11归属地:浙江
    7
  • Archer
    老师我有个需求,例如我想利用chatgpt帮我写特定的Java bean xml文件,但是需要输入很多要求,能否自定义说我要a样式的xml,他就可以内部根据我预定的需求,帮我写出xml?

    作者回复: 完全可以通过清晰的提示工程来实现。 非常希望你学习完这个课程之后,实现这个功能,并分享你的实验结果。 下面是我和ChatGPT互动的一些内容,虽然我对Java Bean XML的结构不是完全理解,我也把它贴在这里供你参考。 这里面涉及到两个方面: 定义样式:您首先需要为您的XML样式定义一套标准或模板。例如,您可以预先定义a样式、b样式、c样式等。 与ChatGPT的交互:当与ChatGPT交互时,您可以告诉它您想要哪种样式的XML,并提供必要的参数或数据。 假设我们已经为Java Bean XML定义了一个简单的“a样式”。此样式可能如下: xml Copy code <bean id="{beanId}" class="{beanClass}"> <property name="{propertyName}" value="{propertyValue}" /> </bean> 现在,当您与ChatGPT交互并告诉它您想要“a样式”的XML,并为它提供beanId、beanClass、propertyName和propertyValue等参数,ChatGPT应该能为您生成相应的XML。 例如: 您:我想要a样式的Java Bean XML,参数如下:beanId=myBean, beanClass=com.example.MyClass, propertyName=username, propertyValue=John。 ChatGPT:好的,基于您提供的参数,a样式的XML如下: xml Copy code <bean id="myBean" class="com.example.MyClass"> <property name="username" value="John" /> </bean> 为了实现这一过程,您可以使用ChatGPT的API进行编程,并将其与您的系统或工具集成。每当您需要生成XML时,只需传递相应的参数并从ChatGPT获取结果即可。

    2023-10-02归属地:广东
    3
  • 里咯破
    报错了——KeyError: {'format_instructions'},是不是因为LangChain更新后,不支持这个参数了?

    作者回复: 我已经把LangChain和OpenAI都更新到最新版本,重新运行无误。 openai 1.2.4 langchain 0.0.335 同学检查一下代码。

    2023-11-14归属地:广东
    2
    2
  • 抽象派
    更新库后,AttributeError: type object 'PromptTemplate' has no attribute 'from_template'

    作者回复: 同学是不是停留在 原来的0.039版。需要pip upgrade一下。这个有人Log过。请看 https://github.com/langchain-ai/langchain/issues/11102 我发现如果用pip install langchain[all]来按照LangChain,就会装成一个旧的0.39版。建议大家不用使用这个方式,而是只使用pip install langchain。 如果pip install langchain[all]来安装许多包,一定要给langchain升级:pip install langchain[all],系统会卸载错误的0.039包。 Attempting uninstall: langchain Found existing installation: langchain 0.0.39 Uninstalling langchain-0.0.39: Successfully uninstalled langchain-0.0.39 Successfully installed aiohttp-3.8.5 aiosignal-1.3.1 anyio-3.7.1 async-timeout-4.0.3 attrs-23.1.0 dataclasses-json-0.6.1 frozenlist-1.4.0 jsonpatch-1.33 jsonpointer-2.4 langchain-0.0.304 langsmith-0.0.41 marshmallow-3.20.1 multidict-6.0.4 mypy-extensions-1.0.0 numexpr-2.8.7 sniffio-1.3.0 tenacity-8.2.3 typing-inspect-0.9.0 yarl-1.9.2

    2023-09-27归属地:广东
    2
    2
  • 不吃苦瓜
    老师,我想问一下,我每次让ai按照一定格式输出时,他总是会加一点其他内容这个要这么解决(就比如输出内容外面老是框一个'''JSON,多的这部分也不是固定的,有时候是几个符号框,有时候是一小段文字),每次这样解析器就解析不了了,请问这种情况怎么样解决

    作者回复: 最新的模型gpt-4-1106-preview和LangChain最新版的输出解析器也许能够帮助我们解决这些问题。

    2023-12-06归属地:福建
    2
    1
  • HdUIprince
    老师您好,第一个例子中 flower_name 为什么要传入一个列表? input = prompt.format(flower_name=["玫瑰"], price='50') 打印input结果是这样的: "您是一位专业的鲜花店文案撰写员。\n\n对于售价为 50 元的 ['玫瑰'] ,您能提供一个吸引人的简短描述吗?\n" 而不是文中的: “您是一位专业的鲜花店文案撰写员。对于售价为 50 元的玫瑰,您能提供一个吸引人的简短描述吗?”

    作者回复: 谢谢同学的提醒,的确,此处只传入一个变量,列表没有啥意义。多个变量可以考虑列表,如 input = prompt.format(flower_name=["玫瑰","百合"], price=['50','30'])

    2023-09-30归属地:湖北
    1
  • shatu
    1.LangChain的优势在于丰富的集成框架,但是由于复杂的封装和prompt传递的不确定性业内也存在争议 2.通过response_schemas构建,通过get_format_instructions定义的prompt传递 3.partial_variables定义了一个“Load a prompt template from a template”的prompt,包括Args和Returns两部分 4.完全可能,Langchain的传递很多以来多个prompt之间的传递,一旦出现与预期不同的结果需要逐个排查所有经过传递的prompt而这些prompt的输出默认是不打印的,这也是langchain的一个大争议点

    作者回复: 的确如此,LangChain虽然算得上是目前影响力最大的LLM开发框架,但是他的很多问题一直也令人诟病。 我的使用感受: 1. 内部机制过于复杂, 2. 而且调用逻辑不够清晰。如果你复杂,你越要把自己的使用方式说的清晰。 3. 文档很乱套。 要把复杂的机制抽象的简明一些,要给大家讲清楚。 我希望我的这个课程能够把它的各个组件的机理说的清晰简洁一点。

    2023-09-26归属地:北京
    1
  • 进击的鱼儿
    老师能推荐一下画图工具吗?想画您文章中的图,发现有些例如圆角菱形用PPT不是很好画出来。

    作者回复: 哦,图的话这里的很多是LangChain官方文档上直接拿来用的。我自己画图的话也就是用PPT,简单直观就好。

    2023-09-24归属地:浙江
    1
  • Realm
    HF的接口好像升级了,在运行HF的例子报了如下错误: ``` /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/huggingface_hub/utils/_deprecation.py:127: FutureWarning: '__init__' (from 'huggingface_hub.inference_api') is deprecated and will be removed from version '0.19.0'. `InferenceApi` client is deprecated in favor of the more feature-complete `InferenceClient`. Check out this guide to learn how to convert your script to use it: https://huggingface.co/docs/huggingface_hub/guides/inference#legacy-inferenceapi-client. warnings.warn(warning_message, FutureWarning) You are a flower shop assitiant For 50 of [''] ``` 老师辛苦看看😄

    作者回复: 嗯,同学这是LangChain的内部的代码应该做的升级。因为HuggingFace在LangChain内部被调用。 这是一个Warning。可以暂时用 import warnings warnings.filterwarnings('ignore', category=FutureWarning) 来忽略掉。

    2023-09-14归属地:浙江
    4
    1
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部