LangChain 全面入门

什么是 LangChain?

LangChain 是一个专门为 大语言模型 (LLM) 应用开发设计的开源框架,帮你快速实现:

• 多轮对话

• 知识库问答 (RAG)

• 多工具协同调用 (function calling / tool)

• 智能体 Agent 自动决策任务链

解耦 LLM 接口、Prompt、Memory、检索、工具、Agent,模块化管理,专注业务逻辑开发。

LangChain 核心功能详解

模块 功能说明 典型用途
LLM 封装各类语言模型 (OpenAI、Azure、Gemini、Claude) 接口 文本生成、摘要、翻译、续写
Prompt 灵活编排多角色 Prompt 模板,支持变量插值和参数化调用 定制多轮对话、RAG、文档总结
Memory 保存对话上下文、变量或历史记录,维持多轮上下文一致性 多轮对话机器人、智能 Agent
Retriever 检索器,配合向量库 (FAISS / Azure Search / Milvus) 实现文档检索 知识库检索问答、RAG 系统
Tool 封装 Python 函数 / 外部 API,让 LLM 能实时调用 实时查天气、数据库读写、调用第三方接口
Function Calling LLM 判断需要调用 Tool 时,自动生成调用请求(含参数),返回结构化 JSON LLM 与工具实时交互,动态任务执行
Agent 智能体,能调度多个工具,执行多步骤任务链,有判断、记忆、推理能力 AutoGPT、任务规划、多接口串联
Document Loader 加载本地/远程/数据库/网页文档,支持多格式 (txt、pdf、markdown) 知识库构建、RAG 文档管理
Text Splitter 将长文档拆分成小块,便于后续向量化检索,支持按字数/句子/段落拆分 文档分割、RAG 知识库优化
Embedding Model 将文本转为向量,便于检索与相似度计算,兼容 OpenAI / Huggingface 等 向量检索、RAG、智能推荐

Azure OpenAI and Gemini

下文会用langchian来分别对Azure OpenAI和Gemini的实现,所以这里也简单对二者进行一个功能对比。
功能对比

项目 Azure OpenAI Google Gemini
📖 背景厂商 Microsoft Azure + OpenAI Google DeepMind (PaLM 升级版)
📦 模型版本 GPT-3.5 / GPT-4 / GPT-4o Gemini 1 / Gemini 1.5 Pro / Gemini Flash
📑 接口方式 REST API / Azure SDK / LangChain / Function Calling 支持 REST API / Google Generative AI SDK / LangChain
📦 兼容 LangChain
📃 Function Calling ✅ (Gemini 1.5 后原生支持)
🔒 部署模式 私有化企业 Azure 内网部署 / 公有云 公有云部署
📂 知识库检索 (RAG) ✅ (Azure Cognitive Search / FAISS / Chroma) ✅ (FAISS / Google Cloud Search / Chroma)
🌐 多模态支持 GPT-4o (文本+图像) Gemini 1.5 (文本+图片+音频+视频)
💰 成本控制 Azure 统一计费,按 token 收费 Google Cloud Platform 计费,按 token 或调用次数收费
📊 性能 高稳定性,企业级 SLA,支持模型多副本部署 多模态能力领先,性能灵活
📌 适用场景 企业 AI 应用、智能客服、知识库问答、Agent、RAG AI Copilot、多模态问答、AI 助手、多模态检索
📦 API Key 配置方式 Azure Portal → Azure OpenAI Resource → Key + Endpoint Google Cloud Console → API & Services → Credentials + Key
📚 官方文档 https://learn.microsoft.com/azure/cognitive-services/openai/ https://ai.google.dev/
  • Azure OpenAI:稳定、企业私有部署强、RAG 知识库生态好、适合企业应用落地。
  • Google Gemini:多模态能力超强、文本+图像+音频+视频一体、灵活 AI Copilot 场景首选。

实战案例汇总

环境准备

基本库

shell 复制代码
!python version  #3.12.x
!pip install python-dotenv requests tiktoken
 
 #langchian
!pip install langchain 

# openai
## Azure 用法同 OpenAI,只是多了 azure_endpoint 和 deployment_name 配置。
!pip install langchain-openai 

