Skip to content

知识点卡片:LangChain开发

基本信息

属性内容
知识点LangChain / LangGraph / LlamaIndex
掌握程度★★★★★
学习优先级P0
预估时间8小时

核心概念

LangChain组件:
├── Models(模型):LLM/ChatModel/Embeddings
├── Prompts(提示词):PromptTemplate/ChatPromptTemplate
├── Chains(链):串联多个组件
├── Memory(记忆):对话历史管理
├── Indexes(索引):文档加载/向量存储/检索
├── Agents(代理):基于LLM的工具调用
└── Callbacks(回调):日志/监控

代码示例

Chain

python
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

prompt = PromptTemplate(
    template="将以下文本翻译成{target_language}:\n{text}",
    input_variables=["text", "target_language"]
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run({"text": "Hello World", "target_language": "中文"})

RAG Chain

python
from langchain.chains import RetrievalQA
from langchain_community.vectorstores import Chroma
from langchain_huggingface import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vectorstore = Chroma.from_documents(docs, embeddings)
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever())
answer = qa_chain.invoke("What is the capital?")

Agent

python
from langchain.agents import initialize_agent, Tool, AgentType
from langchain.tools import tool

@tool
def search(query: str) -> str:
    """搜索互联网获取信息"""
    return f"搜索结果: 关于'{query}'的信息..."

@tool
def calculate(expression: str) -> str:
    """计算数学表达式"""
    return str(eval(expression))

agent = initialize_agent(
    tools=[search, calculate],
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)
agent.run("123 * 456 是多少?搜索验证一下")

LangGraph

python
from langgraph.graph import StateGraph, END
from typing import TypedDict

class State(TypedDict):
    messages: list
    next_step: str

def router(state):
    """根据状态决定下一步"""
    last_msg = state["messages"][-1]
    if "搜索" in last_msg:
        return "search"
    return "respond"

graph = StateGraph(State)
graph.add_node("think", think_node)
graph.add_node("search", search_node)
graph.add_node("respond", respond_node)
graph.add_conditional_edges("think", router, {"search": "search", "respond": "respond"})
graph.add_edge("search", "think")
graph.add_edge("respond", END)
graph.set_entry_point("think")

app = graph.compile()
result = app.invoke({"messages": ["帮我查一下今天的天气"]})

相关知识点