从终端到首个补丁:带新队友跑通 AI 辅助开发
第一步:在独立目录约定首次交付
带新队友接入 AI 工作流,我会先避开业务仓库。第一次练习只交付一个能解释、能测试、能审查的小补丁,而不是让代理扫描整个项目。下面使用 Bash、Git 和 Python 3.10 以上版本;命令逐段执行,任何一步失败就先停下来。
mkdir fluxo-onboarding-demo && cd fluxo-onboarding-demo && git init && git switch -c onboarding/ai-first-change
今天的任务很具体:姓名清洗函数需要去掉首尾空白,并把中间连续空白合并成一个空格。先写验收条件,再打开模型。新人因此知道自己是在解决什么问题,而不是练习接受建议。
第二步:配置个人密钥,不复制同事凭据
Fluxo 用一个密钥和统一 API 主机连接 Claude、GPT、Gemini、DeepSeek、Kimi、GLM、Qwen、Grok 等系列。Claude Code、Codex、Gemini CLI 和 OpenAI SDK 都有接入路径,但统一入口不代表各家的原生协议完全相同。这个练习选 GPT-6 Astra,走 OpenAI 兼容接口。([fluxorelay.com](https://fluxorelay.com/))
如果你想跟着完成练习,可以创建一个 Fluxo 账号,再使用自己的密钥。
read -r -s -p '粘贴个人 Fluxo 密钥:' OPENAI_API_KEY; printf '\n'; export OPENAI_API_KEY
export OPENAI_BASE_URL='https://api.fluxorelay.com/v1' — 这里的 /v1 是 OpenAI 兼容接口前缀,不是另一套服务地址。不要直接套用到 Claude Code 或 Gemini CLI。([fluxorelay.com](https://fluxorelay.com/keymap?lng=en))
第三步:准备环境和一条确定失败的测试
python3 -m venv .venv && source .venv/bin/activate && python -m pip install openai
SDK 支持从环境变量读取密钥和自定义接口地址;虚拟环境让这次练习不必修改系统 Python。([github.com](https://github.com/openai/openai-python))
printf '%s\n' '.venv/' '__pycache__/' '.env' > .gitignore
printf '%s\n' 'def normalize_name(value):' ' return value.strip()' > names.py
printf '%s\n' 'import unittest' 'from names import normalize_name' '' 'class NameTests(unittest.TestCase):' ' def test_collapses_whitespace(self):' ' self.assertEqual(normalize_name(" Ada Lovelace "), "Ada Lovelace")' ' def test_empty_input(self):' ' self.assertEqual(normalize_name(""), "")' > test_names.py
git add .gitignore names.py test_names.py && python -m unittest -v
预期是一条测试失败、一条通过。先暂存初始文件,是为了稍后用 git diff 单独查看修复。若结果不同,先检查文件内容,不要把环境问题交给模型猜。
第四步:只发送函数、测试和明确边界
下面的调用读取两个练习文件,不上传环境变量,也不给模型执行权限。模型标识使用 GPT-6 Astra 对应的接口字符串。([fluxorelay.com](https://fluxorelay.com/meter?lng=en))
python -c 'from pathlib import Path; from openai import OpenAI; context = "\n\n".join(p + "\n" + Path(p).read_text() for p in ["names.py", "test_names.py"]); r = OpenAI(timeout=60.0, max_retries=0).chat.completions.create(model="gpt-6-astra", messages=[{"role":"user","content":"请解释测试失败原因,并给出最小修复。只修改 names.py,不改测试,不添加依赖,不执行命令。\n" + context}]); print(r.choices[0].message.content); print(r.usage)'
这里显式关闭 SDK 自动重试,方便新人观察一次调用的结果;响应也打印用量。SDK 提供这些配置和响应字段。不要把模型输出直接接到 shell,更不要因为答案看着合理就跳过测试。([github.com](https://github.com/openai/openai-python))
第五步:在编辑器确认修复,再回终端验证
让新人先解释建议:为什么拆分再连接符合本次空白处理规则?确认后在编辑器修改函数。这个练习的最小修复也可以用下面的明确命令写入;它不是自动执行模型返回的文本。
printf '%s\n' 'def normalize_name(value):' ' return " ".join(value.split())' > names.py
python -m unittest -v && git diff --check && git diff -- names.py
- 新人需要逐行说明函数变化,并解释两个测试分别验证了哪一项验收条件。
- 审查者需要确认补丁没有修改测试,也没有顺手引入依赖或扩大任务范围。
- 双方需要确认发送给模型的内容经过授权,而且没有包含密钥或真实客户资料。
检查通过后执行 git add names.py,再执行 git diff --cached,检查完整的首次交付内容。把实际测试命令和结果写进评审说明,而不是只写“AI 已修复”。
第六步:交接用量记录与求助路径
第一次练习结束后,我会让新人记录所用模型、输入范围和实际用量。Fluxo 的按量方式无需月费,按真实 token 结算,缓存读取和写入也有各自计费项;不要只凭回答长度估算成本。([fluxorelay.com](https://fluxorelay.com/meter?lng=en))
如果使用邀请机制,也应透明说明:被邀请者付费后,邀请人可获得分成。它不应影响团队的模型选择或权限安排。
遇到接入或账单问题,可以登录后在联系页面留言;附上脱敏错误信息,不附密钥。([fluxorelay.com](https://fluxorelay.com/ask-a-human?lng=en))
最后执行 unset OPENAI_API_KEY,再执行 deactivate。第一次 onboarding 的完成标准不是“模型回答了”,而是新人能够独立重跑测试、解释补丁,并知道下一次该发送什么、不该发送什么。