Day 1 环境 + 架构 + Demo 跑通

目标:理解新版 LangChain 的架构组成

内容框架:

  • 层级关系:core(抽象层) → model(模型连接层) → community(集成层) → langchain(组合层)

  • LangChain 四层架构解析:

    • langchain_core

      • 功能:核心抽象层,包含 Runnable、Prompt、OutputParser 等基础组件
      • 核心模块:[‘VERSION’, ‘caches’, ‘callbacks’, ‘documents’, ‘embeddings’]
    • langchain_openai

      • 功能:模型连接层,专为 OpenAI 模型提供集成支持
    • langchain_community

      • 功能:社区集成层,整合第三方工具、向量库和文档加载器
    • langchain

      • 功能:应用组合层,提供高级链、Agent 和 LangGraph 等功能

架构示意图:

┌─────────────────────────────────────────┐
│           langchain (应用层)             │ ← 高级组合
│    Chains, Agents, LangGraph workflows  │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│        langchain-community (集成层)      │ ← 第三方集成  
│    VectorStores, Tools, DocumentLoaders │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│          langchain-openai (模型层)       │ ← 模型提供商
│        ChatOpenAI, OpenAIEmbeddings     │
└─────────────────────────────────────────┘  
┌─────────────────────────────────────────┐
│           langchain-core (抽象层)        │ ← 核心抽象
│    Runnable, Prompt, OutputParser       │
└─────────────────────────────────────────┘

Runnable 核心机制详解

  • Runnable 统一接口

    • 功能:为所有组件提供标准化调用方式,实现类乐高积木的模块化设计
    • 主要方法:
      • invoke(input):单次输入输出
      • batch(inputs):批量处理
      • stream(input):流式处理
      • 异步版本:ainvoke(), abatch(), astream()
      • with_retry:自动重试机制
  • LCEL 编排语言

    • 语法:使用管道符 | 连接 Runnable 组件
    • 基础示例:提示词 | 模型 | 输出解析器
    from langchain_core.prompts import ChatPromptTemplate
    from langchain_openai import ChatOpenAI
    from langchain_core.output_parsers import StrOutputParser
    
    # 组件定义
    prompt = ChatPromptTemplate.from_template("讲一个关于{topic}的笑话")
    model = ChatOpenAI(model="gpt-3.5-turbo")
    output_parser = StrOutputParser()
    
    # 链式组合
    chain = prompt | model | output_parser
    
    # 执行调用
    result = chain.invoke({"topic": "冰淇淋"})
    print(result)
    

    数据流向:{"topic": "冰淇淋"}promptmodeloutput_parser → 最终输出

  • 任务拆分机制

    • 功能:支持 Agent 将复杂任务分解为子任务
    • 示例工具函数:
    def get_weather(city: str) -> str:
        """获取城市天气信息"""
        return f"今天{city}的天气晴朗。"
    

最小实现示例

import os
from dotenv import load_dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableBranch
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser

# 工具函数
def generate_joke(topic: str) -> str:
    joke_prompt = ChatPromptTemplate.from_template("讲一个关于{topic}的笑话。")
    joke_chain = joke_prompt | model | output_parser
    return joke_chain.invoke({"topic": topic})

# 初始化配置
load_dotenv(override=True)
model = ChatOpenAI(
    model="qwen3-max",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url=os.getenv("DASHSCOPE_BASE_URL"),
    max_tokens=1000,
    temperature=0.8,
    streaming=True
)
output_parser = StrOutputParser()

# 分支处理链
poem_prompt = ChatPromptTemplate.from_template("写一首关于{topic}的短诗。")
poem_chain = poem_prompt | model | output_parser

branch = RunnableBranch(
    (lambda x: "冰淇淋" in x["topic"], lambda x: generate_joke(x["topic"])),
    poem_chain
)

# 执行示例
print(branch.invoke({"topic": "月亮"}))  # 输出诗歌
print(branch.invoke({"topic": "冰淇淋"}))  # 输出笑话

基础检查脚本

import langchain_core
import langchain_openai
import langchain_community
import langchain

for pkg in [langchain_core, langchain_openai, langchain_community, langchain]:
    print(pkg.__name__, dir(pkg))

为什么 LangChain 1.0+ 采用模块化设计?

LangChain 1.0+ 版本采用了模块化设计,主要旨在提升框架的清晰度、可维护性和灵活性,同时确保向后兼容性并聚焦于核心功能,这一设计转变源于对早期版本的反思,其中包结构较为庞大,导致开发者在构建代理(agent)系统时面临不必要的复杂性。通过模块化,LangChain 将核心抽象分离出来,并将遗留功能迁移到专用包中,从而为开发者提供更精炼的构建块

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值