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

LangChain开发(一)介绍和第一个例子

文章目录

  • 简介
  • LangChain框架组成
    • LangChain库(Libraries)
    • LangChain任务处理流程
    • 核心概念
      • 1. LLMs
      • 2. Chat Models
      • 3. 消息(Message)
      • 4. 提示(prompts)
      • 5. 输出解析器(Output Parsers)
      • 6.Retrievers
      • 7.向量存储(Vector stores)
      • 8.Agents
  • 应用
  • 快速入门
    • 安装LangChain
    • 初始化模型
    • 使用LLM
    • 输出转换
  • 参考资料:

简介

LangChain是一个开源的Python AI应用开发框架,它提供了构建基于大模型的AI应用所需的模块和工具。通过LangChain,开发者可以轻松地与大模型(LLM)集成,完成文本生成、问答、翻译、对话等任务。LangChain降低了AI应用开发的门槛,让任何人都可以基于LLM构建属于自己的创意应用。
LangChain特性:

  • LLM和提示(Prompt):LangChain对所有LLM大模型进行了API抽象,统一了大模型访问API,同时提供了Prompt提示模板管理机制。
  • 链(Chain): LangChain对一些常见的场景封装了一些现成的模块,例如:基于上下文信息的问答系统,自然语言生成SQL查询等等,因为实现这些任务的过程就像工作流一样,一步一步的执行,所以叫链(Chain)。
  • LCEL:LangChain Expression Language(LCEL),LangChain新版本的核心特性,用于解决工作流编排问题,通过LCEL表达式,我们可以灵活的自定义AI任务处理流程,也就是灵活自定义链(Chain)。
  • 数据增强生成(RAG):因为大模型(LLM)不了解新的信息,无法回答新的问题,所以我们可以将新的信息导入到LLM,用于增强LLM生成内容的质量,这种模式叫做RAG(Retrieval Augmented Generation)
  • Agents:是一种基于大模型(LLM)的应用设计模式,利用LLM的自然语言理解和推理能力(LLM作为大脑),根据用于的需求自动调用外部系统、设备共同去完成任务,例如:用户输入“明天请假一天”,大模型(LLM)自动调用请假系统,发起一个请假申请。
  • 模型记忆(memory): 让大模型记住之前的对话内容,这种能力成为模型记忆(memory)。

LangChain框架组成

image-20250321204121361

LangChain框架由几个部分组成,包括:

  • LangChain库:Python和JavaScript库。包含接口和集成多种组件的运行时基础,以及现成的链和代理的实现。
  • LangChain模板:LangChain官方提供的一些AI任务模板。
  • LangServe:基于FastAPI可以将LangChain定义的链(Chain),发布微REST API。
  • LangSmith:开发平台,是个云服务,支持LangChain debug、任务监控。

LangChain库(Libraries)

LangChain库本身由几个不同的包组成。

  • langchain-core:基础抽象和LangChain表达语言。
  • langchain-community:第三方集成,主要包括LangChain集成的第三方组件。
  • langchain:主要包括链(chain)、代理(agent)和检索策略

LangChain任务处理流程

img

如上图,LangChain提供一套提示词模板(prompt template)管理工具,负责处理提示词,然后传递给大模型处理,最后处理大模型返回的结果,

LangChan对大模型的封装主要包括 LLM 和 Chat Model两张类型。

  • LLM - 问答模型,模型接收一个文本输入,然后返回一个文本结果。
  • Chat Model - 对话模型,接受一组对话消息,然后返回对话消息,类似聊天一样。

核心概念

1. LLMs

LangChain封装的基础模型,模型接收一个文本输入,然后返回一个文本结果。

2. Chat Models

聊天模型(或者成为对话模型),与LLMs不同,这些模型转为对话场景而设计。模型可以接收一组对话消息,然后返回对话消息,类似聊天消息一样。

3. 消息(Message)

指的是聊天模型(Chat Models)的消息内容,消息类型包括HumanMesage、AIMessage、SystemMessage、FunctionMessage和ToolMessage等多种类型的消息。

4. 提示(prompts)

