📘 LangChain 速查手册(2024)

✅ 基于 LangChain 0.2+(2024 年主流版本)
📌 导入惯例:from langchain import ...from langchain_core import ...

🧱 一、核心概念

概念说明
LLM大语言模型接口(如 OpenAI、Anthropic、Ollama)
ChatModel支持对话格式的模型(messages 输入)
PromptTemplate构建结构化提示词
Chain组合多个组件的流水线(如 LLM + Prompt)
Agent能调用工具、自主决策的智能体
ToolAgent 可调用的函数(如搜索、计算器)
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

🚀 十一、最佳实践

  1. 优先使用 LCELprompt | llm | parser)——简洁、可组合、支持流式
  2. RAG 三要素:高质量文档 + 合理切分 + 相关性检索
  3. Agent 工具描述要清晰,避免歧义
  4. 控制 token 使用:用 ConversationSummaryMemory 或窗口记忆
  5. 始终设置 temperature=0 用于确定性任务(如代码生成、事实问答)
  6. 用 LangSmith 调试 prompt 和 chain 行为

📦 十二、常用包索引

功能包名
核心langchain-core
社区组件langchain-community
OpenAIlangchain-openai
Anthropiclangchain-anthropic
Ollamalangchain-ollama
Hugging Facelangchain-huggingface
Chromalangchain-chroma
FAISSlangchain-faiss
Toolslangchain-community(含 DuckDuckGo、Wikipedia 等)
💡 安装示例:pip install langchain langchain-openai langchain-chroma

一句话总结 LangChain 架构
Prompt + LLM + (Retriever / Tools / Memory) → Chain / Agent → Output

添加新评论