动手配置:从注册到首次调用 API
动手配置:两条路径,从注册到第一次调用
本页只有步骤,没有选型。路径一把各家 API 直接接进脚本,路径二用统一网关把多家模型收口到一个地址;配完再解决「怎么知道钱花在哪」。
Mac 上配置 API 的两条路径
两条路径二选一:普通用户优先用图形化客户端,直观、不易出错;开发者或需要写脚本,再用终端环境变量方式。
方式一:图形化客户端
Mac 上主流的 AI 客户端:Codex(App Store)、Cherry Studio、ChatBox、CC-Switch(菜单栏工具)。
- 从 App Store 或官网下载安装客户端(比如 Codex、Cherry Studio)。
- 打开软件,进入「设置」→「模型管理」。
- 选择你要用的 API 服务商(OpenAI / DeepSeek / Kimi 等)。
- 把申请到的 API Key 粘贴到对应输入框,保存。
- 选择默认模型,回到聊天界面即可直接使用。
不用敲命令,界面直观,支持多模型切换,还能管理历史对话。
方式二:终端环境变量
如果你要自己写代码、跑 Agent 脚本,才需要配置环境变量。
实操:以 DeepSeek 为例跑通首次调用
把上面两条路径落到一次真实操作上。DeepSeek 是门槛最低的入口之一:注册不需绑定信用卡、新用户有免费额度、接口与 OpenAI 格式完全兼容。
先看清价格:分时段计费(2026-09-10 12<00>00> 起生效)
来源:见本页文末「数据来源」说明 · 核对日 2026-09-14
| 计费项 | 空闲时段 | 高峰时段 | 说明 |
|---|---|---|---|
| 输入(缓存命中) | ¥0.02 / 百万 | ¥0.04 / 百万 | 系统提示词、工具定义、上下文前缀被复用时按此价,最省的一档 |
| 输入(缓存未命中) | ¥1 / 百万 | ¥2 / 百万 | 首次出现的全新内容按此价 |
| 输出 | ¥4 / 百万 | ¥8 / 百万 | 模型生成的回复内容 |
高峰定义为周一至周五 09<00>00>–12<00>00> 与 14<00>00>–18<00>00>(北京时间),价格为空闲时段的两倍。把批量任务排到夜间执行,成本直接减半 —— 这是最容易拿到的一笔折扣。
第 1 步 · 注册并取得 API Key
- 打开开放平台 platform.deepseek.com,手机号注册并完成实名认证。
- 左侧菜单进入「API Keys」→「创建 API Key」。
- 复制生成的密钥(以
sk-开头)。它只会完整显示一次,请立即存入密码管理器。 - 进入「财务中心」按需充值(支持支付宝 / 微信),并顺手把单日消费上限设好。
第 2 步 · 写入环境变量
# 打开 zsh 配置(新 Mac 默认 zsh)nano ~/.zshrc
# 在文件末尾追加(切勿把密钥提交进 Git)export DEEPSEEK_API_KEY="sk-你的密钥"
# Ctrl+O 保存、Ctrl+X 退出,然后让它生效source ~/.zshrc第 3 步 · 跑通第一次调用
# 依赖:uv pip install openai python-dotenvimport osfrom openai import OpenAIfrom dotenv import load_dotenv
load_dotenv() # 从 .env 读密钥,避免写死在代码里
client = OpenAI( api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com", # 兼容 OpenAI 格式,只差这一行)
def ask(prompt: str, system: str = "你是专业的中文内容助手") -> str: resp = client.chat.completions.create( model="deepseek-flash", # 旧名 deepseek-v4-flash 仍可路由 messages=[ {"role": "system", "content": system}, {"role": "user", "content": prompt}, ], temperature=0.7, stream=False, ) u = resp.usage print(f"本次用量 - 输入 {u.prompt_tokens} / 输出 {u.completion_tokens}") return resp.choices[0].message.content
if __name__ == "__main__": print(ask("用三句话说明什么是 API。"))换掉 base_url 与 model,同一段代码就能切到 OpenAI、Kimi、通义千问等任何兼容 OpenAI 格式的服务上 —— 这就是「兼容 OpenAI 格式」的实际价值。
用量核对与成本监控
跑自动化最容易出的事故不是报错,而是账单暴涨:一个写错的循环、一次失败重试风暴,半夜就能烧掉几百元。上线前先把「看得见用量」这件事做掉。
来源:星标与仓库状态:GitHub API 实测 · 核对日 2026-09-14
| 方式 | 怎么做 | 适合 |
|---|---|---|
| ① 官方控制台「用量统计」 | 登录开放平台 → 用量统计,可按天 / 按模型 / 按 Key 查看消费明细与趋势(数据有数分钟延迟) | 日常人工巡查 |
② 响应体 usage 字段 | 每次调用的返回都带 prompt_tokens / completion_tokens,落库即可按任务精确对账 | 自己写脚本记账 |
| ③ 平台的额度告警 | 在财务中心设置单日 / 单月消费上限与预警,超限直接停服 | 所有跑自动化的人(必做) |
| ④ 开源自建看板 | NewAPI Monitor(★8 · Docker 部署)可实时记录调用、费用趋势并推送超限告警,适合多 Key / 多项目中转统一治理 | 用量大、多 Key 场景 |
一、密钥绝不硬编码进代码再提交到公开仓库,被爬虫扫到会立刻盗刷;二、脚本要同时加最大重试次数与单日消费上限双保险;三、定期轮换密钥,怀疑泄露立刻吊销重建;四、授权 Agent 时不要给资金、账号密码、批量删除这类高权限操作。
网络上流传的 LLMeter、TokenGuard、codeburn 等自动省 Token / 代理优化工具,本次核验未能在公开代码托管平台找到对应项目,故不收录。需特别提醒:来路不明的代理型工具会把你的提示词、乃至密钥一并转发出去,收益远小于风险。
密钥与账号安全
这一节是整份文档里唯一不能走捷径的部分:模型选错可以换,链路搭错可以重做,密钥泄露无法撤回。
| 凭证类型 | 正确做法 | 绝对不要 |
|---|---|---|
| API Key | 只放在本机环境变量或 .env(且 .env 写进 .gitignore);给每个用途单独建一把 Key 并命名,便于按用途吊销。 | 写进代码、交给前端、贴进聊天记录或截图、提交到 Git(含私有仓库)。 |
| 账号密码 / 二次验证 | 用密码管理器生成并保存;二次验证码单独存放。 | 与 API Key 放在同一个纯文本文件里;用同一个密码注册「平台账号」与「支付账号」。 |
| 支付 / 提现凭证 | 只保留在人工操作环节,脚本只读订单状态,不持有扣款能力。 | 把银行卡、支付密码、验证码交给任何脚本或 Agent。 |
| 店铺 / 平台主账号 | 自动化一律使用子账号或只读 Token,权限最小化。 | 让 Agent 用主账号直接登录或改价、上下架。 |
落地到 Mac 上,最小可用做法是三步:
# 1. 只在本机保存,不进版本库echo ".env" >> .gitignoreprintf 'DEEPSEEK_API_KEY=sk-你的key\n' > .envchmod 600 .env # 仅本人可读
# 2. 脚本里只读环境变量,不硬编码import osKEY = os.environ.get("DEEPSEEK_API_KEY")assert KEY, "未设置 DEEPSEEK_API_KEY"
# 3. 提交前自查(有输出就说明泄露了)git grep -nE 'sk-[A-Za-z0-9]{16,}' || echo "未发现明文密钥"一、立刻在控制台吊销该 Key(不是改密码,改密码不失效已有 Key);二、查用量与账单,确认异常消费区间;三、重建一把新 Key 并同步到本机环境变量;四、检查 .env 是否曾被提交过——只要进过 Git 历史,即使后来删除也要视为已泄露,因为历史提交可被克隆。
口径:以上为通用工程实践,不是任何平台的特有要求。各平台的 Key 管理入口与控制台位置见1.4 用量核对与成本监控;轮换周期建议 90 天一次,或团队人员变动时立即轮换。
预算熔断:把支出上限写进配置
自动化最典型的翻车方式不是「模型太贵」,而是一个死循环把额度跑满——脚本重试、Agent 反复读同一批文件、定时任务叠加运行,都能在一夜之间把预算烧掉。熔断要在三个层次各做一道。
| 层次 | 在哪设 | 设什么 | 触发后的行为 |
|---|---|---|---|
| 平台侧 | 各平台控制台的「用量 / 计费 / 限额」页 | 月度消费上限、单日上限;部分平台支持按 Key 设限额 | 到达上限后拒绝新请求(返回 429 / 403),不会产生超额账单 |
| 调用侧 | 你自己的脚本里 | 单次任务 token 上限、最大重试次数、单日调用次数 | 抛异常并退出,写一条日志 |
| 任务侧 | launchd / cron 配置 | 任务并发数 = 1(禁止叠加);超时强杀 | 避免上一轮没跑完下一轮又启动,形成叠加消耗 |
平台侧是最后一道防线。上线任何自动化之前,先把这一步做完——它比事后看账单有效得多:
- 一、先找「用量 / Usage / 计费 / Billing」,再看有没有「限额 / Limit / Budget / Quota」子项;
- 二、国内平台(DeepSeek、豆包、通义等)多为「账户余额 + 单日限额」模式,注意余额耗尽即停;
- 三、海外平台(OpenAI、Anthropic、Google)多为「预付额度 + 用量上限」模式,可分别对项目和 Key 设限;
- 四、找不到限额入口的平台,就用第二、三层兜住。 入口页面与字段名会随改版变化,因此这里不给具体的按钮路径——请在控制台用上述关键词检索,不要照着半年前的截图操作。
# 调用侧:一份可直接粘贴的熔断装饰器import json, time, pathlib
BUDGET = {"max_calls_per_day": 200, "max_retries": 3, "max_tokens": 8192}LEDGER = pathlib.Path.home() / ".guide" / "usage.json"LEDGER.parent.mkdir(exist_ok=True)
def _load(): if LEDGER.exists(): return json.loads(LEDGER.read_text()) return {"date": time.strftime("%Y-%m-%d"), "calls": 0}
def guard(fn): def wrap(*a, **kw): led = _load() today = time.strftime("%Y-%m-%d") if led.get("date") != today: # 跨天归零 led = {"date": today, "calls": 0} if led["calls"] >= BUDGET["max_calls_per_day"]: raise RuntimeError("已达当日调用上限,熔断退出") # 不再重试 led["calls"] += 1 LEDGER.write_text(json.dumps(led)) return fn(*a, **kw) return wrap口径:上限数值(200 次/天、8192 token)是示例,不是推荐值——请按1.4 里实测的单次成本 × 可接受月支出倒推。举例:若单次调用平均花费 $0.01、可接受月支出 $30,则单日上限约 100 次。
429、超时与降级:把失败写成流程
批量跑任务时,失败是常态而不是异常。写死一次调用的脚本,跑 1000 条会因为其中 3 条报错而整体中断;写好重试与降级的脚本,同样的错误只会让这 3 条走备用路径。
| 现象 | 通常原因 | 处置方式 | 要不要重试 |
|---|---|---|---|
| 429 Too Many Requests | 并发过高,或触及平台的速率/额度限制 | 指数退避重试(1s → 2s → 4s,带随机抖动),同时降低并发 | 要,但要限制次数 |
| 408 / 504 超时 | 服务端排队,或单次请求体过大 | 缩短 prompt、拆分请求,再退避重试 | 要 |
| 500 / 502 / 503 | 服务端临时故障 | 退避重试;连续失败则切到降级链 | 要,但超过阈值就降级 |
| 400 参数错误 | 参数、模型名或格式写错 | 修正代码,不要重试 | 不要(重试 100 次也一样失败) |
| 401 / 403 | Key 失效、余额耗尽、无权限 | 停止任务并告警(这类错误重试只会浪费额度) | 不要 |
| 200 但内容为空 / 被截断 | 触达输出上限,或被安全策略拦截 | 按降级链重试,并记录原始返回以便复盘 | 视情况 |
# 退避重试 + 降级链:主模型失败就退到便宜模型,再失败就落盘人工处理import random, time
CHAIN = ["claude-opus-5", "deepseek-v4.1-flash"] # 主 → 备;按你的成本梯度排
RETRYABLE = (429, 408, 500, 502, 503)
def call_with_fallback(prompt, client): for model in CHAIN: for attempt in range(4): try: return client.chat(model=model, prompt=prompt, max_tokens=4096) except ApiError as e: if e.status not in RETRYABLE: break # 不可重试:直接换下一个模型 time.sleep((2 ** attempt) + random.random()) # 抖动,避免同时重试 raise RuntimeError("降级链全部失败,转人工处理")一、重试必须幂等:若一次调用可能有副作用(下订单、发消息、写文件),重试前先用请求 ID 查一次是否已成功,否则会出现「发了两次」。二、把失败落盘:失败的输入、错误码、原始返回都写到一个 failed.jsonl。批量任务里最贵的不是失败本身,而是失败后不知道失败在哪一条。
口径:错误码语义各家略有差异(例如有的平台用 402 表示余额不足),上表按通用约定整理;接入新平台时请以其官方错误码文档为准。
Mac 生产力环境搭建
自动化任务通常要求「电脑长期不关、脚本按点自己跑」。本节把系统设置、包管理器、Python 与 Node 环境、效率软件、开机自启一次配好。适用机型:Mac Mini M4(16G + 512G 最合适,功耗低、可 7×24 挂机)与 M 系列的 MacBook Air / Pro。
系统基础设置
安装 Homebrew(Mac 的包管理器)
后面几乎所有工具都通过 Homebrew 安装,所以它是第一件要装的东西。
# 官方安装脚本/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Apple Silicon 机器:安装后把 brew 加进 PATHecho 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"
# 验证brew --versionraw.githubusercontent.com 在国内常被阻断,导致安装脚本拉不下来。两个可行做法:一、 先配置终端代理,再执行上面的脚本;二、 改用国内镜像源,并写入环境变量加速后续下载:
# 中科大镜像(写入 ~/.zshrc 后对新终端生效)export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles"Python 环境(自动化脚本的主力语言)
推荐用 uv 管理环境:比 conda 更快更轻,对 Apple Silicon 支持好。
# 安装 uvbrew install uv
# 给一人公司项目单独建工作区与虚拟环境mkdir -p ~/opc && cd ~/opcuv venvsource .venv/bin/activate
# 装上常用的基础库uv pip install requests openai python-dotenv pandas schedule每个项目一个 .venv,依赖互不污染;换机器时用 uv pip freeze > requirements.txt 就能复现环境。不要把包装进系统 Python —— 后期版本冲突时很难收拾。
Node.js 环境(前端工具与自动化插件)
brew install node
# 验证node -vnpm -v常用效率软件
brew install --cask google-chrome # 浏览器:自动化脚本最主要的操作对象brew install --cask iterm2 # 终端增强brew install --cask rectangle # 窗口管理,多窗口看数据必备brew install --cask keka # 压缩解压brew install --cask maccy # 剪贴板历史(开源,可替代付费的 Paste)做视频自动化还需要 FFmpeg(brew install ffmpeg);跑本地大模型按第三部分「本地部署」装 Ollama 或 LM Studio。
让脚本按时自己跑
Mac 上最稳的定时方案是系统自带的 launchd,不需要额外软件。
# 1. 新建 LaunchAgent 配置(一个任务一个文件)nano ~/Library/LaunchAgents/com.opc.daily.plist# 关键字段:# Label 唯一标识,如 com.opc.daily# ProgramArguments 要执行的命令,路径必须写绝对路径# StartCalendarInterval 定时规则(Hour / Minute)# StandardOutPath / StandardErrorPath 日志文件,出问题先看这里
# 2. 加载并立即生效launchctl load ~/Library/LaunchAgents/com.opc.daily.plist
# 3. 确认已注册launchctl list | grep opc
# 4. 改了配置后重新加载launchctl unload ~/Library/LaunchAgents/com.opc.daily.plistlaunchctl load ~/Library/LaunchAgents/com.opc.daily.plist一、日志一定要落到文件(StandardErrorPath),否则早上只会看到「昨晚没跑」却不知为何;二、脚本要能防重入 —— 上一次没跑完时这一次不要叠加启动;三、涉及自动发布、自动下单这类外部动作时,先设成只生成不发送的草稿模式,跑一周确认稳定再放开。
常见问题速查
把配置与使用中最常见的疑问集中在这里:前两条对应配置环节,后四条涉及选型与日常使用。
可用性与合规前提
动手之前有三件事要先确认,它们决定「这套方案在你这里能不能用」,与技术选型无关。
| 场景 | 通常可行的做法 | 要注意的地方 |
|---|---|---|
| 国内直接访问 | 优先选国内平台(DeepSeek、豆包、通义、智谱、Kimi、MiniMax 等)的官方 API,网络与支付链路最短。 | 部分海外平台的 API 在境内无法直连,需要自行解决网络问题;能否连通请先用自己的网络实测一次,不要照抄别人的结论。 |
| 代理与网络工具 | 企业用途走公司统一的网络出口与合规审批流程。 | 代理的使用方式需符合当地法规与所在单位的网络管理规定;不要为绕过限制而使用来源不明的工具。 |
| 数据出境 | 涉及个人信息、客户资料、合同文本时,先用国内平台处理,或做脱敏(去标识化)后再调用。 | 把真实客户名单、身份证号、银行信息提交给境外服务,可能触及数据出境的合规要求;做法是脱敏而不是「应该没事」。 |
| 内容与平台规则 | 搬运、抓取、批量发布前先读目标平台的用户协议与 robots 规则。 | 高频抓取、自动关注、批量私信等行为通常被明令禁止,账号可能被限流或封禁;被封的是你的主账号,代价远大于省下的时间。 |
| 商用与版权 | 确认模型输出、训练数据来源与素材授权,尤其是要对外销售的内容。 | 不同平台对「输出物能否商用」的条款不同,请以官方条款为准。 |
以上是工程侧的检查清单,帮助你在动手前意识到风险点;涉及具体业务的合规判断,请咨询专业人士。这条与总目录的「数据口径与免责说明」是一致的。
口径:本表按「大多数个人开发者与小微企业会遇到的情形」归纳,不覆盖行业特殊监管要求(金融、医疗、教育等regulated行业另有规定)。
配置后不生效怎么办?
客户端内:检查 API Key 是否粘贴正确、模型名称是否选对。终端内:执行 source 命令,或直接重启终端。
API 和网页版会员有什么区别?
网页版是给人手动用的,API 是给程序自动调用的;API 按量付费——用量少时更便宜,用量大时订阅更划算。
Agent 需要自己写代码吗?
不用。现在有很多现成的 Agent 软件(如 OpenManus、Dify),配置好 API 就能直接用,也支持手机远程触发。
省 Token 工具会影响回答质量吗?
正规优化工具只去掉冗余和废话,核心信息保留。主流测试中准确率下降在 5% 以内,日常使用几乎感知不到。
本地部署和 API 哪个好?
99% 的人选 API:效果更好、速度更快、不用折腾硬件。只有极致隐私需求、离线使用或特殊定制,才需要本地部署。
Skill 怎么安装到客户端里?
Claude Code、Codex 等支持 MCP 协议的客户端,直接在设置里添加 Skill 仓库地址或本地路径即可启用。
接下来:能力已经可调用,但「谁去调用它」还没解决。第 5 部分先挑一个桌面智能体当主力,再到第 6 部分的开源库里给它装具体能力。
================= 12 桌面智能体产品对比 =================
本文档仅供个人学习与研究使用, 不得用于商业用途 ,亦不构成任何收益承诺。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!














