一、《从零手撸 Agent》 我用 10 行代码跑通了第一次大模型调用(顺便踩了 4 个坑)

本文是《从零手撸 Agent》系列第 1 篇。这个系列假设你刚起步,从最基础的 API 调用一路写到能部署的多智能体系统,代码全部可复现。

起因

前阵子公司想搞个内部 AI 工具,活儿落我头上。说实话我当时对大模型的认知停留在"网页上跟它聊天",代码怎么调、钱怎么算、Key 从哪来,一概不知。折腾了一晚上跑通第一次调用之后我发现,这件事本身不难,难的是没人告诉你坑在哪。

所以第一篇不讲 Agent,就讲怎么从零跑通第一次调用。后面所有复杂的东西,都建立在这 10 行代码上。

装环境:虚拟环境别跳过

Python 3.10 以上,去官网装。Windows 用户注意安装界面最底下那个 "Add Python to PATH",勾上。我就是没勾,对着 python: command not found 懵了十分钟。

然后建项目、建虚拟环境:

perl 复制代码
1mkdir my-first-agent && cd my-first-agent
2python -m venv .venv
3
4# Windows PowerShell:
5.venv\Scripts\activate
6# Mac / Linux:
7source .venv/bin/activate
8
9pip install openai

虚拟环境这步很多人嫌麻烦直接跳过。别。我同事图省事往系统 Python 里装了一堆库,后来版本冲突,最后重装环境解决了。给它一个独立小房间,省得以后拆家。

pip 慢的话换清华源:pip install openai -i https://pypi.tuna.tsinghua.edu.cn/simple

申请 Key

我用的 DeepSeek,注册就送额度,国内直连,适合起步。通义千问也行。注册完在控制台找 "API Keys",创建,复制那串 sk- 开头的字符。

注意它只显示一次,马上存到本地记事本。还有一条铁律:Key 绝不进 git 仓库。被盗刷的案例见得太多了。

第一次调用

新建 first_call.py:

ini 复制代码
1from openai import OpenAI
2
3client = OpenAI(
4    api_key="sk-你自己的key",
5    base_url="https://api.deepseek.com",
6)
7
8response = client.chat.completions.create(
9    model="deepseek-chat",
10    messages=[
11        {"role": "user", "content": "用一句话解释什么是API"}
12    ],
13)
14
15print(response.choices[0].message.content)

运行:

复制代码
1python first_call.py

我拿到的回答是:"API 就像餐厅的服务员:你点菜(发请求),它转达厨房(服务器),再把做好的菜(数据)端回来。"

行,通了。但如果你跟我一样是个较真的人,这 10 行里至少有三个地方值得停下来想想。

为什么要 base_url? 因为 DeepSeek、千问这些厂商都兼容 OpenAI 的接口格式,同一个 SDK 换个地址就能打给不同家。以后换模型,改一个字符串的事。

choices[0] 是什么鬼? 历史遗留。早期接口支持一次生成多个候选回答,现在固定返回 1 个,所以永远是 choices[0],背下来就行。

messages 为什么是个数组? 这是下一篇的主题,先埋个伏笔:模型根本不记得你上一次说了什么。

钱是怎么算的

把最后一行换成 print(response),跑一遍,在输出里找 usage:

bash 复制代码
usage={
  'prompt_tokens': 12,       # 你发过去的内容
  'completion_tokens': 35,   # 模型的回答
  'total_tokens': 47,
}

token 是模型的计量单位,大概 0.75 个英文单词或者 0.6 个汉字。计费按这个来。第一次看到这个字段的时候我还没什么感觉,后来做了 Agent 才知道,这个字段能让你省一半的钱。这里先记住一句话:你发的内容越多,越贵。后面讲上下文管理时全靠这条。

Key 别写死在代码里

我第一版代码就把 Key 硬编码了,被同事看到骂了一顿。标准做法是环境变量:

ini 复制代码
1# Mac / Linux:
2export OPENAI_API_KEY="sk-你的key"
3# Windows PowerShell:
4$env:OPENAI_API_KEY="sk-你的key"
ini 复制代码
1import os
2from openai import OpenAI
3client = OpenAI(
4    api_key=os.environ["OPENAI_API_KEY"],
5    base_url="https://api.deepseek.com",
6)

我踩过的 4 个坑,希望你绕开

  1. python: command not found ------ 装的时候没勾 Add to PATH,重装勾上
  2. pip install 卡死 ------ 网络问题,换镜像源
  3. Key 泄露 ------ 只存本地环境变量,.gitignore 里加上相关文件
  4. AttributeError: 'dict' object has no attribute ... ------ 后面会反复遇到,十有八九是把字典当对象用了,或者反过来

收个尾

这一篇其实就干了一件事:跑通 10 行代码。但把每一行都搞明白,后面会顺很多。

下一篇讲一个更反直觉的事:你连着问它两个问题,第二个问题里它根本不记得第一个问题说了什么。很多人第一次发现这一点时的反应是"这模型怎么这么笨"。其实不是它笨,是 API 的设计就是这样。

动手环节

  • 不看文章,独立跑通一次调用
  • 把问题换掉,确认自己会改
  • 打印完整 response,找到 usage,算算花了几个 token

写在最后

如果想系统、完整地吃透 Harness、Hermes 整套前沿智能体开发体系,完成从只会调模型到可控、高质量、可落地的 AI 工程交付进阶,可以关注慕课网近期上新的《Harness&Hermes 多智能体开发特训营》。

相关推荐
2603_965896626 分钟前
JavaScript 原型与原型链
开发语言·前端·javascript
Amos_Web7 分钟前
通过 Rspack 源码学 Rust(四):用 `Option<T>` 表达“查询可能没有结果”
前端
朋友圈自动点赞工具12 分钟前
Ruby方法查找:对象不存方法
开发语言·前端·ruby·科技资讯
雨晨源码(同名B站)14 分钟前
深度学习毕业设计选题推荐:基于YOLO11的交通标志检测系统设计与实现(Python+Django+Vue3+对接deepseek)
人工智能·python·深度学习·机器学习·django·课程设计
晓得迷路了16 分钟前
栗子前端技术周刊第 152 期 - Rspack 2.3、TypeScript 7.1 Beta、Bun 1.4.4...
前端·javascript·css
普通人628 分钟前
CSS-box-sizing-使用指南
开发语言·前端·css·1024程序员节
2601_9679791231 分钟前
python中str函数怎么用?使用方法与注意事项详解
python·使用方法·字符串转换·注意事项·str函数
青少儿编程课堂32 分钟前
蓝桥杯青少组图形化+信息素养+电子学会Scratch考级:校园口算闯关解析
c++·python·算法·bfs·信息学竞赛
风骏时光牛马33 分钟前
AI开源工具一站式尝鲜体验
前端
IT_陈寒41 分钟前
Python项目实战经验分享:为什么你的多进程日志会丢失?
前端·人工智能·后端