返回学习路线
AI 学习路线 · 入门
Part 6 · 大模型 API 调用
站 3 你已经调通了 API。这一站把"调用"做成专业水准:
Section 1 · 把 API 调用封装成函数
Subsection 1 · 记术语
Endpoint 接口地址,如 https://api.deepseek.comToken 计费单位(输入+输出都算钱)Prompt 你发给模型的所有内容(system+user+assistant)API Key 你的身份凭证(在 .env 里)Subsection 2 · 写一个通用调用函数
VS Code 新建 llm_client.py:
python
import osfrom dotenv import load_dotenvfrom openai import OpenAIload_dotenv()_client = Nonedef get_client(): """懒加载:只用一次客户端,避免每次重复创建""" global _client if _client is None: _client = OpenAI( api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com", ) return _clientdef chat(prompt: str, system: str = "你是乐于助人的助手。", temperature: float = 0.7): """最常用的聊天函数:输入一句话,返回模型回答""" resp = get_client().chat.completions.create( model="deepseek-chat", temperature=temperature, messages=[ {"role": "system", "content": system}, {"role": "user", "content": prompt}, ], ) return resp.choices[0].message.contentif __name__ == "__main__": print(chat("你好,介绍一下你自己。"))- 运行(
python llm_client.py) - 预期看到:模型自我介绍。
- 以后所有站都用这个
llm_client.py,这是你的"公共工具"。
过关:llm_client.py 能跑,且理解"为什么封装成函数" = Section 1 完成。
Section 2 · 流式输出(打字机效果)
做聊天产品必学:让回答一个字一个字蹦出来,而不是等全部生成完。
Subsection 1 · 跑流式代码
VS Code 新建 stream.py:
python
import osfrom dotenv import load_dotenvfrom openai import OpenAIload_dotenv()client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")print("模型:", end="", flush=True)stream = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": "写一段关于秋天的散文,大约100字。"}], stream=True, # 关键:开启流式)for chunk in stream: piece = chunk.choices[0].delta.content if piece: print(piece, end="", flush=True) # 逐字打印,不换行print()- 预期看到:文字像打字机一样逐字蹦出来。
-
stream=True后,每次返回一个"增量块"(delta),拼起来就是完整回答。
Subsection 2 · 理解 SSE 在备忘录写:
SSE 服务端单向推送,简单,适合"模型→用户"的流式文字(打字机用这个)WebSocket 双向通信,适合"聊天室/实时协作"(Part 20 做 AI 面试官再用)- 你现在用的就是底层走 SSE 的效果。不用自己实现,SDK 已经封装好。
过关:能跑出打字机效果 = Section 2 完成。
Section 3 · Token 计费精算 + 站 4 验收
Subsection 1 · 算一笔真实账单
- 打开 https://api-docs.deepseek.com/quick_start/pricing (DeepSeek 价格页)看当前价格。
- 在
llm_client.py里加一行打印用量:
python
resp = get_client().chat.completions.create(...)print("本次输入 tokens:", resp.usage.prompt_tokens)print("本次输出 tokens:", resp.usage.completion_tokens)- 跑一次长一点的问答,记下输入/输出 token。
- 用"输入 token 数 × 输入单价 + 输出 token 数 × 输出单价"算这次花了多少钱。
- 预期看到:一次对话通常只要几分甚至几厘钱。
- 记住结论:单次便宜,规模化后成本才显著;做产品要控输入 token(Prompt 别啰嗦)、控输出 token(max_tokens 限制)。+
Subsection 2 · Part 6 验收勾选
- 能说出 Endpoint / Token / Prompt / API Key 的含义
- llm_client.py 封装函数跑通,理解"懒加载客户端"
- 流式输出(打字机)跑通,理解 SSE 与 WebSocket 区别
- 会查模型价格、能算一次调用的成本
- 知道控成本的两个抓手(输入/输出 token)
全勾选 = Part 6 通过 → 进入下一站 Part 7 · RAG,15 天,最实战的一段)。
