LangChain是2022年推出的AI应用开发框架,截至2023年已获GitHub 60k+ Stars。其标准化了大模型应用开发流程,使开发者能快速构建:
LangChain通过六大核心模块解决问题:
LangChain如同"AI应用的操作系统":
模块 | 核心功能 | 关键类/方法 |
---|---|---|
LLM | 模型抽象层 | OpenAI/ChatOpenAI |
Chain | 任务流水线 | LLMChain/SequentialChain |
Memory | 状态持久化 | ConversationBufferMemory |
Retrieval | 知识增强 | VectorstoreRetriever |
Agent | 动态工具执行 | initialize_agent |
特性 | LangChain | LlamaIndex | Semantic Kernel |
---|---|---|---|
工具调用 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
知识增强 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
多模态支持 | ⭐⭐⭐ | ⭐ | ⭐⭐⭐⭐ |
学习曲线 | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ |
pip install langchain openai python-dotenv
export OPENAI_API_KEY="sk-..."
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
# 定义提示模板
prompt = PromptTemplate(
input_variables=["product"],
template="为{product}写3个广告标语,要求朗朗上口"
)
# 创建链
chain = LLMChain(
llm=OpenAI(temperature=0.7),
prompt=prompt
)
# 执行链
result = chain.run("智能手表")
print(result)
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
conversation = LLMChain(
llm=OpenAI(),
prompt=PromptTemplate(
template="当前对话历史:{history}\n用户新输入:{input}",
input_variables=["history", "input"]
),
memory=memory
)
conversation.run("介绍Python语言特点")
conversation.run("用刚才的特点写学习建议") # 能引用历史对话
from langchain.document_loaders import WebBaseLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
# 构建知识库
loader = WebBaseLoader("https://python.org")
docs = loader.load()
db = FAISS.from_documents(docs, OpenAIEmbeddings())
# 创建检索链
retriever = db.as_retriever()
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(),
chain_type="stuff",
retriever=retriever
)
qa_chain.run("Python的最新版本号是多少?")
案例1输出:
1. "智在掌控,健康随行"
2. "腕间科技,生活升级"
3. "24小时贴身健康管家"
案例3输出:
当前Python稳定版本是3.11.4
指标 | 原生OpenAI调用 | LangChain实现 | 差异 |
---|---|---|---|
平均延迟 | 420ms | 450ms | +7% |
内存占用 | 120MB | 185MB | +54% |
代码行数 | 200 | 80 | -60% |
功能完整性 | 需手工实现 | 开箱即用 | +100% |
LangChain以轻微性能代价换取开发效率的显著提升,特别适合快速迭代场景。生产环境中可通过以下方式优化:
from langchain.output_parsers import StructuredOutputParser
schema = """{
"slogans": List[str],
"keywords": List[str]
}"""
parser = StructuredOutputParser.from_response_schemas(schema)
chain = LLMChain(
llm=OpenAI(),
prompt=PromptTemplate(
template="生成输出...{format_instructions}",
partial_variables={"format_instructions": parser.get_format_instructions()}
)
)
from langchain.agents import Tool, initialize_agent
tools = [
Tool(
name="Search",
func=search_api,
description="用于查询实时信息"
)
]
agent = initialize_agent(
tools,
OpenAI(temperature=0),
agent="zero-shot-react-description"
)
# 错误:未限制记忆长度
memory = ConversationBufferMemory() # 可能导致OOM
# 正确:
memory = ConversationBufferWindowMemory(k=5) # 仅保留最近5轮
# 错误:未设置超时
agent.run("复杂任务...") # 可能陷入死循环
# 正确:
agent.run("...", max_iterations=10)
import langchain
langchain.debug = True
from langchain import visualization
visualization.plot_chain(chain)
类型 | 推荐工具 |
---|---|
向量数据库 | Pinecone/Weaviate |
部署框架 | FastAPI/Streamlit |
监控系统 | LangSmith/Prometheus |
挑战任务:
使用LangChain构建能调用Wolfram Alpha和维基百科的数学知识问答机器人,欢迎在评论区分享你的实现方案!
建议开发环境配置:
conda create -n langchain python=3.10
conda activate langchain
pip install -U langchain openai tiktoken