✅ 基于 LangChain 0.2+(2024 年主流版本)
📌 导入惯例:from langchain import ...
或 from langchain_core import ...
🧱 一、核心概念
概念 | 说明 |
---|
LLM | 大语言模型接口(如 OpenAI、Anthropic、Ollama) |
ChatModel | 支持对话格式的模型(messages 输入) |
PromptTemplate | 构建结构化提示词 |
Chain | 组合多个组件的流水线(如 LLM + Prompt) |
Agent | 能调用工具、自主决策的智能体 |
Tool | Agent 可调用的函数(如搜索、计算器) |
Retriever | 从向量库/文档中检索相关片段 |
Memory | 记住对话历史(如 ConversationBufferMemory ) |
Document Loader | 加载 PDF、网页、CSV 等 |
Text Splitter | 将长文本切分为块 |
🔌 二、模型接入(LLM / ChatModel)
1. OpenAI
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
llm = ChatOpenAI(model="gpt-4o", temperature=0)
embeddings = OpenAIEmbeddings()
2. Anthropic
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-3-5-sonnet-20240620")
3. Ollama(本地模型)
from langchain_ollama import ChatOllama
llm = ChatOllama(model="llama3.1", temperature=0)
4. Hugging Face(开源模型)
from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint
llm = HuggingFaceEndpoint(repo_id="meta-llama/Meta-Llama-3-8B-Instruct")
💡 所有模型统一接口:.invoke(messages)
/ .stream(messages)
📝 三、提示词工程(PromptTemplate)
1. 基础模板
from langchain_core.prompts import PromptTemplate
template = "翻译成{language}:{text}"
prompt = PromptTemplate.from_template(template)
prompt.format(language="中文", text="Hello")
2. 聊天模板(推荐)
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个{role}"),
("human", "{input}")
])
3. Few-Shot 示例
from langchain_core.prompts import FewShotChatMessagePromptTemplate
examples = [{"input": "嗨", "output": "你好!"}, ...]
example_prompt = ChatPromptTemplate.from_messages([("human", "{input}"), ("ai", "{output}")])
few_shot = FewShotChatMessagePromptTemplate(
example_prompt=example_prompt,
examples=examples
)
final_prompt = ChatPromptTemplate.from_messages([("system", "..."), few_shot, ("human", "{input}")])
⛓️ 四、Chain(链式调用)
1. LCEL(LangChain Expression Language)——推荐方式
from langchain_core.output_parsers import StrOutputParser
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"input": "你好"})
2. 常用内置 Chain
from langchain.chains import LLMChain, ConversationChain
# 基础链
chain = LLMChain(llm=llm, prompt=prompt)
# 对话链(带记忆)
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
conv_chain = ConversationChain(llm=llm, memory=memory)
3. RAG Chain(检索增强生成)
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
combine_docs_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain = create_retrieval_chain(retriever, combine_docs_chain)
response = retrieval_chain.invoke({"input": "LangChain 是什么?"})
🔍 五、检索(Retriever)与 RAG
1. 文档加载
from langchain_community.document_loaders import PyPDFLoader, WebBaseLoader
docs = PyPDFLoader("doc.pdf").load()
docs = WebBaseLoader("https://example.com").load()
2. 文本切分
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(docs)
3. 向量存储(Chroma 示例)
from langchain_chroma import Chroma
vectorstore = Chroma.from_documents(chunks, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
✅ 支持:Chroma、FAISS、Pinecone、Weaviate、Qdrant、Milvus 等
🤖 六、Agent(智能体)
1. 定义工具
from langchain.tools import tool
@tool
def multiply(a: int, b: int) -> int:
"""将两个整数相乘"""
return a * b
2. 创建 Agent(OpenAI Functions)
from langchain import hub
from langchain.agents import create_openai_functions_agent, AgentExecutor
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = create_openai_functions_agent(llm, [multiply], prompt)
agent_executor = AgentExecutor(agent=agent, tools=[multiply], verbose=True)
agent_executor.invoke({"input": "3 乘以 7 等于多少?"})
3. 支持的 Agent 类型
openai-functions-agent
(推荐)react
(ReAct 框架)self-ask-with-search
plan-and-execute
🧠 七、Memory(记忆)
Memory 类型 | 用途 |
---|
ConversationBufferMemory | 保存全部对话历史 |
ConversationSummaryMemory | 用 LLM 总结历史(省 token) |
ConversationBufferWindowMemory | 只保留最近 N 轮 |
ZepMemory | 外部记忆存储(需 Zep 服务) |
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
chain = LLMChain(llm=llm, prompt=prompt, memory=memory)
🧰 八、常用工具(Tools)
LangChain 内置大量工具:
from langchain_community.tools import DuckDuckGoSearchRun, WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
search = DuckDuckGoSearchRun()
wiki = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
# 用于 Agent
tools = [search, wiki, multiply]
✅ 其他工具:Arxiv、Google Serper、SQL Database、File Management、Shell 等
🧪 九、输出解析(Output Parsers)
解析器 | 用途 |
---|
StrOutputParser() | 返回字符串 |
JsonOutputParser() | 返回 JSON(需提示词指定格式) |
PydanticOutputParser() | 返回 Pydantic 模型(强类型) |
from pydantic import BaseModel
from langchain_core.output_parsers import PydanticOutputParser
class Answer(BaseModel):
summary: str
keywords: list[str]
parser = PydanticOutputParser(pydantic_object=Answer)
prompt = PromptTemplate(
template="...{format_instructions}\n问题:{query}",
input_variables=["query"],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
🧩 十、LangSmith(调试与监控)
LangChain 官方平台,用于 追踪、评估、部署 LLM 应用
# 设置环境变量
export LANGCHAIN_API_KEY="..."
export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_PROJECT="my-rag-app"
# 自动追踪所有 chain 调用
result = chain.invoke(...)
# → 自动上传到 https://smith.langchain.com
🚀 十一、最佳实践
- 优先使用 LCEL(
prompt | llm | parser
)——简洁、可组合、支持流式 - RAG 三要素:高质量文档 + 合理切分 + 相关性检索
- Agent 工具描述要清晰,避免歧义
- 控制 token 使用:用
ConversationSummaryMemory
或窗口记忆 - 始终设置
temperature=0
用于确定性任务(如代码生成、事实问答) - 用 LangSmith 调试 prompt 和 chain 行为
📦 十二、常用包索引
功能 | 包名 |
---|
核心 | langchain-core |
社区组件 | langchain-community |
OpenAI | langchain-openai |
Anthropic | langchain-anthropic |
Ollama | langchain-ollama |
Hugging Face | langchain-huggingface |
Chroma | langchain-chroma |
FAISS | langchain-faiss |
Tools | langchain-community (含 DuckDuckGo、Wikipedia 等) |
💡 安装示例:pip install langchain langchain-openai langchain-chroma
✅ 一句话总结 LangChain 架构:
Prompt + LLM + (Retriever / Tools / Memory) → Chain / Agent → Output