跳到正文
docai.cc

DOCAI · 课程 · L2 · 30 分钟

把模型接进自己的代码

从 curl 过渡到代码:用环境变量管 key、用 SDK 或 HTTP 发请求、把 base URL 和模型名做成配置,出问题能逐层定位。

你将学会

  • 能在自己的项目里发出一次带鉴权的模型请求
  • 能把 base URL、模型名、key 拆成配置而不是硬编码
  • 请求失败时能判断问题在网络、鉴权还是参数

先确定三样东西

配置 从哪来 放哪
API Key 服务商控制台 环境变量,不进代码库
Base URL 服务商文档 配置文件
模型名 服务商模型列表 配置文件

把这三样写死进代码,换一个中转站就要改一遍源码——这是最常见的返工原因。

最小代码(Python)

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["DOCAI_API_KEY"],
    base_url=os.environ.get("DOCAI_BASE_URL"),  # 不填则用默认
)

resp = client.chat.completions.create(
    model=os.environ["DOCAI_MODEL"],
    messages=[{"role": "user", "content": "用一句话解释什么是 API"}],
)
print(resp.choices[0].message.content)

SDK 只是把 HTTP 请求包了一层。看不懂报错时,回到 curl 那一课 用同样的参数发一次,能立刻分清是 SDK 问题还是服务端问题。

四个容易踩的坑

  • key 进了 git:用 .gitignore 挡住 .env;已经提交过的 key 要立刻吊销重发。
  • base URL 少了 /v1:表现为 404,见什么是 endpoint。
  • 模型名写错:表现为 404 或「模型不存在」,不是 401。
  • 没有超时:默认可能等很久。显式设连接超时和总超时。

分层排查

按顺序问三个问题:

  1. 能不能连上? 换成 /v1/models 这类最简单的 endpoint 试。
  2. 鉴权过不过? 401 说明 key 或请求头有问题,与模型无关。
  3. 参数对不对? 400 通常是字段名、类型或模型名写错,看响应体的 message。

自测

  1. 为什么 base URL 和模型名要放进配置,而不是直接写在代码里?
  2. 同一个 key,curl 能通、SDK 报 401,最可能差在哪?
  3. 你的请求没有设超时,高峰期会发生什么?

涉及的概念