LangChain学习笔记01——基本概念及使用
LangChain是一个开源框架,用于开发基于大语言模型(LLM)的应用程序。它提供六大核心模块:模型交互、提示模板、数据连接、对话记忆、工作流链和智能代理,支持与GPT、Llama等模型集成。通过PromptTemplate标准化提示词,Chains串联多个步骤,Memory实现多轮对话,RetrievalQA构建知识库问答系统。其优势在于灵活组合这些模块,可应用于企业知识库、自动化数据分析等场
1.LangChain介绍
LangChain 是一个用于开发大语言模型(LLM)驱动应用的开源框架(Python/JS 库)。它的核心目标是简化将 LLM(如 GPT、Llama 等)与外部数据源、计算逻辑和工具集成的过程,从而构建更强大、可定制化的 AI 应用。
官方文档(https://python.langchain.com)开始,逐步探索各个模块的高级用法。
2.LangChain 能做什么?
|
场景 |
主要用途 |
|
PromptTemplate |
模板化提示词,批量生成不同内容 |
|
Chains |
把多个步骤串起来,形成完整流程 |
|
Memory |
保存上下文,实现多轮对话 |
|
Retriever + VectorStore |
做RAG,先在知识库检索,再生成回答,解决幻觉问题,防止胡编乱造 |
|
Agent + Tools |
根据用户需求自动选择合适工具,比如先查天气再写诗 |
3.对比示例(使用LangChain的优点)
直接调用API
import openai
response = openai.chatcompletion.create(
mode1="gpt-3.5-turbo"
messages=[{"role":"user","content":"请帮我写一篇面试自我介绍"}]
print(response.choices[o] .message.content)
from langchain.prompts import PromptTemplate
from 1angchain.chains import LLMchain
from langchain_openai import ChatopenAI
llm = ChatOpenAI()
prompt = PromptTemplate.from_template("请帮我写一篇{topic}")
chain = LLMchain(llm=llm, prompt=prompt)
result= chain.run({"topic":"面试自我介绍})
print(result)
对比可以知道,使用框架,我们可以灵活的进行不同需求的实现,还可以有更多的串联步骤
4.LangChain核心模块
一、核心六大模块
1. 模型(Models)
负责与各种语言模型交互
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_community.llms import Ollama
# OpenAI 模型
llm_openai = ChatOpenAI(model="gpt-4-turbo")
# Anthropic 模型
llm_claude = ChatAnthropic(model="claude-3-opus")
# 本地模型
llm_local = Ollama(model="llama3")
2. 提示(Prompts)
管理提示模板和优化
from langchain.prompts import ChatPromptTemplate
template = """
你是一位专业的{role}。请根据以下上下文回答问题:
{context}
问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)
formatted_prompt = prompt.format(
role="医生",
context="患者有发热、咳嗽症状,体温38.5℃",
question="可能的诊断是什么?"
)
3. 数据连接(Indexes)
集成外部数据源
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
# 1. 加载文档
loader = WebBaseLoader("https://zh.wikipedia.org/wiki/人工智能")
docs = loader.load()
# 2. 分割文本
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
splits = text_splitter.split_documents(docs)
# 3. 向量化存储
vectorstore = Chroma.from_documents(
documents=splits,
embedding=OpenAIEmbeddings()
)
# 4. 创建检索器
retriever = vectorstore.as_retriever()
4. 记忆(Memory)
管理对话状态和历史
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# 使用示例
memory.save_context(
{"input": "你好,我叫小明"},
{"output": "你好小明!有什么可以帮你的?"}
)
memory.save_context(
{"input": "我的名字是什么?"},
{"output": "你叫小明。"}
)
5. 链(Chains)
组合多个组件形成工作流
from langchain.chains import RetrievalQA
# 创建问答链
qa_chain = RetrievalQA.from_chain_type(
llm=llm_openai,
chain_type="stuff",
retriever=retriever,
memory=memory
)
# 使用链
response = qa_chain.invoke({"query": "人工智能的主要应用领域有哪些?"})
print(response["result"])
6. 代理(Agents)
动态调用工具完成任务
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain.tools import Tool
# 定义工具
def currency_converter(amount: float, from_currency: str, to_currency: str):
"""货币转换工具"""
conversion_rates = {"USD": 1, "CNY": 7.2, "EUR": 0.93}
return amount * conversion_rates[to_currency] / conversion_rates[from_currency]
tools = [
Tool(
name="CurrencyConverter",
func=currency_converter,
description="货币转换工具,支持USD, CNY, EUR"
)
]
# 创建代理
agent = create_tool_calling_agent(
llm=llm_openai,
tools=tools,
prompt=prompt
)
# 执行代理
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = agent_executor.invoke({
"input": "请将100美元转换为人民币"
})
二、高级应用模式
1. 检索增强生成(RAG)
from langchain_core.runnables import RunnablePassthrough
# 定义RAG管道
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm_openai
| StrOutputParser()
)
# 使用RAG
response = rag_chain.invoke("LangChain是什么?")
2. 多智能体协作
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain.agents import initialize_multi_agent
# 定义不同角色的代理
researcher = create_openai_tools_agent(
llm=llm_openai,
tools=[web_search_tool],
system_message="你是一名研究人员"
)
writer = create_openai_tools_agent(
llm=llm_openai,
tools=[drafting_tool],
system_message="你是一名内容撰写者"
)
# 初始化多代理系统
team = initialize_multi_agent(
agents=[researcher, writer],
manager_llm=llm_openai
)
# 执行团队任务
result = team.invoke("撰写一篇关于量子计算的科普文章")
3. 结构化输出
from langchain_core.pydantic_v1 import BaseModel, Field
# 定义输出结构
class PatientInfo(BaseModel):
name: str = Field(description="患者姓名")
age: int = Field(description="患者年龄")
symptoms: list[str] = Field(description="症状列表")
diagnosis: str = Field(description="初步诊断")
# 创建带结构化输出的链
structured_chain = llm_openai.with_structured_output(PatientInfo)
# 使用
medical_text = "患者张三,45岁,主诉头痛、发热三天,体温38.2℃"
result = structured_chain.invoke(f"从以下文本提取患者信息:{medical_text}")
print(f"姓名: {result.name}, 诊断: {result.diagnosis}")
三、最佳实践
1. 性能优化技巧
# 流式响应
for chunk in qa_chain.stream({"query": "解释深度学习原理"}):
print(chunk["result"], end="", flush=True)
# 批量处理
questions = ["什么是机器学习?", "监督学习和无监督学习的区别?"]
results = qa_chain.batch([{"query": q} for q in questions])
# 异步调用
async def run_chain():
return await qa_chain.ainvoke({"query": "AI的未来发展趋势"})
2. 错误处理
from langchain_core.runnables import RunnableLambda
def handle_errors(input_dict):
try:
# 正常执行
return qa_chain.invoke(input_dict)
except Exception as e:
# 错误处理
return {"result": f"处理请求时出错: {str(e)}"}
safe_chain = RunnableLambda(handle_errors)
3. 部署与监控
# 使用LangServe部署API
from langchain.chains import RetrievalQA
from langserve import add_routes
app = FastAPI()
chain = RetrievalQA.from_chain_type(...)
add_routes(app, chain, path="/qa")
# 集成监控
from langchain.callbacks import LangChainTracer
tracer = LangChainTracer()
chain = RetrievalQA.from_chain_type(..., callbacks=[tracer])
四、实际应用场景
1. 企业知识库问答
qa_system = RetrievalQA.from_chain_type(
llm=llm_openai,
retriever=vectorstore.as_retriever(search_kwargs={"k": 5}),
chain_type="map_reduce"
)
2. 自动化数据分析
agent = create_pandas_dataframe_agent(
llm=llm_openai,
df=pd.read_csv("sales_data.csv"),
verbose=True
)
agent.run("分析第四季度销售趋势")
3. 智能文档处理
from langchain.chains import AnalyzeDocumentChain
from langchain.chains.summarize import load_summarize_chain
summary_chain = load_summarize_chain(llm_openai, chain_type="map_reduce")
summarize_document = AnalyzeDocumentChain(combine_docs_chain=summary_chain)
summarize_document.run("大型法律文档.pdf")
LangChain 的强大之处在于这些模块可以灵活组合,构建从简单问答到复杂工作流的各种应用。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)