01LangChain入门总结(实战课1-2)| 豆包MarsCode AI刷题

110 阅读7分钟

大语言模型的背景与价值

随着 ChatGPT 和 GPT-4 的问世,大语言模型以其通用性和卓越的表现令人瞩目。它们不仅展现出接近通用人工智能的潜能,还为企业提供了涵盖客户服务、市场营销、供应链管理等广泛领域的解决方案。这标志着技术的重大突破与落地应用之间的距离被极大缩短。

行业内外对此充满期待。例如,阿里巴巴董事会主席张勇认为大语言模型的出现如同工业革命,将被广泛应用并改变生活方式。英伟达 CEO 黄仁勋更将其比作 AI 的 “iPhone 时刻”,甚至有人认为这已经超越了 iPhone 级别的革命,堪比互联网的历史性时刻。


什么是 LangChain

LangChain 是一个为大语言模型开发提供支持的框架。它使得开发者能够高效调用 GPT-4、Llama 2 等语言模型,并实现数据感知和环境交互两大能力:

  1. 数据感知:通过连接外部数据源,丰富模型的数据理解能力。
  2. 代理性:让模型能够与环境互动,完成复杂的任务。

这些特性使得 LangChain 成为构建大语言模型驱动应用的利器,无论是文档问答、聊天机器人,还是复杂的多步任务解决方案,都可以通过 LangChain 实现。

(说白了,LangChain就是一个调用大语言模型并且赋予大模型其他多模态功能的框架,因为大模型仅仅是一个语言模型,而恰恰是LangChain可以让大语言模型与其他模型或工具进行融合,使得大模型可以变成一个Agent)


LangChain 的六大组件

  1. 模型 (Models)
    统一对接各种语言模型接口,简化调用流程,支持模型输出解析。

  2. 提示模板 (Prompts)
    提供标准化和流线化的提示模板,优化提示工程,激发模型潜能。

  3. 数据检索 (Indexes)
    构建文档检索机制,通过用户查询快速返回最相关的信息,实现本地知识库的搭建。

  4. 记忆 (Memory)
    通过短期与长期记忆模块,实现对话系统的上下文追踪与持久化记忆,增强交互体验。

  5. 链 (Chains)
    将多个功能组件封装为任务链,支持复杂的多步骤任务自动化。

  6. 代理 (Agents)
    调用外部工具和数据资源,构建自驱型智能系统,完成动态任务规划与执行。


LangChain 的实用案例

  1. 情人节玫瑰宣传语生成
    使用 GPT 模型通过简单代码生成推广文案,展示 LangChain 在文本生成中的便捷性。

    示例代码:

    from langchain_openai import OpenAI
    llm = OpenAI(model_name="gpt-3.5-turbo")
    text = llm.invoke("请为情人节红玫瑰写一句宣传语")
    print(text)
    
  2. 海报文案生成器
    结合 HuggingFace 图像字幕模型和 LangChain 代理功能,实现图片到文案的自动化生成。此案例通过整合多个工具,展现了 LangChain 在复杂任务处理中的强大能力。


LangChain 的核心优势

  1. 模块化设计:灵活调用不同组件,按需组合,提升开发效率。
  2. 多模型支持:兼容 OpenAI 和 HuggingFace 等多种模型,轻松切换满足不同需求。
  3. 自动化任务管理:通过链与代理机制,解决复杂的多步任务自动化问题。
  4. 生态开放性:开发者可快速上手并探索更多可能性。

什么是大语言模型?

大语言模型是一种基于深度学习的人工智能模型,其本质是通过分析海量文本数据,学习语言模式,从而实现自然语言的理解与生成。它们以其庞大的参数规模和强大的预测能力,成为当前人工智能领域的核心技术之一。

核心原理

简单来说,大语言模型就像一个“猜词”专家。给定一段上下文,它会基于已学习到的知识,预测最可能出现的下一个词。例如,当输入“今天的天气真”,模型可能预测“好”或“凉爽”,因为这是训练数据中高频的语言组合。

