LangChain快速入门:用Python构建你的第一个AI应用
从提示词工程到Agent实战,手把手带你玩转AI应用开发
大模型很强大,但如何让它真正为你的业务服务?
答案是:LangChain。
作为AI应用开发领域最火的框架,LangChain让开发者能够轻松地将大模型与外部工具、数据源、API连接起来,构建真正有用的AI应用。
本文将通过一个天气查询助手的实战案例,带你从零掌握LangChain的核心概念和用法。
01.
什么是LangChain?
LangChain是一个用于构建AI应用的框架,它的核心思想是"链式调用"——将大模型与其他工具串联起来,完成复杂任务。
简单理解
- 大模型= 聪明的大脑,能理解语言、推理问题
- LangChain= 手脚和工具,让大脑能够调用外部数据、执行具体操作
1.1 LangChain的核心模块
| 📦Models | 大模型接口(OpenAI、Anthropic等) |
| 🔗Chains | 链式调用(串联多个组件) |
| 🧩Prompts | 提示词模板(格式化输入输出) |
| 📚Indexes | 文档检索(加载、分割、向量存储) |
| 🔌Agents | 智能体(自主决策调用工具) |
| 💾Memory | 记忆(保存对话历史) |
02.
环境准备
2.1 安装依赖
# 创建虚拟环境
python -m venv langchain-env
source langchain-env/bin/activate
# 安装LangChain核心库
pip install langchain langchain-core
# 安装大模型provider
pip install openai
# 安装必要工具
pip install requests duckduckgo-search
2.2 配置API Key
import os
# 设置OpenAI API Key
os.environ["OPENAI_API_KEY"] = "your-api-key-here"
⚠️注意:生产环境中请使用环境变量或密钥管理服务,避免硬编码API Key。
03.
实战案例:天气查询助手
3.1 需求分析
我们构建一个智能天气助手,用户可以用自然语言查询天气:
👤 用户:"北京明天天气怎么样?"
🤖 AI:"北京明天多云转晴,最高温度18℃,适合外出。"
👤 用户:"周末想去上海旅行,带什么衣服合适?"
🤖 AI:"上海本周末有小雨,气温15-22℃,建议带薄外套和雨伞。"
3.2 方案设计
用户输入→ LangChain + 工具调用 →格式化输出
3.3 完整代码实现
第一步:定义天气查询工具
from langchain.agents import tool
import requests
@tool
def get_weather(city: str, days: int = 1) -> str:
"""
查询城市天气的工具。
参数:
city: 城市名称(中文)
days: 预报天数,默认1天
返回:
天气信息字符串
"""
try:
url = f"https://wttr.in/{city}?format=j1"
response = requests.get(url, timeout=5)
data = response.json()
# ... 处理数据
except Exception as e:
return f"查询天气失败:{str(e)}"
第二步:创建LangChain Agent
from langchain.agents import AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI
from langchain import hub
# 1. 初始化大模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# 2. 创建Agent
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, [get_weather], prompt)
# 3. 创建执行器
agent_executor = AgentExecutor(agent=agent, tools=[get_weather], verbose=True)
第三步:运行测试
# 测试对话
queries = ["北京明天天气怎么样?", "周末去上海需要带伞吗?"]
for query in queries:
print(f"\n{'='*50}")
result = agent_executor.invoke({"input": query})
print(result['output'])
04.
LangChain核心概念详解
4.1 提示词模板(Prompts)
提示词模板让你可以复用复杂的提示词结构:
from langchain.prompts import PromptTemplate
weather_template = PromptTemplate.from_template("""
你是一个专业的天气预报助手。
用户问题:{user_question}
请根据以下信息回答:{weather_info}
""")
4.2 链式调用(Chains)
链式调用将多个步骤串联起来:
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=weather_template)
result = chain.run({"user_question": "...", "weather_info": "..."})
4.3 记忆(Memory)
让AI记住对话历史:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history",
return_messages=True)
# 在Agent中使用记忆
agent_executor = AgentExecutor(agent=agent, memory=memory, ...)
05.
扩展:添加更多工具
5.1 搜索工具
from langchain.agents import tool
@tool
def search_web(query: str) -> str:
"""搜索互联网获取最新信息"""
from duckduckgo_search import DDGS
with DDGS() as ddgs:
results = list(ddgs.text(query, max_results=5))
return f"搜索结果:{results}"
5.2 组合多个工具
# 创建包含多个工具的Agent
tools = [get_weather, search_web]
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)
# Agent可以自动选择使用哪个工具
result = agent_executor.invoke({"input": "北京明天有雨吗?适合户外跑步吗?"})
06.
生产环境最佳实践
6.1 错误处理
class SafeAgentExecutor:
def invoke(self, input_dict, retries=3):
for i in range(retries):
try:
return self.executor.invoke(input_dict)
except Exception as e:
if i == retries - 1:
return {"output": f"处理失败:{str(e)}"}
continue
6.2 成本控制
def smart_router(query: str) -> str:
# 简单查询用便宜模型
simple_keywords = ["天气", "时间", "日期"]
if any(k in query for k in simple_keywords):
return get_weather.invoke({"city": extract_city(query)})
# 复杂问题用高级模型
return agent_executor.invoke({"input": query})
07.
总结与下一步
7.1 核心要点回顾
| 概念 | 作用 | 示例 |
|---|
| Tools | 扩展LLM能力 | 天气API、搜索 |
| Agents | 自主决策执行 | ReAct模式 |
| Chains | 串联处理流程 | LLMChain |
| Memory | 保存对话历史 | 上下文理解 |
| Prompts | 格式化输入输出 | 模板复用 |
7.2 进阶学习路径
| 阶段 | 内容 | 状态 |
|---|
| 第一阶段:基础入门 | LangChain核心概念、Tool定义 | ✅ 你在这里 |
| 第二阶段:实战进阶 | RAG系统、多Agent协作 | ⏳ 敬请期待 |
| 第三阶段:生产部署 | LangServe、LangSmith | ⏳ 未来课程 |
7.3 资源推荐
- 官方文档:https://python.langchain.com/
- GitHub:https://github.com/langchain-ai/langchain
- 社区:LangChain Discord / 中文社区