
【前言】
随着人工智能技术的快速发展,大语言模型(LLM)已成为许多应用场景的核心技术。本文将详细介绍如何使用PyCharm开发环境搭建API接口调用大模型的完整流程,包括两种主流调用方式、模型列表查看方法,以及一个完整的求职岗位查询实战案例。
【任务】
1.掌握使用OpenAI库和requests库调用大模型API的方法。
2.学会查看和展示可用的大模型列表。
3.实现基于大模型的求职岗位查询系统。
4.掌握API调用的错误处理和结果展示技巧。
【准备】
开始之前,请确保你已经准备好:
1.安装pycharm,并在终端使用清华源安装依赖库:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests python-dotenv tabulate openpyxl
2.在硅基流动官网(https://cloud.siliconflow.cn/)上注册一个账户,随后在创建一个api密钥。我们本次实验中使用免费模型为Qwen/Qwen2.5-7B-Instruct。
By:不吃花椒的喵酱大模型调用有两种方式,一种通过openai库进行调用,一种通过requests库进行调用。
我们通过简单的代码,来分别简述两种大模型调用的方式:
代码实现:
from openai import OpenAI
client = OpenAI(
api_key="你的api密钥", # 使用你创建的api密钥
base_url="https://api.siliconflow.cn/v1",
)
try:
response = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct", #使用免费的大模型
messages=[
{
"role": "user",
"content": "你好",
}
],
stream=False,
)
# 响应内容访问方式
print(response.choices[0].message.content)
except Exception as e:
print(f"调用API时出错: {e}")
import traceback
traceback.print_exc()
代码实现:
import requests
import json
url = "https://api.siliconflow.cn/v1/chat/completions"
payload = {
"model": "Qwen/Qwen2.5-7B-Instruct",
"messages": [
{
"role": "user",
"content": "中国大模型行业2025年将会迎来哪些机遇和挑战",
}
],
"stream": False,
"max_tokens": 2048,
"stop": None,
"temperature": 0.7,
"top_p": 0.7,
"top_k": 50,
"frequency_penalty": 0.5,
"n": 1,
"response_format": {"type": "text"},
}
headers = {
"Authorization": "Bearer 你的api密钥", # 使用你创建的api密钥
"Content-Type": "application/json",
}
try:
print("正在发送请求到AI模型...")
response = requests.post(url, json=payload, headers=headers, timeout=30) # 添加超时时间
print(f"响应状态码: {response.status_code}")
# 检查HTTP状态码
if response.status_code == 200:
data = response.json()
# 检查API返回的错误
if "error" in data:
print(f"API错误: {data['error']['message']}")
elif "choices" in data and len(data["choices"]) > 0:
answer = data["choices"][0]["message"]["content"]
print("=" * 60)
print("AI回答:")
print("=" * 60)
print(answer)
print("=" * 60)
else:
print("响应格式异常:", json.dumps(data, indent=2, ensure_ascii=False))
else:
print(f"HTTP错误 {response.status_code}: {response.text}")
except requests.exceptions.Timeout:
print("请求超时,请检查网络连接或稍后重试")
except requests.exceptions.ConnectionError:
print("连接错误,请检查网络连接")
except requests.exceptions.RequestException as e:
print(f"请求异常: {e}")
except json.JSONDecodeError:
print("响应不是有效的JSON格式:", response.text)
except KeyError as e:
print(f"响应数据结构异常,缺少键: {e}")
print("完整响应:", response.text[:500]) # 打印前500个字符用于调试
except Exception as e:
print(f"未知错误: {e}")
import traceback
traceback.print_exc()
查看返回大模型列表的结果:
代码实现:
from openai import OpenAI
client = OpenAI(
api_key="你的api密钥", # 使用你创建的api密钥
base_url="https://api.siliconflow.cn/v1",
)
try:
models = client.models.list()
print("可用的模型:")
for model in models.data:
print(f"- {model.id}")
except Exception as e:
print(f"获取模型列表时出错: {e}")
返回的结果为表格形式:
代码实现:
from openai import OpenAI
import pandas as pd
client = OpenAI(
api_key="你的api密钥", # 使用你创建的api密钥
base_url="https://api.siliconflow.cn/v1",
)
try:
models = client.models.list()
print("可用的模型:")
print("="*80)
# 准备数据用于制作表格
model_data = []
for model in models.data:
model_info = {
"模型ID": model.id,
"创建时间": model.created if hasattr(model, 'created') else 'N/A',
"所属组织": model.owned_by if hasattr(model, 'owned_by') else 'N/A'
}
model_data.append(model_info)
# 同时打印列表形式
print(f"- {model.id}")
print("\n" + "="*80)
print("模型信息表格:")
print("="*80)
# 使用pandas创建表格
if model_data:
df = pd.DataFrame(model_data)
print(df.to_string(index=False))
# 保存到Excel文件
df.to_excel("硅基流动可用模型列表.xlsx", index=False, engine='openpyxl')
print(f"\n表格已保存到文件: 硅基流动可用模型列表.xlsx")
else:
print("未获取到模型数据")
except Exception as e:
print(f"获取模型列表时出错: {e}")
import traceback
traceback.print_exc()

