|
|
from openai import OpenAI
|
|
|
|
|
|
from Config import MODEL_NAME, MODEL_API_KEY
|
|
|
|
|
|
# 初始化 OpenAI 客户端
|
|
|
client = OpenAI(
|
|
|
api_key=MODEL_API_KEY,
|
|
|
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
|
|
|
)
|
|
|
|
|
|
|
|
|
# 利用AI获取数据集的X轴和Y轴的列名
|
|
|
def generate_columns_with_ai(data):
|
|
|
"""
|
|
|
利用大模型解析数据,生成 category_columns_str 和 value_column_str
|
|
|
:param data: 数据集(列表字典格式,例如:[{"行政区划名": "二道区", "学校名称": "清华附中", "课程数量": 100}, ...])
|
|
|
:param api_key: OpenAI API 密钥
|
|
|
:return: (category_columns_str, value_column_str)
|
|
|
"""
|
|
|
# 获取所有字段名
|
|
|
columns = list(data[0].keys()) if data else []
|
|
|
|
|
|
# 构造提示词
|
|
|
prompt = f"""
|
|
|
给定以下字段名列表:{columns},请分析并回答以下问题:
|
|
|
1. 哪些字段适合作为分类字段(category_columns_str)?请用逗号分隔。
|
|
|
2. 哪个字段适合作为数值字段(value_column_str)?
|
|
|
3. 以JSON格式返回结果,但不要输出 json``` ,```
|
|
|
|
|
|
返回格式:
|
|
|
category_columns_str: <字段1,字段2,...>
|
|
|
value_column_str: <字段>
|
|
|
"""
|
|
|
|
|
|
# 调用大模型
|
|
|
response = client.chat.completions.create(
|
|
|
model=MODEL_NAME,
|
|
|
messages=[
|
|
|
{"role": "system",
|
|
|
"content": "你是一个专业的语义分类助手。"},
|
|
|
{"role": "user", "content": prompt}
|
|
|
],
|
|
|
max_tokens=500
|
|
|
)
|
|
|
|
|
|
# 解析模型返回的结果
|
|
|
result = response.choices[0].message.content
|
|
|
category_columns_str = result.split("category_columns_str: ")[1].split("\n")[0].strip()
|
|
|
value_column_str = result.split("value_column_str: ")[1].strip()
|
|
|
|
|
|
return category_columns_str, value_column_str
|
|
|
|
|
|
|
|
|
# 示例数据
|
|
|
data = [
|
|
|
{"行政区划名": "二道区", "学校名称": "清华附中", "课程数量": 100},
|
|
|
{"行政区划名": "朝阳区", "学校名称": "复旦附中", "课程数量": 120},
|
|
|
]
|
|
|
|
|
|
# 调用函数
|
|
|
category_columns_str, value_column_str = generate_columns_with_ai(data)
|
|
|
print(f"category_columns_str: {category_columns_str}")
|
|
|
print(f"value_column_str: {value_column_str}")
|