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

LangChain、LangGraph入门

本文主要是基于学习的datawhale关于langchain、langgraoh课程记录的学习过程与个人看法。安装依赖安装langchain、langgraph、openai依赖及用于管理环境变量(python-dotenv)的辅助依赖pip install langchain langgraph openai langchain_openai python-dotenv验证依赖版本方式一代码验证importlangchainimportlanggraphimportopenai#验证langchain、langraph和openai的版本可以通过以下命令print(LangChain版本,langchain.__version__)print(LangGraph版本,importlib.metadata.version(langgraph))print(OpenAI版本,openai.__version__)方式二如果使用的是pycharm也可以在界面查看Pycharm-File-Settings-Project-Python Innterpreter查看依赖的版本号HelloWorld入门LangChain入门示例importosfromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenv# 加载.env环境变量load_dotenv()# 获取环境变量中的apikey url和模型名称API_KEYos.getenv(API_KEY)BASE_URLos.getenv(BASE_URL)MODEL_NAMEos.getenv(MODEL_NAME)print(API_KEY ,API_KEY)print(BASE_URL ,BASE_URL)print(MODEL_NAME ,MODEL_NAME)ifnotAPI_KEY:raiseValueError(未检测到API_KEY,请检查.env文件是否配置正确)# 初始化大模型llmChatOpenAI(api_keyAPI_KEY,base_urlBASE_URL,modelMODEL_NAME,temperature0.3)# 构造提示词prompt请写一段50字左右的LangChain学习建议语言简洁、实用适合初学者# 调用模型responsellm.invoke(prompt)# 生成结果print(生成的学习建议,response.content)容易出错的点存放环境变量的.env文件中环境变量名称与代码中获取环境变量的名称不一致比如.env文件如下图所示而代码中写的是importos API_KEYos.getenv(OPEN_API_KEY)BASE_URLos.getenv(OPEN_BASE_URL)文件中没有定义名称为OPEN_API_KEY与OPEN_BASE_URL的环境变量获取时肯定会报错。LangGraph入门示例# 1. 导入需要的模块importosfromlangchain_openaiimportChatOpenAIfromlanggraph.graphimportStateGraph,START,ENDfromtypingimportTypedDictfromdotenvimportload_dotenv# 2. 加载API密钥load_dotenv()# 3. 配置 API KeyAPI_KEYos.getenv(API_KEY)BASE_URLos.getenv(BASE_URL)MODEL_NAMEos.getenv(MODEL_NAME)print(API_KEY,API_KEY,\n,BASE_URL,BASE_URL,\n,MODEL_NAME,MODEL_NAME)ifnotAPI_KEY:raiseValueError(未检测到 API_KEY请检查 .env 文件是否配置正确)# 4. 初始化大模型和LangChain案例一样llmChatOpenAI(api_keyAPI_KEY,base_urlBASE_URL,modelMODEL_NAME,# 注意根据你使用的模型修改名称 后面章节不再继续说明temperature0.3)# 5. 定义 StateclassWorkflowState(TypedDict,totalFalse):user_role:str#存储用户角色original_advice:str#存储原始学习建议simplified_advice:str#存储精简后的建议translate_advice:str#存储翻译后的建议# 6. 定义节点 入参state 是一个符合 WorkflowState 结构的字典包含工作流当前累积的所有数据。 逻辑调用大模型llm.invoke完成一个具体任务。 返回值不是整个新状态而是一个字典片段。LangGraph 会自动将这个返回值合并更新到总状态中。 defgenerate_advice(state:WorkflowState):promptf给{state[user_role]}写一段50字左右的 AI 学习建议。resultllm.invoke(prompt)return{original_advice:result.content}defsimplify_advice(state:WorkflowState):promptf把下面的学习建议精简到30字以内{state[original_advice]}resultllm.invoke(prompt)return{simplified_advice:result.content}deftranslate_advice(state:WorkflowState):promptf把精简后的建议{state[simplified_advice]}翻译成英文resultllm.invoke(prompt)return{translate_advice:result.content}# 7. 构建工作流 StateGraph 是 LangGraph 的核心类。 传入 WorkflowState 的作用是告诉图我们传递的数据结构长什么样包含 user_role、original_advice、simplified_advice、translate_advice。 workflowStateGraph(WorkflowState) 添加节点和连线 节点Node给刚才定义的函数起个名字挂载到图上。 边Edge定义执行顺序。 START → generate程序一开始就执行 generate_advice。 generate → simplifygenerate 完成后自动执行 simplify。 simplify → translatesimplify 完成后自动执行 translate。 translate → END最后结束。 workflow.add_node(generate,generate_advice)workflow.add_node(simplify,simplify_advice)workflow.add_node(translate,translate_advice)workflow.add_edge(START,generate)workflow.add_edge(generate,simplify)workflow.add_edge(simplify,translate)workflow.add_edge(translate,END) 编译与执行 compile()把图“冻结”成一个可执行的程序对象。 invoke()传入初始状态只有角色没有建议内容启动工作流。 appworkflow.compile()# 8. 执行resultapp.invoke({user_role:高校学生})# 9. 输出print(原始学习建议)print(result[original_advice])print(\n精简后学习建议)print(result[simplified_advice])print(\n翻译后的学习建议)print(result[translate_advice])代码解释什么是TypeDictclassWorkflowState(TypedDict,totalFalse):user_role:str#存储用户角色original_advice:str#存储原始学习建议simplified_advice:str#存储精简后的建议TypedDict告诉 Python WorkflowState这个类是一个有固定键名、固定值类型的字典。totalFalse表示字典中的所有键都是可选的即可以不传某个字段也不会报类型错误。字段定义仅是类型注解运行时没有任何强制校验或默认值生成。怎么使用TypedDict 不是一个需要实例化的类它只是一个类型蓝图。依然使用花括号 {} 来创建字典定义了 TypedDict 后它的使用方式和普通 Python 字典完全一样。区别仅在于 IDE 会给你提示静态检查工具会帮你纠错。fromtypingimportTypedDictclassWorkflowState(TypedDict,totalFalse):user_role:stroriginal_advice:strsimplified_advice:str使用方式state:WorkflowState{}# 声明变量类型为 WorkflowStatestate[user_role]studentstate[original_advice]Practice Python daily.print(state[user_role])# 输出: student作为函数参数的类型声明与使用defprocess_advice(data:WorkflowState)-str:# 因为定义了类型IDE 知道 data.get 应该填什么键originaldata.get(original_advice,)roledata.get(user_role,guest)returnf为{role}生成:{original}input_data{user_role:teacher,original_advice:Focus on pedagogy}resultprocess_advice(input_data)节点函数定义对LangChain和LangGraph的认识从名称看来LangChain是链式的类似于线性结构处理的是类似于流水线式的简单任务而LangGraph是图也就是有节点和边的图从示例代码中也可以看到LangGraph对于图的定义是开发者可以根据业务逻辑自由定义的灵活性更高。示例代码给人的直观感受是langchain不适合复杂流程就当前这个案例而言可能很多人会有疑问langchain和大家日常所使用的deepseek、豆包等工具实现的功能是一样的吗langchain只是需要有代码基础的人实现批量任务的吗接下来我们从后续课程中继续寻找答案langraph给人的直观感受是自定义性强可以自己去设计工作流状态、节点以及节点的连接方式比较适合复杂任务。本文代码部分来源datawhale easy-langent项目

