2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

深入了解 langchain - 概念解惑

发布日期:2024-06-05 08:31:05 浏览次数: 3440
作者:知识派

微信搜一搜,关注“知识派”

深入了解 langchain - 概念解惑

本篇我们介绍 langchain 的 model 相关的template/prompt 内容。

相关概念

任何语言模型应用程序的核心元素都是模型。LangChain 为我们提供了与任何语言模型交互的构建链。我们在初次使用 LangChain 的时候会看到llm 以及 chatLLM,很多时候我们根本分不清。本篇的所有内容都是为了让模型的使用变得更容易以及在什么情况下使用那种类型的 LLM 。所以下面是本篇的相关内容:

  • • 认识 LLM

  • • 构建模型输入的程序

  • • 处理模型输出的程序

LLM 的类型

LLM

LangChain 集成的模型主要有两种类型:LLM 和 chatLLM。它们由它们的输入和输出类定义。

LangChain 中的 LLM 指的是纯文本补全模型。它们包装的 API 将字符串prompt作为输入并输出字符串完成。OpenAI 的 GPT-3是纯文本补全模型。

ChatLLM

ChatLLM 也就是聊天模型,通常由LLM支持,但专门针对对话进行了调整。更重要的是,他们提供的 API 使用与 LLM 模型不同的接口。他们不是使用单个字符串,而是将聊天消息列表作为输入,并返回 AI 消息作为输出。GPT-4AnthropicClaude-2 都是作为ChatLLM实现的。

这两种 API 类型具有截然不同的输入和输出架构。这意味着与他们互动的最佳方式可能会完全不同。尽管 LangChain 可以互换使用它们,但这并不意味着我们开发者就必须这样做。特别是,LLM 与 ChatModel 的提示策略可能会有很大不同。这意味着我们需要确保使用的prompt是针对正在使用的模型类型设计的。

另外,并非所有 LLM 都相同。不同的模型有不同的最适合他们的提示策略。例如,Anthropic 的模型最适合使用 XML,而 OpenAI的模型最适合使用 JSON

这意味着我们用于一种模型的提示可能不会转移到其他模型。LangChain 提供了很多默认提示,但并不能保证这些提示能够很好地配合您使用的模型。从过完经历看,大多数提示在 OpenAI 上都能很好地工作,但没有在其他模型上进行过大量测试。

Message

ChatLLM 将消息列表作为输入并返回消息。有几种不同类型的消息。所有消息都有 role和 content属性。

role描述了LLM在传达的信息。LangChain针对不同的角色有不同的消息类别。该content属性描述了消息的内容。Message 可以是不同的类型,比如:

  • • 字符串(大多数 model 都是这样)

  • • 字典列表(用于多模式输入,其中字典包含有关该输入类型和该输入参数的信息)

此外,消息还有一个additional_kwargs属性。这是可以传递有关消息的附加信息的地方。这主要用于特定于提供者而非通用的输入参数。比如 OpenAI 的function_call

Hummessage

这代表来自用户的消息。通常仅由内容组成

AIMessage

这代表来自模型的消息。这可能包含additional_kwargs在其中 - 例如如果使用 OpenAI 函数调用functional_call

SystemMessage

这代表一条系统消息。只有部分类型的 LLM 支持此功能。这告诉模型如何表现。这通常仅包含内容。也成为角色设定.

FunctionMessage

这表示函数调用的结果。除了role和之外content,此消息还有一个name参数,该参数传达为产生此结果而调用的函数的名称。

ToolMessage

这表示工具调用的结果。这与 FunctionMessage 不同,以便匹配 OpenAI functiontool消息类型。除了role和之外content,此消息还有一个tool_call_id参数,该参数将调用的 id 传递给被调用以产生此结果的工具。

Prompt

LLM 的输入通常称为Prompt。通常应用程序中的用户输入并不是模型的直接输入。相反,它们的输入会以某种方式进行转换,以生成进入模型的字符串或消息列表。接受用户输入并将其转换为最终字符串或消息的对象称为“Prompt template 提示模板”。LangChain提供了多种抽象,使操作Prompt变得更加容易。

PromptValue

ChatModel 和 LLM 采用不同的输入类型。PromptValue 是一个设计为可在两者之间互操作的类。它公开了一个要转换为字符串的方法(与 LLM 一起使用)和另一个要转换为消息列表的方法(与 ChatModel 一起使用)。

PromptTemplate

这由模板字符串组成。然后使用用户输入格式化该字符串以生成最终字符串。

MessagePromptTemplate

它由一条模板消息(表示特定角色)和一个 PromptTemplate 组成。然后,此 PromptTemplate 将根据用户输入进行格式化,以生成成为此消息的最终字符串content。还有一些:

  • • HumanMessage 的 MessagePromptTemplate

  • • AIMessage 的 MessagePromptTemplate

  • • SystemMessage 的 MessagePromptTemplate

Messagesplaceholder

通常提示的输入可以是消息列表。这是我们需要使用 MessagesPlaceholder 的时候。这些对象由variable_name参数参数化。与该值相同的输入variable_name就是消息列表。

ChatPromptTemplate

这由 MessagePromptTemplates 或 MessagePlaceholders 的列表组成。然后根据用户输入对这些内容进行格式化以生成最终的消息列表。

输出 params

模型的输出是字符串或消息。通常字符串或消息包含以供下游使用的特定格式格式化的信息(例如,逗号分隔列表或 JSON blob)。输出解析器负责接收模型的输出并将其转换为更可用的形式。这些通常适用于content输出消息的值,但有时也适用于additional_kwargs字段中的值。

StrOutputParser这是一个简单的输出解析器,仅将语言模型(LLM 或 ChatModel)的输出转换为字符串。如果模型是 LLM(因此输出一个字符串),它只会传递该字符串。如果输出是 ChatModel(因此输出消息),则它会传递.content消息的属性。

OpenAI FuncallCall

有一些解析器专门用于处理 OpenAI 函数调用。function_call他们获取arguments参数的输出additional_kwargs并使用这些参数.

agents是使用语言模型来确定要采取哪些步骤的系统。因此需要将语言模型的输出解析为某种可以表示要采取的操作(如果有)的模式。AgentOutputParsers 负责获取原始 LLM 或 ChatModel 输出并将其转换为该模式。这些输出解析器内部的逻辑可能会有所不同,具体取决于所使用的模型和提示策略。

总结

1、上面介绍了 LLM 的两种类型(LLM,ChatLLm)他们的区别是 LLM 只是单轮对话,而 ChatLLM 是续写模式,也就是通常的多伦对话。这种模型可以简单的记住历史对话的内容。不过现在的相关的 LLM 厂商已经淡化单轮还是续写,所以我们以后可以使用 ChatLLM 就可以了。

2、我们跟 LLM 去对话,就需要 prompt, langchain 提供了几个函数可以帮助我们定义 prompt 的格式。 HummessageSystemmessage,AIMessage,FunctionMessage,ToolMessage 这些类型 langchain 都帮我们形成对应的 role 字段的值填写在 LLM 的交互过程中。

3、有了这些函数,最后就是 prompt,prompt 是一个工程化的东西,不同的场景需要设定不同的 prompt, 比如 RAG 场景,ReACT agent 的场景. prompt 模板里面可以设定不同的内容,一般都是通过占位符,langchain 都帮我们提供了相关的函数和方法自动替换。这样我们只需要关注 prompt 的主题内容即可。相关FunctionMessage,ToolMessage的占位符langchain 会帮我们执行替换,并形成最后的 prompt 内容提交给 LLM。


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