LangChain封装了一组专门用于提示词(prompts)管理的工具类,方便我们格式化提示词(prompts)内容。

5. 输出解析器(Output Parsers)

如上图介绍,LangChain接受大模型返回的文本内容之后,可以使用专门的输出解析器对文本内容进行格式化,例如解析json、或者将llm输出的内容转成python对象。

6.Retrievers

为方便我们将私有数据导入到大模型,提高模型回答问题的质量,LangChian封装了检索框架(Retrievers),方便我们加载文档数据、切割文档数据、存储和检索文档数据。

7.向量存储(Vector stores)

为支持私有数据的语义相似搜索,LangChain支持多种向量数据库。

8.Agents

智能体(Agents),通常指的是以大模型作为决策引擎,根据用户输入的任务,自动调用外部系统、硬件设备共同完成用户的任务,是一种以大模型为核心的应用设计模式。

应用

  • 对话机器人:构建智能的对话助手、客服机器人、聊天机器人等。
  • 知识库问答:结合知识图谱,进行开放域问题的问答服务。
  • 智能协作:如文中写作、创意写作、文本摘要等

快速入门

安装LangChain

要安装LangChain,可以使用pip和Conda进行安装。以下是安装LangChain的步骤:

使用pip:

pip install langchain
pip install langchain-openai

初始化模型

在使用LangChain之前,需要导入LangChain x OpenAI集成包,并设置API密钥作为环境变量或直接传递给OpenAI LLM类。

首先,获取OpenAI的API密钥,可以通过创建账户并访问此链接来获取。

设置环境变量:

OPENAI_API_KEY="取得的OPENAI key"
OPENAI_API_BASE="如果不是用官网API地址可以设置这个"

没有官方api key的话,可以使用https://api.xty.app/register?aff=U22j 注册一个,会送一些免费的额度,对应OPENAI_API_BASE配置为https://api.xty.app/v1

使用LLM

使用LLM来回答问题非常简单。可以直接调用LLM的invoke方法,并传入问题作为参数。此外,还可以通过提示词模板(prompt template)生成提示词,用于向模型(LLM)发送指令。

下面演示了如何构建一个简单的LLM链:

# 引入langchain聊天专用提示词模板
from langchain_core.prompts import ChatPromptTemplate# 引入langchain openai sdk
from langchain_openai import ChatOpenAI# 如果是官方URL,使用以下即可
llm = ChatOpenAI()# 根据message 定义提示词模板
# 这里以对话模型的消息格式为例子,不熟悉openai对话模型的话,可以参考官方文档
# 下面消息模板,定义两条消息,system消息告诉模型扮演什么角色,user消息代表用户输入的问题
prompt = ChatPromptTemplate.from_messages([("system", "你是世界级的技术专家"),("user", "{input}")
])# 通过langchain的链式调用,生成一个chain
# 基于LCEL表达式构建LLM链,lcel语法类似linux的pipeline语法,从左到右顺序执行
# 下面编排了一个简单的工作流,首先执行prompt完成提示词模板(prompt template)格式化处理,然后将格式化后的结果传递给llm模型
chain = prompt | llmresult = chain.invoke({"input": "帮我写一篇关于AI的技术文章,100字"})
print(result)

输出示例:

content='人工智能(AI)是模拟人类智能的技术,涵盖机器学习、自然语言处理、计算机视觉等多个领域。通过数据训练,AI可以识别模式、进行预测、解决问题,甚至进行自动决策。近年来,深度学习的快速发展推动了AI在语音识别、图像处理、医疗诊断等领域的广泛应用。尽管AI带来了诸多创新和便利,但也伴随隐私、安全、伦理等挑战。随着技术的不断进步,AI的潜力将继续扩大,深刻影响各行各业的发展。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 225, 'prompt_tokens': 41, 'total_tokens': 266, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'gpt-3.5-turbo-0613', 'system_fingerprint': 'fp_b28b39ffa8', 'finish_reason': 'stop', 'logprobs': None} id='run-45ba2d20-d6a3-45a6-b25c-f22b78da66d9-0' usage_metadata={'input_tokens': 41, 'output_tokens': 225, 'total_tokens': 266, 'input_token_details': {}, 'output_token_details': {}}

