让 AI 写测试、通宵 Debug、帮回老板消息——这些事不少开发者已经在干了,只是不好意思公开说。开源中国最近发起了「AI 提效小机灵鬼」征集活动,说白了就是:把你用 AI 偷懒的骚操作拿出来晒,让全网程序员看看什么叫"聪明的懒惰"。
但抛开活动本身,真正值得聊的是:哪些 AI 提效套路是可复制的?哪些只是看起来酷但实际鸡肋?下面分享几个我实测能省时间的场景,附带可以直接跑的代码。
自动生成单元测试:最稳的提效起点
写测试是公认最枯燥的环节之一。用 LLM 从函数签名和 docstring 批量生成测试用例,是目前性价比最高的 AI 提效方式——因为测试代码容错率高,即使生成结果有瑕疵,跑一遍就能筛掉错误用例,不像业务逻辑那样容不得半点偏差。
下面是一个最小可跑的脚本,读取 Python 源文件中的函数定义,调用 OpenAI 兼容接口生成对应的 pytest 测试:
#!/usr/bin/env python3
"""从 Python 源码自动生成 pytest 测试用例"""
import ast
import os
import sys
from openai import OpenAI
# ---- 配置区:按你的环境修改 ----
API_KEY = os.getenv("OPENAI_API_KEY", "sk-xxx")
BASE_URL = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
MODEL = os.getenv("AI_MODEL", "gpt-4o-mini")
# ---- 配置区结束 ----
client = OpenAI(api_key=API_KEY, base_url=BASE_URL)
def extract_functions(source_path: str) -> list[dict]:
"""解析源文件,提取函数名、参数、docstring"""
with open(source_path) as f:
tree = ast.parse(f.read())
funcs = []
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
args = [a.arg for a in node.args.args]
doc = ast.get_docstring(node) or ""
funcs.append({"name": node.name, "args": args, "docstring": doc})
return funcs
def generate_tests(source_path: str, funcs: list[dict]) -> str:
"""调用 LLM 为提取到的函数生成 pytest 测试"""
source_code = open(source_path).read()
func_descriptions = "\n".join(
f"- `{f['name']}({', '.join(f['args'])})`: {f['docstring']}" for f in funcs
)
prompt = (
f"你是测试工程师。根据以下 Python 源码和函数列表,生成完整的 pytest 测试文件。\n"
f"要求:覆盖正常路径和边界情况;每个函数至少 2 个测试;"
f"只输出代码,不要解释。\n\n"
f"源码:\n```python\n{source_code}\n```\n\n"
f"函数列表:\n{func_descriptions}"
)
resp = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=0.3,
)
text = resp.choices[0].message.content
# 剥掉 markdown 代码块包裹
if text.startswith("```"):
text = text.split("\n", 1)[1].rsplit("```", 1)[0]
return text
def main():
if len(sys.argv) < 2:
print("用法: python gen_tests.py <源文件路径>")
sys.exit(1)
src = sys.argv[1]
funcs = extract_functions(src)
if not funcs:
print("未找到函数定义,跳过")
return
test_code = generate_tests(src, funcs)
out_path = os.path.splitext(src)[0] + "_test.py"
with open(out_path, "w") as f:
f.write(test_code)
print(f"测试已写入 {out_path},共 {len(funcs)} 个函数")
print("下一步: pytest " + out_path + " # 跑一遍,删掉失败的用例")
if __name__ == "__main__":
main()
运行方式:
# 安装依赖
pip install openai
# 设置 API(支持任何 OpenAI 兼容接口,比如 DeepSeek、本地 Ollama)
export OPENAI_API_KEY="你的key"
export OPENAI_BASE_URL="https://api.deepseek.com/v1" # 换成你用的服务
export AI_MODEL="deepseek-chat"
# 对任意 Python 文件生成测试
python gen_tests.py my_module.py
关键思路:生成后必须跑一遍 pytest,删掉失败用例、补全遗漏边界。AI 生成测试的价值不在"一次完美",而在"省掉 80% 的打字量",剩下的 20% 你手动修比从头写快得多。
Git Commit Message 自动撰写
另一个低风险、高收益的场景:让 AI 根据 diff 写 commit message。没人喜欢写 commit message,但好的 commit message 又确实有用。这个场景容错率也高——写不好顶多不优雅,不会搞坏代码。
#!/usr/bin/env bash
# ai_commit.sh — 用 AI 生成 git commit message
# 依赖: git, curl, jq
# ---- 配置区 ----
API_KEY="${OPENAI_API_KEY:-sk-xxx}"
BASE_URL="${OPENAI_BASE_URL:-https://api.openai.com/v1}"
MODEL="${AI_MODEL:-gpt-4o-mini}"
# ---- 配置区结束 ----
DIFF=$(git diff --cached --stat && echo "---详细diff---" && git diff --cached)
PROMPT="根据以下 git diff 生成一条简洁的中文 commit message,格式: <类型>: <描述>。类型用 feat/fix/refactor/docs/chore。只输出一行,不要解释。
${DIFF}"
RESPONSE=$(curl -s "${BASE_URL}/chat/completions" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg model "$MODEL" \
--arg prompt "$PROMPT" \
'{model: $model, messages: [{role: "user", content: $prompt}], temperature: 0.2}' \
)" \
)
MSG=$(echo "$RESPONSE" | jq -r '.choices[0].message.content' | sed 's/^"//;s/"$//')
echo "建议 commit message:"
echo " $MSG"
echo ""
read -p "采用此 message? [Y/n/e(手动编辑)] " ACTION
case "$ACTION" in
n) echo "跳过"; exit 1 ;;
e) read -p "输入你的 message: " CUSTOM; git commit -m "$CUSTOM" ;;
*) git commit -m "$MSG" ;;
esac
用法:
git add your_files
bash ai_commit.sh
这个小脚本把 staged diff 喂给 LLM,拿到一条格式化的 commit message,再让你确认或修改。比每次手写 feat: 添加用户登录页面 省心不少。
哪些场景别碰 AI
说完了能用的,也得说边界:
- 业务逻辑核心代码:AI 生成的业务代码跑起来可能没问题,但隐藏的逻辑漏洞(比如权限判断漏了边界)很难通过简单测试发现。这类代码写错了代价太高,AI 只适合给灵感,不适合直接上。
- 数据库 schema 变更:一条 ALTER TABLE 写错可能导致数据丢失,AI 生成后必须逐字人工审查,反而比自己写更慢。
- 安全相关配置:CORS 规则、鉴权中间件、TLS 配置——AI 可能给你一个"能跑但不安全"的方案,这种坑最危险。
简单判断原则:出错后果越严重的代码,AI 参与比例越低。测试和文档出错代价小,放心用;核心逻辑出错代价大,谨慎用。
把你的骚操作晒出来
回到开头说的活动——开源中国这个「AI 提效小机灵鬼」征集,本质上就是让开发者把各自私藏的 AI 偷懒技巧公开化。你如果有类似的套路(比如用 AI 批量翻译文档、自动写 CRUD 接口、生成 Kubernetes Helm chart),提交上去既能让别人少走弯路,还有京东卡奖励。
几个提交建议:
- 写清楚工具链:用了哪个模型、什么 prompt 策略、哪个 API 参数调了——这些才是别人能复制的部分。
- 附上可跑的代码:一个 20 行的脚本比 2000 字描述有用得多。
- 标注风险:你的套路在什么场景下会翻车,提前说清楚,比事后被人骂靠谱。
"聪明的懒惰"不是什么都不做,而是把重复劳动丢给机器,把精力留给真正需要人判断的部分。上面两个脚本你可以直接拿去改造——换模型、换 prompt、加到 CI 流程里,都行。跑通了之后,不妨去活动页面提交一下,让更多人少写几行无聊的代码。