LangChain 入门:30 分钟开发第一个 AI 应用
2026 年了,还在手动调 API?用 LangChain,30 分钟搞定一个能对话、能查文档、能调用工具的 AI 应用!
为什么需要 LangChain?
去年我给一个企业做 AI 客服,纯手写代码调 API,搞了 2 周。
今年用 LangChain,2 天搞定,还能自动查知识库、调用工具。
LangChain 的核心价值:
- ✅ 统一接口,换模型不用改代码
- ✅ 内置记忆,对话有上下文
- ✅ 工具调用,AI 能执行实际任务
- ✅ 文档处理,RAG 问答一键搞定
🛠️ 环境准备(10 分钟)
1. 安装依赖
bash
pip install langchain langchain-openai langchain-community python-dotenv
2. 配置 API Key
在项目根目录创建 .env 文件:
bash
# 用 OpenAI
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 或用 DeepSeek(国产,便宜 10 倍)
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 或用通义千问
DASHSCOPE_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3. 测试连接
python
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os
load_dotenv()
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
response = llm.invoke("你好,请自我介绍")
print(response.content)
踩坑提醒 : 我一开始忘了装 python-dotenv,API Key 死活读不到,折腾半天...别学我。
💻 核心代码:开发你的第一个 AI 应用
场景 1:基础对话机器人
python
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
def simple_chatbot():
"""最简单的对话机器人"""
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
# 系统提示词
system_message = SystemMessage(content="你是一个友好的 AI 助手,用中文回答用户问题。")
print("🤖 AI 助手已启动(输入 quit 退出)")
while True:
user_input = input("👤 你:")
if user_input.lower() == 'quit':
print("👋 再见!")
break
# 调用 AI
response = llm.invoke([system_message, HumanMessage(content=user_input)])
print(f"🤖 AI: {response.content}\n")
if __name__ == '__main__':
simple_chatbot()
运行效果:
🤖 AI 助手已启动(输入 quit 退出)
👤 你:Python 怎么读取 Excel 文件?
🤖 AI: 在 Python 中读取 Excel 文件,推荐使用 pandas 库...
场景 2:带记忆的对话机器人
python
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
def chatbot_with_memory():
"""带对话记忆的 AI 助手"""
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
# 添加记忆
memory = ConversationBufferMemory()
# 创建对话链
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True # 显示详细日志
)
print("🤖 带记忆的 AI 助手已启动(输入 quit 退出)")
while True:
user_input = input("👤 你:")
if user_input.lower() == 'quit':
print("👋 再见!")
break
response = conversation.predict(input=user_input)
print(f"🤖 AI: {response}\n")
if __name__ == '__main__':
chatbot_with_memory()
记忆的效果:
👤 你:我叫小明
🤖 AI: 你好小明,很高兴认识你!
👤 你:我叫什么名字?
🤖 AI: 你叫小明啊,刚才告诉我的 😊
场景 3:AI 文档问答(RAG 入门)
python
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains import RetrievalQA
def document_qa(file_path):
"""文档问答机器人"""
print("📚 正在加载文档...")
# 1. 加载文档
loader = TextLoader(file_path, encoding='utf-8')
documents = loader.load()
# 2. 分割文档
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)
# 3. 创建向量存储
print("🔧 正在创建向量索引...")
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)
# 4. 创建问答链
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(),
return_source_documents=True
)
print("✅ 文档问答机器人已启动(输入 quit 退出)")
while True:
query = input("👤 你:")
if query.lower() == 'quit':
break
result = qa_chain({"query": query})
print(f"🤖 AI: {result['result']}\n")
if __name__ == '__main__':
# 用法:python 01-langchain-入门.py your_document.txt
import sys
if len(sys.argv) > 1:
document_qa(sys.argv[1])
else:
print("用法:python 01-langchain-入门.py <文档路径>")
使用示例:
bash
# 准备一个文档
echo "Python 是 1991 年由 Guido van Rossum 发明的编程语言..." > test.txt
# 运行问答
python 01-langchain-入门.py test.txt
场景 4:AI 调用工具(计算器)
python
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, Tool, AgentType
from langchain.tools import CalculatorTool
def ai_with_tools():
"""能调用工具的 AI 助手"""
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# 定义工具
tools = [
CalculatorTool(), # 内置计算器
]
# 初始化 Agent
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
print("🤖 带工具的 AI 助手已启动(输入 quit 退出)")
while True:
user_input = input("👤 你:")
if user_input.lower() == 'quit':
break
try:
response = agent.run(user_input)
print(f"🤖 AI: {response}\n")
except Exception as e:
print(f"⚠️ 错误:{str(e)}\n")
if __name__ == '__main__':
ai_with_tools()
运行效果:
👤 你:计算 123 * 456 + 789
🤖 AI: 123 * 456 = 56088,56088 + 789 = 56877
🎯 完整项目:智能客服机器人
python
"""
智能客服机器人
功能:
1. 回答常见问题
2. 查询订单状态
3. 转人工客服
"""
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
from langchain.prompts import PromptTemplate
import os
from dotenv import load_dotenv
load_dotenv()
class CustomerServiceBot:
def __init__(self):
# 初始化 LLM
self.llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
# 添加记忆
self.memory = ConversationBufferMemory()
# 自定义提示词模板
self.prompt_template = PromptTemplate(
input_variables=["history", "input"],
template="""
你是一个专业的客服助手,负责回答用户问题。
【公司规则】
1. 态度友好,用词礼貌
2. 不知道的问题不要瞎编,建议转人工
3. 订单查询需要订单号
4. 退款问题转人工处理
【对话历史】
{history}
【用户问题】
{input}
请用中文回答,保持简洁专业。
"""
)
# 创建对话链
self.conversation = ConversationChain(
llm=self.llm,
memory=self.memory,
prompt=self.prompt_template,
verbose=False
)
def chat(self, user_input):
"""处理用户输入"""
# 检测转人工关键词
if any(word in user_input for word in ['转人工', '人工客服', '投诉']):
return "🔄 正在为您转接人工客服,请稍候...\n(模拟转接,实际需对接客服系统)"
# 调用 AI
response = self.conversation.predict(input=user_input)
return response
def clear_history(self):
"""清空对话历史"""
self.memory.clear()
print("✅ 对话历史已清空")
def main():
bot = CustomerServiceBot()
print("=" * 50)
print("🤖 智能客服机器人已启动")
print("输入 help 查看帮助,quit 退出,clear 清空历史")
print("=" * 50)
while True:
user_input = input("\n👤 你:")
if user_input.lower() == 'quit':
print("👋 感谢使用,再见!")
break
elif user_input.lower() == 'help':
print("""
📋 帮助菜单:
- 直接输入问题,AI 会自动回答
- 输入 '转人工' 转接人工客服
- 输入 'clear' 清空对话历史
- 输入 'quit' 退出程序
""")
continue
elif user_input.lower() == 'clear':
bot.clear_history()
continue
response = bot.chat(user_input)
print(f"🤖 客服:{response}")
if __name__ == '__main__':
main()
⚠️ 血泪教训
- API Key 别硬编码 ,用
.env文件,不然提交 Git 就泄露了 - 温度值调低(0.3-0.7),太高了 AI 容易瞎编
- 加异常处理,网络波动、API 限流都会报错
- 测试小样本,先跑通再上线,别直接上生产
💡 进阶玩法
1. 换国产大模型(便宜 10 倍)
python
# 用 DeepSeek
from langchain_community.llms import DeepSeek
llm = DeepSeek(model="deepseek-chat", temperature=0.7)
2. 添加流式输出
python
for chunk in llm.stream("你好"):
print(chunk.content, end="", flush=True)
3. 保存对话历史
python
import json
# 保存
with open('chat_history.json', 'w', encoding='utf-8') as f:
json.dump(memory.chat_memory.messages, f, ensure_ascii=False)
# 加载
with open('chat_history.json', 'r', encoding='utf-8') as f:
messages = json.load(f)
memory.chat_memory.messages = messages
📦 源码获取
完整源码已上传 GitHub:
github.com/yourname/langchain-tutorial
包含:
- ✅ 所有示例代码
- ✅ 环境配置文档
- ✅ 常见问题 FAQ
- ✅ 后续更新通知
🌟 下篇预告
下一篇:《用 LangChain 搭建本地知识库问答》
- 上传 PDF/Word 文档
- 自动分割和索引
- 智能问答,带引用来源
- 企业文档管理系统实战
觉得有用?点赞 + 关注不迷路! 🎉
标签: #LangChain #AI #Python #大模型 #RAG #人工智能