LangChain作为大语言模型(LLM)应用开发框架,GitHub星标数已突破6万(2024年数据)。其标准化了LLM应用的开发流程,使开发者效率提升3-5倍,成为AI工程化落地的关键基础设施。
LangChain通过以下机制破局:
LangChain如同"AI应用的操作系统":
模块 | 功能 | 核心类/方法 |
---|---|---|
Models | 多模型抽象层 | ChatOpenAI/Anthropic |
Prompts | 提示模板管理 | ChatPromptTemplate |
Chains | 任务流程编排 | LLMChain/SequentialChain |
Agents | 动态工具调用 | initialize_agent |
Memory | 状态持久化 | ConversationBufferMemory |
特性 | LangChain | LlamaIndex | Semantic Kernel |
---|---|---|---|
多模型支持 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
工具生态 | 500+工具 | 100+连接器 | 50+插件 |
生产部署 | LangServe | 有限支持 | Azure集成 |
学习曲线 | 中等 | 简单 | 陡峭 |
pip install langchain langchain-openai chromadb tiktoken
export OPENAI_API_KEY="sk-..."
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
# 1. 文档加载与处理
loader = WebBaseLoader("https://example.com/ai-policy")
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
splits = text_splitter.split_documents(docs)
# 2. 向量存储
vectorstore = Chroma.from_documents(
documents=splits,
embedding=OpenAIEmbeddings()
)
# 3. 检索链构建
retriever = vectorstore.as_retriever()
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4"),
chain_type="stuff",
retriever=retriever
)
result = qa_chain.invoke({"query": "AI伦理原则有哪些?"})
print(result["result"])
from langchain_community.agent_toolkits import create_sql_agent
from langchain_community.utilities import SQLDatabase
# 连接数据库
db = SQLDatabase.from_uri("sqlite:///chinook.db")
# 创建智能体
agent = create_sql_agent(
llm=ChatOpenAI(temperature=0),
toolkit=SQLDatabaseToolkit(db=db),
agent_type="openai-tools",
verbose=True
)
agent.run("销量最高的前5名艺术家是谁?")
案例1输出:
该文档提到的AI伦理原则包括:透明度、公平性、隐私保护和人类监督...
案例2日志:
> Entering new AgentExecutor chain...
Action: sql_db_query
Action Input: SELECT artists.Name, SUM(invoice_items.Quantity) FROM artists...
Observation: [(u'Metallica', 827), (u'U2', 819)...]
Thought: 返回销量前5名艺术家
Final Answer: 销量前5的艺术家是:1. Metallica (827)...
方案 | 平均延迟 | 准确率 | 成本/千次 |
---|---|---|---|
直接调用GPT-4 | 2.3s | 78% | $20 |
LangChain RAG | 1.8s | 92% | $15 |
智能体系统 | 3.5s | 95% | $18 |
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=128,
length_function=len,
add_start_index=True
)
retriever = EnsembleRetriever(
retrievers=[
vectorstore.as_retriever(search_type="mmr"),
bm25_retriever
],
weights=[0.7, 0.3]
)
@tool
def get_current_weather(location: str):
"""查询指定城市天气"""
return requests.get(f"https://weatherapi.com/{location}").json()
agent = initialize_agent(
tools=[get_current_weather],
llm=ChatOpenAI(),
agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
)
# 错误:未过滤用户输入
template = "翻译这段话: {user_input}" # 可能被恶意注入
# 正确:添加校验
from langchain_core.prompts import SafeTemplate
template = SafeTemplate("翻译这段话: {user_input}")
# 错误:工具间循环调用
@tool
def tool_a(): tool_b()
@tool
def tool_b(): tool_a()
import langchain
langchain.debug = True
from langchain import visualization
visualization.draw_chain(qa_chain)
类型 | 工具 |
---|---|
向量数据库 | Chroma/Pinecone |
部署框架 | LangServe/FastAPI |
监控系统 | LangSmith/Weights&Biases |
测试工具 | Pytest-LangChain |
挑战任务:
使用LangChain构建能同时处理PDF文档查询和实时网络搜索的混合Agent,并在评论区分享你的实现方案!