第 1 周 Day 3:Python Agent 调用大模型 API:封装 LLMClient
学习主题:用 Python 调用大模型 API,并封装成可复用客户端
建议时长:2-3 小时
学习目标:理解一次大模型请求包含哪些信息,完成一个LLMClient类,为命令行 ChatBot 做准备
一、为什么学这个
本文适合已经完成 Python 虚拟环境和.env配置的学习者。如果你还没有准备好项目目录,可以先完成上一篇文章中的环境搭建。
第一阶段的目标是做一个命令行多轮对话 ChatBot。它的核心只有两件事:
- 用户输入问题
- 程序调用大模型 API,拿到回答并打印出来
如果直接在main.py里写 API 调用,短期能跑,长期会乱。更好的做法是封装一个LLMClient:
main.py 负责命令行交互 LLMClient 负责和大模型 API 通信这样后面加重试、日志、token 统计、模型切换时,只需要改一个地方。
二、核心概念
1. 一次大模型请求包含什么
一次最基础的大模型调用通常包含:
| 字段 | 含义 |
|---|---|
model | 使用哪个模型 |
instructions | 系统级要求,可以理解为角色和规则 |
input | 用户输入或多轮消息 |
temperature | 控制回答随机性,入门阶段可以先不用调 |
在 OpenAI 的 Responses API 中,最简单的调用方式类似这样:
fromopenaiimportOpenAI client=OpenAI()response=client.responses.create(model="gpt-5.2",input="用一句话解释什么是 Python Agent")print(response.output_text)这段代码适合快速测试。但在项目里,我们会把它封装起来。
2. System Prompt 和用户输入的区别
很多初学者会把所有内容都放进用户输入里,例如:
你是 Python 助教,请回答:什么是列表?更清晰的做法是把角色要求放进instructions,把用户真实问题放进input:
response=client.responses.create(model="gpt-5.2",instructions="你是一个耐心的 Python 编程助教,回答要适合初学者。",input="什么是列表?")这样做的好处是职责清楚:
instructions:模型应该如何表现input:用户当前问了什么
3. 为什么要封装客户端
封装LLMClient的目的不是炫技,而是降低后面代码的复杂度。你希望在main.py中这样调用:
reply=llm.chat("什么是 Agent?")print(reply)而不是每次都写完整的client.responses.create(...)。
三、基础示例
下面基于上一篇文章的目录继续写:
python-agent-chatbot/ └── src/