大模型:LangChain技术讲解

news2025/1/23 15:53:52

一、什么是LangChain

1、介绍

LangChain是一个用于开发由大型语言模型提供支持的Python框架。它提供了一系列工具和组件,帮助我们将语言模型集成到自己的应用程序中。
有了它之后,我们可以更轻松地实现对话系统、文本生成、文本分类、问答系统等功能。

2、LangChain官网文档

官网:https://python.langchain.com/docs/introduction/

3、LangChain的核心组件

  • 语言模型(Model):如OpenAI的GPT-3。
  • 提示管理(Prompt):Prompt管理。
  • 链(chain):允许将多个组件(如语言模型、提示模板、记忆等)串联起来,形成一个工作流。
  • 记忆(Memory):记忆模块用于保存对话历史或上下文信息,以便在后续对话中使用。
  • 代理(Agent):代理是一种智能组件,可以根据用户的输入自动选择和执行不同的操作。
  • 工具(Tool):工具是一些内置的功能模块,如文本处理工具、数据查询工具等。

二、语言模型

1、介绍

把不同的模型,统一封装成一个接口,方便更换模型而不用重构代码。以下是使用语言模型从输入到输出的基本流程:
在这里插入图片描述
一下是对每一块的总结:

  • Format(格式化):将原始数据格式化成模型可以处理的形式,插入到一个模版问题中,然后送入模型进行处理。
  • Predict(预测):接受被送进来的问题,然后基于这个问题进行预测或生成回答。
  • parse(生成):预测输出被进一步格式化成一个结构化的JSON对象。

2、单轮对话

3、多轮对话

# 1、创建模型
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_ollama import ChatOllama

ollama = ChatOllama(base_url='http://localhost:11434', model="qwen2")

messages = [
    SystemMessage(content="你是langchain的课程助理。"),
    HumanMessage(content="我是学员,我叫 Tom"),
    AIMessage(content="欢迎"), # 提前模拟场景,为后续交互做准备
    HumanMessage("我是谁,你是谁")
]

print(ollama.invoke(messages).content)

通过这种方式,我们可以:

  • 测试AI模型在特定上下文下的表现。
  • 确保AI模型能够正确理解并响应用户的输入。
  • 调整和优化对话流程,以便在实际应用中提供更好的用户体验。

三、Prompt模板封装

Prompt作为输入的控制是相当重要的。langchain也提供了多种管理方法

1、PromptTemplate

基本的提示模板,可以定义输入变量和模板文本。适用于大多数自定义的提示需求。

from langchain_core.prompts import PromptTemplate

template = """
You are an expert data scientist with an expertise in building deep Learning models. Explain the concept of {concept} in a couple of lines
"""

# 实例化模版的第一种方式
one_prompt = PromptTemplate(template = template, input_variables=["concept"])

# 实例化模版的第二种方式
two_prompt = PromptTemplate.from_template(template)

# 将用户的输入通过format方法嵌入提示模版,并且做格式化处理
final_prompt = two_prompt.format(concept = "hello")
print(final_prompt)


2、ChatPromptTemplate

针对聊天场景的提示模板,支持定义多个角色的消息(用户、AI和系统)

from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate, ChatPromptTemplate

template = """
You are an expert data scientist with an expertise in building deep learning models.
"""

system_message_prompt = SystemMessagePromptTemplate.from_template(template)

human_template = """
Explain the concept of {concept} in a couple of lines
"""

human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

chat_prompt = ChatPromptTemplate.from_messages([
    system_message_prompt,
    human_message_prompt
])

print(chat_prompt.format_prompt(concept = "hello").to_string())

3、FewShotPromptTemplate

Prompt中给几个例子可以让大模型更好地生成正确的结果。这个模板就是给例子的。

from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
from langchain_ollama import ChatOllama

examples = [
    {"input":"高", "output":"矮"},
    {"input":"胖","output":"瘦"},
    {"input":"精力充沛","output":"萎靡不振"},
    {"input":"快乐","output":"伤心"},
    {"input":"黑", "output":"白"}
]

