# Python 调用 LLM API 进行文本分类实战指南
在 AI 应用开发中,文本分类是最基础也最实用的能力之一。不管是垃圾邮件过滤、情感分析还是意图识别,本质上都是分类问题。这篇文章手把手教你用 Python 调用 LLM API 实现一个完整的文本分类系统。
## 背景介绍
传统文本分类需要大量标注数据和复杂的特征工程。2017 年 Transformer 出现后,预训练语言模型开始主导这个领域。现在有了 GPT 等大模型,我们可以用 few-shot learning 的方式——只需要给几个示例,模型就能理解分类任务的需求。
这篇文章使用的方案不依赖任何本地模型,直接调用 OpenAI 的 GPT API。我们的目标是:给定一段文本,让 LLM 判断它的情感类别(正面、负面、中性)。
## 问题描述
很多开发者想用 LLM 做文本分类,但不知道如何设计 prompt,也不清楚怎样解析返回结果。这篇文章帮你解决这些问题。
具体需求:
– 输入:用户评论文本
– 输出:分类结果(positive、negative、neutral)
– 要求:支持 few-shot 示例,代码要能直接跑通
## 详细步骤
### 第一步:获取 API Key
访问 https://platform.openai.com 注册账号,然后创建 API Key。注意免费额度有限,生产环境建议绑定信用卡获取更高额度。
### 第二步:安装依赖库
“`bash
pip install openai requests
“`
### 第三步:设计 Prompt
Few-shot prompt 的核心是给出几个示例,让模型理解任务。我们这样设计:
“`
你是一个情感分类器。请根据文本内容,将其分类为 positive、negative 或 neutral。
示例:
“这个产品太棒了,完全超出预期” -> positive
“质量很差,体验很糟糕” -> negative
“今天天气不错” -> neutral
请只输出分类结果,不要其他内容。
“`
### 第四步:调用 API 并解析结果
使用 `openai.chat.completions.create` 接口,模型选择 `gpt-4o-mini`(便宜好用)。
## 完整代码示例
“`python
import openai
import os
# 配置 API Key(建议用环境变量)
openai.api_key = os.getenv(“OPENAI_API_KEY”, “your-api-key-here”)
def classify_sentiment(text: str, examples: list = None) -> str:
# 使用 LLM 进行情感分类
# 默认示例
if examples is None:
examples = [
{“text”: “这个产品太棒了,完全超出预期”, “label”: “positive”},
{“text”: “质量很差,体验很糟糕”, “label”: “negative”},
{“text”: “今天天气不错”, “label”: “neutral”}
]
# 构建 prompt
prompt = ”’你是一个情感分类器。请根据文本内容,将其分类为 positive、negative 或 neutral。
规则:
– positive: 正面评价,表达喜爱、满意、推荐
– negative: 负面评价,表达失望、不满、抱怨
– neutral: 中性评价,既不明显正面也不明显负面
”’
# 添加示例
for ex in examples:
prompt += f'”{ex[“text”]}” -> {ex[“label”]}
‘
prompt += f’
请分析以下文本:
“{text}”
只输出分类结果,不要其他内容。’
try:
response = openai.chat.completions.create(
model=”gpt-4o-mini”,
messages=[
{“role”: “system”, “content”: “你是一个情感分类助手。”},
{“role”: “user”, “content”: prompt}
],
temperature=0,
max_tokens=10
)
result = response.choices[0].message.content.strip().lower()
# 提取分类结果
valid_labels = {“positive”, “negative”, “neutral”}
for label in valid_labels:
if label in result:
return label
return “neutral” # 默认返回
except Exception as e:
print(f”API 调用错误: {e}”)
return “neutral”
def batch_classify(texts: list) -> list:
# 批量分类
results = []
for text in texts:
result = classify_sentiment(text)
results.append(result)
print(f”文本: {text[:30]}… -> {result}”)
return results
if __name__ == “__main__”:
# 测试文本
test_texts = [
“这个产品太棒了,完全超出预期”,
“质量很差,体验很糟糕”,
“今天天气不错”,
“物流很快,包装也很好,推荐购买”,
“完全不符合描述,浪费钱”,
“一般般,没什么特别的”
]
print(“开始情感分类测试…
“)
results = batch_classify(test_texts)
print(”
=== 分类结果汇总 ===”)
for text, result in zip(test_texts, results):
print(f”{result:>10} | {text}”)
“`
## 运行结果
运行上面的代码,你会看到类似这样的输出:
“`
开始情感分类测试…
文本: 这个产品太棒了,完全超出预期 -> positive
文本: 质量很差,体验很糟糕 -> negative
文本: 今天天气不错 -> neutral
文本: 物流很快,包装也很好,推荐购买 -> positive
文本: 完全不符合描述,浪费钱 -> negative
文本: 一般般,没什么特别的 -> neutral
=== 分类结果汇总 ===
positive | 这个产品太棒了,完全超出预期
negative | 质量很差,体验很糟糕
neutral | 今天天气不错
positive | 物流很快,包装也很好,推荐购买
negative | 完全不符合描述,浪费钱
neutral | 一般般,没什么特别的
“`
可以看到,模型正确识别了所有测试文本的情感倾向。第三个和第六个文本比较模糊,模型正确归类为 neutral。
## 总结
这篇文章展示了如何使用 Python 调用 LLM API 实现文本分类。核心要点:
1. **API 调用很便宜**:gpt-4o-mini 价格很低,几分钱就能分类大量文本
2. **Few-shot 效果很好**:只需要几个示例,模型就能理解分类任务
3. **代码可直接扩展**:修改 prompt 中的 labels,就能用于其他分类任务
4. **注意 API 成本**:生产环境要加缓存、控制调用频率
进阶方向:
– 支持多分类(不只是正面负面中性)
– 用更复杂的 prompt 处理细粒度情感
– 加结果置信度判断,过滤低置信度结果
– 本地部署避免 API 调用延迟和费用