在运行代码之前,请确保你的项目目录下有以下文件和配置。
在你的电脑上创建一个新的文件夹,例如 智能简历招聘,所有的文件都将放在这里面。
简历.txt)在 智能简历招聘 文件夹中,创建一个名为 简历.txt 的文件,并将以下内容复制进去:
# 简历.txt
张三
电话: 138-1234-5678
邮箱: zhangsan.cs@email.com
求职意向: 软件开发工程师(实习/应届生)
--------------------------------------------------
教育背景:
2020.09 - 2024.06 XX大学 计算机科学与技术 本科
主修课程: 数据结构与算法、计算机网络、操作系统、数据库系统、软件工程、编译原理
--------------------------------------------------
专业技能:
- 编程语言: 熟练掌握 Java、Python;熟悉 C++、JavaScript
- 后端技术: 熟练使用 Spring Boot、MyBatis 进行后端开发;了解 Django、Flask 框架
- 前端技术: 熟悉 HTML、CSS、JavaScript;了解 Vue.js 框架和 Element UI 组件库
- 数据库: 熟练使用 MySQL、Redis
- 开发工具: 熟练使用 Git 进行版本控制;熟悉 Docker 容器技术;了解 Linux 常用命令
- 其他: 熟悉 RESTful API 设计原则;了解常见的微服务架构
--------------------------------------------------
项目经验:
项目一: 校园二手交易平台 (个人项目)
2023.03 - 2023.06
- 项目描述: 一个为在校大学生提供的二手物品在线交易平台,支持用户注册登录、商品发布、搜索、下单和评论等功能。
- 技术栈: Spring Boot + MyBatis + MySQL + Redis + Vue.js + Element UI
- 我的职责:
- 独立负责项目的前后端架构设计、数据库表结构设计。
- 使用 Spring Boot 和 MyBatis 开发了用户、商品、订单等模块的后端 RESTful API。
- 使用 Redis 缓存热点商品数据和用户登录信息,提升了系统响应速度。
- 使用 Vue.js 和 Element UI 构建了响应式的前端界面,实现了良好的用户交互。
- 通过 Nginx 部署项目到阿里云服务器。
项目二: 基于协同过滤的电影推荐系统 (课程设计)
2022.10 - 2022.12
- 项目描述: 一个根据用户的历史评分行为,为其推荐可能感兴趣的电影的系统。
- 技术栈: Python + Pandas + Scikit-learn + Flask
- 我的职责:
- 使用 Pandas 对 MovieLens 数据集进行数据清洗和预处理。
- 实现了基于用户的协同过滤算法,计算用户相似度并生成推荐列表。
- 使用 Flask 框架搭建了一个简单的 Web 服务,通过 API 接口提供推荐结果。
- 使用 Matplotlib 对推荐结果进行了可视化分析。
--------------------------------------------------
实习经历:
2023.07 - 2023.09 ABC科技有限公司 后端开发实习生
- 参与公司 CRM 系统的维护与功能迭代,修复了若干历史 Bug。
- 根据产品需求文档,使用 Spring Boot 开发了 2 个新的业务模块 API 接口。
- 编写了单元测试用例,确保了交付代码的质量和稳定性。
- 学习并遵循团队的 Git Flow 工作流,参与了代码审查。
--------------------------------------------------
个人荣誉:
- 2022年 XX大学“蓝桥杯”程序设计竞赛省级一等奖
- 大学英语六级 (CET-6)
感谢您审阅我的简历!.env)在同一个文件夹中,创建一个名为 .env 的文件。这个文件用于安全地存储你的 API 密钥,绝不能泄露给别人。
文件内容如下,请将 你的API密钥 替换为你自己的 SiliconFlow API 密钥。
SILICONFLOW_API_KEY="你的API密钥" # 使用你创建的api密钥# 在终端使用清华源安装依赖库:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests python-dotenv tabulate openpyxl在 智能简历招聘文件夹中,创建一个 Python 文件,例如 job_ai.py,然后将以下完整代码复制进去:
import os
import requests
import json
from dotenv import load_dotenv
from tabulate import tabulate
from datetime import datetime
import csv
# 检查 openpyxl 是否已安装
try:
from openpyxl import Workbook
EXCEL_SUPPORT = True
except ImportError:
EXCEL_SUPPORT = False
print("警告:未安装 'openpyxl' 库,将无法保存为 Excel 文件。")
print("请运行 `pip install openpyxl` 来安装此功能。")
# --- 1. 配置和初始化 ---
load_dotenv()
API_KEY = os.getenv("SILICONFLOW_API_KEY")
if not API_KEY:
raise ValueError("错误:API密钥未设置。请在 .env 文件中配置 SILICONFLOW_API_KEY。")
URL = "https://api.siliconflow.cn/v1/chat/completions"
# 【优化】使用不同模型处理不同任务
SUMMARY_MODEL = "Qwen/Qwen2.5-7B-Instruct" # 可以使用更强大的模型进行总结
RECOMMEND_MODEL = "Qwen/Qwen2.5-7B-Instruct" # 可以使用更强大的模型进行推荐
# --- 2. 辅助函数 ---
def validate_link(url: str) -> bool:
"""通过发送HEAD请求来验证链接是否有效。"""
try:
response = requests.head(url, timeout=10, allow_redirects=True)
return response.status_code == 200
except requests.RequestException:
return False
def read_resume(filepath: str) -> str:
"""读取简历文件内容"""
try:
with open(filepath, "r", encoding="utf-8") as f:
return f.read()
except FileNotFoundError:
print(f"错误:找不到简历文件 '{filepath}'。请确保该文件存在于脚本同一目录下。")
exit()
except Exception as e:
print(f"读取简历文件时发生错误: {e}")
exit()
# 第一步:简历总结函数
def summarize_resume(full_resume_text: str) -> str | None:
"""调用AI模型总结简历内容"""
prompt = f"""
请将以下简历内容进行精炼总结,提取出最关键的信息。总结应包含:
1. 求职者的核心技能和掌握程度。
2. 主要工作经验和项目亮点。
3. 教育背景和求职意向。
请用一段通顺的中文进行总结,不要使用列表或markdown格式。
简历内容如下:
---
{full_resume_text}
---
"""
payload = {
"model": SUMMARY_MODEL,
"messages": [{"role": "user", "content": prompt}],
"stream": False,
"temperature": 0.3, # 降低温度,使总结更客观
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
try:
print("\n第一步:正在总结简历核心信息...")
response = requests.post(URL, json=payload, headers=headers, timeout=60)
if response.status_code == 200:
data = response.json()
if "error" in data:
print(f"API返回错误: {data['error']['message']}")
return None
summary = data["choices"][0]["message"]["content"].strip()
print("✅ 简历总结完成。")
print("-" * 50)
print("简历摘要预览:")
print(summary)
print("-" * 50)
return summary
else:
print(f"总结时发生HTTP错误 {response.status_code}: {response.text}")
return None
except Exception as e:
print(f"总结时发生异常: {e}")
return None
def build_prompt(resume_summary: str) -> str:
"""【优化】基于简历摘要构建推荐提示"""
prompt = f"""
你是一位专业的职业顾问和招聘专家。下面是一份求职者简历的**核心摘要**:
---
{resume_summary}
---
请根据这份摘要,推荐5个最匹配的招聘岗位。
**请严格按照以下JSON格式返回结果,不要包含任何其他解释性文字或markdown格式:**
[
{{
"job_title": "岗位名称",
"company": "公司名称",
"description": "岗位简要描述和匹配原因",
"job_link": "真实有效的招聘链接"
}},
{{
"job_title": "岗位名称2",
"company": "公司名称2",
"description": "岗位简要描述和匹配原因2",
"job_link": "真实有效的招聘链接2"
}}
... (共5个)
]
**重要提示:**
1. 请确保提供的 `job_link` 是真实、有效的招聘网站链接,例如来自 LinkedIn、Boss直聘、拉勾网、猎聘等主流招聘平台。
2. **不要生成虚假、示例或无效的链接。** 如果找不到真实链接,请用 "null" 代替。
"""
return prompt
def get_ai_recommendations(prompt: str) -> list | None:
"""第二步:调用AI API获取推荐"""
payload = {
"model": RECOMMEND_MODEL,
"messages": [{"role": "user", "content": prompt}],
"stream": False,
"temperature": 0.5,
"response_format": {"type": "json_object"}
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
try:
print("\n第二步:正在基于摘要请求岗位推荐...")
response = requests.post(URL, json=payload, headers=headers, timeout=60)
if response.status_code == 200:
data = response.json()
if "error" in data:
print(f"API返回错误: {data['error']['message']}")
return None
content_str = data["choices"][0]["message"]["content"]
recommendations = json.loads(content_str) # 标准模型通常不需要清理
return recommendations
else:
print(f"推荐时发生HTTP错误 {response.status_code}: {response.text}")
return None
except json.JSONDecodeError:
print("AI返回的内容不是有效的JSON格式。")
print("原始响应:", response.text[:500])
return None
except Exception as e:
print(f"推荐时发生未知错误: {e}")
return None
# --- 3. 文件保存函数 (已优化) ---
def save_to_csv(data: list, headers: list, filename: str):
"""将表格数据保存为 CSV 文件"""
try:
with open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(headers)
writer.writerows(data)
print(f"\n✅ 结果已成功保存为 CSV 文件: {filename}")
except Exception as e:
print(f"\n❌ 保存 CSV 文件时出错: {e}")
def save_to_excel(data: list, headers: list, filename: str):
"""将表格数据保存为 Excel 文件"""
if not EXCEL_SUPPORT:
print("\n❌ 无法保存为 Excel 文件,因为缺少 'openpyxl' 库。")
print("请运行 `pip install openpyxl` 来安装此功能。")
return
try:
wb = Workbook()
ws = wb.active
ws.title = "岗位推荐"
# 正确的写入方式:使用 append 逐行写入
ws.append(headers)
for row_data in data:
ws.append(row_data)
# 自动调整列宽
for col in ws.columns:
max_length = 0
column = col[0].column_letter
for cell in col:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = (max_length + 2) * 1.2
ws.column_dimensions[column].width = adjusted_width
wb.save(filename)
print(f"\n✅ 结果已成功保存为 Excel 文件: {filename}")
except Exception as e:
print(f"\n❌ 保存 Excel 文件时出错: {e}")
# --- 4. 主执行逻辑(自动保存Excel) ---
def main():
"""主函数"""
resume_file = "简历.txt"
full_resume_content = read_resume(resume_file)
# --- 程序执行两步流程 ---
# 1. 总结简历
resume_summary = summarize_resume(full_resume_content)
if not resume_summary:
print("简历总结失败,无法继续进行岗位推荐。")
return
# 2. 基于摘要进行推荐
prompt = build_prompt(resume_summary)
recommendations = get_ai_recommendations(prompt)
if recommendations and isinstance(recommendations, list):
print("\n正在验证链接有效性并生成推荐表格...")
table_data = []
headers = ["序号", "岗位", "公司", "链接有效性", "招聘链接"]
for i, job in enumerate(recommendations, 1):
job_title = job.get("job_title", "未知岗位")
company = job.get("company", "未知公司")
job_link = job.get("job_link")
if job_link and job_link.lower() != 'null':
is_valid = validate_link(job_link)
status_text = "✅ 有效" if is_valid else "❌ 无效"
else:
status_text = "⚠️ 未提供"
job_link = "N/A"
table_data.append([i, job_title, company, status_text, job_link])
print("\n" + "=" * 100)
print("为您找到以下岗位推荐:")
print("=" * 100 + "\n")
print(tabulate(table_data, headers=headers, tablefmt="grid", maxcolwidths=[None, None, None, None, 50]))
print("\n" + "=" * 100)
# 按年月日时间保存为 Excel 文件,无需用户交互
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"job_recommendations_{timestamp}.xlsx"
save_to_excel(table_data, headers, filename)
print("=" * 100)
print("程序执行完毕。")
print("=" * 100)
else:
print("未能获取到有效的岗位推荐。")
if __name__ == "__main__":
main()



我们在实际开发中,调用大模型API时,错误处理和结果展示是非常关键的两个环节。良好的错误处理机制可以提升程序的稳定性,而清晰的结果展示则能提高用户体验和调试效率。 我们在使用 requests 或 openai 库调用大模型API接口时,可能会遇到以下几种常见错误:错误类型 | 描述 | 示例 |
|---|---|---|
HTTP状态码异常 | 如401(未授权)、404(资源不存在)、500(服务器内部错误) |
|
网络连接问题 | 请求超时、DNS解析失败、连接被拒绝等 |
|
JSON格式错误 | API返回的数据不是有效的JSON格式 |
|
响应结构异常 | 返回数据字段缺失或结构不一致 |
|
API限流 | 超出请求频率限制 |
|
try:
response = requests.post(url, json=payload, headers=headers, timeout=30)
if response.status_code == 200:
data = response.json()
if "error" in data:
print(f"API错误: {data['error']['message']}")
else:
answer = data["choices"][0]["message"]["content"]
print("AI回答:", answer)
else:
print(f"HTTP错误 {response.status_code}: {response.text}")
except requests.exceptions.Timeout:
print("请求超时,请检查网络连接或稍后重试")
except requests.exceptions.ConnectionError:
print("连接错误,请检查网络连接")
except json.JSONDecodeError:
print("响应不是有效的JSON格式:", response.text)
except KeyError as e:
print(f"响应数据结构异常,缺少键: {e}")
except Exception as e:
print(f"未知错误: {e}")
traceback.print_exc()response = requests.post(url, json=payload, headers=headers, timeout=30)if "Rate limit" in data.get("error", {}).get("message", ""):
print("请求过于频繁,请稍后再试")# 1. 控制台输出优化,使用 tabulate 库美化表格输出:
from tabulate import tabulate
table_data = [
[1, "软件工程师", "腾讯", "✅ 有效", "https://..."],
[2, "后端开发", "阿里", "❌ 无效", "https://..."]
]
headers = ["序号", "岗位", "公司", "链接有效性", "招聘链接"]
print(tabulate(table_data, headers=headers, tablefmt="grid"))# 2. 保存为 Excel 文件(使用 openpyxl)
from openpyxl import Workbook
def save_to_excel(data: list, headers: list, filename: str):
wb = Workbook()
ws = wb.active
ws.title = "岗位推荐"
ws.append(headers)
for row_data in data:
ws.append(row_data)
wb.save(filename)from datetime import datetime
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"job_recommendations_{timestamp}.xlsx"
save_to_excel(table_data, headers, filename) 通过这次实验,我们不仅跑通了大模型API调用的完整链路,更亲手打造了一个有实际价值的智能求职助手。从简单的"你好"到读懂整份简历,从控制台输出到自动生成Excel报告,每一步都在见证AI如何真正落地为生产力。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。