以下是 LangChain 的功能介绍及典型使用示例:
LangChain 核心功能介绍
-
模型 I/O
- 功能概述:提供统一的大语言模型接口,支持多种 LLM,并通过提示词模板动态管理输入输出[2][4]。
- 关键特性:
- 模型包装器:适配不同平台的 LLM,简化 API 调用[2]。
- 输出解析器:从模型输出中提取结构化信息[2][4]。
- 提示词管理:支持模板化输入,便于动态调整[3][4]。
-
数据增强与检索
- 功能概述:连接外部数据源,实现文档加载、转换、存储和查询[2][3]。
- 关键特性:
- 文档加载器:支持多种格式(PDF、CSV、SQL 等)的数据导入[3][4]。
- 向量存储与检索:通过嵌入技术实现高效数据检索[2][4]。
- 索引优化:构建适合 LLM 交互的文档索引策略[3]。
-
链式调用
- 功能概述:将多个模型或组件串联为逻辑流程,处理复杂任务[2][3]。
- 典型应用:多步骤推理、跨模型协作、业务流程自动化[3][4]。
-
记忆能力
- 功能概述:在对话或流程中维护状态,支持历史消息的读取和写入[2][3]。
- 应用场景:聊天机器人、长期对话系统、上下文感知的任务处理[3][4]。
-
代理
- 功能概述:基于 LLM 的决策能力,动态选择工具或操作序列[2][7]。
- 典型流程:模型分析任务 → 调用工具 → 观察结果 → 重复直至目标达成[7]。
-
回调处理器
- 功能概述:记录和干预应用运行的各个阶段,用于日志、监控和流处理[2][4]。
- 用途:调试、性能追踪、实时数据处理[4]。
典型使用示例演示
示例一:文本总结
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains.summarize import load_summarize_chain
# 初始化LLM模型
llm = OpenAI(temperature=0, model_name='gpt-3.5-turbo', openai_api_key="your_api_key")
# 定义短文本总结模板
template = """
%INSTRUCTIONS:
Please summarize the following piece of text.
Respond in a manner that a 5 year old would understand.
%TEXT:
{text}
"""
prompt = PromptTemplate(input_variables=["text"], template=template)
# 对长文本进行分块处理
text_splitter = RecursiveCharacterTextSplitter(separators=["\n\n", "\n"], chunk_size=5000, chunk_overlap=350)
with open('wonderland.txt', 'r') as file:
text = file.read()
docs = text_splitter.create_documents([text])
# 使用 map_reduce 策略总结长文本
chain = load_summarize_chain(llm=llm, chain_type='map_reduce')
summary = chain.run(docs)
print(summary)
示例二:工具调用与多轮对话
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, AIMessage, ToolMessage
import json
# 定义工具函数
@tool
def get_weather(city: str) -> str:
return f"{city} 今天天气晴,28°C,湿度30%"
@tool
def add(a: int, b: int) -> int:
return a + b
# 初始化模型并绑定工具
llm = ChatOpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key="your_secret_key", model="qwen-turbo", temperature=0)
llm_with_tools = llm.bind_tools([get_weather, add])
# 多轮对话循环
messages = [AIMessage(content="你好!我是你的AI助手,可以帮你查天气、做加法,有什么可以帮你的?")]
available_tools = {"get_weather": get_weather, "add": add}
while True:
user_input = input("你:").strip()
if user_input.lower() in {"exit", "quit", ""}:
print("再见!")
break
messages.append(HumanMessage(content=user_input))
response = llm_with_tools.invoke(messages)
if response.tool_calls:
print("检测到工具调用:")
print(json.dumps(response.tool_calls, indent=2, ensure_ascii=False))
messages.append(response)
for tool_call in response.tool_calls:
tool_func = available_tools.get(tool_call["name"])
if tool_func:
tool_result = tool_func.invoke(tool_call)
messages.append(tool_result)
print(f"执行 {tool_call['name']} → {tool_result.content}")
else:
messages.append(response)
print("AI:", response.content)
示例三:文档问答
from langchain.document_loaders import PyPDFLoader
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.retrievers import VectorStoreRetriever
from langchain.chains import RetrievalQA
# 加载文档并创建向量库
loader = PyPDFLoader("example.pdf")
pages = loader.load()
embeddings = OpenAIEmbeddings(api_key="your_api_key")
vectorstore = FAISS.from_documents(pages, embeddings)
retriever = VectorStoreRetriever(vectorstore)
# 构建问答链
qa_chain = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=retriever)
answer = qa_chain.run("为什么天空是蓝色的?")
print(answer)
以上便是 LangChain 的核心功能及典型使用示例。通过灵活组合各模块,可快速构建从简单到复杂的 LLM 应用。更多完整示例可参考官方文档及社区资源。