LangChain 是目前最流行的 AI 应用开发框架,本文带你快速入门,构建一个智能问答应用。
LangChain 是什么? LangChain 是一个用于开发 LLM 应用的开源框架,提供:
🔗 链式调用 :将多个组件串联成工作流
📚 知识检索 :RAG(检索增强生成)支持
🧠 记忆管理 :多轮对话上下文
🔧 工具调用 :让 AI 使用外部工具
环境准备 安装依赖 1 pip install langchain langchain-openai chromadb
配置 API Key 1 2 import os os.environ["OPENAI_API_KEY" ] = "your-api-key"
基础使用 1. 简单对话 1 2 3 4 5 6 7 8 9 from langchain_openai import ChatOpenAIfrom langchain_core.messages import HumanMessage llm = ChatOpenAI(model="gpt-4o-mini" ) response = llm.invoke([HumanMessage(content="你好,请介绍一下自己" )])print (response.content)
2. 使用 Prompt 模板 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from langchain_core.prompts import ChatPromptTemplate prompt = ChatPromptTemplate.from_messages([ ("system" , "你是一个{role},请用专业的语言回答问题" ), ("user" , "{question}" ) ]) chain = prompt | llm response = chain.invoke({ "role" : "Python专家" , "question" : "什么是装饰器?" })print (response.content)
3. 输出解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from langchain_core.output_parsers import JsonOutputParserfrom pydantic import BaseModelclass CodeReview (BaseModel ): issues: list [str ] suggestions: list [str ] score: int parser = JsonOutputParser(pydantic_object=CodeReview) prompt = ChatPromptTemplate.from_messages([ ("system" , "你是代码审查专家。{format_instructions}" ), ("user" , "请审查以下代码:\n{code}" ) ]) chain = prompt | llm | parser result = chain.invoke({ "format_instructions" : parser.get_format_instructions(), "code" : "def add(a,b): return a+b" })print (result)
RAG 实战 RAG(Retrieval-Augmented Generation)是让 AI 基于私有知识库回答问题的关键技术。
1. 准备知识库 1 2 3 4 5 6 7 8 9 10 11 12 13 from langchain_community.document_loaders import TextLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitter loader = TextLoader("knowledge.txt" , encoding="utf-8" ) documents = loader.load() text_splitter = RecursiveCharacterTextSplitter( chunk_size=500 , chunk_overlap=50 ) splits = text_splitter.split_documents(documents)
2. 创建向量存储 1 2 3 4 5 6 7 8 9 10 11 12 from langchain_openai import OpenAIEmbeddingsfrom langchain_community.vectorstores import Chroma embeddings = OpenAIEmbeddings() vectorstore = Chroma.from_documents( documents=splits, embedding=embeddings, persist_directory="./chroma_db" )
3. 构建问答链 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from langchain.chains import RetrievalQA retriever = vectorstore.as_retriever(search_kwargs={"k" : 3 }) qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff" , retriever=retriever, return_source_documents=True ) result = qa_chain.invoke({"query" : "什么是RAG?" })print (result["result" ])
完整项目示例 以下是一个完整的智能客服 Demo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 from langchain_openai import ChatOpenAI, OpenAIEmbeddingsfrom langchain_community.vectorstores import Chromafrom langchain_core.prompts import ChatPromptTemplatefrom langchain.chains.combine_documents import create_stuff_documents_chainfrom langchain.chains import create_retrieval_chain llm = ChatOpenAI(model="gpt-4o-mini" ) embeddings = OpenAIEmbeddings() vectorstore = Chroma(persist_directory="./db" , embedding_function=embeddings) retriever = vectorstore.as_retriever() system_prompt = """你是一个智能客服助手。 请基于以下知识库内容回答用户问题。 如果知识库中没有相关信息,请诚实说明。 知识库内容: {context} """ prompt = ChatPromptTemplate.from_messages([ ("system" , system_prompt), ("user" , "{input}" ) ]) document_chain = create_stuff_documents_chain(llm, prompt) retrieval_chain = create_retrieval_chain(retriever, document_chain)def chat (question: str ) -> str : result = retrieval_chain.invoke({"input" : question}) return result["answer" ]print (chat("你们的退货政策是什么?" ))
进阶话题 Agent 开发 让 AI 自主决定使用哪些工具:
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.agents import create_openai_tools_agent, AgentExecutorfrom langchain.tools import Tool tools = [ Tool( name="Search" , func=lambda q: "搜索结果..." , description="搜索互联网信息" ), Tool( name="Calculator" , func=lambda q: eval (q), description="进行数学计算" ) ] agent = create_openai_tools_agent(llm, tools, prompt) executor = AgentExecutor(agent=agent, tools=tools) result = executor.invoke({"input" : "计算 123 * 456" })
最佳实践
选择合适的模型 :简单任务用 mini 版本省成本
优化 Prompt :好的提示词事半功倍
合理分块 :知识库分块大小影响检索质量
错误处理 :API 调用要有重试机制
监控日志 :使用 LangSmith 追踪调试
总结 LangChain 大大降低了 AI 应用开发门槛。掌握基础后,可以进一步探索:
多 Agent 协作
流式输出
自定义组件
生产部署
下一篇:《LangChain 进阶:构建多 Agent 系统》