# gemini
!pip install langchain-google-genai

验证安装

python 复制代码
from langchain import __version__
print(__version__) #0.3.25

.env

env 复制代码
GOOGLE_API_KEY=AIza****

AZURE_API_KEY=N2****
AZURE_ENDPOINT=****
AZURE_API_VERSION=2024-12-01-preview
AZURE_DEPLOYMENT=o4-mini-global

LangChain 调用 Gemini/Azure OpenAI 示例

调用 Gemini

python 复制代码
from langchain_google_genai import ChatGoogleGenerativeAI
from dotenv import load_dotenv
import os

load_dotenv()
llm = ChatGoogleGenerativeAI(
    model="gemini-2.0-flash",
    google_api_key=os.getenv("GOOGLE_API_KEY")
)

# 普通 prompt 调用
response = llm.invoke("用一句话介绍LangChain")
print(response.content)

LangChain是一个用于开发由大型语言模型 (LLM) 驱动的应用程序的框架。

调用Azure OpenAI

python 复制代码
from langchain_openai import AzureChatOpenAI
load_dotenv()
llm2 = AzureChatOpenAI(
    deployment_name=os.getenv("AZURE_DEPLOYMENT"),
    openai_api_key=os.getenv("AZURE_API_KEY"),
    azure_endpoint=os.getenv("AZURE_ENDPOINT"),
    api_version=os.getenv("AZURE_API_VERSION"),
    temperature=1
)

response = llm2.invoke("用一句话介绍LangChain")
print(response.content)

LangChain是一个开源框架,通过链式调用、内存管理与工具集成,简化基于大型语言模型的应用构建。


PromptTemplate

python 复制代码
from langchain.prompts import PromptTemplate

# PromptTemplate 调用
prompt = PromptTemplate(
    input_variables=["product"],
    template="请写一段关于 {product} 的夸赞"
)
response = llm.invoke(prompt.format(product="小米YU7"))
print(response.content)

多轮消息

python 复制代码
from langchain.schema import AIMessage, HumanMessage, SystemMessage

# 多轮消息
response = llm.invoke([
    SystemMessage(content="你是一个 Python 顾问,只能用代码回答。"),
    HumanMessage(content="写一个hello world")
])
print(response.content)

```python

print("Hello, world!")

```

Few-ShotPromptTemplate

python 复制代码
from langchain.prompts import FewShotPromptTemplate, PromptTemplate

# Few-ShotPromptTemplate
# 定义范例
examples = [
    {"question": "北京今天天气如何?", "answer": "北京今天晴天 28°C"},
    {"question": "上海今天天气?", "answer": "上海今天多云 27°C"}
]

# 单个示例模板
example_prompt = PromptTemplate(
    input_variables=["question", "answer"],
    template="问:{question}\n答:{answer}\n"
)

# few-shot 模板
prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="问:{input}\n答:",
    input_variables=["input"]
)

response = llm.invoke(prompt.format(input="广州天气?"))
print(response.content)

广州今天多云 30°C

多轮对话+memory

python 复制代码
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain

memory2 = ConversationBufferMemory()
conversation = ConversationChain(llm=llm, memory=memory2)
conversation.run("你好,我是谁?")
print(conversation.run("我刚才说了什么?"))

你刚才说:"你好,我是谁?"

RAG

环境依赖

shell 复制代码
!pip install faiss-cpu        # 向量数据库,推荐CPU版本
!pip install tiktoken         # Tokenizer

Gemini

python 复制代码
from langchain_google_genai import GoogleGenerativeAIEmbeddings, ChatGoogleGenerativeAI
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.text_splitter import CharacterTextSplitter

# 1. 假想手机产品介绍文本
docs = [
    """
    大豆15PRO 5G 是由星辰科技推出的一款旗舰智能手机,搭载最新的5纳米制程芯片,配备8核处理器和12GB高速内存,确保流畅的多任务处理能力。该机拥有6.7英寸AMOLED全面屏,支持120Hz刷新率和HDR10+显示技术,带来细腻逼真的视觉体验。

    摄像方面,大豆15PRO 5G 配备后置四摄系统,包括一颗1亿像素主摄、超广角镜头、微距镜头和深度感应器,支持夜景增强和4K视频录制功能。前置摄像头为3200万像素,支持美颜和人脸解锁。

    电池容量为4500mAh,支持55W有线快充和30W无线快充,续航表现优异。操作系统基于最新的StarOS,优化了系统流畅度和隐私保护。大豆15PRO 5G 还支持5G双卡双待、NFC支付以及IP68级防尘防水。

    该产品定位高端用户,主打性能和拍照体验,适合游戏玩家和摄影爱好者使用。
    """
]

