核心第一步——同步调用大模型API(理解API交互)
import requests
import os
from dotenv import load_dotenv
1. 环境配置
load_dotenv()
LLM_API_KEY = os.getenv("LLM_API_KEY")
if not LLM_API_KEY:
raise ValueError("❌ 未设置 LLM_API_KEY,请检查 .env 文件")
LLM_API_URL = (
"https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation")
2. 同步调用API
def call_llm_sync(text: str):
"""同步调用 DashScope Qwen 模型进行文本分类"""
try:
# 构造 Prompt(关键:让模型知道要做什么)
categories = ["政策通知", "群众咨询", "投诉举报", "政务公告", "其他"]
prompt = (
f"你是一个政务文本分类器。请将以下文本严格分类为:{', '.join(categories)}。\n"
f"只输出类别名称,不要任何解释或标点。\n\n"
f"文本:{text}\n"
f"类别:"
)
# 构造请求头和请求体
headers = {
"Authorization": f"Bearer {LLM_API_KEY}",
"Content-Type": "application/json",
}
payload = {
"model": "qwen-turbo-latest", # 或 qwen-max / qwen-plus
"input": {"messages": [{"role": "user", "content": prompt}]},
"parameters": {
"max_tokens": 10,
"temperature": 0.1, # 降低随机性,提高稳定性
"seed": 12345, # 可选:固定种子
},
}
# 发送 POST 请求
response = requests.post(
url=LLM_API_URL, headers=headers, json=payload, timeout=30
)
response.raise_for_status() # 抛出 HTTP 异常(如 401, 400, 500)
result = response.json()
# 提取模型输出
output_text = result.get("output", {}).get("text", "").strip()
# 简单置信度模拟(实际无法获取真实 confidence,可设为 1.0 或基于规则)
confidence = 1.0 if output_text in categories else 0.0
return {
"text": text,
"category": output_text if confidence > 0 else "",
"confidence": confidence,
"status": "成功" if confidence > 0 else "失败",
"error_msg": "" if confidence > 0 else f"模型返回无效类别: '{output_text}'",
}
except Exception as e:
return {
"text": text,
"category": "",
"confidence": 0.0,
"status": "失败",
"error_msg": str(e),
}
测试代码
if name == "__main__":
test_text = "群众投诉小区垃圾清运不及时,影响生活环境"
result = call_llm_sync(test_text)
print("API调用结果:", result)