相关文章:

LangChain、LangGraph入门

本文主要是基于学习的datawhale关于langchain、langgraoh课程,记录的学习过程与个人看法。 安装依赖 安装langchain、langgraph、openai依赖及用于管理环境变量(python-dotenv)的辅助依赖 pip install langchain langgraph openai langchain_openai python-doten…...

org.openpnp.vision.pipeline.stages.DetectFixedCirclesHough

文章目录org.openpnp.vision.pipeline.stages.DetectFixedCirclesHough功能参数固定参数(在 XML 中配置)动态参数(必须通过 pipeline.setProperty() 预先设置)例子效果ENDorg.openpnp.vision.pipeline.stages.DetectFixedCirclesH…...

Nanbeige4.1-3B应用场景:制造业设备维修手册QA系统,支持PDF/图片OCR混合输入

Nanbeige4.1-3B应用场景:制造业设备维修手册QA系统,支持PDF/图片OCR混合输入 想象一下这个场景:车间里一台关键设备突然报警停机,维修工程师小王满头大汗地翻着一本厚厚的纸质维修手册,试图从几百页里找到对应的故障代…...

亚洲美女-造相Z-Turbo创意工坊案例:独立艺术家用其生成NFT系列《东方十二时辰》

亚洲美女-造相Z-Turbo创意工坊案例:独立艺术家用其生成NFT系列《东方十二时辰》 1. 项目背景与价值 在数字艺术创作领域,AI图像生成技术正在改变传统创作方式。亚洲美女-造相Z-Turbo作为一个专门针对亚洲女性形象生成的AI模型,为艺术家提供…...

UiPath003 创建基本库