# 2. 文本拆分
# 就把文本每100个字符拆一块。每个块会和前一个块重叠10个字符。
## 即块为分为[0,100),[91,190)....
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=10)
texts = []
for doc in docs:
    texts.extend(text_splitter.split_text(doc))

# 3. 初始化 Gemini Embeddings
embeddings = GoogleGenerativeAIEmbeddings(model="models/gemini-embedding-exp-03-07")

# 4. 创建向量索引
vector_store = FAISS.from_texts(texts, embeddings)

# 5.构建 RAG 检索问答链
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=vector_store.as_retriever())

# 6. 测试问答
query = "大豆15PRO的规格是什么?"
answer = qa_chain.run(query)
print("Q:", query)
print("A:", answer)

输出:

复制代码
Q: 大豆15PRO的规格是什么?
A: 大豆15PRO 5G 是一款旗舰智能手机,具有以下规格:
* 芯片:最新的5纳米制程芯片,8核处理器,12GB高速内存
* 屏幕:6.7英寸AMOLED全面屏,120Hz刷新率,HDR10+
* 电池:4500mAh,55W有线快充,30W无线快充
* 操作系统:StarOS
* 网络:5G双卡双待,NFC,IP68级防尘防水
* 后置摄像头:1亿像素主摄、超广角镜头、微距镜头、深度感应器,支持夜景增强和4K视频录制
* 前置摄像头:3200万像素,支持美颜和人脸解锁

Azure OpenAI

python 复制代码
from langchain_openai import AzureOpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain_openai import AzureChatOpenAI
from langchain.chains import RetrievalQA
from langchain.text_splitter import CharacterTextSplitter

load_dotenv()
# 1. 假想手机产品介绍文本
#data....

# 2. 文本拆分
# 就把文本每100个字符拆一块。每个块会和前一个块重叠10个字符。
## 即块为分为[0,100),[91,190)....
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=10)
texts = []
for doc in docs:
    texts.extend(text_splitter.split_text(doc))

# 3. Embeddings 初始化(Azure OpenAI)
embeddings = AzureOpenAIEmbeddings(
    azure_endpoint=os.getenv("AZURE_ENDPOINT"),
    azure_deployment="text-embedding-3-small",
    openai_api_version=os.getenv("AZURE_API_VERSION"),
    openai_api_key=AZURE_API_KEY
)

# 4. 创建向量索引
docsearch = FAISS.from_texts(texts, embeddings)

# 5.构建 RAG 检索问答链
qa_chain = RetrievalQA.from_chain_type(llm=llm2, retriever=docsearch.as_retriever())

# 6. 测试问答
query = "大豆15PRO的规格是什么?"
answer = qa_chain.run(query)
print("Q:", query)

输出:

复制代码
Q: 大豆15PRO的规格是什么?
A: 大豆15PRO 5G 主要规格一览:

• 处理器  
  -- 最新 5 nm 制程 8 核芯片  

• 内存  
  -- 12 GB 高速 RAM  

• 屏幕  
  -- 6.7 英寸 AMOLED 全面屏  
  -- 120 Hz 刷新率  
  -- HDR10+ 显示技术  

• 电池与充电  
  -- 4500 mAh 电池  
  -- 55 W 有线快充  
  -- 30 W 无线快充  

• 操作系统  
  -- 基于最新 StarOS  

• 网络与连接  
  -- 5G 双卡双待  
  -- NFC 支付  
  -- IP68 级防尘防水  

• 摄像系统  
  -- 后置四摄  
     • 1 亿像素主摄  
     • 超广角镜头  
     • 微距镜头  
     • 深度感应器  
  -- 夜景增强、4K 视频录制  
  -- 前置 3200 万像素自拍摄像头(支持美颜、人脸解锁)

