草稿

实践指南

本文以循序渐进的方式,系统演示如何基于 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-openailangchain-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 智能体应用。

文章导航

独立页面

这是书籍中的独立页面。

书籍首页