03 一分钟搞明白langchain如何运行LLM

在这里插入图片描述

📥 运行入口与初始化

LangChain 没有单一的绝对入口,通过导入相应的模块来运行。
一个典型的使用流程:

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
  
# 初始化语言模型
llm = OpenAI(temperature=0.9)

# 创建提示模板
prompt = PromptTemplate(
    input_variables=["product"],
    template="What is a good name for a company that makes {product}?",
)

# 创建链
chain = LLMChain(llm=llm, prompt=prompt)

# 运行链
result = chain.run(product="colorful socks")

来逐步解析各个核心组件的初始化和调用逻辑。

在这里插入图片描述

🔍 语言模型 (LLM) 初始化与调用

一、初始化流程

创建一个 LLM 实例时,实际发生了以下调用:

  1. 调用 OpenAI 类的构造函数
  2. 该函数继承自 BaseLLMBaseLLM又继承自 BaseLanguageModel
  3. BaseLanguageModel 中设置基础属性(如 cache、callbacks 等)
    代码路径:libs/core/langchain_core/language_models/base.py
class BaseLanguageModel(RunnableSerializable[LanguageModelInput, LanguageModelOutputVar], ABC):
    """所有语言模型的抽象基类"""
    cache: Union[BaseCache, bool, None] = Field(default=None, exclude=True)
    verbose: bool = Field(default_factory=_get_verbosity, exclude=True, repr=False)
    callbacks: Callbacks = Field(default=None, exclude=True)
    tags: Optional[list[str]] = Field(default=None, exclude=True)
    metadata: Optional[dict[str, Any]] = Field(default=None, exclude=True)
    custom_get_token_ids: Optional[Callable[[str], list[int]]] = Field(default=None, exclude=True)

二、调用流程

当使用 LLM 生成文本时(如 llm("What is the capital of France?")):

  1. 首先会调用 BaseLanguageModel.invoke 方法
  2. 该方法会将输入转换为 PromptValue
  3. 然后调用 generate_prompt 方法
  4. generate_prompt 方法会调用特定 LLM 实现的 API 接口(如 OpenAI API)
  5. 返回的结果会被处理并返回给用户

invoke方法核心逻辑如下

return (
    self.generate_prompt(
        [self._convert_input(input)],
        stop=stop,
        callbacks=config.get("callbacks"),
        tags=config.get("tags"),
        metadata=config.get("metadata"),
        run_name=config.get("run_name"),
        run_id=config.pop("run_id", None),
        **kwargs,
    )
    .generations[0][0]
    .text
)
  1. 调用 self.generate_prompt(...)
    • 这是调用模型生成文本的关键方法。
    • 先把传入的提示词 inputgenerate_prompt 方法支持批量输入) 转换成模型能理解的格式;这一步很重要,不同模型或链条,输入格式可能不同,所以要统一处理。
    • 传入了转换好的输入、停止词、回调、标签、元数据、运行名称和 ID,以及额外参数。
  2. 调用.generations.text
    • generate_prompt 返回的结果是一个复杂对象,因此通过.generations[0][0] 取第一个输入的第一个生成结果。
    • .text 则是最终的纯文本内容。

模型是根据不同的大模型属性(如openai)来完成初始化。模型的调用关键是将提示词、数据等等数据转化成LLM能够理解的格式再发送,并将返回的复杂数据处理成我们要的预期数据再返回。

github
有帮助可以金手指点击start支持下作者

LangChain与大型语言模型(LLM)是当下自然语言处理领域中非常热门的话题。 ### LangChain LangChain是一种框架理念,用于将多个步骤或组件链接在一起形成复杂的任务流程,特别是在涉及文本生成、对话管理等场景下。它允许开发者创建一系列“链条”,每个环节可以是一个简单的函数或者是复杂的服务调用,并能够轻松地插入像预训练的语言模型这样的高级工具作为其中的一部分。这种设计使得构建自定义应用变得更加简单高效,同时保持了高度灵活性,方便根据不同需求调整各个部分的功能配置。 ### LLM (Large Language Model) 而提到的LLM即大規模語言模型,是指那些通过深度学习技术,在海量数据集上进行了长时间训练得到的人工智能系统。它们具备强大的泛化能力,能够在未曾见过的数据样本上做出合理的预测响应;并且由于其内部结构通常是基于神经网络架构搭建起来的,所以往往拥有着很深层数以及巨大参数量规模的特点。这些特性赋予了LLMs诸如理解上下文含义、捕捉长距离依赖关系等方面优异的表现力。 两者结合: 当我们将二者结合起来考虑时,可以看到langchain提供了一种有效的机制去组织利用包括但不限于各种类型的LLM资源在内的众多功能模块,从而帮助研究人员和技术人员更加快捷有效地完成从想法构思到实际部署上线整个过程中的各项工作内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值