以下教程将引导您完成在 Studio 中创建库,发布库并在其他自动化项目中使用库的步骤。 创建库与创建基本流程类似。区别在于,库是一个包含可重用组件的包,这些组件可以在其他项目的上下文中使用。 本示例从 Excel 电子表格获取数据&#xff0c…...

AI人体骨骼关键点检测作品集:多场景骨架图生成,效果直观一目了然

AI人体骨骼关键点检测作品集:多场景骨架图生成,效果直观一目了然 1. 引言 1.1 技术亮点展示 今天我要带大家看一组令人惊艳的AI骨骼检测作品集。基于Google MediaPipe Pose模型,这套系统能在毫秒级时间内精准定位人体33个关键点&#xff0…...

RT-DETR实战入门:从零搭建PyTorch训练环境与数据准备

1. RT-DETR简介与环境配置 RT-DETR是百度最新推出的实时目标检测模型,基于Transformer架构设计,在速度和精度上都有不错的表现。相比传统的YOLO系列,RT-DETR采用了更先进的注意力机制,能够更好地处理复杂场景中的目标检测任务。对…...

Java学习笔记_Day30(File)

FileFile对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径这个路径可以是存在的,也可以是不存在的三种构造方法常见的成员方法1.判断和获取2.创建和删除3.获取并遍历当调用者File表示的路径不存在时,返回null当调用者Fi…...

嵌入式系统课程设计:基于STM32和CLIP-GmP-ViT-L-14的智能分类垃圾桶

嵌入式系统课程设计:基于STM32和CLIP-GmP-ViT-L-14的智能分类垃圾桶 1. 项目缘起:一个有趣又实用的想法 你有没有想过,家里的垃圾桶要是能自己“认”垃圾就好了?可回收的瓶子扔进去,它自动打开可回收桶的盖子&#x…...

【移动端知识,vw单位适配

移动端知识移动端不需要设置版心物料像素和css像素物料像素css像素物料像素和css像素的关系设计稿都是按物理像素给的,我们开发的时候要写css像素,所以要改总结实现移动端适配方案vw单位适配vw和vh的介绍一直占页面宽度和高度的一半移动端适配...

ollama部署本地大模型|granite-4.0-h-350m在新闻聚合平台摘要生成落地

ollama部署本地大模型|granite-4.0-h-350m在新闻聚合平台摘要生成落地 1. 引言:当新闻摘要遇上轻量级AI 每天,新闻聚合平台的后台都会涌入成千上万条信息。编辑团队需要快速浏览、提炼、生成摘要,这不仅是体力活,更是…...

基于深度学习的车辆测距识别 yolov8双目测距 yolov8+sgbm(原理+代码)

YOLOv8结合SGBM立体匹配算法进行双目测距的工作流程和原理主要包括以下几个核心步骤: 往期热门博客项目回顾: 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yo…...

终极Windows优化指南:3分钟用Win11Debloat释放系统性能

终极Windows优化指南:3分钟用Win11Debloat释放系统性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and c…...

Qwen3-32B长文本处理实战:128K上下文,轻松分析整本电子书

Qwen3-32B长文本处理实战:128K上下文,轻松分析整本电子书 你是否曾经需要分析一本300页的技术文档,却苦于找不到合适的工具?或者尝试用AI处理长文本时,发现模型总是"忘记"前半部分的内容?这些痛…...

电赛核心科技:拆解卡尔曼滤波与姿态解算

前言: 在电赛的控制类题目(如平衡小车、倒立摆、无人机)中,获取精准的姿态角是所有控制逻辑的基石。很多同学在串口助手看到 MPU6050 的原始数据时,往往会陷入绝望:数据要么满屏噪声,要么随时间…...

Ostrakon-VL-8B详细步骤:查看llm.log日志、验证加载状态、发起首轮提问

Ostrakon-VL-8B详细步骤:查看llm.log日志、验证加载状态、发起首轮提问 1. 从零开始:认识Ostrakon-VL-8B图文对话模型 如果你正在寻找一个专门为零售和餐饮场景设计的智能助手,那么Ostrakon-VL-8B绝对值得你花时间了解。这是一个开箱即用的…...

Phi-4-mini-reasoning惊艳效果展示:高精度数学推导+代码生成对比实测

Phi-4-mini-reasoning惊艳效果展示:高精度数学推导代码生成对比实测 1. 开篇:小模型的大智慧 Phi-4-mini-reasoning这款仅有3.8B参数的轻量级开源模型,正在重新定义我们对小型语言模型能力的认知。专为数学推理、逻辑推导和多步解题等强逻辑…...

