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

FDE知识库

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


收藏

LangChain 中的 Chat Model(聊天模型)

发布日期:2024-12-01 08:07:31 浏览次数: 2858
作者:PyTorch研习社

微信搜一搜,关注“PyTorch研习社”


大型语言模型 (LLM) 是一种先进的机器学习模型,在各种语言相关任务(如文本生成、翻译、摘要、问答等)中表现出色,无需针对每种场景进行特定任务的调整。


现代 LLM 通常通过聊天模型界面访问,该界面将消息列表作为输入并返回消息作为输出。


最新一代聊天模型提供了更多的功能:

  • 工具调用:许多流行的聊天模型都提供本机工具调用 API。此 API 允许开发人员构建丰富的应用程序,使 AI 能够与外部服务、API 和数据库交互。工具调用还可用于从非结构化数据中提取结构化信息并执行各种其他任务。

  • 结构化输出:一种使聊天模型以结构化格式(例如与给定架构匹配的 JSON)响应的技术。此功能对于信息提取任务非常有用。

  • 多模态性:LLM 不仅限于处理文本。它们还可用于处理其他类型的数据,例如图像、音频和视频。这称为多模态。目前,只有部分 LLM 支持多模态输入,几乎没有支持多模态输出。




LangChain 中聊天模型的特点 




LangChain 提供一致的接口来处理来自不同提供商的聊天模型,同时提供用于监控、调试和优化使用 LLM 的应用程序性能的附加功能。

  • 与许多聊天模型提供商集成(例如,Anthropic、OpenAI、Ollama、Microsoft Azure、Google Vertex、Amazon Bedrock、Hugging Face、Cohere、Groq)。具体可以去官网看一下支持哪些聊天模型:

    https://python.langchain.com/docs/integrations/chat/

  • 使用 LangChain 的消息格式或 OpenAI 格式。

  • 标准工具调用 API:用于将工具绑定到模型、访问模型发出的工具调用请求以及将工具结果发送回模型的标准接口。

  • 通过 with_structured_output 方法构造输出的标准 API(/docs/concepts/structured_outputs)。

  • 提供对异步编程、高效批处理和丰富的流式 API 的支持。

  • 与 LangSmith 集成,用于监控和调试基于 LLM 的生产级应用程序。

  • 其他功能,如标准化 token 使用、速率限制、缓存等。


顺便提一嘴:LangSmith 是一个一体化的开发者平台,适用于 LLM 支持的应用程序生命周期的每个步骤。我们可以用它来调试、协作、测试和监控我们的 LLM 应用程序。不过这不是必须要用的。



集成




LangChain 有许多聊天模型集成,我们可以自由选择使用来自不同提供商的各种模型。


这些集成有两种类型:

  • 官方模型:这些模型由 LangChain 和/或模型提供商正式支持。你可以在 langchain-<provider> 包中找到这些模型。比如 langchain-openai。

  • 社区模型:有些模型主要由社区贡献和支持。你可以在 langchain-community 包中找到这些模型。


LangChain 聊天模型的命名约定是在其类名前加上“Chat”(例如 ChatOllama、ChatAnthropic、ChatOpenAI 等)。


可以去这里看受支持的模型列表:

https://python.langchain.com/docs/integrations/chat/


请注意:

名称中不包含前缀“Chat”或名称中不包含“LLM”作为后缀的模型通常指的是不遵循聊天模型接口的旧模型,而是使用以字符串作为输入并返回字符串作为输出的接口。



统一接口




LangChain 聊天模型实现了 BaseChatModel 接口。由于 BaseChatModel 还实现了 Runnable 接口,因此聊天模型支持标准流式传输接口、异步编程、优化批处理等。


关键方法


聊天模型的许多关键方法都将消息作为输入进行操作,并将消息作为输出返回。聊天模型的关键方法包括:

  • invoke:与聊天模型交互的主要方法。它将消息列表作为输入并返回消息列表作为输出。

  • stream:一种允许我们在聊天模型生成时以流式传输的方式返回其输出的方法。

  • batch:一种允许将多个对聊天模型的请求批量处理以提高处理效率的方法。

  • bind_tools:一种允许将工具绑定到聊天模型以在模型的执行上下文中使用的方法。

  • with_structured_output:用于原生支持结构化输出的模型的 invoke 方法的包装器。


其他重要方法可以在 BaseChatModel API 官方文档中找到:

https://python.langchain.com/api_reference/core/language_models/langchain_core.language_models.chat_models.BaseChatModel.html


输入和输出


现代LLM通常通过聊天模型接口访问,该接口将消息作为输入并返回消息作为输出。消息通常与角色(例如“system”、“human”、“assistant”)以及一个或多个包含文本或潜在多模式数据(例如图像、音频、视频)的内容块相关联。


LangChain 支持两种消息格式与聊天模型交互:

  • LangChain 消息格式:LangChain 自己的消息格式,在 LangChain 内部使用。默认使

  • OpenAI 的消息格式:OpenAI 的消息格式。