输出转换

LLM的输出通常是一条信息,为了更方便处理结果,可以将消息转换为字符串。下面展示如何将LLM的输出消息转换为字符串:

# 字符串输出解析器
from langchain_core.output_parsers import StrOutputParser
# 引入langchain聊天专用提示词模板
from langchain_core.prompts import ChatPromptTemplate# 引入langchain openai sdk
from langchain_openai import ChatOpenAIllm = ChatOpenAI()# 根据message 定义提示词模板
prompt = ChatPromptTemplate.from_messages([("system", "你是世界级的技术专家"),("user", "{input}")
])# 创建一个字符串输出解析器
out_parse = StrOutputParser()# 将输出解析器添加到LLM链中,跟前面的例子区别就是工作流编排,最后一步将LLM模型输出的结果传递给out_parse
chain = prompt | llm | out_parseresult = chain.invoke({"input": "帮我写一篇关于AI的技术文章,100字"})
print(result)

输出示例:

人工智能(AI)是模拟人类智能过程的技术,涉及机器学习、自然语言处理、计算机视觉等领域。通过大量数据和算法,AI能够从经验中学习并做出决策,应用广泛,如自动驾驶、医疗诊断、金融预测等。深度学习作为AI的一种重要技术,通过多层神经网络处理复杂任务,显著提高了识别和预测的准确性。尽管AI发展迅速,仍面临伦理和安全等挑战,未来将推动各行业的变革,带来更多创新机会。

以上是关于LangChain的介绍及简单入门。

参考资料:

2025吃透LangChain大模型全套教程(LLM+RAG+OpenAI+Agent)

https://python.langchain.com/v0.1/docs/get_started/introduction/

https://lanchestios.github.io/2023/07/13/LLM-LangChain/

相关文章:

LangChain开发(一)介绍和第一个例子

文章目录 简介LangChain框架组成LangChain库(Libraries)LangChain任务处理流程核心概念1. LLMs2. Chat Models3. 消息(Message)4. 提示(prompts)5. 输出解析器(Output Parsers)6.Ret…...

Chrome-Edge-IDEA-Win 常用插件-工具包

Chrome-Edge-IDEA-Win 常用插件-工具包 Chrome-Edge-IDEA-Win 常用插件-工具包谷歌插件chropathJSONViewOctotree - GitHub code treeXPath Helper书签侧边栏篡改猴Print Edit WEEdge浏览器插件IDEA插件CodeGlance Pro 代码迷你缩放图插件Alibaba Cloud ToolkitAlibaba Java Co…...

电加热产品亚马逊审核标准UL499报告

很多亚马逊卖家都上架应季产品 像加热垫 加热杯垫 加热毯等产品 都少不了亚马逊UL测试的报告 亚马逊明确要求 电子产品在亚马逊销售就必须需要有UL报告 不然就产品就被有下架的风险。由于 UL 标准也就是美洲的安全测试标准,因此亚马逊出于对安全的考虑会加强对带电的…...

从实践到创新:低代码驱动教育行业数字化转型

随着数字化转型浪潮席卷教育领域,低代码开发平台因其“低门槛、高效率、强适配”特性,正成为教育行业信息化改革的新工具。本文将结合低代码技术在教育场景中的典型应用案例,分享其对教学管理、科研创新及人才培养模式的变革价值。 一、政策与…...

@AuthenticationPrincipal user null

AuthenticationPrincipal user: null 当使用 AuthenticationPrincipal 注解时,如果注入的 user 为 null,通常是因为以下原因之一: 1. 用户未登录 原因 当前请求没有经过身份验证,Spring Security 的 SecurityContext 中没有用户…...

dfs刷题排列问题 + 子集问题 + 组和问题总结

文章目录 一、排列问题全排列II题解代码 优美的排列题解代码 二、子集问题字母大小写全排列题解代码 找出所有子集的异或总和再求和题解代码 三、组合问题电话号码的字母组合题解代码 括号生成题解代码 组合题解代码 目标和题解代码 组合总和题解代码 总结 一、排列问题 全排列…...

