下面我将为您实现一个 "零代码实践自然语言处理 - 文本分类任务" 项目,该项目将使用 Qwen 大模型和 OpenAI SDK 来实现文本分类功能,无需深入了解 NLP 技术细节即可完成分类任务。
1.项目概述
这个项目的核心思想是利用大模型的自然语言理解能力,通过提示词工程 (Prompt Engineering) 实现文本分类,无需手动编写特征提取和模型训练代码。我们将使用 Qwen 大模型,并通过 OpenAI 兼容的 SDK 来调用模型。
2.关键代码实现
首先,我们需要安装必要的依赖库:
python
pip install openai python-dotenv
python
import os
import json
from openai import OpenAI
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
class ZeroCodeTextClassifier:
def __init__(self, model_name="qwen-plus", base_url=None):
"""
初始化零代码文本分类器
参数:
model_name: 使用的Qwen模型名称
base_url: Qwen模型API的基础URL,若不提供则使用环境变量中的值
"""
# 从环境变量获取API密钥和基础URL
api_key = os.getenv("QWEN_API_KEY")
base_url = base_url or os.getenv("QWEN_BASE_URL")
if not api_key or not base_url:
raise ValueError("请设置QWEN_API_KEY和QWEN_BASE_URL环境变量")
# 初始化OpenAI客户端(兼容Qwen API)
self.client = OpenAI(
api_key=api_key,
base_url=base_url,
)
self.model_name = model_name
def create_classification_prompt(self, text, categories, examples=None):
"""
创建分类任务的提示词
参数:
text: 需要分类的文本
categories: 分类类别列表
examples: 可选,分类示例列表,格式为[(文本, 类别), ...]
返回:
构建好的提示词字符串
"""
# 构建系统提示
system_prompt = (
"你是一个文本分类专家。请将提供的文本分类到指定的类别中。\n"
f"可用类别: {', '.join(categories)}\n"
"请只返回类别名称,不要返回任何额外内容或解释。\n"
)
# 如果有示例,添加到提示中
user_prompt = ""
if examples:
user_prompt += "以下是一些分类示例:\n"
for i, (example_text, example_category) in enumerate(examples, 1):
user_prompt += f"示例{i}:\n文本:{example_text}\n类别:{example_category}\n\n"
# 添加需要分类的文本
user_prompt += f"请将以下文本分类到指定类别中:\n文本:{text}\n类别:"
return system_prompt, user_prompt
def classify_text(self, text, categories, examples=None, temperature=0):
"""
对文本进行分类
参数:
text: 需要分类的文本
categories: 分类类别列表
examples: 可选,分类示例列表
temperature: 模型生成温度,0表示确定性更高
返回:
分类结果(类别名称)
"""
# 创建提示词
system_prompt, user_prompt = self.create_classification_prompt(
text, categories, examples
)
try:
# 调用大模型API
response = self.client.chat.completions.create(
model=self.model_name,
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
temperature=temperature,
timeout=30,
)
# 提取并返回分类结果
result = response.choices[0].message.content.strip()
# 验证结果是否在指定类别中
if result not in categories:
# 如果不在,尝试找到最相似的类别或返回未知
return f"未知类别(模型返回:{result})"
return result
except Exception as e:
print(f"分类过程中发生错误:{str(e)}")
return None
# 示例用法
if __name__ == "__main__":
# 初始化分类器
classifier = ZeroCodeTextClassifier()
# 定义分类任务 - 例如:情感分析
categories = ["正面", "负面", "中性"]
# 提供一些示例(few-shot learning)
examples = [
("这个产品太棒了,超出了我的期望!", "正面"),
("糟糕的体验,永远不会再买了", "负面"),
("该产品重量约为500克", "中性"),
]
# 待分类的文本
texts_to_classify = [
"我很满意这次购买,质量很好",
"服务太差了,等待时间太长",
"产品尺寸为20x30厘米",
"这部电影情节紧凑,演员表演出色,但结局有点仓促",
"今天天气不错"
]
# 进行分类并打印结果
print("文本分类结果:")
print("-" * 50)
for text in texts_to_classify:
category = classifier.classify_text(text, categories, examples)
print(f"文本:{text}")
print(f"分类:{category}\n")
3.关键环节解释
-
环境配置 :通过
python-dotenv
加载环境变量,存储 Qwen 模型的 API 密钥和基础 URL,避免硬编码敏感信息。 -
ZeroCodeTextClassifier 类:这是核心类,封装了文本分类的所有功能:
__init__
方法:初始化 OpenAI 客户端,配置连接 Qwen 模型的参数create_classification_prompt
方法:构建提示词,这是 "零代码" 的关键,通过自然语言指令告诉模型如何进行分类classify_text
方法:调用大模型 API 进行文本分类,并处理返回结果
-
提示词工程:通过精心设计的提示词,让模型理解分类任务要求,包括:
- 明确告知模型需要完成的任务
- 提供分类类别列表
- 可选地提供示例(few-shot learning)提高分类准确性
- 规定输出格式,方便后续处理
-
示例用法:展示了如何使用这个分类器进行情感分析任务
4.使用方法
- 创建
.env
文件,配置 Qwen 模型的 API 信息:
plaintext
QWEN_API_KEY=your_api_key_here
QWEN_BASE_URL=https://your-qwen-api-base-url.com
- 根据需要修改分类类别和示例
- 运行脚本,即可得到文本分类结果
5.扩展与定制
这个零代码分类器可以轻松应用于各种文本分类场景,例如:
-
垃圾邮件检测(类别:垃圾邮件、正常邮件)
-
新闻分类(类别:政治、经济、体育、娱乐等)
-
客户反馈分类(类别:产品问题、服务问题、价格问题等)
只需修改categories
和examples
参数,无需修改核心代码,即可适应不同的分类任务,真正实现 "零代码" 实践自然语言处理。
这种方法的优势在于:无需了解复杂的 NLP 算法,无需标注大量数据进行训练,只需通过自然语言描述任务要求,就能快速实现文本分类功能。