实践指南
本文以循序渐进的方式,系统演示如何基于 LangChain 1.0 构建实用的 AI 智能体,涵盖环境初始化、对话代理、外部 API 集成、多节点工作流编排及调试优化等关键环节,助力开发者高效落地智能体应用。
项目初始化与依赖安装
在正式开发前,建议使用 virtualenv 或 Conda 创建独立 Python 虚拟环境,确保依赖隔离。安装 LangChain 1.0 及相关组件:
# 安装 LangChain 1.0 核心库
pip install langchain==1.0.0
# 安装 LangGraph 扩展(用于多节点智能体)
pip install langgraph
# 安装特定提供商集成包(如 OpenAI、Google GenAI)
pip install langchain-openai langchain-google-genai
# 其他常用依赖
pip install google-generativeai pydantic dotenv fastapi
LangChain 1.0 采用模块化设计,主包 langchain 提供核心接口,langchain-openai、langchain-google-genai 等为厂商集成包。按需安装,避免冗余依赖。
验证安装:
import langchain; import langgraph
print("LangChain version:", langchain.__version__)
print("LangGraph version:", getattr(langgraph, "__version__", "not found"))
建议将 API Key 写入 .env 文件,并用 python-dotenv 加载:
# .env 文件内容
OPENAI_API_KEY=<你的OpenAI密钥>
GOOGLE_API_KEY=<你的Google Gemini密钥>
from dotenv import load_dotenv; load_dotenv()
构建多轮交互智能体
本节演示如何用 LangChain 构建具备上下文记忆和工具调用能力的多轮对话智能体。
模型与工具配置
以 OpenAI GPT-4 为例,结合网络搜索工具和对话记忆:
from langchain.chat_models import ChatOpenAI
from langchain.agents import create_agent
from langchain.tools import SerpAPIWrapper
from langchain.memory import ConversationBufferMemory
llm = ChatOpenAI(model="gpt-4", temperature=0.7)
search = SerpAPIWrapper()
memory = ConversationBufferMemory(k=5)
agent = create_agent(
model=llm,
tools=[search],
memory=memory,
agent_type="chat-conversational",
verbose=True
)
多轮对话示例
user_input1 = "你好,LangChain 可以用来做什么?"
response1 = agent.invoke(user_input1)
print("AI:", response1.content)
user_input2 = "那 LangChain 1.0 有什么新东西?"
response2 = agent.invoke(user_input2)
print("AI:", response2.content)
通过 ConversationBufferMemory,智能体可记住最近 5 轮对话,实现上下文衔接。工具调用和推理过程可通过 verbose=True 观察,便于调试。
能力扩展与优化
- 工具扩展:在
tools=[...]增加计算器、百科等工具。 - 记忆策略:可用
ConversationTokenBufferMemory控制 token 数,或ConversationSummaryMemory实现长程对话。 - 底层稳健性:LangChain 1.0 代理基于 LangGraph runtime,自动处理常见解析错误,提升健壮性。
集成外部 API(Google Gemini)
LangChain 支持多厂商模型集成。以 Google Gemini 为例,演示文本与多模态调用。
文本模型调用
from langchain_google_genai import ChatGoogleGenerativeAI
google_llm = ChatGoogleGenerativeAI(model='gemini-pro', temperature=0.9)
reply = google_llm.invoke("请用中文写一段关于 2100 年火星生活的展望。")
print(reply.content)
多模态模型调用
from langchain.schema import HumanMessage
vision_model = ChatGoogleGenerativeAI(model='gemini-pro-vision')
image_url = "<图片 URL>"
user_message = HumanMessage(content_blocks=[
{"type": "text", "text": "这张图片里有什么?"},
{"type": "image", "url": image_url}
])
result = vision_model.invoke([user_message])
print(result.content)
结合智能体与工具
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.agents import create_agent
from langchain.tools import WikipediaAPIWrapper
google_llm = ChatGoogleGenerativeAI(model='gemini-medium', temperature=0)
wiki_tool = WikipediaAPIWrapper()
agent = create_agent(model=google_llm, tools=[wiki_tool], agent_type="chat-zero-shot", verbose=True)
print(agent.invoke("Who is the current CEO of Google?").content)
使用 LangGraph 创建多节点工作流
LangGraph 支持多节点、多工具协作的复杂流程编排。以下以“小型科研助理”为例,演示多节点工作流设计。
状态定义
from typing import TypedDict
from langgraph.graph import StateGraph, START, END
class ResearchState(TypedDict):
topic: str
summary: str | None
papers: list[str] | None
report: str | None
workflow = StateGraph(ResearchState)
工具与模型准备
from langchain.chat_models import ChatOpenAI
from langchain.tools import SerpAPIWrapper, ArxivQueryWrapper
llm = ChatOpenAI(model="gpt-4", temperature=0)
search = SerpAPIWrapper()
arxiv = ArxivQueryWrapper()
节点函数实现
def search_node(state: ResearchState) -> ResearchState:
query = state["topic"]
result = search.run(query)
state["summary"] = result[:500]
return state
def arxiv_node(state: ResearchState) -> ResearchState:
query = state["topic"]
papers = arxiv.run(query)
state["papers"] = papers[:5]
return state
def report_node(state: ResearchState) -> ResearchState:
topic = state["topic"]
summary = state.get("summary", "")
papers = state.get("papers", [])
prompt = (f"研究主题:{topic}\n"
f"资料摘要:{summary}\n"
f"相关论文:{'; '.join(papers) if papers else '无'}\n"
"请根据以上信息撰写一段简短的研究报告。")
result = llm.invoke(prompt)
state["report"] = result.content
return state
构建流程图
workflow.add_node("search", search_node)
workflow.add_node("fetch_papers", arxiv_node)
workflow.add_node("write_report", report_node)
workflow.add_edge(START, "search")
workflow.add_edge("search", "fetch_papers")
workflow.add_edge("search", "write_report")
workflow.add_edge("fetch_papers", "write_report")
workflow.add_edge("write_report", END)
运行与调试
input_state = {"topic": "量子计算 在 医疗 健康 领域 的 应用"}
final_state = workflow.run(input_state)
print(final_state["report"])
可通过日志与 LangGraph CLI 工具辅助调试每个节点执行过程。
调试与优化建议
智能体开发需重视调试与性能优化,常见措施包括:
- 日志与提示跟踪:通过
verbose=True或集成 LangSmith Tracing,追踪每步推理与工具调用,便于定位问题。 - 错误处理:为工具调用和节点函数添加异常捕获,利用 LangChain 自动格式修正与 Durable Execution 提高健壮性。
- 性能优化:利用 LangGraph 并行、异步调用、模型分层等手段提升响应速度与资源利用率。
- 提示词优化:迭代 Prompt 设计,结合 Few-shot 示例与批量评估,提升输出质量。
- 安全与过滤:集成内容审核、参数限制与 Guardrails,防止敏感信息泄露与恶意操作。
总结
通过本实践指南,开发者可系统掌握 LangChain 1.0 智能体的环境搭建、对话代理、工具集成、多节点工作流与调试优化等关键技能。建议结合实际业务需求,灵活选用各类能力模块,持续迭代优化,打造高效、可靠的 AI 智能体应用。