citrix安装部署

在Citrix环境中,特别是在Citrix XenApp或Citrix XenDesktop的部署中,涉及到多个步骤和考虑因素。Citrix是一家提供虚拟化桌面和应用程序解决方案的公司,其产品可以帮助企业实现桌面和应用虚拟化,从而提升灵活性、安全性和管理效率…...

ffmpeg库视频硬编码使用流程

‌一、硬件编码核心流程‌ ‌硬件设备初始化 // 创建CUDA硬件设备上下文‌ AVBufferRef *hw_device_ctx NULL; av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_CUDA, NULL, NULL, 0);// 绑定硬件设备到编码器上下文‌ codec_ctx->hw_device_ctx av_buffer_…...

996引擎-接口测试:消息Tips

996引擎-接口测试:消息Tips 发送视野内广播消息 sendrefluamsg发送聊天框消息 sendmsg发送地图消息 sendmapmsg打印消息到控制台 release_print发送自定义颜色的文字信息 guildnoticemsg测试NPC参考资料发送视野内广播消息 sendrefluamsg function npc_test_onclick1(player)-…...

【入门初级篇】布局类组件的使用(1)

【入门初级篇】布局类组件的使用(1) 视频要点 (1)章节大纲介绍 (2)布局类组件类型介绍:行布局、列布局、标题 (3)实操演示:列表统计查询布局模型 点击访问my…...

JavaWeb之WebSocket

目录 一、 websocket 概念二、WebSocket原理三、WebSocket特点四、WebSocket应用场景五、Websocket基本使用1、创建Websocket对象2、Websocket事件3、Websocket方法4、前端服务程序 六、聊天室案例1、Tomcat版本:8.0.442、Maven 依赖:3、前端代码4、后端…...

算法2--两数相加

题目描述 解题思路 题目说的很详细了,也就是把每个数倒序写成链表进行输入,然后让你计算两个倒序数组的和,要保证跟预期的结果一样。 首先应该考虑的是两个数组的长度问题,对于链表的每一位进行加法运算,如果两个列表…...

突破边界:Tauri 2.0全局状态管理的原子级实践

精心打造的Tauri 2.0全局状态管理深度指南,融合最新框架特性与企业级实践方案: 一、Tauri 2.0状态管理新范式 1.1 量子态存储模型 #mermaid-svg-paiGRksb0JRQ3TqJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fil…...

Springboot的jak安装与配置教程

目录 Windows系统 macOS系统 Linux系统 Windows系统 下载JDK: 访问Oracle官网或其他JDK提供商网站,下载适合Windows系统的JDK版本。网站地址:Oracle 甲骨文中国 | 云应用和云平台点击进入下滑,点击进入下载根据自己的系统选择&…...

Axure大屏可视化模板:赋能多领域,开启数据展示新篇章

在当今这个数据爆炸的时代,数据已经成为各行各业的核心资产。然而,如何高效、直观地展示数据,并将其转化为有价值的决策依据,成为了许多企业和组织面临的共同挑战。Axure大屏可视化模板,作为一款强大的数据展示工具&am…...

大模型训练为什么选择交叉熵损失(Cross-Entropy Loss):均方误差(MSE)和交叉熵损失的深入对比

交叉熵损失:深度学习中的基石与洞见 交叉熵损失(Cross-Entropy Loss)是现代深度学习中分类任务的核心损失函数,尤其在训练大规模模型(如 transformers 等大型语言模型 LLM)时,几乎无处不在。对…...

C++|GLog开源库的使用 如何实现自定义类型消息日志

参考: C glog使用教程与代码演示 C第三方日志库Glog的安装与使用超详解 GLOG从入门到入门 glog 设置日志级别_glog C版本代码分析 文章目录 日志等级自定义消息创建使用宏定义 日志等级 在 glog 中,日志的严重性是通过 LogSeverity 来区分的&#xff0c…...

cursor常用快捷键(JetBrains Darcula主题风格)

