🤖 Python AI 第三方库概览
Python 是人工智能和机器学习领域最流行的编程语言之一。本页面介绍几个常用的 AI 第三方库,涵盖深度学习、机器学习、自然语言处理、计算机视觉和大语言模型应用开发。
本页面内容:
- 🔥 PyTorch - 灵活的深度学习框架
- 📈 Scikit-learn - 经典机器学习库
- 🤖 Transformers - 预训练大语言模型库
- 👁️ OpenCV - 计算机视觉库
- ⛓️ LangChain - LLM 应用开发框架
- 🦙 LlamaIndex - LLM 数据索引框架
PyTorch
PyTorch 是由 Meta AI 开发的开源深度学习框架,以其动态计算图和易用性而闻名,是当前最流行的深度学习框架之一。PyTorch 2.0+ 引入了 torch.compile() 编译优化,性能提升显著。
安装
# CPU 版本
pip install torch
# GPU 版本 (CUDA 12.4)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
张量基础
import torch
# 创建张量
x = torch.tensor([1, 2, 3, 4, 5])
print(f"一维张量:{x}")
# 创建二维张量
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(f"二维张量:\n{matrix}")
# 创建特定张量
zeros = torch.zeros(3, 3) # 全零
ones = torch.ones(2, 4) # 全一
random = torch.rand(3, 3) # 随机
eye = torch.eye(3) # 单位矩阵
arange = torch.arange(0, 10, 2) # [0, 2, 4, 6, 8]
print(f"形状:{matrix.shape}")
print(f"数据类型:{matrix.dtype}")
print(f"设备:{matrix.device}")
张量运算
import torch
x = torch.tensor([1.0, 2.0, 3.0, 4.0])
y = torch.tensor([5.0, 6.0, 7.0, 8.0])
# 基本运算
print(f"加法:{x + y}")
print(f"乘法:{x * y}")
print(f"点积:{torch.dot(x, y)}")
# 矩阵乘法
A = torch.randn(3, 4)
B = torch.randn(4, 2)
C = torch.matmul(A, B)
print(f"矩阵乘法形状:{C.shape}")
# 广播机制
scalar = 10
print(f"张量 + 标量:{x + scalar}")
自动求导
import torch
# 创建需要梯度的张量
x = torch.tensor(2.0, requires_grad=True)
y = x ** 2 + 3 * x + 1
# 反向传播
y.backward()
print(f"x 的梯度:{x.grad}") # dy/dx = 2x + 3 = 7
# 多变量求导
x = torch.randn(3, requires_grad=True)
y = x * 2
z = y.sum()
z.backward()
print(f"梯度:{x.grad}")
构建神经网络
import torch
import torch.nn as nn
import torch.nn.functional as F
class NeuralNetwork(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(NeuralNetwork, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, output_size)
self.softmax = nn.Softmax(dim=1)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
x = self.softmax(x)
return x
# 创建模型
model = NeuralNetwork(input_size=784, hidden_size=128, output_size=10)
print(model)
训练循环
import torch
import torch.nn as nn
import torch.optim as optim
# 假设已有数据和模型
X_train = torch.randn(1000, 784)
y_train = torch.randint(0, 10, (1000,))
model = NeuralNetwork(784, 128, 10)
# 损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 训练循环
num_epochs = 10
batch_size = 32
for epoch in range(num_epochs):
model.train()
total_loss = 0
for i in range(0, len(X_train), batch_size):
# 获取批次数据
X_batch = X_train[i:i+batch_size]
y_batch = y_train[i:i+batch_size]
# 前向传播
outputs = model(X_batch)
loss = criterion(outputs, y_batch)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_loss += loss.item()
print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {total_loss:.4f}")
使用 GPU 加速
import torch
# 检查 GPU 可用性
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f"使用设备:{device}")
# 将模型和数据移动到 GPU
model = NeuralNetwork(784, 128, 10).to(device)
X_train = X_train.to(device)
y_train = y_train.to(device)
# 后续训练会自动在 GPU 上进行
保存和加载模型
# 保存模型参数(推荐方式)
torch.save(model.state_dict(), 'model.pth')
# 加载模型参数(PyTorch 2.0+ 推荐 weights_only=True)
model = NeuralNetwork(784, 128, 10)
model.load_state_dict(torch.load('model.pth', weights_only=True))
model.eval()
# 使用 safetensors 格式保存(更安全)
from safetensors.torch import save_file, load_file
save_file(model.state_dict(), 'model.safetensors')
# 加载 safetensors 格式
state_dict = load_file('model.safetensors')
model.load_state_dict(state_dict)
💡 提示:PyTorch 的动态计算图让调试更简单,非常适合研究和快速原型开发。
Scikit-learn
Scikit-learn 是 Python 中最流行的机器学习库,提供了各种经典的机器学习算法和工具,适合数据分析和建模任务。
安装
pip install scikit-learn
数据预处理
from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder
from sklearn.model_selection import train_test_split
import numpy as np
# 生成示例数据
X = np.random.randn(100, 5)
y = np.random.randint(0, 2, 100)
# 标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 归一化
minmax = MinMaxScaler()
X_normalized = minmax.fit_transform(X)
# 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
print(f"训练集大小:{len(X_train)}, 测试集大小:{len(X_test)}")
分类算法
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 随机森林
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
rf_pred = rf.predict(X_test)
print(f"随机森林准确率:{accuracy_score(y_test, rf_pred):.4f}")
# SVM
svm = SVC(kernel='rbf', random_state=42)
svm.fit(X_train, y_train)
svm_pred = svm.predict(X_test)
print(f"SVM 准确率:{accuracy_score(y_test, svm_pred):.4f}")
# 逻辑回归
lr = LogisticRegression(random_state=42)
lr.fit(X_train, y_train)
lr_pred = lr.predict(X_test)
print(f"逻辑回归准确率:{accuracy_score(y_test, lr_pred):.4f}")
# 详细评估
print(classification_report(y_test, rf_pred))
回归算法
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error, r2_score
# 加载加州房价数据集(替代已移除的 boston 数据集)
california = fetch_california_housing()
X, y = california.data, california.target
print(f"数据集大小:{X.shape[0]} 个样本,{X.shape[1]} 个特征")
# 划分数据
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 线性回归
lr = LinearRegression()
lr.fit(X_train, y_train)
lr_pred = lr.predict(X_test)
print(f"线性回归 R²: {r2_score(y_test, lr_pred):.4f}")
# 岭回归
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
ridge_pred = ridge.predict(X_test)
print(f"岭回归 R²: {r2_score(y_test, ridge_pred):.4f}")
# 梯度提升
gbr = GradientBoostingRegressor(n_estimators=100, random_state=42)
gbr.fit(X_train, y_train)
gbr_pred = gbr.predict(X_test)
print(f"梯度提升 R²: {r2_score(y_test, gbr_pred):.4f}")
聚类算法
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans, DBSCAN
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
# 生成聚类数据
X, y_true = make_blobs(n_samples=300, centers=4,
cluster_std=0.60, random_state=0)
# K-Means 聚类
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans_labels = kmeans.fit_predict(X)
kmeans_score = silhouette_score(X, kmeans_labels)
print(f"K-Means 轮廓分数:{kmeans_score:.4f}")
# DBSCAN 聚类
dbscan = DBSCAN(eps=0.3, min_samples=5)
dbscan_labels = dbscan.fit_predict(X)
dbscan_score = silhouette_score(X, dbscan_labels)
print(f"DBSCAN 轮廓分数:{dbscan_score:.4f}")
降维
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# 生成高维数据
X = np.random.randn(100, 50)
# PCA 降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print(f"PCA 解释方差比:{pca.explained_variance_ratio_}")
# t-SNE 降维
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
# 可视化
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
axes[0].scatter(X_pca[:, 0], X_pca[:, 1])
axes[0].set_title('PCA')
axes[1].scatter(X_tsne[:, 0], X_tsne[:, 1])
axes[1].set_title('t-SNE')
plt.show()
模型选择与调参
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.ensemble import RandomForestClassifier
# 参数网格
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
# 网格搜索
grid_search = GridSearchCV(
RandomForestClassifier(random_state=42),
param_grid,
cv=5,
scoring='accuracy',
n_jobs=-1
)
grid_search.fit(X_train, y_train)
print(f"最佳参数:{grid_search.best_params_}")
print(f"最佳交叉验证分数:{grid_search.best_score_:.4f}")
# 交叉验证
cv_scores = cross_val_score(grid_search.best_estimator_,
X_train, y_train, cv=10)
print(f"10 折交叉验证平均分:{cv_scores.mean():.4f}")
💡 提示:Scikit-learn API 设计统一,所有模型都遵循 fit/predict 模式,易于学习和使用。
Transformers
Transformers 是由 Hugging Face 开发的库,提供了数千个预训练模型,用于文本、图像和音频任务,是大语言模型应用的基石。
安装
pip install transformers
pip install torch # PyTorch 后端
# 或
pip install tensorflow # TensorFlow 后端
文本分类
from transformers import pipeline
# 使用预训练管道
classifier = pipeline("sentiment-analysis")
# 情感分析
result = classifier("I love using Transformers library!")
print(f"情感:{result[0]['label']}")
print(f"置信度:{result[0]['score']:.4f}")
# 多文本
texts = [
"This is amazing!",
"I hate this.",
"It's okay, nothing special."
]
results = classifier(texts)
for text, result in zip(texts, results):
print(f"'{text}' -> {result['label']} ({result['score']:.4f})")
文本生成
from transformers import pipeline
# 文本生成管道
generator = pipeline("text-generation",
model="gpt2")
# 生成文本
prompt = "Once upon a time"
result = generator(prompt, max_length=50, num_return_sequences=3)
for i, r in enumerate(result):
print(f"\n生成文本 {i+1}:")
print(r['generated_text'])
问答系统
from transformers import pipeline
# 问答管道
qa_pipeline = pipeline("question-answering")
context = """
Python 是一种高级编程语言,由 Guido van Rossum 于 1991 年创建。
Python 设计哲学强调代码可读性,使用缩进来表示代码块。
Python 支持多种编程范式,包括面向对象、函数式和过程式编程。
"""
question = "Python 是谁创建的?"
result = qa_pipeline(question=question, context=context)
print(f"答案:{result['answer']}")
print(f"置信度:{result['score']:.4f}")
使用 Auto 类加载模型
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# 模型名称
model_name = "bert-base-chinese"
# 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
# 准备输入
text = "这是一个测试句子"
inputs = tokenizer(text, return_tensors="pt",
padding=True, truncation=True)
# 模型推理
with torch.no_grad():
outputs = model(**inputs)
print(f"输出形状:{outputs.logits.shape}")
微调模型
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import TrainingArguments, Trainer
from datasets import load_dataset
# 加载数据集
dataset = load_dataset("imdb")
# 加载分词器和模型
model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(
model_name, num_labels=2
)
# 预处理数据
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length",
truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
# 训练参数
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=64,
evaluation_strategy="epoch",
save_strategy="epoch",
logging_dir="./logs",
)
# 创建 Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["test"],
)
# 开始训练
trainer.train()
中文文本处理
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# 使用中文预训练模型
model_name = "hfl/chinese-roberta-wwm-ext"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 中文文本
texts = [
"这部电影非常好看,剧情精彩",
"服务太差了,不会再来了",
"产品质量一般,价格偏高"
]
# 批量编码
inputs = tokenizer(texts, padding=True, truncation=True,
return_tensors="pt", max_length=128)
print(f"输入形状:{inputs['input_ids'].shape}")
print(f"分词结果:{tokenizer.convert_ids_to_tokens(inputs['input_ids'][0])}")
💡 提示:Hugging Face Model Hub 提供了超过 10 万个预训练模型,可以直接使用或微调。
OpenCV
OpenCV (Open Source Computer Vision Library) 是最流行的计算机视觉库,提供了 2500+ 个优化算法,用于图像和视频处理。
安装
pip install opencv-python
pip install opencv-python-headless # 无 GUI 版本 (服务器)
读取和显示图像
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 检查是否成功
if img is None:
print("无法读取图像")
else:
print(f"图像形状:{img.shape}") # (高度,宽度,通道数)
# 显示图像
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存图像
cv2.imwrite('output.jpg', img)
图像预处理
import cv2
img = cv2.imread('image.jpg')
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯模糊
blurred = cv2.GaussianBlur(img, (5, 5), 0)
# Canny 边缘检测
edges = cv2.Canny(img, 100, 200)
# 阈值处理
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Gray', gray)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
人脸检测
import cv2
# 加载预训练的人脸检测器
face_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
)
# 读取图像
img = cv2.imread('group_photo.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(
gray, scaleFactor=1.1, minNeighbors=5,
minSize=(30, 30)
)
print(f"检测到 {len(faces)} 张人脸")
# 绘制矩形框
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Face Detection', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
视频处理
import cv2
# 打开摄像头
cap = cv2.VideoCapture(0)
# 或使用视频文件
# cap = cv2.VideoCapture('video.mp4')
while True:
# 读取帧
ret, frame = cap.read()
if not ret:
break
# 转换为灰度
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 显示
cv2.imshow('Video', gray)
# 按 q 退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
特征检测
import cv2
import matplotlib.pyplot as plt
# 读取图像
img1 = cv2.imread('image1.jpg', 0)
img2 = cv2.imread('image2.jpg', 0)
# 使用 ORB 检测特征点
orb = cv2.ORB_create()
# 检测关键点和描述子
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
# 特征匹配
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)
# 绘制匹配结果
result = cv2.drawMatches(img1, kp1, img2, kp2,
matches[:50], None)
plt.figure(figsize=(15, 8))
plt.imshow(result)
plt.axis('off')
plt.show()
对象跟踪
import cv2
# 打开摄像头
cap = cv2.VideoCapture(0)
# 创建跟踪器(使用 MOSSE,KCF 在 OpenCV 4.9+ 中已移除)
tracker = cv2.TrackerMOSSE_create()
# 读取第一帧
ret, frame = cap.read()
# 选择 ROI (手动框选跟踪对象)
bbox = cv2.selectROI("Select object", frame, fromCenter=False)
cv2.destroyWindow("Select object")
# 初始化跟踪器
tracker.init(frame, bbox)
while True:
ret, frame = cap.read()
if not ret:
break
# 更新跟踪器
success, bbox = tracker.update(frame)
if success:
x, y, w, h = [int(v) for v in bbox]
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
else:
cv2.putText(frame, "Lost", (50, 50),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
cv2.imshow('Tracking', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
💡 提示:OpenCV 与深度学习框架结合使用效果更佳,如使用 PyTorch 检测对象后用 OpenCV 绘制结果。OpenCV 4.9+ 推荐使用 MOSSE 或 CSRT 跟踪器。
LangChain
LangChain 是一个用于开发大语言模型 (LLM) 应用的框架,提供了组件和工具来构建上下文感知、推理能力强的 AI 应用。
安装
pip install langchain
pip install langchain-community
pip install langchain-openai # OpenAI 支持
pip install langchain-chroma # 向量数据库
基本 LLM 调用
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
# 初始化 LLM
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.7,
api_key="your-api-key"
)
# 发送消息
messages = [HumanMessage(content="你好,请介绍一下自己")]
response = llm.invoke(messages)
print(response.content)
提示模板
from langchain.prompts import ChatPromptTemplate
# 创建提示模板
template = """
你是一个{role}。请回答以下问题:
问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)
# 格式化提示
formatted = prompt.format(
role="Python 专家",
question="什么是装饰器?"
)
print(formatted)
链 (Chain) - LCEL 方式
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 初始化 LLM(2026 年推荐模型)
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的{profession}助手"),
("human", "请解释:{topic}")
])
# 使用 LCEL(LangChain Expression Language)创建链
chain = prompt | llm | StrOutputParser()
# 执行链
response = chain.invoke({"profession": "Python 开发者", "topic": "异步编程"})
print(response)
# 批量执行
responses = chain.batch([
{"profession": "数据科学家", "topic": "机器学习"},
{"profession": "前端工程师", "topic": "React"}
])
for r in responses:
print(r)
文档加载
from langchain_community.document_loaders import (
TextLoader,
PyPDFLoader,
WebBaseLoader
)
# 加载文本文件
loader = TextLoader("document.txt", encoding='utf-8')
docs = loader.load()
# 加载 PDF
pdf_loader = PyPDFLoader("document.pdf")
pdf_docs = pdf_loader.load()
# 加载网页
web_loader = WebBaseLoader("https://example.com")
web_docs = web_loader.load()
print(f"加载了 {len(docs)} 个文档")
print(f"文档内容长度:{len(docs[0].page_content)}")
文本分割
from langchain_text_splitters import (
CharacterTextSplitter,
RecursiveCharacterTextSplitter
)
# 递归字符分割
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
length_function=len,
separators=["\n\n", "\n", "。", "!", "?", ""]
)
# 分割文档
chunks = text_splitter.split_documents(docs)
print(f"分割成 {len(chunks)} 个块")
print(f"第一个块大小:{len(chunks[0].page_content)} 字符")
向量存储
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
# 初始化嵌入模型
embeddings = OpenAIEmbeddings(api_key="your-api-key")
# 创建向量存储
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db"
)
# 相似性搜索
query = "什么是机器学习?"
results = vectorstore.similarity_search(query, k=3)
for i, result in enumerate(results):
print(f"\n相关片段 {i+1}:")
print(result.page_content[:200])
检索问答链(RAG)
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
# 初始化组件(2026 年推荐模型)
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vectorstore = Chroma(persist_directory="./chroma_db",
embedding_function=embeddings)
# 创建检索器
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 创建提示模板
template = """基于以下上下文回答问题:
{context}
问题:{question}
答案:"""
prompt = ChatPromptTemplate.from_template(template)
# 使用 LCEL 创建 RAG 链
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 提问
query = "文档中如何定义人工智能?"
result = rag_chain.invoke(query)
print(f"答案:{result}")
Agent(智能体)
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_community.tools import DuckDuckGoSearchRun
from langchain.tools import Tool
from langchain.prompts import ChatPromptTemplate
import operator
# 初始化 LLM(2026 年推荐模型)
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 定义工具
search = DuckDuckGoSearchRun()
tools = [
Tool(
name="Search",
func=search.run,
description="当你需要回答关于当前事件或事实的问题时使用此工具"
),
]
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有帮助的 AI 助手"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}")
])
# 创建 Agent
agent = create_tool_calling_agent(llm, tools, prompt)
# 创建 Agent 执行器
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
handle_parsing_errors=True
)
# 运行 Agent
response = agent_executor.invoke({"input": "2026 年人工智能领域有什么重大突破?"})
print(response["output"])
💡 提示:LangChain 支持多种 LLM 提供商和向量数据库,可以灵活构建各种 AI 应用。
LlamaIndex
LlamaIndex 是一个数据框架,用于将私有或领域特定数据与大型语言模型 (LLM) 连接,构建 RAG (检索增强生成) 应用。2026 年版本已完全重构,支持工作流和应用构建。
安装
# 核心包
pip install llama-index-core
# OpenAI 支持
pip install llama-index-llms-openai
pip install llama-index-embeddings-openai
# 向量数据库
pip install llama-index-vector-stores-chroma
基本使用(2026 API)
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
# 加载文档
documents = SimpleDirectoryReader("./data").load_data()
print(f"加载了 {len(documents)} 个文档")
# 创建索引
index = VectorStoreIndex.from_documents(
documents,
embed_model=OpenAIEmbedding(model="text-embedding-3-large"),
llm=OpenAI(model="gpt-4o")
)
# 创建查询引擎
query_engine = index.as_query_engine()
# 查询
response = query_engine.query("文档的主要内容是什么?")
print(f"回答:{response}")
# 获取源文档
if response.source_nodes:
print(f"\n参考来源:{len(response.source_nodes)} 个")
自定义设置
from llama_index.core import Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
# 配置全局设置(2026 年推荐)
Settings.llm = OpenAI(model="gpt-4o", temperature=0.7)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-large")
Settings.chunk_size = 512
Settings.chunk_overlap = 50
Settings.num_output = 1024
# 加载文档并创建索引
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
多种索引类型
from llama_index.core import (
VectorStoreIndex,
ListIndex,
KeywordTableIndex,
SummaryIndex
)
# 向量索引 (语义搜索)
vector_index = VectorStoreIndex.from_documents(documents)
# 列表索引 (顺序遍历)
list_index = ListIndex.from_documents(documents)
# 关键词索引 (关键词匹配)
keyword_index = KeywordTableIndex.from_documents(documents)
# 摘要索引 (摘要生成)
summary_index = SummaryIndex.from_documents(documents)
# 创建查询引擎
vector_query = vector_index.as_query_engine()
list_query = list_index.as_query_engine()
keyword_query = keyword_index.as_query_engine()
summary_query = summary_index.as_query_engine()
查询引擎配置
from llama_index.core import get_response_synthesizer
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngine
# 配置检索器
retriever = VectorIndexRetriever(
index=index,
similarity_top_k=5,
)
# 配置响应合成器
response_synthesizer = get_response_synthesizer(
response_mode="compact",
)
# 创建查询引擎
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
# 查询
response = query_engine.query("请总结文档要点")
print(response)
与 LangChain 集成
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.query_engine import LangchainQueryEngine
# 创建 LlamaIndex 查询引擎
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
llama_query_engine = index.as_query_engine()
# 转换为 LangChain 兼容的查询引擎
langchain_query_engine = LangchainQueryEngine(llama_query_engine)
# 在 LangChain 链中使用
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
prompt = PromptTemplate(
input_variables=["query"],
template="基于以下信息回答:{query}"
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(query=langchain_query_engine.invoke("问题"))
持久化索引
from llama_index.core import StorageContext, load_index_from_storage
import os
# 保存索引
index.storage_context.persist(persist_dir="./storage")
# 加载索引
if os.path.exists("./storage"):
storage_context = StorageContext.from_defaults(
persist_dir="./storage"
)
index = load_index_from_storage(storage_context)
# 查询
query_engine = index.as_query_engine()
response = query_engine.query("文档内容")
💡 提示:LlamaIndex 专注于数据索引和检索,与 LangChain 配合使用可以构建强大的 RAG 应用。
总结
以上是 Python 中常用的 AI 第三方库介绍。每个库都有其特定的使用场景和优势:
| 库 | 主要用途 | 特点 |
|---|---|---|
| PyTorch | 深度学习 | 动态计算图、灵活、研究友好 |
| Scikit-learn | 机器学习 | 算法丰富、API 统一、易于使用 |
| Transformers | NLP/大模型 | 预训练模型多、Hugging Face 生态 |
| OpenCV | 计算机视觉 | 功能全面、性能优化、应用广泛 |
| LangChain | LLM 应用开发 | 组件化、灵活、支持多种 LLM |
| LlamaIndex | RAG 应用 | 数据索引、检索增强、与 LangChain 互补 |
学习建议:
- 🎯 初学者:从 Scikit-learn 开始,理解机器学习基础
- 🔥 深度学习:学习 PyTorch,掌握神经网络
- 🤖 NLP/大模型:使用 Transformers,快速应用预训练模型
- 👁️ 计算机视觉:OpenCV 是必备工具
- ⛓️ LLM 应用:LangChain + LlamaIndex 构建 RAG 应用