type
Post
status
Draft
date
Mar 3, 2026
slug
langchain-001
summary
tags
AI
LLM
Agent
category
LangChain
icon
password
😀
 

LangChain

理论概述

是什么

  • LangChain
    • LangChain是2022年10月底,由哈佛大学的Harrison Chase(哈里森·蔡斯)发起的基于开源大语言模型的AI工程开发框架。顾名思义,LangChain中的“Lang”自然是指大语言模型,“Chain”即“链”,也就是将大模型与其他组件连接成链,借此构建AI工程应用LangChain的发布比ChatGPT问世还要早一个月,从这个启动日期也可以看出创始人的眼光,占了先机的它迅速获得广泛关注和支持!
    • 等价于
      • LangChain For Python
  • LangChain4J
    • 随着人工智能(AI)技术的迅猛发展,越来越多的开发者开始将目光投向AI应用的开发。然而,目前市场上大多数AI框架和工具如LangChain、PyTorch等主要支持Python,而Java开发者常常面临工具缺乏和学习门槛较高的问题,但是不用担心,谁让Java/Spring群体强大那?,O(∩_∩)O 任何一个框架/XXX云服务器,想要大面积推广,应该不会忘记庞大的Spring社区和Java程序员
    • 等价于
  • AB法则(Before | After)
    • Before
    • After
  • 一句话
    • 就是一套把大模型和外部世界连接起来的工具代码。

能干嘛

  • 大模型开发分类
  • Boss直聘对标岗位说明......
  • LLM大模型能干什么
    • controller
    • service
    • dao/mapper
  • LLM大模型应用技术架构

去哪下

