Python调用大模型API实战教程

环境准备

首先需要安装openai库:

1
pip install openai

API申请

  1. 访问 Deepseek 官网注册账号
  2. 在个人中心申请 API Key
  3. 获取到形如 sk-0f2245****a0bb3f1e 的密钥
  4. 充值以获得API调用额度

代码实现

1. 基础配置

1
2
3
4
5
6
7
8
9
10
from openai import OpenAI
from datetime import datetime
import pandas as pd
import os

# 创建OpenAI客户端
client = OpenAI(
api_key="your-api-key", # 替换为你的API密钥
base_url="https://api.deepseek.com/v1"
)

2. 定义Prompt模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PROMPT_TEMPLATES = {
"student_info": {
"system": """你是一个专注于学生基本信息分析的教育数据专家。
- 擅长处理学生个人信息、人口统计学特征
- 注重学生信息的隐私保护
- 专注于人口特征统计和分布分析""",

"background": """正在分析学生基本信息数据:
- 数据类型:学生个人基本信息
- 包含字段:学号、姓名、性别、年龄、籍贯等
- 分析目标:了解学生群体的基本特征分布"""
}
# ... 其他模板
}

3. 数据读取函数

1
2
3
4
5
6
7
8
def read_data_file(file_path):
"""读取数据文件"""
if file_path.endswith('.csv'):
return pd.read_csv(file_path)
elif file_path.endswith('.xlsx'):
return pd.read_excel(file_path)
else:
raise ValueError("不支持的文件格式,请使用 CSV 或 Excel 文件")

4. 创建分析请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def create_analysis_request(data_type, specific_task, data_file=None):
"""创建并发送分析请求"""
if data_type not in PROMPT_TEMPLATES:
raise ValueError(f"不支持的数据类型: {data_type}")

template = PROMPT_TEMPLATES[data_type]

# 添加数据概览
data_overview = ""
if data_file:
df = read_data_file(data_file)
data_overview = f"""
数据概览:
- 总记录数:{len(df)}
- 字段列表:{', '.join(df.columns)}
- 数据示例:\n{df.head(3).to_string()}
"""

# 发送请求
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": template["system"]},
{"role": "user", "content": template["background"] + data_overview},
{"role": "user", "content": specific_task}
],
temperature=0.3
)
return response.choices[0].message.content

5. 使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 定义分析任务
specific_task = """请分析以下内容:
1. 数据完整性检查
2. 主要指标的分布情况
3. 异常值检测和处理建议

输出要求:
- 格式:分点列出
- 包含具体数值和百分比
- 提供可视化建议"""

# 执行分析
file_path = "path/to/your/data.xlsx"
analysis_result = create_analysis_request("student_info", specific_task, file_path)
print(analysis_result)