如果说你和ai软件对话是软件界面为前端,作为和你交互的接口,大模型在云端负责处理你的需求,那么调用模型API接口就是程序与云端模型的对话
两个过程大致如下:
这是用户直接和模型交互:
cpp
你的浏览器
↓
ChatGPT
↓
模型
↓
生成回答
↓
ChatGPT
↓
你的浏览器
这是程序和模型交互:
cpp
你的 Python 程序
↓
API 请求
↓
AI 模型
↓
API 响应
↓
你的 Python 程序
那么为什么agent需要API?
因为模型是大脑,agent是行为的执行者。模型负责想,agent负责做
比如你的程序有可能是这样:
cpp
Agent 程序
↓
调用模型 API
↓
模型思考:
"我需要检查测试"
↓
Agent 调用 Terminal
↓
pytest
↓
发现测试失败
↓
把错误交给模型 API
↓
模型分析
↓
Agent 修改代码
↓
再次 pytest
↓
成功
这里的API就成了agent的大脑的接口
cpp
┌─────────────┐
│ AI 模型 │
│ 大脑 │
└──────┬──────┘
│
API接口
│
┌──────▼──────┐
│ Agent │
│ 身体 │
└──┬───┬───┬──┘
│ │ │
文件 Terminal Git
API key是什么?
调用API需要一个API key ,这个API key是你个人使用的私有密码,通常也用于计费
cpp
你的程序
↓
API Key + 请求
↓
AI 服务
↓
确认身份/权限
↓
执行请求
模型的网页调用和API调用的使用是不同的计费情况,一般而言,直接用网页版的模型基础功能免费,但是调用API接口就需要根据token消耗量进行计费
那么token是什么呢?
token 是理解大模型运行方式的基础单位,是大模型处理文字时切分出来的基本计算单位
比如,大模型在理解人类语言时:
cpp
文字
↓
分词(Tokenization)
↓
Token编号
↓
神经网络计算
↓
输出Token
↓
转换成人类文字
我喜欢学习人工智能可能会被切成:
cpp
我
喜欢
学习
人工
智能
这样的每一块就是token。中文比较特殊,一般而言一个汉字是一个token左右,还有的时候一个词组是一个token
cpp
你 = token 1
好 = token 2
也有可能:
cpp
你好 = 一个token
大模型的能力和成本都跟token有关系,比如API计费,不是你问了几个问题,或者几句话,而是token消耗了多少(你输入多少 token + 模型输出多少 token)
context window(上下文窗口)
这个模型支持 128K context,这个k指的还是token
cpp
128,000 tokens
这个指的是模型一次性能记忆的内容量
token和agent的关系:
对于平常使用的ai,可能输入100token的数据,输出1000token的数据,一共才1100token
cpp
你:
写一个登录功能
AI:
代码
但是对于agent:
cpp
任务
↓
读取项目
↓
分析文件
↓
修改代码
↓
运行测试
↓
看错误
↓
再次修改
↓
总结
cpp
第1轮:
10000 tokens
第2轮:
15000 tokens
第3轮:
20000 tokens
一次任务可能几十万token
所以token的成本控制是现在很重要的研究内容
写代码 Agent:
不能把整个 GitHub 项目全部塞进去。
需要:检索,RAG,摘要,分块
这就是 AI 工程。
RAG是什么?
如果我要把一个很大的文档喂给ai,比如100g,这是不可能的,因为成本太大,所以我进行如下操作:
cpp
用户问题
↓
搜索相关资料
↓
只取相关部分
↓
发送给模型
↓
回答
这就是RAG
关于计费这一块,我有一个问题,经过查阅得到了答案:如果计费仅仅和token有关,而token的消耗量是输入的token加模型输出的token,那只需要把prompt控制的尽可能短,让模型输出有限制,那成本不是很低了吗,但是这个问题如果很复杂,在模型内部生成的东西很多,需要的算力很大,模型推理时消耗的token多,但不计入计费规则,这样一来合理吗?
模型内部"思考"并不是完全不计费。对于支持 reasoning 的模型,内部 reasoning tokens 会被算进 output tokens,并按输出 Token 计费
模型内部想得多,通常意味着 reasoning tokens 更多,而这些会计入输出 Token 用量。OpenAI 当前的推理模型文档就明确说明,reasoning tokens 虽然不会直接展示给用户,但会占用上下文窗口,并且按 output tokens 计费。
所以不是:
cpp
输入 Token
+
你看到的回答 Token
=
全部计费
而是:
cpp
一次模型调用
│
┌────────────┴────────────┐
↓ ↓
Input Tokens Output Tokens
│
┌──────────┴──────────┐
↓ ↓
Reasoning Tokens 可见输出 Tokens
(内部推理) (你看到的)
举例:
假设你给模型:
cpp
答案:50 tokens
但它内部为了得到这个答案,进行了:
cpp
推理:5,000 tokens
那么实际可能是:
cpp
Input = 100
Reasoning = 5,000
Visible Output = 50
Output = 5,050
Total = 5,150 tokens
这就是为什么现在会有按照推理能力不同的ai收费标准不一样
cpp
reasoning effort
↓
low
medium
high
xhigh
它实际上是在控制模型愿意投入多少推理计算。推理投入越高 → 可能消耗更多 reasoning tokens → 成本和延迟可能增加。