从产品到 API 的第一次调用
这一篇做入门认知主题的最小实践:用 Node.js 调用一次 LLM API,让模型回答一个问题。
重点不是写出复杂程序,而是理解一个关键差异:当你使用 ChatGPT 时,你使用的是完整产品;当你调用 API 时,你发起的是一次模型请求。产品层的历史记录、按钮、文件、工具、权限和体验,都需要应用自己实现。
准备项目
先安装 SDK:
然后在项目根目录创建 .env:
不要把真实 API Key 提交到 Git 仓库。实际项目里应该把 .env 加入 .gitignore,并在部署平台使用环境变量管理密钥。
最小调用
创建 examples/first-call.ts:
运行:
如果你不想安装 tsx,也可以先用普通 JavaScript 文件写同样的逻辑。
这段代码发生了什么
这段代码只做了几件事:
- 创建一个 OpenAI API Client。
- 指定使用的模型。
- 传入用户输入。
- 等待模型生成结果。
- 打印输出文本。
它没有自动创建聊天记录,也没有自动记住历史,更没有自动知道你的业务数据。
这就是 API 和 ChatGPT 产品最重要的区别。
Product 和 API 的区别
在 ChatGPT 产品里,你会自然获得很多体验:
- 输入框。
- 对话历史。
- 多轮上下文。
- 流式输出。
- 停止生成。
- 重新生成。
- 文件上传。
- 工具调用。
- 账号和权限。
但在 API 里,你只是发起一次请求。你想要多轮对话,就要自己保存历史消息,并在下一次请求时重新传入。你想要 Streaming,就要使用流式接口并在前端增量渲染。你想要工具调用,就要定义工具、执行工具、返回工具结果。
换句话说,API 给你模型能力,不给你完整产品。
第一次调用要关注哪些概念
第一次调用时,不需要急着理解所有参数。先关注这些核心概念:
这些概念后面都会扩展成工程问题。
第二步:把输入变成变量
最小调用写死了问题。稍微改一下,就可以让它接收命令行参数:
运行:
这就是一个最小命令行 AI 问答工具的雏形。
这还不是 Chat
上面的例子只是单轮问答。真正的 Chat 至少需要处理消息历史:
- 用户第一轮问了什么。
- 模型第一轮回答了什么。
- 用户第二轮追问了什么。
- 哪些历史应该带入下一次请求。
模型本身不会因为你上一次调用过 API 就自动记住你。多轮对话的“记忆感”,来自应用层把历史重新组织进上下文。
这会在 LLM API 与对话模型主题里详细展开。
常见误区
第一个误区:以为模型 API 等于 ChatGPT。
API 只是能力入口。ChatGPT 是产品,里面包含大量应用层设计。
第二个误区:以为 prompt 越长越好。
输入越长,成本越高,延迟越高,也越可能引入干扰信息。
第三个误区:以为模型回答就是真相。
模型输出需要结合业务数据、检索结果、工具校验和用户确认来判断。
第四个误区:一开始就追求复杂架构。
学习早期应该先完成最小请求,理解请求和响应,再逐步加入 messages、streaming、tools、RAG 和 eval。
小结
第一次 API 调用的意义,不是“我终于能让 AI 回答问题了”,而是理解:LLM API 是一次模型推理请求,不是完整 AI 产品。
从这一刻开始,你要逐步把产品缺失的部分补回来:上下文、历史、流式输出、工具、权限、成本、日志、评估和用户体验。
这就是从“会调 API”走向“会设计 AI 系统”的起点。