Jupyter调试LLM API 实战
调试顺序:先调试「单轮对话」(确保API连通)→ 再调试「多轮对话」(上下文)→ 最后调试「流式输出」(任务重点),逐段排错,避免一次性写完整代码报错。核心避坑:API Key必须替换成自己的,否则无法调用;流式输出和非流式输出不能同时开启(stream设为True/False二选一)。贴合学习:这份示例完全对应你第1周的任务,调试成功后,可直接复用代码,修改提问内容、参数,完成本周的“CLI聊天
核心说明:示例用「豆包API」(国内平台,API Key易申请,无需科学上网),全程贴合Jupyter单元格操作,分6步调试,每一步可独立运行、单独排错,完美适配你第1周“调用LLM API”的学习任务,代码带详细注释,后端视角易懂。
前提准备:
- 已安装Jupyter并启动;
- 已申请豆包API Key(登录豆包开放平台,创建应用即可获取,免费额度足够调试);
- 已掌握Token、Temperature、上下文基础。
第一步:新建Jupyter文件(回顾基础操作)
-
启动Jupyter:Windows终端输入
jupyter notebook,Mac/Linux输入jupyter3 notebook,自动弹出浏览器。 -
新建文件:点击右上角「New」→「Python 3」,修改文件名为「week1-debug-llm-api」(规范命名,方便后续查找)。
第二步:安装依赖(Jupyter单元格运行,第一次安装即可)
调用LLM API需要「requests」库(发送HTTP请求,类比Java的OkHttp),在第一个单元格输入以下代码,点击「Run」运行安装:
# 安装调用API所需的依赖,感叹号“!”表示在终端执行命令
# 国内镜像源,安装更快,避免超时
!pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
调试说明:运行后出现「Successfully installed requests」即成功;若失败,重新运行一次即可(网络波动问题)。
第三步:导入依赖+设置API Key(核心配置)
新建第二个单元格(快捷键「B」),输入以下代码,替换自己的豆包API Key,运行:
# 导入依赖(每次运行代码前,需先导入)
import requests
import json
# 关键配置:替换成你自己的豆包API Key(必做!)
API_KEY = "你的豆包API Key"
# 豆包API的请求地址(固定,不用改)
URL = "https://aquasearch.ai/api/v1/chat/completions"
# 配置请求头(类比Java的请求头设置,携带API Key鉴权)
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
调试说明:
-
API Key获取:登录豆包开放平台 → 控制台 → 创建应用 → 复制「API Key」。
-
运行无报错,说明依赖导入成功、配置无误;若报错「ModuleNotFoundError」,回到第二步重新安装requests。
第四步:调试「单轮对话」(基础调用,验证API连通性)
新建第三个单元格,输入代码(包含Temperature、Token参数,贴合之前学的LLM基础),运行调试:
# 单轮对话请求参数(核心!对应LLM基础的3个关键概念)
payload = {
"model": "doubao-pro", # 豆包模型,固定值(免费可用)
"messages": [
# 单轮对话:只有用户提问(user),无历史上下文
{"role": "user", "content": "我想成为大模型应用开发者,给我1句建议"}
],
"temperature": 0.3, # 低随机性,回答严谨(适合客观建议)
"max_tokens": 100, # 限制输出token数量,避免回答过长、浪费费用
"stream": False # 非流式输出(先调试非流式,后续再调试流式)
}
# 发送POST请求(类比Java的HttpClient发送POST请求)
response = requests.post(url=URL, headers=headers, data=json.dumps(payload))
# 解析响应结果(将JSON响应转为Python字典,方便查看)
result = response.json()
# 打印最终回答(提取模型输出的内容)
print("LLM回答:", result["choices"][0]["message"]["content"])
调试重点(后端视角):
-
运行成功:单元格下方会输出LLM的回答,说明API调用成功(核心目标)。
-
常见报错及解决:
-
报错「401 Unauthorized」:API Key错误,重新替换正确的API Key。
-
报错「ConnectionError」:网络问题,检查网络,重新运行单元格。
-
报错「max_tokens exceeds limit」:减小max_tokens的值(比如改为50)。
-
-
参数调试:修改temperature(比如改为0.8),重新运行,观察回答的随机性变化(贴合之前学的Temperature知识点)。
第五步:调试「多轮对话」(上下文应用,重点)
新建第四个单元格,调试多轮对话(用到「上下文」知识点,类比Java的Session),运行:
# 多轮对话:维护上下文(messages列表里存所有历史对话)
payload = {
"model": "doubao-pro",
"messages": [
# 历史对话1:用户提问
{"role": "user", "content": "什么是LLM的Token?"},
# 历史对话2:模型回答(模拟上一轮回答,实际开发中从历史记录中获取)
{"role": "assistant", "content": "Token是LLM的最小处理单位,将文字拆分为模型可识别的语义单元,用于计费和上下文限制。"},
# 当前提问:结合上下文,模型能识别“它”指的是Token
{"role": "user", "content": "它和Java里的字符有什么区别?"}
],
"temperature": 0.2,
"max_tokens": 150,
"stream": False
}
# 发送请求并解析
response = requests.post(url=URL, headers=headers, data=json.dumps(payload))
result = response.json()
# 打印回答(模型会结合上下文,解释Token和Java字符的区别)
print("LLM多轮对话回答:", result["choices"][0]["message"]["content"])
调试说明:
-
核心逻辑:上下文保存在「messages」列表中,每一轮对话都要将历史记录(user+assistant)传入模型,模型才能“记住”之前的内容。
-
调试技巧:删除messages里的历史回答,重新运行,观察模型是否能正确理解“它”的含义(验证上下文的作用)。
第六步:调试「流式输出」(必做任务,打字机效果)
新建第五个单元格,调试流式输出(类比Java的流式响应),运行:
# 流式输出:逐字显示回答(和ChatGPT一样的打字效果)
payload = {
"model": "doubao-pro",
"messages": [{"role": "user", "content": "简单说下什么是上下文"}],
"temperature": 0.4,
"max_tokens": 120,
"stream": True # 关键:开启流式输出
}
# 发送流式请求(stream=True,获取流式响应)
response = requests.post(url=URL, headers=headers, data=json.dumps(payload), stream=True)
# 解析流式响应,逐字打印
print("流式输出(打字机效果):")
for line in response.iter_lines():
if line:
# 解析每一行的响应(去除多余字符,提取有效内容)
line = line.decode('utf-8').lstrip('data: ').rstrip(',')
if line == '[DONE]': # 流式结束标识
break
try:
data = json.loads(line)
# 提取当前流式输出的内容,打印不换行
content = data["choices"][0]["delta"].get("content", "")
if content:
print(content, end="", flush=True)
except:
pass
调试说明:
-
运行后,会逐字显示LLM的回答(打字机效果),和你第1周“实现流式输出”的任务完全一致。
-
若流式输出无内容,检查stream是否设为True,或重新运行单元格(网络延迟)。
七、调试总结&避坑指南(后端视角重点)
-
- 调试顺序:先调试「单轮对话」(确保API连通)→ 再调试「多轮对话」(上下文)→ 最后调试「流式输出」(任务重点),逐段排错,避免一次性写完整代码报错。
-
- 核心避坑:API Key必须替换成自己的,否则无法调用;流式输出和非流式输出不能同时开启(stream设为True/False二选一)。
-
- 贴合学习:这份示例完全对应你第1周的任务,调试成功后,可直接复用代码,修改提问内容、参数,完成本周的“CLI聊天机器人”任务。
-
- 报错处理:遇到报错,先看报错信息(比如401=API Key错、ConnectionError=网络错),再对应解决,不用慌(后端调试的核心思路)。
补充:若你申请的是百度、阿里等其他平台的API Key,只需修改「URL」和「payload参数格式」(参考对应平台的开发者文档),核心调试逻辑完全一致。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)