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

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 CallingLLM 判断需要调用 Tool 时,自动生成调用请求(含参数),返回结构化 JSONLLM 与工具实时交互,动态任务执行
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 OpenAIGoogle Gemini
📖 背景厂商Microsoft Azure + OpenAIGoogle DeepMind (PaLM 升级版)
📦 模型版本GPT-3.5 / GPT-4 / GPT-4oGemini 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、RAGAI Copilot、多模态问答、AI 助手、多模态检索
📦 API Key 配置方式Azure Portal → Azure OpenAI Resource → Key + EndpointGoogle 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 场景首选。

实战案例汇总

环境准备

基本库

!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

验证安装

from langchain import __version__
print(__version__) #0.3.25

.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

from langchain_google_genai import ChatGoogleGenerativeAI
from dotenv import load_dotenv
import osload_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

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

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

多轮消息

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

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

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

你刚才说:“你好,我是谁?”

RAG

环境依赖

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

Gemini

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

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 CharacterTextSplitterload_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

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 StructuredTooldef 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

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

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"}).texttools = [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! (为什么海盗叫海盗?因为他们啊啊啊!)
http://www.lryc.cn/news/580190.html

相关文章:

  • 数据结构入门:链表
  • 服务器的IO性能怎么看?
  • 数据库11:MySQL 库的操作、库的说明与表的操作、表的说明
  • 电机转速控制系统算法分析与设计
  • 微信小程序如何实现再多个页面共享数据
  • 达梦数据库DMHS介绍及安装部署
  • vue/微信小程序/h5 实现react的boundary
  • 使用Spring AOP实现@Log注解记录请求参数和执行时间
  • Linux基础 -- NAND Flash UBIFS基础特性及注意点
  • Adobe Illustrator设置的颜色和显示的颜色不对应问题
  • 新手快速入门Luban+Unity使用
  • OneCode 智能化UI布局与定位:注解驱动的视觉编排艺术
  • 打通线上线下会议室联动的综合解决方案及技术选型
  • Echarts3D柱状图-圆柱体-文字在柱体上垂直显示的实现方法
  • D3 面试题100道之(21-40)
  • 如何查看自己电脑的CUDA版本?
  • 服务器间接口安全问题的全面分析
  • 学习者的Python项目灵感
  • 本地区块链服务在物联网中的应用实例
  • Rust+Blender:打造高性能游戏引擎
  • OneCode图生代码技术深度解析:从可视化设计到注解驱动实现的全链路架构
  • golang 中当 JSON 数据缺少结构体(struct)中定义的某些字段,会有异常吗
  • 【HDMI CEC】 设备 OSD 名称功能详解
  • Rust match 控制流结构
  • 从0开始学习R语言--Day38--辛普森多样性指数
  • 重学前端002 --响应式网页设计 CSS
  • 【网络安全基础】第三章---公钥密码和消息认证
  • <tauri><rust><GUI>使用tauri创建一个文件夹扫描程序
  • 【网络】Linux 内核优化实战 - net.core.flow_limit_table_len
  • C++26 下一代C++标准