LangChain AI应用开发入门教程

教程简介

零基础LangChain AI应用开发入门教程,涵盖核心概念、Prompt模板、输出解析器、LCEL链式表达、RAG文档问答、Agent工具调用、记忆管理、LangGraph编排等核心技能,配有智能客服系统实战项目,适合AI开发者学习。

LangChain AI应用开发入门教程

零基础掌握LangChain框架,从核心概念到实战项目,快速构建大模型驱动的AI应用。


一、什么是LangChain?

1.1 LangChain简介

LangChain是一个用于构建大语言模型(LLM)应用的开源框架。它提供了一套工具、组件和接口,帮助开发者将大模型与外部数据源、工具和服务连接起来,从而构建功能强大的AI应用。

1.2 LangChain能做什么?

  • 智能问答系统:基于文档的RAG问答
  • 聊天机器人:带记忆和工具调用的对话系统
  • 代码生成助手:理解需求并生成代码
  • 数据分析Agent:自动查询数据库并生成报告
  • 文档处理流水线:自动摘要、翻译、格式转换

1.3 LangChain生态

组件 作用 说明
LangChain 核心框架 链、Agent、工具等核心抽象
LangChain-Community 社区集成 第三方模型和工具的集成
LangChain-OpenAI OpenAI集成 GPT模型和Embeddings
LangSmith 监控调试 应用追踪和评估平台
LangGraph Agent编排 基于图的Agent工作流
LangServe 部署服务 将Chain部署为REST API

二、核心概念

2.1 模型(Models)

LangChain支持多种大模型:

# OpenAI
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)

# 本地模型(Ollama)
from langchain_ollama import ChatOllama
llm = ChatOllama(model="qwen2.5:7b")

# 调用模型
response = llm.invoke("什么是LangChain?")
print(response.content)

2.2 提示词模板(Prompt Templates)

from langchain.prompts import ChatPromptTemplate

# 简单模板
template = ChatPromptTemplate.from_template(
    "你是一个{role}。请用{style}的风格回答以下问题:\n\n{question}"
)

prompt = template.invoke({
    "role": "Python专家",
    "style": "简洁明了",
    "question": "什么是装饰器?"
})

response = llm.invoke(prompt)

2.3 输出解析器(Output Parsers)

from langchain_core.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field

class MovieReview(BaseModel):
    title: str = Field(description="电影名称")
    rating: float = Field(description="评分,1-10")
    summary: str = Field(description="一句话点评")

parser = JsonOutputParser(pydantic_object=MovieReview)

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个影评人。{format_instructions}"),
    ("human", "请评价电影《流浪地球》")
])

chain = prompt | llm | parser
result = chain.invoke({"format_instructions": parser.get_format_instructions()})
print(result)  # {'title': '流浪地球', 'rating': 8.5, 'summary': '...'}

2.4 链(LCEL表达式)

LangChain使用LCEL(LangChain Expression Language)来组合组件:

from langchain_core.output_parsers import StrOutputParser

# 使用 | 运算符组合
chain = prompt | llm | StrOutputParser()

# 调用
result = chain.invoke({"question": "什么是AI?"})

三、RAG实战:文档问答系统

3.1 完整代码

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.document_loaders import DirectoryLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.prompts import ChatPromptTemplate

# 1. 加载文档
loader = DirectoryLoader(
    "./docs",
    glob="**/*.txt",
    loader_cls=TextLoader,
    loader_kwargs={"encoding": "utf-8"}
)
documents = loader.load()

# 2. 分块
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=150)
chunks = splitter.split_documents(documents)

# 3. 向量化
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = FAISS.from_documents(chunks, embeddings)

# 4. 创建检索器
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

# 5. 创建问答链
system_prompt = """基于以下检索到的上下文回答问题。
如果上下文中没有足够信息,请说明无法回答。

上下文:{context}"""

prompt = ChatPromptTemplate.from_messages([
    ("system", system_prompt),
    ("human", "{input}")
])

document_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, document_chain)

# 6. 提问
result = rag_chain.invoke({"input": "公司的退款政策是什么?"})
print(result["answer"])

四、Agent实战:工具调用

4.1 什么是Agent?

