当前位置: 首页 > 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.dtcms.com/a/266720.html

相关文章:

  • Java 大视界 -- Java 大数据实战:智能安防入侵检测的特征工程与模型融合全解析
  • 文本分词 nltk
  • 【Unity笔记01】基于单例模式的简单UI框架
  • PowerPoint 转 PDF 转换器:Python GUI 工具的深度解析
  • python高级变量XI
  • vue-39(为复杂 Vue 组件编写单元测试)
  • 行阶梯形矩阵和行最简形矩阵的区别
  • HTTP 缓存
  • suricata新增协议处理流程
  • Windows系统x86机器安装麒麟ARM系统(自用记录)
  • 批量印刷拼版助手Quite Imposing Plus:Adobe 专业PDF拼版插件
  • 2025微信小程序wxapkg解包全攻略
  • ESP32S3将摄像头映射到LCD屏
  • Android开发前的准备工作
  • ContextIQ 上线:助力 Copilot 深度洞察你的工作场景
  • vueX和Pinia的区别
  • JavaWeb笔记05
  • HarmonyOS-ArkUI 手势系列4--多层级手势
  • 鸿蒙系统(HarmonyOS)应用开发之手势锁屏密码锁(PatternLock)
  • [Linux]内核如何对信号进行捕捉
  • FastAPI 小白教程:从入门级到实战(源码教程)
  • springboot整合腾讯云cos对象存储,获取临时密钥,前端直传图片文件
  • Spring Cloud网关与CI文件配置请求安全性对比
  • 基于二维码的视频合集高效管理与分发技术
  • monorepo + Turborepo --- 运行任务
  • MySQL ON DUPLICATE KEY UPDATE 用法详解
  • 鸿蒙开发List长按Item拖拽切换效果
  • 基于区块链的物联网(IoT)安全通信与数据共享的典型实例
  • JSONLines和JSON数据格式使用教程
  • AI大模型:(二)1.5 Stable Diffusion中文文生图模型部署