当前位置: 首页 > news >正文

LangChain核心解析:掌握AI开发的“链“式思维

0. 思维导图

在这里插入图片描述

1. 引言 🌟

在人工智能快速发展的今天,如何有效地利用大语言模型(LLM)构建强大的应用成为众多开发者关注的焦点。前面的课程中,我们学习了正则表达式以及向量数据库的相关知识,了解了如何处理文档并将其附加给大模型。本章我们将深入探讨LangChain中的核心概念——“Chain”(链)。

LangChain作为一个强大的框架,让我们能够将LLM与其他计算资源或知识源结合起来,创建更加智能的应用。而Chain则是这个框架的重要组成部分,它就像是将各种功能模块串联起来的纽带,使得复杂的AI工作流成为可能。

2. 什么是Chain(链)💡

2.1 链的基本概念

在LangChain中,Chain(链)是一个核心概念,它代表一系列组件的连接,这些组件按照特定的顺序执行,以完成复杂的任务。简单来说,Chain就是将多个步骤组合成一个可调用的单元,让信息能够从一个组件流向另一个组件。

链的基本工作流程是:接收输入 → 处理数据 → 产生输出。而这个处理过程可能涉及到与LLM的交互、文档的检索、信息的提取等多个步骤。

2.2 链的重要性

链的设计理念使得我们可以:

  • 🔄 模块化地组合不同功能
  • 📦 封装复杂的逻辑流程
  • 🛠️ 重用常见的处理模式
  • 🧩 灵活地扩展应用功能

正是这种灵活性和模块化的特性,使得LangChain能够适应各种各样的AI应用场景,从简单的问答系统到复杂的智能助手。

3. 四种基本的内置链 🔗

LangChain提供了多种内置的链类型,其中最基础的四种分别是LLM链、顺序链、路由链和检索链。这些内置链为我们提供了处理不同任务的基本工具。

3.1 LLM Chain

LLM Chain(LLM链)是最基础也是最常用的链类型,它将提示模板(PromptTemplate)和语言模型(LLM)结合在一起,形成一个简单但强大的处理单元。

工作原理

  1. 接收用户输入
  2. 根据提示模板格式化输入
  3. 将格式化后的提示发送给LLM
  4. 返回LLM的响应

代码示例

from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

# 创建提示模板
template = "请告诉我{topic}的三个重要知识点"
prompt = PromptTemplate(input_variables=["topic"], template=template)

# 初始化LLM
llm = OpenAI(temperature=0.7)

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

# 使用链
response = chain.run("人工智能")
print(response)

3.2 Sequential Chain(顺序链)

顺序链允许我们将多个链按照特定顺序连接起来,前一个链的输出可以作为后一个链的输入,从而实现更复杂的处理流程。

顺序链主要有两种类型:

  1. SimpleSequentialChain:每个链只有一个输入和一个输出,链之间一对一串联
  2. SequentialChain:支持多输入多输出,更加灵活

代码示例(SimpleSequentialChain)

from langchain.chains import SimpleSequentialChain
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.7)

# 第一个链:生成一个故事概要
first_prompt = PromptTemplate(
    input_variables=["subject"],
    template="请为{subject}写一个简短的故事概要"
)
chain_one = LLMChain(llm=llm, prompt=first_prompt)

# 第二个链:基于故事概要写一个完整故事
second_prompt = PromptTemplate(
    input_variables=["概要"],
    template="基于以下概要,写一个完整的故事:\n\n{概要}"
)
chain_two = LLMChain(llm=llm, prompt=second_prompt)

# 创建顺序链
overall_chain = SimpleSequentialChain(chains=[chain_one, chain_two])

# 运行链
response = overall_chain.run("一只迷路的猫")
print(response)

代码示例(SequentialChain)

from langchain.chains import SequentialChain
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.7)

# 第一个链:为电影生成标题
first_prompt = PromptTemplate(
    input_variables=["genre"],
    template="为{genre}类型的电影想一个标题"
)
title_chain = LLMChain(llm=llm, prompt=first_prompt, output_key="title")

# 第二个链:为电影生成简介
second_prompt = PromptTemplate(
    input_variables=["title"],
    template="为电影《{title}》写一个简短的简介"
)
synopsis_chain = LLMChain(llm=llm, prompt=second_prompt, output_key="synopsis")

# 创建顺序链
overall_chain = SequentialChain(
    chains=[title_chain, synopsis_chain],
    input_variables=["genre"],
    output_variables=["title", "synopsis"]
)

# 运行链
response = overall_chain.run("科幻")
print(f"标题: {
     response['title']}\n简介: {
     response['synopsis']}")

3.3 Router Chain(路由链)

路由链是一种能够根据输入动态决定调用哪个子链的高级链。它根据输入的内容或特征,选择最适合处理该输入的链,类似于一个智能分发器。

Router Chain由三个主要部分组成:

  1. 路由器(决定使用哪个链)
  2. 目标链(可选择的链集合)
  3. 默认链(当无法确定路由时使用)

代码示例

from langchain.chains.router import MultiPromptChain
from langchain.chains.router.llm_router import LLMRouterChain
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0.7)

# 定义各专业领域的提示模板
physics_template = PromptTemplate(
    template="你是一位物理学专家。回答以下物理学问题:{question}",
    input_variables=["question"]
http://www.dtcms.com/a/109346.html

相关文章:

  • 【KMP】P4391 [BalticOI 2009] Radio Transmission 无线传输|普及+
  • 蜜蜡是什么?蜜蜡与琥珀的区别以及蜜蜡的收藏价值一览
  • 《AI大模型应知应会100篇》第57篇:LlamaIndex使用指南:构建高效知识库
  • 一篇关于Netty相关的梳理总结
  • 修复SSL证书链不完整问题certificate verify failed unable to get local issuer certificate
  • Java学习总结-io缓冲流
  • [MySQL初阶]MySQL表的操作
  • 【服务日志链路追踪】
  • C语言--回文字符串
  • Spark中排序--前缀排序prefixSort
  • 【人工智能之大模型】在Transformer中,同一个词可以有不同的注意力权重嘛?为什么
  • 鸿蒙NEXT开发缓存工具类(ArkTs)
  • 华为云 云化数据中心 CloudDC | 架构分析与应用场景
  • Java学习总结-Flie-IO流
  • 解决Ubuntu文件夹锁标记
  • 【youcans论文精读】弱监督深度检测网络(Weakly Supervised Deep Detection Networks)
  • Spring Boot 3.4.3 整合 Quartz 定时任务
  • Onloyoffice公式 从指定的数据范围中筛选出符合条件的数据行 放到别的sheet里面
  • Ubuntu 安装eBPF编译环境。
  • 【C++基础知识】odygrd/quill 中编译时计算可变参数个数的原理解析
  • WGAN原理及实现(pytorch版)
  • 简单聊聊机器视觉中常提的2D、2.5D和3D技术
  • Java面试33-fail-safe机制与fail-fast机制分别有什么作用
  • 从代码学习深度学习 - RNN PyTorch版
  • 浙江大学郑小林教授解读智能金融与AI的未来|附PPT下载方法
  • 电子电气架构 --- 面向服务的体系架构
  • Python垃圾回收:循环引用检测算法实现
  • 【面试题】如何用两个线程轮流输出0-200的值
  • 大模型应用初学指南
  • Linux 查找文本中控制字符所在的行