怎么玩

  • 为什么现在是学习LangChain的最佳时机?
    • 它生态太强了。·你想用的任何工具(Google Search,Wikipedia, Notion, Gmai...),LangChain里都有现成的组件。·你想用的任何技术(RAG,ReAct,MapReduce...,LangChain里都有现成的模板。它就像AI届的Spring框架或者React框架,虽然臃肿,虽然有坑,但它是目前最快上手、资源最多的选择。 对于初学者,阳哥的建议是:不要试图去学完LangChain的所有API,那是不可能的。你只需要搞懂它的核心逻辑(后面会介绍的六大核心模块)然后,用到什么再去查什么。把它当成一个工具箱,而不是一本教科书。
  • 总体架构图
    • V0.1 版本
    • V0.2 / V0.3 版本
      • LangChain生态系统的主要组件及其分类,分为三个层次:架构(Architecture)、组件(Components)和部署(Deployment)。 - 最底层是架构部分,包括LangChain和LangGraph,它们均开源(OSS)。LangChain负责提供基础的链条设计与构建功能,而LangGraph扩展了图形化建模能力,用于更加复杂的链条架构设计。 - 中间层是组件部分,标注为开源(OSS)的Integrations模块,负责与外部工具或服务集成,例如与API、数据库或第三方模型交互,支持灵活扩展与适配。 - 最顶层是部署部分,包括LangGraph Cloud和LangSmith。其中LangGraph Cloud是商业化的云端解决方案,支持跨平台部署与管理;LangSmith则提供一系列商业化的功能模块,如调试、交互式测试环境、提示管理、注释工具、性能测试以及监控功能,用于提升开发效率与产品稳定性。
    • LangChain 1.0架构:轻核心与模块化
      • langchain-Core:基础抽象和LangChain表达式语言 (LCEL),构成应用程序认知架构的Chains,Agents,Retrieval strategies等langchain-community:第三方集成,比如:合作伙伴包 langchain-openai,langchain-anthropic等LangGraph:LangGraph能够协调多个Chain,Agent,Tools完成更复杂的任务,并且还支持循环调用,是langchain图形化的增强版
  • 六大金刚
    • LangChain的六大组件的耦合非常松散,各组件之间没有调用顺序,也没有固定的接口。开发者可以自由设计并组合它们
    • Models(模型)
    • Memory(记忆)
    • Retrieval(检索)
    • Chains(链)
    • Agents(智能体)
    • Callback(回调)

LangChain是完美的吗?不,非常操蛋/(ㄒoㄒ)/~~

虽然LangChain现在是业界的扛把子,但它的糟心事也真的不少。 1,文档写得乱:这是公认的。LangChain更新太快了,大概两三天就是一个新版本。官方文档经常跟不上代码的更新速度,你在文档里看到的方法,可能在最新版代码里已经被改名或者删除了。这对新手极其不友好。 2,抽象过度:为了兼容所有的模型和数据库,LangChain封装了一层又一层。有时候你只想做一个简单的功能,结果发现要调用的类藏在很深的地方。这也导致了所谓的”LangChain很慢”的说法——不是运行慢,是调试代码的时候脑子转得慢,因为调用栈太深了。 3,版本不兼容:你今天写的代码,下个月升级了LangChain可能就跑不通了。
  • ChatModel
  • Agent
  • 还有其它......

LangChain1.0与AI原生的未来

LangChain正在从一个“代码库”进化成一套完整的“AI开发操作系统”。而且,随着大模型本身的能力越来越强(比如GPT-4的Context窗口越来越大,能一次性读完一本书),也许未来简单的RAG不需要那么复杂的切片逻辑了。 但Agent(智能体)的逻辑会越来越重要。 未来的AI应用,一定不是简单的”一问一答”,而是”一句话解决复杂任务”。比如:“帮我写个游戏,然后发布到AppStore”。这中间涉及到写代码、画图、测试、填表单、上传等几十个步骤。 LangChain就是在为这种未来打地基。

永远的HelloWorld

前置约定

  • 动手前模型约定
    • Subtopic
    • Subtopic
  • 配置门道和关键点
    • 通过后续讲解配置规则,所有调用均基于 OpenAI协议标准或者具体模型官方推荐整合规则,实现一致的接口设计与规范,确保多模型切换的便利性,提供高度可扩展的开发支持
  • 两版本对比
    • 统一模型入口:init_chat_model
      • 统一模型入口:init_chat_model

大模型服务平台

LangChain作为一个“工具”,依赖于第三方集成各种大模型。有许多提供大模型API服务的平台,使用时只需要注册、充值并创建API-Key,之后即可使用API-Key与URL来调用平台提供的相应的模型的服务。

Python+LangChain安装依赖包

永远的HelloWorldV1---零基础入门

  • 案例代码
    • LangChain0.3版本使用方式
      • LangChain0.3版本使用方式,了解即可,目前再用# 1.导入依赖from langchain_openai import ChatOpenAIfrom openai import OpenAIimport osfrom dotenv import load_dotenv# 第1版:硬编码写死# llm = ChatOpenAI(# model="qwen-plus",# # 硬编码写死# api_key="sk-4fb1edd27f744a278e1e260d2302fdc3", # 平台提供的 API-Key# base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"# )# 第2版:配置进环境变量# llm = ChatOpenAI(# model="qwen-plus",# # 配置进环境变量# api_key=os.getenv("aliQwen-api"),# base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"# )# 第3版:通过 python-dotenv 库读取 env 文件中的环境变量,并加载到当前运行的环境中# 加载.env文件中的环境变量(指定编码,避免中文乱码)load_dotenv(encoding='utf-8')llm = ChatOpenAI( model="deepseek-v3.2", # 配置进环境变量 api_key=os.getenv("QWEN_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")## # 2.提供问题,并调用llmresponse = llm.invoke("你是谁")print(response)print()print(response.content)print()

    • LangChain1.0版本使用方式
      • LangChain1.0+版本使用方式,目前主流# 1.导入依赖import osfrom dotenv import load_dotenvfrom langchain.chat_models import init_chat_model# 2.实例化模型model = init_chat_model( model="qwen-plus", model_provider="openai", api_key=os.getenv("aliQwen-api"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 3.调用模型print(model.invoke("你是谁").content)# model_provider="openai",# ValueError: Unable to infer model provider for model='qwen-plus', please specify model_provider directly.print("*" * 50)#通过 python-dotenv 库读取 env 文件中的环境变量,并加载到当前运行的环境中load_dotenv(encoding='utf-8')model2 = init_chat_model( model="deepseek-v3", model_provider="openai", api_key=os.getenv("QWEN_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 3.调用模型print(model2.invoke("你是谁").content)

    • 对比

问题思考,更进一步,O(∩_∩)O

  • 要求同时存在多种大模型产品在系统里共存使用

永远的HelloWorldV2---PlusPlus

  • 两个模型案例代码
    • LangChain1.0+版本使用方式,目前主流,多模型共存# 1.导入依赖from dotenv import load_dotenvfrom langchain.chat_models import init_chat_modelimport os# .env文件读取load_dotenv()# 2.实例化模型model = init_chat_model( model="qwen-plus", model_provider="openai", api_key=os.getenv("QWEN_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")# 3.调用模型print(model.invoke("你是谁").content)print("*" * 70)# 4.实例化模型v2model = init_chat_model( model="deepseek-chat", # deepseek-chat 对应 DeepSeek-V3.2 的非思考模式 api_key=os.getenv("deepseek-api"), base_url="https://api.deepseek.com")# 5.调用模型v2print(model.dict)print(model.invoke("你是谁").content)

企业级+流式输出

  • 流式输出
  • 企业级
    • 导入必要的库from langchain_openai import ChatOpenAIimport osfrom dotenv import load_dotenvfrom langchain_core.exceptions import LangChainException# 加载.env文件中的环境变量(指定编码,避免中文乱码)load_dotenv(encoding='utf-8')# 配置日志(可选,便于调试)import logginglogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')logger = logging.getLogger(name)def init_llm_client() -> ChatOpenAI: """ 初始化LLM客户端(封装成函数,提高复用性) Returns: ChatOpenAI: 初始化后的LLM客户端实例 """ # 1. 读取环境变量并做非空校验 api_key = os.getenv("QWEN_API_KEY") if not api_key: raise ValueError("环境变量 QWEN_API_KEY 未配置,请检查.env文件") # 2. 初始化LLM客户端(参数命名规范,添加注释) llm = ChatOpenAI( model="deepseek-v3.2", # 模型名称 api_key=api_key, # 通义千问API密钥 base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 阿里云兼容接口地址 temperature=0.7, # 可选:添加温度参数,控制输出随机性 max_tokens=2048 # 可选:限制输出长度,避免超限 ) return llmdef main(): """主函数:封装核心逻辑,符合Python工程化规范""" try: # 初始化客户端 llm = init_llm_client() logger.info("LLM客户端初始化成功") # 调用模型(问题用变量存储,提高可读性) question = "你是谁" response = llm.invoke(question) # 格式化输出结果(而非直接打印原始对象) logger.info(f"问题:{question}") logger.info(f"回答:{response.content}") print("====================以下是流式输出,另一种调用方式") print("*" * 50) responseStream = llm.stream("介绍下langchain,300字以内") for chunk in responseStream: print(chunk.content,end="") # 捕获具体异常(而非宽泛的Exception) except ValueError as e: logger.error(f"配置错误:{str(e)}") except LangChainException as e: logger.error(f"模型调用失败:{str(e)}") except Exception as e: logger.error(f"未知错误:{str(e)}")# 脚本入口(符合Python规范,避免导入时执行代码)if name == "main": main()

题外话:铺垫延展LangGraph

  • 核心理念变革:从“链式”到“图状”思维

📎 参考文章

  • 一些引用
  • 引用文章
 
💡
欢迎您在底部评论区留言,一起交流~
上一篇
第一节 大脑:重新认识你自己
下一篇
Harness Engineering - 搭建Mini Harness
Loading...