这些模型不仅能基于简单的词语统计关系进行预测,还能通过上下文理解推测出更有意义的内容。例如,它知道“天气好”可能与“适合户外活动”相关,因此能生成连贯且逻辑合理的句子。

局限性

尽管它们表现得“聪明”,但实际上并没有真正的“理解力”。大语言模型只是在数学意义上找到最可能的词语组合,因此有时会生成荒谬或不合逻辑的内容。


LangChain 是什么?

LangChain 是一种基于大语言模型开发应用的框架,它提供了一种模块化的方法,让开发者能轻松调用和整合大语言模型的功能。无论是简单的语言生成任务,还是复杂的多步骤任务,LangChain 都能提供强大的支持。

为什么选择 LangChain?

LangChain 的设计就像乐高积木,开发者可以根据需求灵活拼装各个功能模块。对于新手来说,它的预构建链功能可以帮助快速上手;而对于资深开发者,则可以通过模块化组件实现定制化开发。

LangChain 支持 PythonJavaScript 两种语言,特别适合开发基于大语言模型的现代化应用。


如何安装 LangChain?

LangChain 的安装过程简单快捷,但需要注意依赖项的配置。

基本安装

pip install langchain

安装扩展功能

如果需要集成常用的开源 LLM 或向量数据库,可以执行以下命令:

pip install langchain[llms]

升级到最新版本

pip install --upgrade langchain

LangChain 的 GitHub 社区和官方文档是重要的学习资源。尽管目前文档可能不够完善,但社区的活跃度让开发者能快速找到问题的解决方案。


OpenAI API 与 LangChain 的结合

LangChain 的底层依赖于大语言模型的 API,尤其是 OpenAI 的 GPT 系列。了解 OpenAI API 的调用方式,是掌握 LangChain 使用方法的关键。

两类模型

  1. Text 模型
    专注于传统文本生成任务,如 text-davinci-003。适合单轮任务,生成高质量的静态文本。

  2. Chat 模型
    用于对话交互,支持上下文管理和多轮对话任务,如 gpt-3.5-turbogpt-4

    (两种模式都是将需要问大模型的问题之间嵌入代码中,只是在嵌入方式上有些许不同)

调用示例

Text 模型调用

import openai
openai.api_key = "你的API Key"

response = openai.Completion.create(
    model="text-davinci-003",
    prompt="请为我的花店起个名",
    max_tokens=50
)
print(response.choices[0].text.strip())

Chat 模型调用

import openai
openai.api_key = "你的API Key"

response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": "你是一名创意命名专家"},
        {"role": "user", "content": "请为我的花店起个名"}
    ],
    max_tokens=50
)
print(response.choices[0].message['content'].strip())

LangChain 调用模型的简化流程

LangChain 进一步简化了调用大语言模型的过程,同时增强了功能的灵活性。

调用 Text 模型

from langchain.llms import OpenAI
llm = OpenAI(model="text-davinci-003", max_tokens=50)
response = llm.predict("请为我的花店起个名")
print(response)

调用 Chat 模型

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage

chat = ChatOpenAI(model="gpt-4")
messages = [
    SystemMessage(content="你是一个很棒的智能助手"),
    HumanMessage(content="请为我的花店起个名")
]
response = chat(messages)
print(response.content)

LangChain 不仅封装了 API 调用逻辑,还优化了解析返回结果的复杂度,让开发者可以更专注于业务逻辑。


LangChain 的核心价值

虽然表面上 LangChain 看起来只是对 OpenAI API 的封装,但它在以下方面展示了巨大价值:

  1. 跨模型兼容性
    支持 OpenAI 和 HuggingFace 等多种模型,方便在不同模型之间切换。

  2. 模块化设计
    各个功能模块可独立使用或组合,适应不同复杂度的应用场景。

  3. 多步骤任务执行
    LangChain 的链式执行和代理功能,能处理复杂的多步骤任务,并支持外部工具的调用。

  4. 简化开发流程
    对开发者友好,降低了入门门槛,同时支持高级用户进行深度定制。