LangChain 是围绕大型语言模型(LLMs)构建应用的强大框架,适合开发问答系统、聊天机器人、自动化工具等。本指南从 环境配置 到 完整项目示例 ,逐步覆盖核心功能与实战技巧。
一、LangChain 核心概念
LLM(Large Language Model) 如 OpenAI GPT、Llama 等,负责生成文本。
链(Chains) 将多个任务组合成流程(如「提问 → 调用工具 → 总结」)。
记忆(Memory) 维护上下文信息,支持多轮对话。
代理(Agents) 让 LLM 自主决定调用哪些工具(如搜索、计算)。
向量数据库(Vector Stores) 结合外部数据(文档、知识库)实现精准回答。
二、环境搭建
安装依赖 确保 Python≥3.8,安装 LangChain 和 LLM 提供方(如 OpenAI):1 2 3 pip install langchain openai python-dotenv pip install faiss-cpu pypdf chromadb tiktoken
配置密钥 创建 .env
文件保存密钥(如 OpenAI):1 2 OPENAI_API_KEY="sk-xxx" # OpenAI SERPAPI_API_KEY="serpapi-key" # SerpAPI(搜索引擎工具)
三、基础步骤:构建问答流程
1. 初始化 LLM 并提问
1 2 3 4 5 6 7 8 from langchain.llms import OpenAIfrom dotenv import load_dotenvload_dotenv() llm = OpenAI(model="gpt-3.5-turbo-instruct" , temperature=0.5 ) response = llm("用一句话解释量子纠缠。" ) print (response)
2. 定义 Prompt 模板
1 2 3 4 5 6 7 8 9 from langchain.prompts import PromptTemplatetemplate = """你是一个物理学教授,用通俗易懂的例子解释 {concept}。 要求:① 不超过100字 ② 包含一个生活案例""" prompt = PromptTemplate(input_variables=["concept" ], template=template) formatted_prompt = prompt.format (concept="相对论" ) response = llm(formatted_prompt) print (response)
四、进阶功能:链(Chains)
1. 构建多步处理链
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from langchain.chains import LLMChainchain = LLMChain(llm=llm, prompt=prompt) result = chain.run("黑洞" ) print (result)from langchain.chains import SimpleSequentialChainchain1 = LLMChain(llm=llm, prompt=PromptTemplate( input_variables=["topic" ], template="总结 {topic} 的三大核心特点。" )) chain2 = LLMChain(llm=llm, prompt=PromptTemplate( input_variables=["features" ], template="将这些特点转化为科普短视频脚本:{features}" )) combined_chain = SimpleSequentialChain(chains=[chain1, chain2], verbose=True ) final_output = combined_chain.run("量子计算机" ) print (final_output)
五、记忆(Memory)与对话
1. 保留对话上下文
1 2 3 4 5 6 7 from langchain.memory import ConversationBufferWindowMemorymemory = ConversationBufferWindowMemory(k=3 ) conversation = ConversationChain(llm=llm, memory=memory) print (conversation.run("如何用Python实现快速排序?" ))print (conversation.run("能详细说明每一步的作用吗?" ))
六、代理(Agents)与工具
1. 让模型自主调用工具
1 2 3 4 5 6 7 8 9 10 11 from langchain.agents import initialize_agent, load_toolstools = load_tools(["serpapi" , "llm-math" ], llm=llm) agent = initialize_agent( tools, llm, agent="zero-shot-react-description" , verbose=True ) agent.run("阿里巴巴集团2023年的营收是多少人民币?换算成美元是多少?" )
输出示例 :
1 2 3 4 Action: Search阿里巴巴集团2023年营收 Observation: 阿里巴巴2023年营收8686亿人民币 Action: Calculator将8686亿人民币换算成美元(汇率1:7.2) Final Answer: 阿里巴巴2023年营收约1206.39亿美元
七、结合外部数据(RAG)
1. 构建私有知识库问答系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 from langchain.document_loaders import WebBaseLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import FAISSloader = WebBaseLoader("https://news.cn/tech/20240401/article123.html" ) documents = loader.load() text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000 , chunk_overlap=200 ) texts = text_splitter.split_documents(documents) embeddings = OpenAIEmbeddings() db = FAISS.from_documents(texts, embeddings) query = "文章提到哪些AI技术突破?" retrieved_docs = db.similarity_search(query) print (retrieved_docs[0 ].page_content[:300 ] + "..." )
八、实战项目:合同分析助手
目标 :上传 PDF 合同,自动回答关键条款问题。
1. 数据预处理
1 2 3 4 5 6 7 8 9 10 from langchain.document_loaders import PyPDFLoaderfrom langchain.text_splitter import CharacterTextSplitterloader = PyPDFLoader("contract.pdf" ) pages = loader.load() text_splitter = CharacterTextSplitter(chunk_size=2000 ) docs = text_splitter.split_documents(pages)
2. 构建完整流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from langchain.chains import RetrievalQAqa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff" , retriever=db.as_retriever(search_kwargs={"k" : 3 }), return_source_documents=True ) question = "合同中约定的违约金比例是多少?" result = qa({"query" : question}) print (f"答案:{result['result' ]} " )print ("来源条款:" , result['source_documents' ][0 ].page_content)
九、部署与优化
1. 使用 FastAPI 搭建 API 服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI() class Query (BaseModel ): question: str @app.post("/ask" ) async def answer_question (query: Query ): result = qa({"query" : query.question}) return { "answer" : result["result" ], "sources" : [doc.page_content[:200 ] for doc in result["source_documents" ]] }
启动服务:
1 uvicorn main:app --reload
2. 性能优化技巧
缓存嵌入向量 :避免重复计算文档嵌入
批量处理请求 :利用 batch_generate
提升效率
错误重试机制 :处理 API 调用失败
1 2 3 4 5 from tenacity import retry, stop_after_attempt@retry(stop=stop_after_attempt(3 ) ) def safe_llm_call (prompt ): return llm(prompt)
十、避坑指南
Token 超限
响应慢
使用 model="gpt-3.5-turbo"
替换 gpt-4
简化提示词(减少不必要修饰语)
数据泄露风险
避免向 OpenAI 传输敏感数据(使用本地模型如 Llama)
十一、扩展应用场景
自动化报告生成
企业知识库引擎
整合 Confluence、Notion 等平台数据
智能客服系统
通过以上步骤,你可以逐步构建一个功能完善的 AI 应用(如简历解析器、行业研报生成器、智能客服),涵盖从模型调用到部署的完整流程。如果需要更详细的代码示例或高级功能(如代理工具集成),可以参考 LangChain 官方文档 或相关教程。