Agent是能够自主决策、选择工具并执行任务的AI系统。它根据用户输入,决定使用哪些工具,获取结果后继续推理。

4.2 创建工具

from langchain_core.tools import tool
import requests

@tool
def search_weather(city: str) -> str:
    """查询指定城市的当前天气信息"""
    # 使用wttr.in免费API
    response = requests.get(f"https://wttr.in/{city}?format=3")
    return response.text

@tool
def calculate(expression: str) -> str:
    """计算数学表达式,例如:2+3*4"""
    try:
        result = eval(expression)
        return str(result)
    except Exception as e:
        return f"计算错误: {e}"

@tool
def get_current_time() -> str:
    """获取当前时间"""
    from datetime import datetime
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

4.3 创建Agent

from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# 工具列表
tools = [search_weather, calculate, get_current_time]

# 创建ReAct Agent
agent = create_react_agent(llm, tools)

# 使用
result = agent.invoke({
    "messages": [("human", "现在几点了?北京天气怎么样?")]
})

for msg in result["messages"]:
    print(f"{msg.type}: {msg.content}")

五、记忆管理:多轮对话

5.1 对话历史管理

from langchain_core.messages import HumanMessage, AIMessage

# 维护对话历史
chat_history = []

def chat(user_input):
    # 添加用户消息
    chat_history.append(HumanMessage(content=user_input))

    # 带历史的调用
    response = llm.invoke(chat_history)

    # 添加AI回复
    chat_history.append(AIMessage(content=response.content))

    return response.content

# 多轮对话
print(chat("你好,我叫张三"))
print(chat("你还记得我叫什么名字吗?"))
print(chat("帮我写一首关于春天的诗"))

5.2 使用Memory组件

from langchain.memory import ConversationBufferWindowMemory

memory = ConversationBufferWindowMemory(
    k=10,  # 保留最近10轮对话
    return_messages=True
)

六、LangGraph:复杂Agent工作流

6.1 什么是LangGraph?

LangGraph是LangChain团队开发的Agent编排框架,使用图结构来定义复杂的多步骤工作流。

6.2 简单示例

from langgraph.graph import StateGraph, MessagesState, START, END
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")

# 定义节点
def chatbot(state: MessagesState):
    response = llm.invoke(state["messages"])
    return {"messages": [response]}

# 构建图
graph = StateGraph(MessagesState)
graph.add_node("chatbot", chatbot)
graph.add_edge(START, "chatbot")
graph.add_edge("chatbot", END)

app = graph.compile()

# 使用
result = app.invoke({"messages": [("human", "Hello!")]})
print(result["messages"][-1].content)

七、部署与生产建议

7.1 使用LangServe部署

from fastapi import FastAPI
from langserve import add_routes
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

app = FastAPI()

chain = (
    ChatPromptTemplate.from_template("告诉我关于{topic}的知识") 
    | ChatOpenAI() 
    | StrOutputParser()
)

add_routes(app, chain, path="/knowledge")

# 运行: uvicorn app:app --host 0.0.0.0 --port 8000

7.2 生产环境注意事项

  • 速率限制:为LLM调用添加限流
  • 错误处理:实现重试和降级策略
  • 缓存:对相同查询缓存结果
  • 监控:使用LangSmith追踪调用链路
  • 安全:输入验证、Prompt注入防护

八、总结

通过本教程,你应该掌握了:

  1. ✅ LangChain的核心概念(模型、Prompt、输出解析器、链)
  2. ✅ RAG文档问答系统的构建
  3. ✅ Agent工具调用的实现
  4. ✅ 多轮对话的记忆管理
  5. ✅ LangGraph的Agent编排
  6. ✅ 应用部署的最佳实践

下一步学习建议

  • 探索更多文档加载器(PDF、Word、网页)
  • 学习LangSmith进行应用监控
  • 尝试构建多Agent协作系统
  • 了解Prompt工程最佳实践

本教程内容基于LangChain官方文档和开源社区整理,仅供学习参考。

内容声明

本文内容为AI技术学习教程,仅供学习参考。如涉及技术问题,欢迎通过 xurj005@163.com 与我们交流。

目录