SUPER COLORIZER作品集:从经典素描到赛博朋克的风格化上色展示

SUPER COLORIZER作品集:从经典素描到赛博朋克的风格化上色展示 你有没有想过,一张简单的黑白线稿,能在几秒钟内变成一幅充满未来感的赛博朋克画作,或者一幅意境深远的水墨画?这听起来像是专业画师的工作,但…...

JS逆向|猿人学逆向反混淆练习平台第13题加密分析

关注它,不迷路。本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!一.题目地址https://match.yuanrenxue.cn/match/13二.抓包分析先打开控制台&…...

MySQL8.0升级到MySQL8.4避坑:密码插件问题

对于广大运维和DBA来说,MySQL8.0即将结束官方支持(EOL)已经是板上钉钉的事。按照Oracle官方的版本生命周期策略,MySQL8.0的常规支持周期逐步收尾,后续仅保留有限的安全修复,不再提供功能更新与全面技术支持…...

【CVPR26-马连博-东北大学】面向增量式统一多模态异常检测:基于信息瓶颈视角增强多模态去噪

文章:Towards an Incremental Unified Multimodal Anomaly Detection: Augmenting Multimodal Denoising From an Information Bottleneck Perspective代码:https://github.com/longkaifang/IB-IUMAD单位:东北大学一、问题背景在工业质检场景…...

【零日对抗样本防御白皮书】:基于动态梯度掩蔽+可信执行环境(TEE)的AIAgent双模防护架构(附GitHub开源验证代码)

第一章:AIAgent架构中的对抗样本防御 2026奇点智能技术大会(https://ml-summit.org) 在AIAgent系统中,对抗样本并非边缘威胁,而是影响决策链路完整性的结构性风险。当多模态感知模块(如视觉编码器、语音转文本模型)与…...

MiniCPM-o-4.5-nvidia-FlagOS企业应用:制造业BOM图纸识别+物料说明生成系统

MiniCPM-o-4.5-nvidia-FlagOS企业应用:制造业BOM图纸识别物料说明生成系统 1. 引言:当图纸遇到AI,制造业的“说明书”难题迎刃而解 想象一下这个场景:一家制造工厂的工程师小王,正对着一份刚从供应商那里发来的复杂装…...

基于ThinkPHP与Uniapp的跨平台设备巡检系统源码解析与实战部署

1. 系统架构与技术选型解析 这套设备巡检系统采用了经典的前后端分离架构,后端基于ThinkPHP框架开发,前端则使用Uniapp实现跨平台支持。我在实际部署过程中发现,这种组合既保证了后台管理的高效稳定,又能快速生成微信小程序&#…...

无刷电机参数智能转换工具:兼容PMSM与BLDC,支持磁链/反电势计算及FOC开发辅助

温馨提示:文末有联系方式一、多类型电机兼容的参数转换解决方案 本工具专为现代驱动系统设计,原生支持永磁同步电机(PMSM)、直流无刷电机(BLDC)等多种主流无刷电机类型,满足不同拓扑结构与控制策…...

基于LSTM与M2LOrder的对比:深度解析时序情感分析技术演进

基于LSTM与M2LOrder的对比:深度解析时序情感分析技术演进 最近在做一个关于用户连续对话情感追踪的项目,发现一个挺有意思的现象:用传统的LSTM模型,当对话稍微长一点,模型对前面情绪的“记忆”就开始模糊了。比如用户…...

如何用Video2X实现AI视频无损放大:新手必学的5大技巧

如何用Video2X实现AI视频无损放大:新手必学的5大技巧 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video2…...

3分钟搞定!APA第7版参考文献格式一键安装指南

3分钟搞定!APA第7版参考文献格式一键安装指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 还在为论文参考文献格式头疼吗?AP…...

Qwen3目标检测辅助字幕对齐:融合YOLOv8的场景文本识别

Qwen3目标检测辅助字幕对齐:融合YOLOv8的场景文本识别 你有没有遇到过这种情况?看一个软件操作教程视频,讲解者语速飞快,字幕却跟不上,或者干脆识别错误,把“点击这个按钮”识别成了“点击这个布顿”。尤其…...

Qwen3-TTS-12Hz-1.7B-Base真实案例:为无障碍考试系统生成标准化语音试卷

Qwen3-TTS-12Hz-1.7B-Base真实案例:为无障碍考试系统生成标准化语音试卷 你有没有想过,对于视障人士来说,参加一场普通的考试有多困难?传统的纸质试卷对他们来说是无法逾越的障碍,而人工朗读试卷又存在效率低、成本高…...