第 29 课 · 第一次API调用:从请求检查到保存真实回答

学生工作纸

第29课学生操作单

Q0 0—10分钟

画输入→模型服务→输出。指出model、messages、stream和max_tokens各控制什么。本页不会联网,也没有密钥框。

Q1 10—20分钟

先在默认人工响应里找到choices[0].message.content与finish_reason,再点击“构建请求并检查响应”。记录模式为人工响应检查。分别只改HTTP状态401、content空字符串、finish_reason为length,比较三种未完成。

Q2 20—30分钟

下载api_client.py副本到独立classroom29文件夹,在这个文件夹打开终端。需要Python3.9+;Windows可把python3换为教师核对过的py -3。

python3 --version
python3 api_client.py --model deepseek-flash

课堂前查官方页面和账户可用模型。示例名核对日期2026-09-10,不把旧名当永久保证。记录dry_run_no_network、endpoint、payload。这个步骤没有回答。 在同一文件夹新建call_once.py,粘贴:

from pathlib import Path
import getpass
import os
import subprocess
import sys

model_name = input("填写已核对的模型名:").strip()
question = "原创材料:周三15:00在图书馆二楼举行资料分享,报名方式未提供。请提取时间、地点、报名方式;没有的内容写未提供。"
api_key = getpass.getpass("输入API密钥(不回显):").strip()
if not api_key or not api_key.isascii() or any(ord(c) < 33 or ord(c) > 126 for c in api_key):
    raise SystemExit("密钥格式不适合本示例,未发送请求;请按官方说明检查。")
child_env = os.environ.copy()
child_env["DEEPSEEK_API_KEY"] = api_key
child_env["PYTHONIOENCODING"] = "utf-8"
result = subprocess.run(
    [sys.executable, "api_client.py", "--model", model_name,
     "--question", question, "--live"],
    env=child_env, capture_output=True, text=True, encoding="utf-8"
)
Path("api-result.json").write_text(result.stdout, encoding="utf-8")
Path("api-stderr.txt").write_text(result.stderr, encoding="utf-8")
print(result.stdout)
if result.returncode != 0:
    print("本次未完成。检查api-result.json;若为空,再检查api-stderr.txt,不要循环重试。")
else:
    print("脚本已返回。继续核对answer、finish_reason和材料事实。")

Q3 30—45分钟

已有API账户与本次额度时,运行:

python3 call_once.py

填已核对模型名;密钥只在本机终端不回显输入,不写进文件或作业。一次运行等待结束,不反复并发重试。 打开api-result.json,记录mode、answer、finish_reason、usage是否提供;这是脚本已解析的输出,不是完整原始HTTP包。错误则保留实际类型与阶段,填写真实调用未完成。 将记录粘到本地响应框可辅助核对;人工HTTP状态不能充当真实发送证据。另以原文检查时间、地点、报名缺失是否保持。 无账户或环境时完成Q1的四类响应检查,明确“本地后备完成,真实API未完成”,之后补做。

Q4 45—55分钟,独立不再付费调用

新材料:周五10:00在实验楼一层举行资料交流,报名方式未提供。要求同样三项提取。把材料换到prompt框,使用下列人工响应,先判断再运行:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "时间:周五10:00;地点:实验楼一层;报名方式:未提供。"
      },
      "finish_reason": "stop"
    }
  ]
}

第二轮仅改finish_reason为length,说明差异。第三轮恢复stop但把响应地点改实验楼三层:结构检查是否能代替原文核对? 只有dry_run_no_network记录,能否说已取得真实模型回答?说明依据。

Q5 55—60分钟

提交脱敏运行记录或准确的未完成记录。写请求到交付需要检查的三层。猜测写错不扣分,不能把人工样例当实测。