2026/4/2 4:04:50
网站建设
项目流程
首页网站备案号添加,扬州网站制作哪家好,十大erp系统,图片自动导入wordpress1. 概述
LangChain 的 Models 模块为开发者提供了与各类大型语言模型#xff08;LLM#xff09; 交互的标准化接口。LLM 能够像人类一样理解和生成文本#xff0c;其能力不仅限于文本生成#xff0c;还扩展至内容创作、语言翻译、摘要总结和问答等多种任务#xff0c;且通…1. 概述LangChain 的Models模块为开发者提供了与各类大型语言模型LLM交互的标准化接口。LLM 能够像人类一样理解和生成文本其能力不仅限于文本生成还扩展至内容创作、语言翻译、摘要总结和问答等多种任务且通常无需为每项任务进行专门训练。现代模型通常还支持以下高级功能工具调用调用外部工具如数据库查询、API 请求并在回应中使用其结果。结构化输出将模型的输出约束为预定义的格式。多模态处理处理和生成除文本外的图像、音频、视频等数据。推理模型执行多步推理以得出结论。本指南将详细阐述如何在 LangChain 中有效地初始化、配置和使用这些模型。2. 基础用法模型可通过两种核心方式使用与智能体配合在创建智能体时动态指定模型。独立使用直接调用模型执行文本生成、分类或信息抽取等任务无需完整的智能体框架。2.1 初始化模型使用init_chat_model函数是初始化独立模型的最简便方式。该函数支持从主流的聊天模型提供商进行初始化例如 OpenAI、Anthropic、Google Gemini、Azure、AWS Bedrock、HuggingFace 等。示例初始化 OpenAI GPT-4.1 模型# 1. 安装必要的包如果尚未安装# pip install -U langchain[openai]# 2. 设置环境变量推荐从安全位置加载密钥importos os.environ[OPENAI_API_KEY]sk-...# 替换为你的实际 API 密钥# 3. 导入并初始化模型fromlangchain.chat_modelsimportinit_chat_model modelinit_chat_model(gpt-4.1)# 指定模型名称init_chat_model也支持通过provider:model的格式直接指定提供商和模型例如openai:o1。更多参数配置细节可查阅其官方文档。2.2 支持的模型LangChain 支持所有主流的模型提供商。每个提供商都提供了多种具备不同能力的模型。完整的支持列表请参阅 LangChain 的Integrations页面。2.3 核心方法概览模型对象主要提供以下三种调用方法以适应不同的应用场景invoke最基础的调用方式接收输入并返回完整的输出消息。stream流式调用在模型生成输出的同时实时逐块返回结果。batch批处理调用将多个独立请求打包发送以提高处理效率和降低成本。除了聊天模型LangChain 还支持其他相关技术如嵌入模型和向量数据库。3. 模型参数详解聊天模型的行为可通过一系列参数进行配置。虽然不同模型和提供商支持的参数略有差异但以下是一些通用且重要的参数model指定要使用的具体模型标识符。api_key提供商认证所需的密钥通常通过环境变量设置。temperature控制输出随机性的浮点数通常 0.0 到 2.0。值越高输出越具有创造性和随机性值越低输出越确定和一致。max_tokens限制模型响应中生成的最大令牌token数量从而控制输出长度。timeout等待模型响应的最长时间秒超时则取消请求。max_retries当请求因网络超时、速率限制等原因失败时系统重试的最大次数。这些参数可以在初始化模型时通过关键字参数传入。示例初始化时配置参数modelinit_chat_model(claude-sonnet-4-5-20250929,# 指定 Anthropic 的 Claude Sonnet 模型# 传入模型参数temperature0.7,# 适度的创造性timeout30,# 30秒超时max_tokens1000,# 最多生成1000个token)注意每个聊天模型集成可能还有提供商特定的功能参数。请查阅相应提供商的集成文档以获取完整列表。4. 调用模型模型必须被调用才能生成输出。针对不同场景有三种主要的调用方式。4.1 普通调用Invokeinvoke()方法是调用模型最直接的方式可以接收单个消息或消息列表作为输入。消息列表用于表示对话历史每条消息都有一个role属性来标识对话中的发送者。示例使用不同的输入格式# 1. 传入单个字符串系统会自动包装为 HumanMessageresponsemodel.invoke(为什么鹦鹉的羽毛如此多彩)print(response)# 2. 传入字典格式的消息列表conversation_dict[{role:system,content:你是一个将英文翻译成中文的助手。},{role:user,content:Translate: I love programming.},{role:assistant,content:我喜欢编程。},{role:user,content:Translate: Artificial Intelligence.}]responsemodel.invoke(conversation_dict)print(response)# 输出: AIMessage(content人工智能。)# 3. 传入消息对象更规范推荐用于复杂场景fromlangchain.messagesimportHumanMessage,AIMessage,SystemMessage conversation_objects[SystemMessage(你是一个将英文翻译成中文的助手。),HumanMessage(Translate: I love programming.),AIMessage(我喜欢编程。),HumanMessage(Translate: Artificial Intelligence.)]responsemodel.invoke(conversation_objects)print(response)重要提示聊天模型如ChatOpenAI的invoke()返回的是AIMessage对象。请确保你使用的是聊天模型而非传统的文本补全 LLM。4.2 流式调用Stream大多数模型支持流式输出即在生成内容的同时逐步返回。这能显著提升长文本响应的用户体验。基础流式调用示例# 逐块打印输出forchunkinmodel.stream(为什么鹦鹉会模仿人说话):print(chunk.text,end,flushTrue)# 实时输出不换行与invoke的区别stream()返回一个迭代器产出多个AIMessageChunk对象每个包含输出文本的一部分。组装完整消息可以通过累加这些块来重建完整的消息。full_messageNoneforchunkinmodel.stream(天空是什么颜色的):full_messagechunkiffull_messageisNoneelsefull_messagechunk# 可以在此处实时查看构建过程print(full_message.text)# 最终full_message 等同于 invoke 返回的结果高级事件流astream_eventsastream_events()方法可以流式传输语义事件便于基于事件类型和元数据进行过滤并会在后台自动聚合完整消息。importasyncioasyncdeftrack_events():asyncforeventinmodel.astream_events(你好):ifevent[event]on_chat_model_start:print(f输入内容:{event[data][input]})elifevent[event]on_chat_model_stream:print(f生成词元:{event[data][chunk].text})elifevent[event]on_chat_model_end:print(f完整消息:{event[data][output].text})asyncio.run(track_events())“自动流式”模式在某些场景下例如在 LangGraph 智能体的流式应用中即使你调用了model.invoke()LangChain 也会自动切换到内部的流式模式以确保整个应用的流式输出能包含模型的中间生成过程。4.3 批量调用Batch对于大量独立的请求使用batch()方法进行批处理可以提升性能并降低成本。基础批处理questions[为什么鹦鹉的羽毛色彩鲜艳,飞机是如何飞行的,什么是量子计算]responsesmodel.batch(questions)forresponseinresponses:print(response.content)按完成顺序返回的批处理batch_as_completed()方法会在每个请求完成后立即返回结果而不是等待整批完成。结果可能以乱序到达。forresponseinmodel.batch_as_completed(questions):print(response)# 每个 response 包含输入索引等信息控制并发度处理大量输入时可以通过RunnableConfig控制最大并行调用数。model.batch(questions,config{max_concurrency:5}# 限制最多5个并发请求)5. 工具调用Tool Calling工具调用功能允许模型请求执行外部工具如查询数据库、搜索网络或运行代码并将结果整合到其响应中。工具由两部分组成模式定义包含工具名称、描述和参数定义通常为 JSON 模式。执行函数实际执行任务的函数或可调用对象。工具调用流程用户向模型提问。模型判断是否需要调用工具并生成工具调用请求。系统执行工具。将工具执行结果返回给模型。模型结合结果生成最终回答。5.1 基础使用首先需要将用户定义的工具“绑定”到模型上模型才能在后续调用中根据需要选择使用它们。fromlangchain.toolsimporttool# 1. 定义一个工具使用装饰器tooldefget_weather(location:str)-str:获取指定地点的天气情况。# 这里应该是真实的 API 调用此处为示例returnf{location}的天气是晴朗的22°C。# 2. 将工具绑定到模型model_with_toolsmodel.bind_tools([get_weather])# 3. 调用模型responsemodel_with_tools.invoke(波士顿天气怎么样)# 4. 查看模型是否请求调用工具ifresponse.tool_calls:fortool_callinresponse.tool_calls:print(f请求调用工具:{tool_call[name]})print(f传入参数:{tool_call[args]})注意某些模型提供商支持强制工具调用模式可以通过模型或调用参数启用。5.2 工具执行循环当模型返回工具调用请求时你需要手动执行工具并将结果传回模型形成一个完整的对话循环。LangChain 的智能体抽象层会自动处理这个流程但在独立使用模型时可以按以下方式操作# 绑定工具model_with_toolsmodel.bind_tools([get_weather])# 初始化对话历史messages[{role:user,content:波士顿和纽约的天气分别怎么样}]# 第一步模型生成请求其中可能包含工具调用ai_msgmodel_with_tools.invoke(messages)messages.append(ai_msg)# 第二步执行所有被请求的工具并收集结果fortool_callinai_msg.tool_calls:# 根据 tool_call 中的信息执行对应工具tool_resultget_weather.invoke(tool_call[args])# 将结果作为 ToolMessage 加入历史messages.append(tool_result)# 第三步将工具执行结果传回模型生成最终响应final_responsemodel_with_tools.invoke(messages)print(final_response.text)每个ToolMessage都包含一个tool_call_id用于与原始的调用请求匹配帮助模型关联结果。通过掌握上述内容你应该能够在 LangChain 框架中有效地集成和利用各类大型语言模型构建功能丰富的 AI 应用。对于更高级的主题如结构化输出、多模态处理和特定提供商的细节建议深入查阅 LangChain 官方文档和相应的集成页面。