该机面向高端用户,主打性能与拍照体验,适合游戏玩家和摄影爱好者。

Function Calling

Gemini

python 复制代码
import os, requests
from langchain.agents import initialize_agent, Tool, AgentType
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_openai import AzureChatOpenAI
from langchain.tools import StructuredTool

def get_weather(city: str) -> str:
    return f"{city} 今天天气晴朗 26°C (模拟数据)"

#weather_tool = Tool(name="get_weather", func=get_weather, description="获取城市天气")

weather_tool_func = StructuredTool.from_function(
    func=get_weather,
    name="get_weather",
    description="获取城市天气"
)

agent_gemini = initialize_agent(
    tools=[weather_tool_func],
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)
print("Gemini Tool:", agent_gemini.run("查成都天气"))

输出

复制代码
> Entering new AgentExecutor chain...
我需要查询成都的天气。
Action: get_weather
Action Input: 成都
Observation: 成都 今天天气晴朗 26°C (模拟数据)
我已经知道了成都的天气。
Final Answer: 成都今天天气晴朗,26°C。

> Finished chain.
Gemini Tool: 成都今天天气晴朗,26°C。

Azure OpenAI

python 复制代码
agent_azure = initialize_agent(
    tools=[weather_tool],
    llm=llm2,
    agent=AgentType.OPENAI_FUNCTIONS,
    verbose=True
)
print("Azure Tool:", agent_azure.run("查广州天气"))

输出

复制代码
> Entering new AgentExecutor chain...

Invoking: `get_weather` with `广州`


广州 今天天气晴朗 26°C (模拟数据)

多工具任务链 Agent

Gemini

python 复制代码
def get_weather(city: str) -> str:
    return f"{city} 天气晴 27°C"

def get_joke(_) -> str:
    """本方法不需要任何入参"""
    url = "https://icanhazdadjoke.com/"
    return requests.get(url, headers={"Accept": "text/plain"}).text

tools = [
    Tool(name="weather", func=get_weather, description="获取天气"),
    Tool(name="joke", func=get_joke, description="讲个笑话")
]

agent_gemini = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)
print("Gemini Agent:", agent_gemini.run("帮我查北京天气,然后讲个笑话,最后将笑话翻译为中文"))

输出

复制代码
> Entering new AgentExecutor chain...
Thought: First, I need to find out the weather in Beijing. Then, I need to get a joke. Finally, I will present both pieces of information.
Action: weather
Action Input: 北京
Observation: 北京 天气晴 27°C
Now I know the weather in Beijing. I need to get a joke.
Action: joke
Action Input: _
Observation: Why are pirates called pirates? Because they arrr!
I have the weather and the joke. Now I need to present them together.
Final Answer: 北京天气晴,27°C。笑话:Why are pirates called pirates? Because they arrr! (为什么海盗叫海盗?因为他们啊啊啊!)

> Finished chain.
Gemini Agent: 北京天气晴,27°C。笑话:Why are pirates called pirates? Because they arrr! (为什么海盗叫海盗?因为他们啊啊啊!)
相关推荐
一切尽在,你来21 小时前
第二章 预告内容
人工智能·langchain·ai编程
一切尽在,你来1 天前
1.1 AI大模型应用开发和Langchain的关系
人工智能·langchain
一切尽在,你来1 天前
1.2 LangChain 1.2.7 版本核心特性与升级点
人工智能·langchain
Bruk.Liu1 天前
(LangChain 实战14):基于 ChatMessageHistory 自定义实现对话记忆功能
人工智能·python·langchain·agent
JaydenAI1 天前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
OPEN-Source1 天前
大模型实战:搭建一张“看得懂”的大模型应用可观测看板
人工智能·python·langchain·rag·deepseek
一切尽在,你来1 天前
1.4 LangChain 1.2.7 核心架构概览
人工智能·langchain·ai编程
一切尽在,你来1 天前
1.3 环境搭建
人工智能·ai·langchain·ai编程
蛇皮划水怪2 天前
深入浅出LangChain4J
java·langchain·llm
、BeYourself2 天前
LangChain4j 流式响应
langchain