example_prompt = PromptTemplate(input_variables=["input","output"], template="""
词语:{input}\n
反义词:{output}\n
""")

example_message = example_prompt.format(**examples[0])
#print(example_message)

few_shot_prompt = FewShotPromptTemplate(
    examples = examples,
    example_prompt = example_prompt,
    example_separator = "\n",
    prefix = "来玩个反义词接龙游戏,我说词语,你说它的反义词\n",
    suffix = "现在轮到你了,词语:{input}\n反义词:",
    input_variables = ["input"]
)

ollama = ChatOllama(base_url='http://localhost:11434', model="qwen2")
chain = few_shot_prompt | ollama
print(chain.invoke("精力充沛"))

4、文档模板

simple_prompt.json

{
	"_type":"prompt",
	"input_variables":[
		"name",
		"love"
	],
	"template":"我的名字叫{name},我喜欢{love}"
}

四、格式化输出

1、OutputParser

CSV parser当您想要返回以逗号分隔的项目列表时,可以使用此输出解析器。

from langchain_core.output_parsers import CommaSeparatedListOutputParser

output_parser = CommaSeparatedListOutputParser()
# 返回一些指令或模版,这些指令告诉系统如何解析或格式化输出数据
print(output_parser.get_format_instructions())

# 输入的字符串按照特定的规则进行解析和转换
reply = 'foo,bar,baz'
print(output_parser.parse(reply))

在这里插入图片描述

2、Datetime parser

3、Pydantic OutputParser

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路,希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年,年初拿高绩效,但感觉逐渐被公司一点点剥离出中心;年中一直在学习防患于未然&#xff1b…

Node.js接收文件分片数据并进行合并处理

前言:上一篇文章讲了如何进行文件的分片:Vue3使用多线程处理文件分片任务,那么本篇文章主要看一下后端怎么接收前端上传来的分片并进行合并处理。 目录: 一、文件结构二、主要依赖1. express2. multer3. fs (文件系统模块)4. pat…

【2025小年源码免费送】

💖学习知识需费心, 📕整理归纳更费神。 🎉源码免费人人喜, 🔥码农福利等你领! 💖山高路远坑又深, 📕大军纵横任驰奔, 🎉谁敢横刀立马行…

【JavaSE】(8) String 类

一、String 类常用方法 1、构造方法 常用的这4种构造方法:直接法,或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中,String 类的字符串实际存储在 char 数组中: String 类也重写了 toString 方法,所以可以直…

css普通用法

Css普通用法 这是一个链接 W3C,用这个语法可以访问W3C,自己可以去看更加详细的内容。 基本语法 名字{ 类型:参数 类型:参数 }a{ color:blue }引入方法 直接在html之中进行带入到html代码之中,文件不需要重新写一个&#xff0c…

大数据Hadoop中MapReduce的介绍包括编程模型、工作原理(MapReduce、MapTask、ReduceTask、Shuffle工作原理)

MapReduce概述 MapReduce是Hadoop的核心项目之一,它是一个分布式计算框架, 可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是大数据中较为熟知的分布式计算框架。 MapReduce作为分布式计算框架&#xff0…

【学习笔记】计算机网络(一)

第1章 概述 文章目录 第1章 概述1.1 计算机网络在信息时代中的作用1.2 互联网概述1.2.1 网络的网络1.2.2互联网基础结构发展的三个阶段1.2.3 互联网的标准化工作 1.3 互联网的组成1.3.1 互联网的边缘部分1.3.2 互联网的核心部分 1.4 计算机网络在我国的发展1.5 计算机网络的类别…

[OpenGL]实现屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO)

一、简介 本文介绍了 屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO) 的基本概念,实现流程和简单的代码实现。实现 SSAO 时使用到了 OpenGL 中的延迟着色 (Deferred shading)技术。 按照本文代码实现后,可以实现以下…

KubeSphere 开源社区 2024 年度回顾与致谢

