LangChain 简介
LangChain 是构建 LLM 应用的流行框架,提供了链式调用、Agent、RAG 等丰富的功能模块,让你能够快速构建复杂的 AI 应用。
#为什么使用 LangChain?
#1. 统一的抽象层
LangChain 提供统一的接口,轻松切换不同的 LLM:
python# 切换模型只需改一行 from langchain_openai import ChatOpenAI from langchain_anthropic import ChatAnthropic # OpenAI llm = ChatOpenAI(model="gpt-4") # Claude llm = ChatAnthropic(model="claude-3-sonnet") # 使用方式完全一样 response = llm.invoke("Hello!")
#2. 强大的功能模块
| 模块 | 功能 | 用途 |
|---|---|---|
| Models | LLM 接口 | 统一调用各种模型 |
| Prompts | 提示模板 | 动态构建 Prompt |
| Chains | 链式调用 | 组合多个步骤 |
| Memory | 对话记忆 | 保持上下文 |
| Agents | 智能代理 | 自主决策和工具使用 |
| RAG | 检索增强 | 连接外部知识库 |
#3. 丰富的生态系统
- 支持 100+ 种 LLM
- 支持 50+ 种向量数据库
- 支持多种文档格式
- 活跃的社区和文档
#快速开始
#安装
bash# Python pip install langchain langchain-openai # 或者安装完整版 pip install langchain[all]
#第一个示例
pythonfrom langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate # 创建模型 llm = ChatOpenAI(model="gpt-4") # 创建提示模板 prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个专业的翻译,将{source_lang}翻译成{target_lang}"), ("user", "{text}") ]) # 创建链 chain = prompt | llm # 调用 result = chain.invoke({ "source_lang": "英语", "target_lang": "中文", "text": "Hello, world!" }) print(result.content) # 输出: 你好,世界!
#核心概念
#1. Prompts (提示模板)
动态构建提示词:
pythonfrom langchain_core.prompts import ChatPromptTemplate # 简单模板 prompt = ChatPromptTemplate.from_template( "给 {product} 写一句广告语" ) # 多消息模板 prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个创意文案"), ("user", "为 {product} 写广告语,风格:{style}") ])
#2. Chains (链)
组合多个步骤:
pythonfrom langchain_core.output_parsers import StrOutputParser # 使用 LCEL (LangChain Expression Language) chain = prompt | llm | StrOutputParser() # 顺序执行 result = chain.invoke({"product": "咖啡"})
#3. Memory (记忆)
保持对话上下文:
pythonfrom langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory() memory.save_context( {"input": "我叫小明"}, {"output": "你好小明!"} ) # 后续对话可以记住用户名字
#4. Agents (代理)
让 LLM 自主使用工具:
pythonfrom langchain.agents import create_openai_functions_agent, AgentExecutor from langchain_community.tools import DuckDuckGoSearchRun # 定义工具 tools = [DuckDuckGoSearchRun()] # 创建 Agent agent = create_openai_functions_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools) # Agent 会自动决定是否需要搜索 result = agent_executor.invoke({"input": "今天北京天气怎么样?"})
#5. RAG (检索增强生成)
连接外部知识库:
pythonfrom langchain_community.vectorstores import Chroma from langchain_openai import OpenAIEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter # 1. 加载文档 loader = TextLoader("knowledge.txt") documents = loader.load() # 2. 分割文档 text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000) docs = text_splitter.split_documents(documents) # 3. 创建向量存储 vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings()) # 4. 创建检索器 retriever = vectorstore.as_retriever() # 5. 检索相关内容 relevant_docs = retriever.get_relevant_documents("问题")
#LCEL 表达式语言
LangChain Expression Language 是构建链的推荐方式:
pythonfrom langchain_core.runnables import RunnablePassthrough # 使用管道操作符组合 chain = ( {"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() ) # 流式输出 for chunk in chain.stream("问题"): print(chunk, end="")
#最佳实践
#1. 使用流式输出
python# 提升用户体验 for chunk in chain.stream(input): print(chunk.content, end="", flush=True)
#2. 错误处理
pythonfrom langchain_core.runnables import RunnableWithFallbacks # 添加备用模型 chain_with_fallback = chain.with_fallbacks([backup_chain])
#3. 缓存响应
pythonfrom langchain.cache import SQLiteCache import langchain langchain.cache = SQLiteCache(database_path=".langchain.db")
#常见应用场景
#1. 智能问答系统
python# 基于文档的问答 qa_chain = RetrievalQA.from_chain_type( llm=llm, retriever=retriever, chain_type="stuff" )
#2. 聊天机器人
python# 带记忆的对话 conversation = ConversationChain( llm=llm, memory=ConversationBufferMemory() )
#3. 数据分析 Agent
python# 让 Agent 分析 CSV 数据 agent = create_pandas_dataframe_agent(llm, df)
#下一步
提示:LangChain 发展迅速,建议查看 官方文档↗ 获取最新 API。