本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在我个人主页
一、LangChain 基本理论与架构
1.1 核心设计思想
LangChain 通过模块化组件连接大语言模型(LLM)与外部系统,解决LLM的三大局限:
- 无状态性:通过 Memory 管理上下文知识滞后:通过 Data Connection 接入实时数据功能单一:通过 Agents 调用工具链
1.2 核心组件关系图
二、大模型应用最佳实践:Chains
2.1 链式编程范式(LCEL)
LangChain 0.1.x 引入声明式链构建语法:from langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIfrom langchain_core.output_parsers import StrOutputParserprompt = ChatPromptTemplate.from_template("翻译 {text} 到{target_language}")model = ChatOpenAI(model="gpt-4o")chain = prompt | model | StrOutputParser() # 管道运算符组合组件print(chain.invoke({"text": "Hello World", "target_language": "法语"}))# 输出: Bonjour le monde
2.2 复杂链构建实战
文档总结链(融合检索与生成):
from langchain.chains import RetrievalQAfrom langchain_community.vectorstores import Chroma# 1. 构建向量库vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings())# 2. 创建总结链qa_chain = RetrievalQA.from_chain_type( llm=ChatOpenAI(), retriever=vectorstore.as_retriever(), chain_type="stuff" # 简单文档拼接)response = qa_chain.run("量子计算的主要挑战是什么?")
💡 关键技巧:chain_type="map_reduce" 处理长文档时避免上下文丢失
三、框架原生数据处理流:Data Connection
3.1 构建知识库
3.2 数据处理代码实现
from langchain_community.document_loaders import WebBaseLoaderfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_openai import OpenAIEmbeddingsfrom langchain_community.vectorstores import FAISS# 1. 加载文档loader = WebBaseLoader("https://example.com/tech-article")docs = loader.load()# 2. 智能分块(保留上下文)splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, separators=["\n\n", "。", "!"])chunks = splitter.split_documents(docs)# 3. 向量化存储vectorstore = FAISS.from_documents(chunks, OpenAIEmbeddings())
⚠️ 分割参数建议:技术文档用 chunk_size=500-800,对话数据用 chunk_size=300
四、核心模块实战:Model I/O 与 Memory
4.1 动态提示工程
prompt_template = """你是一位{role},请根据历史对话回答问题:{history}当前问题:{input}"""prompt = ChatPromptTemplate.from_messages([ ("system", "你正在扮演{role}"), ("human", "{user_query}")])
4.2 记忆管理三模式对比
记忆类型 | 适用场景 | 代码示例 |
---|---|---|
ConversationBufferMemory | 短对话 (<5轮) | memory.save_context({"input": "Hi"}, {"output": "Hello"}) |
ConversationBufferWindowMemory | 长对话 (固定窗口) | memory = ConversationBufferWindowMemory(k=3) |
ConversationSummaryMemory | 超长对话 (摘要压缩) | memory = ConversationSummaryMemory(llm=llm) |
五、构建智能代理系统:Agents
5.1 Agent 核心工作流
5.2 多工具代理实战
from langchain.agents import create_tool_calling_agentfrom langchain.tools import TavilySearchResults# 1. 工具定义search_tool = TavilySearchResults(max_results=2)tools = [search_tool]# 2. 代理创建agent = create_tool_calling_agent( llm=ChatOpenAI(model="gpt-4-turbo"), tools=tools, prompt=hub.pull("hwchase17/openai-functions-agent"))# 3. 执行查询agent_executor.invoke({"input": "特斯拉2025年Q1营收增长率是多少?"})
✅ 输出示例:
思考:需要查询特斯拉最新财报动作:调用Tavily搜索工具参数:{"query": "Tesla 2025 Q1 revenue growth"}结果:同比增长28.5%回答:特斯拉2025年第一季度营收同比增长28.5%
六、实战:智能翻译助手开发
6.1 系统架构设计
from langchain.chains import TransformChaindef translate_pipeline(): # 1. 输入处理链 input_chain = TransformChain( input_variables=["text", "target_lang"], output_variables=["cleaned_text"], transform=preprocess_text # 清理特殊字符 ) # 2. 翻译链 prompt = ChatPromptTemplate.from_template("将{text}翻译成{target_lang},保持专业术语准确") llm_chain = prompt | ChatAnthropic(model="claude-3-sonnet") | StrOutputParser() # 3. 后处理链 output_chain = TransformChain(...) # 术语校正 return input_chain | llm_chain | output_chain
6.2 高级功能集成
# 术语库向量检索def retrieve_terms(query): term_db = FAISS.load_local("glossary_vec") return term_db.similarity_search(query)# 翻译链增强llm_chain = prompt | { "context": lambda x: retrieve_terms(x["text"]), "question": itemgetter("text")} | llm
七、性能优化与生产部署
7.1 关键指标监控表
7.2 部署最佳实践
# 使用LangChain CLI部署langchain deploy --app my_agent.py --name translation-agent# 启用实时追踪export LANGCHAIN_TRACING_V2=trueexport LANGCHAIN_API_KEY="your_api_key"
结语:“LangChain 的真正力量在于将孤立的AI能力转化为可编排的工作流” ,更多AI大模型应用开发学习视频内容和资料,尽在聚客AI学院。