聊天模型提供了一组标准参数,可用于配置模型。这些参数通常用于控制模型的行为,例如输出的 temperature、响应中的最大 token 数以及等待响应的最大时间。

  • model:想要使用的特定 AI 模型的名称或标识符(例如“gpt-3.5-turbo”或“gpt-4”)。

  • temperature:控制模型输出的随机性。较高的值(例如 1.0)可使响应更具创造性,而较低的值(例如 0.1)可使响应更具确定性和针对性。

  • max_tokens:限制响应中的 token 总数(单词和标点符号)。用于控制输出的长度。

  • stop:指定停止序列,指示模型应何时停止生成标记。例如,你可以使用特定字符串来表示响应的结束。

  • max_retries:如果由于网络超时或速率限制等问题导致请求失败,系统重新发送请求的最大尝试次数。

  • api_key:OpenAI、阿里等模型提供商的接口密钥。

  • base_url:发送请求的 API 端点的 URL。

  • rate_limiter:用于分隔请求以避免超出速率限制。这是可选的。


需要注意的一些重要事项:

  • 标准参数仅适用于公开具有预期功能的参数的模型提供程序。例如,某些提供程序不公开 max_tokens 的配置,因此这些提供程序不支持 max_tokens。

  • 标准参数目前仅在具有自己的集成包(例如 langchain-openai、langchain-anthropic 等)的集成中强制执行,而不会在 langchain-community 中的模型中强制执行。

  • ChatModel 还接受特定于该集成的其他参数。要查找 ChatModel 支持的所有参数,请转到该模型的 API 参考。


在以后的文章中,我们经常会交替使用术语“LLM”和“聊天模型”。这是因为大多数现代 LLM 都是通过聊天模型接口向用户公开的。


但是,LangChain 还实现了较旧的 LLM,这些 LLM 不遵循聊天模型接口,而是使用以字符串为输入并返回字符串作为输出的接口。这些模型通常不以“Chat”前缀命名(例如,Ollama、Anthropic、OpenAI 等)。这些模型实现了 BaseLLM 接口,可能以“LLM”后缀命名(例如,OllamaLLM、AnthropicLLM、OpenAILLM 等)。一般来说,我们不应使用这些模型。




上下文窗口




聊天模型的上下文窗口(Context Window)是指模型一次可以处理的输入序列的最大大小。虽然现代 LLM 的上下文窗口非常大,但它们仍然存在开发人员在使用聊天模型时必须牢记的限制。


如果输入超出上下文窗口,模型可能无法处理整个输入并可能引发错误。在对话应用程序中,这一点尤其重要,因为上下文窗口决定了模型在整个对话过程中可以“记住”多少信息。开发人员通常需要在上下文窗口内管理输入,以保持连贯的对话而不超出限制。


输入的大小以 token 为单位,token 是模型使用的处理单位。



Rate Limiter




许多聊天模型提供商对给定时间段内可以发出的请求数量施加了限制。


如果达到速率限制,我们通常会收到提供商发出的速率限制错误响应,并且需要等待一段时间才能发出更多请求。


有几种处理速率限制的选项:

  • 尝试通过间隔请求来避免达到速率限制:聊天模型接受可以在初始化期间提供的 rate_limiter 参数。此参数用于控制向模型提供商发出请求的速率。在对模型进行基准测试以评估其性能时,将请求间隔开到给定模型是一种特别有用的策略。有关如何使用此功能的更多信息,请参阅如何处理速率限制。

  • 尝试从速率限制错误中恢复:如果你收到速率限制错误,你可以等待一段时间再重试请求。每次后续速率限制错误都可以增加等待的时间。聊天模型有一个 max_retries 参数,可用于控制重试次数。

  • 回退到另一个聊天模型:如果一个聊天模型达到了速率限制,则可以切换到另一个不受速率限制的聊天模型。



缓存




聊天模型 API 可能很慢,因此一个自然的问题是是否要缓存以前对话的结果。从理论上讲,缓存可以通过减少对模型提供者的请求数量来帮助提高性能。实际上,缓存聊天模型响应是一个复杂的问题,应谨慎处理。


原因是,如果依赖于将精确的输入缓存到模型中,则在对话中的第一次或第二次交互后不太可能获得缓存命中。例如,你认为多个对话以完全相同的消息开始的可能性有多大?完全相同的三条消息呢?


另一种方法是使用语义缓存,你可以根据输入的含义而不是确切的输入本身来缓存响应。这在某些情况下可能有效,但在其他情况下则无效。


语义缓存在应用程序的关键路径上引入了对另一个模型的依赖(例如,语义缓存可能依赖于嵌入模型将文本转换为矢量表示),并且不能保证准确捕获输入的含义。


但是,在某些情况下,缓存聊天模型响应可能会有所帮助。例如,如果你有一个用于回答常见问题的聊天模型,则缓存响应可以帮助减少模型提供者的负载并缩短响应时间。



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

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

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

联系我们

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

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

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

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

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

一、 定义

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

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

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

二、 账号注册与登录

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

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

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

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

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

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

三、 服务内容与规范

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

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

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

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

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

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

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

四、 知识产权声明

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

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

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

五、 个人信息保护

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

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

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

六、 免责声明

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

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

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

七、 违约责任

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

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

八、 法律适用与争议解决

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

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

九、 其他

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

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

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


已查阅