地球人都知道,Python 在人工智能领域的地位那是杠杠的。但是为了让程序能同时调用 OpenAI 和 Claude,通常需要写厚厚的封装层。为了解析客户发来的混乱 PDF,我甚至手动写过正则。结果是代码库越来越臃肿,维护成本也越来越高。
今天就介绍 9 个能够显著减少重复代码的 Python 库,涵盖了从数据接入到模型评估的完整链路。
搭建 Python 开发环境
在开始使用这些库之前,稳定且易于管理的 Python 环境是基础。对于新手程序员,在不同的版本、虚拟环境和依赖冲突中反复横跳,半天时间就这么荒废了。
可以通过 ServBay 来一键搞定 Python 环境,无论是切换版本还是管理数据库,点几下鼠标就能完成。这种把开发者从琐碎配置中解放出来的思路,和我接下来要分享的工具逻辑如出一辙。
环境准备就绪后,可以根据具体需求选择以下工具。
LiteLLM:统一多平台模型调用
不同厂商的 API 标准各异。为了对比 GPT、Claude 或 Llama 的效果,我要写三套请求逻辑、三套错误处理。LiteLLM 出现后,就不需要这样了,它将这些接口标准化,实现了无缝切换。
from litellm import completion
# 无论是调 GPT-4 还是 Claude,逻辑完全一样
def ask_ai(model_name, prompt):
res = completion(
model=model_name,
messages=[{"role": "user", "content": prompt}]
)
return res.choices[0].message.content
# 换模型只需要改个字符串
print(ask_ai("gpt-4o", "RAG是什么?"))
print(ask_ai("claude-3-5-sonnet", "RAG是什么?"))
这个降低了代码的耦合度。但在生产环境中需要注意,当厂商更新特有参数时,可能需要等待 LiteLLM 完成适配。
MarkItDown:多格式文档转 Markdown
解析文档挺让我头疼的。为了处理 Word、Excel 和 PDF,我得装四个库,处理四种不同的报错。感谢微软的 MarkItDown, 它把所有文档都统一转成 LLM 最喜欢的 Markdown。
from markitdown import MarkItDown
md_converter = MarkItDown()
# 解析 PDF 或 Excel
doc_result = md_converter.convert("annual_report.pdf")
table_result = md_converter.convert("budget.xlsx")
print(doc_result.text_content)
它能较好地保留标题和表格结构,减少了数据清洗的工作量。不过,它主要处理文字层,对于扫描件或复杂的图片表格,解析效果会有波动。
LlamaIndex:连接数据与大模型的框架
LlamaIndex 原名 GPT Index,专注于解决私有数据接入 LLM 的问题。它提供了从文档读取、索引构建到查询接口的完整流程。
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# 自动读取目录下所有文档并构建索引
data_docs = SimpleDirectoryReader("./docs").load_data()
data_index = VectorStoreIndex.from_documents(data_docs)
# 快速创建查询引擎
engine = data_index.as_query_engine()
print(engine.query("总结文档的核心观点"))
它在处理复杂文档结构和构建 RAG 系统时表现稳健,是目前主流的数据框架之一。
PydanticAI:类型安全的智能体开发
以前我总是求着 AI 返回 JSON,结果它总是在开头加一句“好的,这是你要的 JSON”,导致我的解析程序崩溃。PydanticAI 直接定义了数据边界。
from pydantic import BaseModel
from pydantic_ai import Agent
class AnalysisResult(BaseModel):
summary: str
score: float
analysis_agent = Agent(
"openai:gpt-4o",
result_type=AnalysisResult,
system_prompt="分析用户反馈并打分"
)
output = analysis_agent.run_sync("这个功能非常好用,提升了工作效率")
print(output.data.summary)
它把 AI 调用变成了类型安全的函数调用。
Marvin:将 AI 能力封装为函数
如果我只需要一个简单的分类或提取功能,我不想写复杂的 Prompt。Marvin 让我能像写普通函数一样写 AI 逻辑,而且非常适合处理分类、提取或生成任务。
import marvin
@marvin.fn
def generate_tags(description: str) -> list[str]:
"""
根据产品描述生成 3 个标签
"""
tags = generate_tags("高性能全铝合金笔记本电脑,支持快速充电")
print(tags) # 输出类似 ['科技', '办公', '便携']
这种方式让 AI 能力能够以最小的侵入性集成到现有系统中。
Haystack:端到端的检索流水线
Haystack 适合构建大规模的搜索系统。它支持多种向量数据库(如 Qdrant、Elasticsearch),因为它能把检索、排序、过滤像搭积木一样组合起来。
from haystack import Pipeline
from haystack.components.builders import PromptBuilder
from haystack.components.generators import OpenAIGenerator
# 组装流水线节点
query_pipeline = Pipeline()
query_pipeline.add_component("prompt_builder", PromptBuilder(template="回答:{{query}}"))
query_pipeline.add_component("llm", OpenAIGenerator(model="gpt-4o"))
query_pipeline.connect("prompt_builder", "llm")
res = query_pipeline.run({"prompt_builder": {"query": "如何学习 Python?"}})
对于需要处理海量文档并实现语义检索的应用,Haystack 提供了良好的扩展性。
tiktoken:精准计算 Token 消耗
我曾经因为一个递归逻辑产生的超长 Prompt,单次调用就花了 1.5 美元。现在我学乖了,在发送请求前要算一下账。而 tiktoken 是计算速度极快的分词器,常用于 OpenAI 模型的成本预估。
import tiktoken
tokenizer = tiktoken.encoding_for_model("gpt-4")
content = "测试文本的 token 数量"
token_list = tokenizer.encode(content)
print(f"Token 计数: {len(token_list)}")
它让我对成本有了实时的掌控,不再被月底的账单吓一跳。
FAISS:高效的向量相似度搜索
在处理几十万条数据检索时,普通的线性搜索会卡死。FAISS 作为 Meta 开源的向量库,能在毫秒级时间内从数亿个向量中找出与查询最相关的片段。
import faiss
import numpy as np
# 初始化索引
vector_dim = 64
search_index = faiss.IndexFlatL2(vector_dim)
# 模拟添加向量数据
mock_data = np.random.random((1000, vector_dim)).astype('float32')
search_index.add(mock_data)
# 执行搜索
distances, results = search_index.search(mock_data[:1], 3)
它是目前向量检索领域的标杆工具,尤其在本地化部署时表现优异。
Pydantic Evals:提示词回归测试
我以前改提示词全靠感觉,跑两个例子,看着顺眼就上线。结果上线后发现修复了一个 Bug 却带出三个新 Bug。Pydantic Evals 就能让我跑自动化的回归测试,通过预设案例来验证模型表现。
from pydantic_evals import Case, Dataset
# 定义测试集
eval_dataset = Dataset(
cases=[
Case(inputs="提取公司名:微软发布了新系统", expected_output="微软"),
]
)
# 运行评估并查看报告
results = eval_dataset.evaluate(your_extract_function)
results.print()
这种确定性是开发生产级应用的前提。
总结
LiteLLM 统一了接口,MarkItDown 简化了文档处理,PydanticAI 保证了输出质量。
这几个库让开发效率蹭蹭上涨,假期综合症都好了。