随着 2024 年圆满落幕,我们回顾 KubeSphere 社区这一年走过的每一步,感慨万千。2024 年,KubeSphere 继续领跑云原生技术的创新与发展,推动开源文化的传播,致力于为全球开发者和企业用户提供更强大的平台和解决方案。感…

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档

一、云电脑:电竞新宠崛起 在电竞游戏不断发展的今天,硬件性能成为了决定游戏体验的关键因素。为了追求极致的游戏画面与流畅度,玩家们往往需要投入大量资金购置高性能电脑。然而,云电脑技术的出现,为玩家们提供了一种…

GitCode 助力 AutoTable:共创 MyBatis 生态的自动表格管理新篇章

项目仓库https://gitcode.com/dromara/auto-table 解放双手,专注业务:MyBatis 生态的“自动表格”创新 AutoTable 是一款致力于为 MyBatis 生态赋予“自动表格”功能的创新插件。其核心理念是通过 Java 实体类自动生成和维护数据库的表结构&#xff0c…

【useLayoutEffect Hook】在浏览器完成布局和绘制之前执行副作用

目录 前言语法useLayoutEffect 对比 useEffect:示例 前言 useLayoutEffect 是 React 中的一个 Hook, 类似于 useEffect,但有一个关键的区别:它会在所有的 DOM 变更之后同步调用 effect。这意味着它可以读取 DOM 布局并同步重新渲…

vue3-sfc-loader 加载远程.vue文件(sfc)案例

注意事项 style标签如果增加了lang比如:lang“scss”,需要提供scss-loader的处理器,这个暂时没研究,我的处理方式是将动态模版的css放在了全局打包暂时还没有测试,后面测试了会同步更新 安装vue3-sfc-loader npm inst…

AIGC的企业级解决方案架构及成本效益分析

AIGC的企业级解决方案架构及成本效益分析 一,企业级解决方案架构 AIGC(人工智能生成内容)的企业级解决方案架构是一个多层次、多维度的复杂系统,旨在帮助企业实现智能化转型和业务创新。以下是总结的企业级AIGC解决方案架构的主要组成部分: 1. 技术架构 企业级AIGC解决方…

NSIS系统制作Windows下的简易的安装程序

一. 前言 NSIS(Nullsoft Scriptable Install System)是一个专业的开源系统,用于创建 Windows 安装程序。拥有小巧而灵活的特点,受到很多用户的赞赏。 NSIS 基于脚本语言,允许您创建逻辑来处理比较复杂的安装任务。 官…

leetcode-不同路径问题

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 看见题目…

前端开发中的模拟后端与MVVM架构实践[特殊字符][特殊字符][特殊字符]

平时,后端可能不能及时给接口给前端进行数据调用和读取。这时候,前端想到进行模拟后端接口。本文将介绍如何通过vite-plugin-mock插件模拟后端接口,并探讨MVVM架构在前端开发中的应用。此外,我们还将讨论Vue2与Vue3的区别&#xf…

【Tool】沉浸式翻译 DeepLX

效果对比 对比一下四个常用的翻译工具的效果 不难看出只有Deepl算是在讲人话 如何配置 DeepLX 安装沉浸式翻译插件 获取APIKEY 从这获取: https://linux.do/t/topic/111737 配置 参考官方教程: https://linux.do/t/topic/111911

登录认证(3):会话跟踪技术:Session

Session概览 上文提到了,为了在同一个会话中共享数据(比如用户的登录状态),我们需要使用会话跟踪技术,Cookie是客户端的会话跟踪技术,是存储在本地浏览器中的。而本文介绍另外一种会话跟踪技术Session&…

2024年博客之星年度评选|第一步——创作影响力评审入围Top300名单 | 博客之星陪跑指南

2024年博客之星年度评选|第一步——创作影响力评审入围Top300名单 | 博客之星陪跑指南 2024年博客之星年度评选正在如火如荼地进行中!作为博客圈最具影响力的评选活动之一,今年的评选吸引了众多优秀博主的参与。现在,距离Top300入…