03|模型I/O:输入提示、调用模型、解析输出
Model I/O
- 深入了解
- 翻译
- 解释
- 总结
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归属地:广东22 - 抽象派更新库后,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归属地:广东22 - 不吃苦瓜老师,我想问一下,我每次让ai按照一定格式输出时,他总是会加一点其他内容这个要这么解决(就比如输出内容外面老是框一个'''JSON,多的这部分也不是固定的,有时候是几个符号框,有时候是一小段文字),每次这样解析器就解析不了了,请问这种情况怎么样解决
作者回复: 最新的模型gpt-4-1106-preview和LangChain最新版的输出解析器也许能够帮助我们解决这些问题。
2023-12-06归属地:福建21 - 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 - shatu1.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 - RealmHF的接口好像升级了,在运行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归属地:浙江41