LangChain 开发入门:构建你的第一个 AI 应用

LangChain 是目前最流行的 AI 应用开发框架,本文带你快速入门,构建一个智能问答应用。

LangChain 是什么?

LangChain 是一个用于开发 LLM 应用的开源框架,提供:

  • 🔗 链式调用:将多个组件串联成工作流
  • 📚 知识检索:RAG(检索增强生成)支持
  • 🧠 记忆管理:多轮对话上下文
  • 🔧 工具调用:让 AI 使用外部工具

环境准备

安装依赖

1
pip install langchain langchain-openai chromadb

配置 API Key

1
2
import os
os.environ["OPENAI_API_KEY"] = "your-api-key"

基础使用

1. 简单对话

1
2
3
4
5
6
7
8
9
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

# 初始化模型
llm = ChatOpenAI(model="gpt-4o-mini")

# 发送消息
response = llm.invoke([HumanMessage(content="你好,请介绍一下自己")])
print(response.content)

2. 使用 Prompt 模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from langchain_core.prompts import ChatPromptTemplate

# 定义模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个{role},请用专业的语言回答问题"),
("user", "{question}")
])

# 创建链
chain = prompt | llm

# 调用
response = chain.invoke({
"role": "Python专家",
"question": "什么是装饰器?"
})
print(response.content)

3. 输出解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from langchain_core.output_parsers import JsonOutputParser
from pydantic import BaseModel

# 定义输出格式
class CodeReview(BaseModel):
issues: list[str]
suggestions: list[str]
score: int

# 创建解析器
parser = JsonOutputParser(pydantic_object=CodeReview)

# 修改 prompt
prompt = ChatPromptTemplate.from_messages([
("system", "你是代码审查专家。{format_instructions}"),
("user", "请审查以下代码:\n{code}")
])

# 创建链
chain = prompt | llm | parser

# 调用
result = chain.invoke({
"format_instructions": parser.get_format_instructions(),
"code": "def add(a,b): return a+b"
})
print(result)

RAG 实战

RAG(Retrieval-Augmented Generation)是让 AI 基于私有知识库回答问题的关键技术。

1. 准备知识库

1
2
3
4
5
6
7
8
9
10
11
12
13
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 加载文档
loader = TextLoader("knowledge.txt", encoding="utf-8")
documents = loader.load()

# 分割文档
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
splits = text_splitter.split_documents(documents)

2. 创建向量存储

1
2
3
4
5
6
7
8
9
10
11
12
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma

# 创建嵌入模型
embeddings = OpenAIEmbeddings()

# 存储到向量数据库
vectorstore = Chroma.from_documents(
documents=splits,
embedding=embeddings,
persist_directory="./chroma_db"
)

3. 构建问答链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from langchain.chains import RetrievalQA

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

# 构建问答链
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)

# 提问
result = qa_chain.invoke({"query": "什么是RAG?"})
print(result["result"])

完整项目示例

以下是一个完整的智能客服 Demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import create_retrieval_chain

# 1. 初始化组件
llm = ChatOpenAI(model="gpt-4o-mini")
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(persist_directory="./db", embedding_function=embeddings)
retriever = vectorstore.as_retriever()

# 2. 定义 Prompt
system_prompt = """你是一个智能客服助手。
请基于以下知识库内容回答用户问题。
如果知识库中没有相关信息,请诚实说明。

知识库内容:
{context}
"""

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

# 3. 创建链
document_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain = create_retrieval_chain(retriever, document_chain)

# 4. 运行
def chat(question: str) -> str:
result = retrieval_chain.invoke({"input": question})
return result["answer"]

# 测试
print(chat("你们的退货政策是什么?"))

进阶话题

Agent 开发

让 AI 自主决定使用哪些工具:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from langchain.agents import create_openai_tools_agent, AgentExecutor
from langchain.tools import Tool

# 定义工具
tools = [
Tool(
name="Search",
func=lambda q: "搜索结果...",
description="搜索互联网信息"
),
Tool(
name="Calculator",
func=lambda q: eval(q),
description="进行数学计算"
)
]

# 创建 Agent
agent = create_openai_tools_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)

# 运行
result = executor.invoke({"input": "计算 123 * 456"})

最佳实践

  1. 选择合适的模型:简单任务用 mini 版本省成本
  2. 优化 Prompt:好的提示词事半功倍
  3. 合理分块:知识库分块大小影响检索质量
  4. 错误处理:API 调用要有重试机制
  5. 监控日志:使用 LangSmith 追踪调试

总结

LangChain 大大降低了 AI 应用开发门槛。掌握基础后,可以进一步探索:

  • 多 Agent 协作
  • 流式输出
  • 自定义组件
  • 生产部署

下一篇:《LangChain 进阶:构建多 Agent 系统》


LangChain 开发入门:构建你的第一个 AI 应用
https://your-site.pages.dev/2025/11/21/langchain-development-guide/
作者
李逍遥技术驿站
发布于
2025年11月21日
许可协议