大数跨境
0
0

LangChain1.0:使用大模型

LangChain1.0:使用大模型 PyTorch研习社
2025-11-29
1
导读:大型语言模型(LLM)是一种强大的 AI 工具,能够像人类一样理解与生成文本。

大型语言模型(LLM)是一种强大的 AI 工具,能够像人类一样理解与生成文本。它们具有高度通用性,可以用于写作、翻译、摘要和问答等任务,而无需针对每个任务进行额外的专业训练。

除了文本生成之外,许多模型还支持:

  • 工具调用(Tool Calling) —— 能调用外部工具(例如数据库查询或 API 调用),并将结果用于生成回答。

  • 结构化输出(Structured Output) —— 限制模型输出遵循预定义格式。

  • 多模态能力(Multimodality) —— 处理并返回非文本数据,例如图像、音频和视频。

  • 推理能力(Reasoning) —— 执行多步骤推理以获得结论。

模型是 Agent 的推理引擎,它驱动 Agent 的决策流程,包括决定调用哪些工具、如何解释结果,以及何时输出最终答案。

你选择的模型的质量与能力,会直接影响 Agent 的基础可靠性与性能表现。不同模型擅长不同类型的任务——有些擅长遵循复杂指令,有些擅长结构化推理,还有一些支持更大的上下文窗口以处理更多信息。

我习惯于以与 OpenAI API 兼容的形式初始化模型:

这里的几个参数为:

  • model:要使用的模型名称,比如 qwen3-max

  • temperature:控制模型输出多样性,取值范围为0-1,数值越高,模型输出越多样

  • base_url:模型提供商的 API 地址

  • api_key:访问密钥,本地部署的模型不需要这个参数

使用方式

模型可以通过两种方式使用:

  1. 独立调用 —— 直接调用模型(不通过 Agent 循环)用于文本生成、分类或信息抽取等任务,而无需 Agent 框架。

  2. 与 Agent 配合 —— 在创建 Agent 时动态指定模型。

独立调用模型非常简单,传入一个字符串即可:

我们已经知道如何将模型传入 create_agent 方法在创建Agent 时指定模型。但是我们可以在 Agent 运行时根据当前状态与上下文动态进行模型选择。这使得复杂的路由逻辑与成本优化成为可能。

若要使用动态模型,可以通过 @wrap_model_call 装饰器创建中间件,从而在请求过程中动态修改模型:

@wrap_model_call 是 LangChain 中用于定义模型调用中间件(middleware) 的装饰器,它让你能在 LLM 实际调用前后拦截并修改请求(如动态切换模型、记录日志、限流等),通过接收 ModelRequest 和 handler 参数实现灵活控制。

dynamic_model_selection 函数接收两个参数:

  1. request: ModelRequest

    ModelRequest 是一个封装了当前 LLM 调用上下文的对象。它包含了:

    request.override(model=model):创建一个新请求,把模型换成 basic_model 或 advanced_model。

    • 当前要发送给 LLM 的消息(messages)

    • 当前使用的模型(model)

    • 其他调用参数(如 temperature, max_tokens 等)

    • Agent 的当前状态(state) 

    • handler

      handler 是一个可调用对象(callable),代表 “继续执行原计划的模型调用”。handler(request.override(model=model)):用这个新请求去调用 LLM,并返回结果(ModelResponse)。

    工具调用(Tool Calling)

    模型可以请求调用工具,以执行例如从数据库获取数据、进行网页搜索或运行代码等任务。工具由以下两部分组成:

    • 工具的模式定义(schema),包括工具名称、描述、参数定义(通常是 JSON Schema)

    • 执行该工具的函数或协程(coroutine)

    函数调用(function calling)与工具调用(tool calling)视为等价概念,可以互换使用。

    我们可以使用 bind_tools 将工具绑定到模型。在之后的调用过程中,模型可以在需要时自行选择调用任何已绑定的工具。

    值得注意的是,模型仅提出要执行某个工具,模型本身并不执行工具,工具是由应用程序执行的。

    结构化输出(Structured Output)

    模型可以以指定模式(schema)的格式返回结果。这对于确保输出能够被轻松解析和用于后续处理非常有用。LangChain 支持多种 schema 类型(Pydantic、TypedDict 与 JSON)与多种方式来强制或引导模型生成结构化输出。

    Pydantic 模型不仅支持字段描述和嵌套结构,还具备自动数据校验能力;相比之下,TypedDict 与 JSON Schema 则需要手动进行数据验证。所以我以 Pydantic 模式为例说明。

    这里我多输入了“以 JSON 格式”,那是因为以 OpenAI API 兼容形式调用阿里云提供的千问模型时,如果不在提示词中写明 JSON,那么就会产生 400 错误。

    【声明】内容源于网络
    0
    0
    PyTorch研习社
    打破知识壁垒,做一名知识的传播者
    内容 811
    粉丝 0
    PyTorch研习社 打破知识壁垒,做一名知识的传播者
    总阅读37
    粉丝0
    内容811