一、基础操作速查 打开/创建项目 打开项目:Ctrl Shift O(选择文件夹)新建文件:Ctrl N保存文件:Ctrl S关闭当前标签页:Ctrl F4 代码编辑 复制当前行:Ctrl D删除当前行:Ctrl …...

区块链学习总结

Hardhat 是一个用于 Ethereum 智能合约开发 的开发环境,专为 Solidity 语言编写的智能合约提供工具支持。它能够帮助开发者 编译、部署、测试和调试 智能合约,并提供一个本地的以太坊测试网络。 Hardhat 的核心功能 本地开发网络(Hardhat Ne…...

《深入剖析鸿蒙生态原生应用:一次开发多端部署的技术革新》

在数字化时代飞速发展的浪潮中,鸿蒙生态以其独特的技术理念和强大的创新能力,为开发者和用户带来了全新的体验。其中,“一次开发多端部署”作为鸿蒙生态原生应用开发的核心技术之一,不仅是技术上的重大突破,更是对未来…...

知识蒸馏:让大模型“瘦身“而不失智慧的魔术

引言:当AI模型需要"减肥" 在人工智能领域,一个有趣的悖论正在上演:大模型的参数规模每年以10倍速度增长,而移动设备的算力却始终受限。GPT-4的1750亿参数需要价值500万美元的GPU集群运行,但现实中的智能设备…...

JavaScript 获取 URL 中参数值的详解

JavaScript 获取 URL 中参数值的详解 1. 了解 URL 参数2. 使用 URLSearchParams 获取参数值2.1 什么是 URLSearchParams?2.2 示例代码2.3 优缺点 3. 使用正则表达式获取参数值3.1 示例代码3.2 分析 4. 自定义解析函数4.1 示例代码4.2 分析 5. 小结与注意事项 在开发…...

识别并脱敏上传到deepseek/chatgpt的文本文件中的身份证/手机号

本文将介绍一种简单高效的方法解决用户在上传文件到DeepSeek、ChatGPT,文心一言,AI等大语言模型平台过程中的身份证号以及手机号等敏感数据识别和脱敏问题。 DeepSeek、ChatGPT,Qwen,Claude等AI平台工具快速的被接受和使用,用户每天上传的文本数据中潜藏着大量敏感信息,…...

ruoyi-vue部署4

1.jdk-linux安装 2.tomcat-linux安装 3.ruoy后台部署 4.nginx-linux安装5.ruoyi前端部署​​​​​​​...

【秣厉科技】LabVIEW工具包——OpenCV 教程(12):机器学习

文章目录 前言机器学习例1:支持向量机(SVM)做平面向量二分类例2: K邻近算法(KNearest)实现分类 总结 前言 需要下载安装OpenCV工具包的朋友,请前往 此处 ;系统要求:Wind…...

分布式事务解决方案简介

一、分布式事务的挑战 在分布式系统中,多个服务协同完成一个业务操作时,可能会遇到数据一致性问题。传统单体应用的ACID事务无法直接扩展到分布式环境,主要矛盾在于: • 网络不可靠:服务间通信可能失败。 • 并发冲突…...

【leetcode hot 100 17】电话号码的字母组合

分析:当设计关键字“所有组合”时,要考虑深度优先遍历、广度优先遍历(层次遍历),其中: 深度优先搜索: 自顶向下的递归实现深搜定义子问题在当前递归层结合子问题结果解决原问题 广度优先搜索 利…...

UI数据处理新隐私保护:确保用户新信息安全

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在这个数字时代,我们的个人信息似乎无处不在。从社交媒体上的点滴分享,到在线…...

【Javascrip】Javascript练习01 REST API using Express.js.

针对该问题的项目路径 要求部分 what you need to doReview the tasks provided in the section below.Obtain the boilerplate code.Use your local development environment to implement a solution.Upload your solution for marking via Gradescope. There is no attempt…...

分析K8S中Node状态为`NotReady`问题

在Kubernetes(k8s)集群中,Node状态为NotReady通常意味着节点上存在某些问题,下面为你分析正常情况下节点应运行的容器以及解决NotReady状态的方法。 正常情况下Node节点应运行的容器 1. kubelet kubelet是节点上的核心组件&…...