玩转 AtomCode:我用 AtomCode 30 分钟撸出一个短链接服务 ShortLink
玩转 AtomCode我用 AtomCode 30 分钟撸出一个短链接服务 ShortLink投稿方向实战体验类 ——「我用 AtomCode 开发 XX 项目的真实记录」活动AtomCode「码动四季」系列征文 · 夏季主题「玩转 AtomCode」环境Ubuntu 22.04 参考机一台 AtomCode 5.0.0默认模型 AtomGit-deepseek-v4-flash一、写在前面为什么是 AtomCode最近 AtomCode 这款「开源 多模型 免费 Token」的全自动 AI 编码助手在圈子里热度很高。它和那些只能在编辑器里补全代码的工具有本质区别——AtomCode 是真正能自己动手的 Agent读取目录、写多文件、跑命令、做自测一条 prompt 下去一个项目就成型了。正好赶上「码动四季」夏季征文「玩转 AtomCode」我就拿手边一台 Ubuntu 22.04 参考机真实走一遍用 AtomCode 从零开发一个可运行项目的流程把每一步的命令、输出和踩坑都记下来给想上手的同学一个能直接复刻的样本。二、环境准备一台 Ubuntu 22.04 参考机我用的是一台公网可达的参考机Ubuntu 22.04.3 LTSAtomCode 已安装就绪。先确认版本与登录态$uname-aLinux lavm-xxxx5.15.0-60-generic#66-Ubuntu SMP ... x86_64 GNU/Linux$cat/etc/os-release|head-3PRETTY_NAMEUbuntu 22.04.3 LTSNAMEUbuntuVERSION_ID22.04$ atomcode--versionatomcode5.0.0(unknown)$ atomcode status Loggedinas: cpyaxjq(66612fcc2da91e28f2501347)Name: cpyaxjq Email: cpyaxjqnoreply.gitcode.com Auth file: /root/.atomcode/auth.tomlatomcode status显示已登录并领取了 CodingPlan 免费模型额度默认模型为AtomGit-deepseek-v4-flash上下文窗口 1,000,000足够吃下一个中小项目的全部上下文。安装与登录新机器 3 步如果你是自己准备机器只需三步即可拿到免费 Token# 1) 一键安装curl-fsSLhttps://atomgit.com/atomgit_atomcode/atomcode/releases/download/v4.22.2/install.sh|sh# 2) 登录并领取 CodingPlan 免费模型额度OAuth 一步到位atomcode login# 3) 查看状态atomcode status安装脚本会把二进制放到/usr/local/bin/atomcode配置文件落在~/.atomcode/。5.0.0 默认开启auto_update首次执行某些子命令时会原地升级无需手动干预。三、我要做什么ShortLink 短链接服务目标很明确——做一个生产可用的短链接服务而不是玩具 Demo。功能边界后端Python Flask SQLite零外部依赖、文件即库短码自动生成 6 位排除0/O/1/l/I易混淆字符支持自定义短码且查重重定向GET /code做 302 跳转并原子累加访问计数统计GET /api/stats全量按点击倒序GET /api/stats/code看单条与最近访问前端根路径一个内联 ECharts 的仪表盘能现场建短链、看 Top10 点击柱状图工程化requirements.txtREADME.mdthreadedTrue并发。架构一眼看清┌─────────────────────────────┐ 浏览器 / curl ─────▶ │ ShortLink 服务 │ │ Flask 0.0.0.0:5000 │ │ (threadedTrue, 并发安全) │ └───────┬───────────┬──────────┘ │ │ ┌───────────▼──┐ ┌─────▼─────────┐ │ app.py │ │ shortener.py │ │ 路由/渲染 │ │ 短码生成URL │ └───────┬──────┘ │ 校验 │ │ └───────────────┘ ┌───────▼──────┐ │ db.py │ │ SQLite(WAL) │◀── shortlink.db │ 建表/增删查 │ └──────────────┘四、实战一句 promptAtomCode 自动写完整个项目AtomCode 的精髓在headless无交互模式把需求写进一个 prompt 文件丢给它自己收尾。5.0.0 的推荐命令是# 在工程目录里后台拉起日志落盘避免占用终端/SSH 通道mkdir-p/root/shortlinkcd/root/shortlink setsid atomcode-C/root/shortlink\--prompt-file /root/atomcode_shortlink_prompt.md\-y--no-telemetry-v/tmp/atomcode_run.log21/dev/nullechoLAUNCHED_PID$!prompt 文件prompt_shortlink.md核心约束节选请在 /root/shortlink 从零创建「短链接服务 ShortLink」所有代码必须真实可运行不留 TODO。 - POST /api/shorten{url, custom_code?}校验 http(s) 开头自动生成 6 位短码排除 0/O/1/l/I 自定义短码查重返回 {code, short_url, url} - GET /code302 重定向并原子累加 clicks - GET /api/stats全量按点击倒序GET /api/stats/code单条 最近 10 次访问 - GET /内联 ECharts 的极简仪表盘Top10 柱状图 实时创建表单 - app.py 监听 0.0.0.0:5000 且 threadedTrue结构拆为 app.py / db.py / shortener.py - 完成后做 ast 语法自检并输出「项目已生成...」真实运行日志/tmp/atomcode_run.log已省略中间流式片段[engine] active (model deepseek-v4-flash) [headless] --dangerously-skip-permissions: all tool calls are auto-approved [warning] Running with Administrator privileges — model may have access to system files. [thinking] Project structure: - /root/shortlink/app.py - /root/shortlink/db.py - /root/shortlink/shortener.py - /root/shortlink/requirements.txt - /root/shortlink/README.md [thinking] Let me create all files now. [tool-streaming← → content: 创建 shortener.py - 短码生成与 URL 校验] ...生成 db.py / app.py / 自测 / ast 自检... [done] 107.9s tokens221.30K turns14 tool_calls20从拉起到收尾108 秒14 轮对话20 次工具调用生成 5 个文件并跑通自测。期间 AtomCode 自己规划了项目结构、逐文件写入、启动服务用 curl 验证、最后做ast.parse语法自检——这就是全自动的含义。五、项目结构与关键代码生成后的目录/root/shortlink ├── app.py # 入口 路由 仪表盘 HTML ├── db.py # SQLite 数据层WAL 并发 ├── shortener.py # 短码生成 URL 校验 ├── requirements.txt # flask3.0,4.0 ├── README.md └── shortlink.db # 首次启动自动生成几个值得一看的实现点。1) 短码生成shortener.py——排除易混淆字符ALLOWED_CHARS(string.digits[2:]# 2-9排除 0,1string.ascii_lowercase.replace(l,)# a-z 去掉 lstring.ascii_uppercase.replace(O,).replace(I,)# A-Z 去掉 O,I)defgenerate_short_code(length:intSHORT_CODE_LENGTH)-str:return.join(random.choices(ALLOWED_CHARS,klength))2) 并发安全的计数db.py——WAL 原子 UPDATEdef_get_connection()-sqlite3.Connection:connsqlite3.connect(DB_PATH)conn.row_factorysqlite3.Row conn.execute(PRAGMA journal_modeWAL)# 提高并发写入性能returnconndefclick_link(code:str)-None:nowtime.strftime(%Y-%m-%d %H:%M:%S)with_get_connection()asconn:conn.execute(UPDATE links SET clicks clicks 1, last_visit ? WHERE code ?,(now,code))conn.execute(INSERT INTO visit_logs (code, visited_at) VALUES (?, ?),(code,now))3) 路由app.py 节选——校验、查重、302app.route(/api/shorten,methods[POST])defapi_shorten():datarequest.get_json(silentTrue)ifnotdata:returnjsonify({error:请求体必须为 JSON}),400url(data.get(url)or).strip()ifnotis_valid_url(url):returnjsonify({error:URL 必须以 http:// 或 https:// 开头}),400custom_code(data.get(custom_code)or).strip()ifcustom_code:iflen(custom_code)!6ornotcustom_code.isalnum():returnjsonify({error:自定义短码须为 6 位字母数字}),400ifcode_exists(custom_code):returnjsonify({error:该短码已被占用请换一个}),409codecustom_codeelse:for_inrange(10):codegenerate_short_code()ifnotcode_exists(code):breakelse:returnjsonify({error:生成短码失败请稍后重试}),500insert_link(code,url)short_urlrequest.host_url.rstrip(/)/codereturnjsonify({code:code,short_url:short_url,url:url}),201六、真实运行在参考机上 curl 验收启动服务AtomCode 自测时其实已经起过一个并写入了种子数据端口 5000 仍在服务cd/root/shortlinkpython3 app.py# * Serving Flask app app Debug mode: off# 访问 http://参考机IP:5000下面是我在参考机上真实执行的 curl 与返回未做任何修饰① 创建短链自动生成短码HTTP 201$curl-s-XPOST http://127.0.0.1:5000/api/shorten\-HContent-Type: application/json\-d{url:https://www.bing.com/search?qatomcode}{code:ZsY9zD,short_url:http://127.0.0.1:5000/ZsY9zD,url:https://www.bing.com/search?qatomcode}② 非法 URLHTTP 400被拒$curl-s-w [HTTP %{http_code}]\n-XPOST http://127.0.0.1:5000/api/shorten\-HContent-Type: application/json-d{url:ftp://bad}{error:URL 必须以 http:// 或 https:// 开头}[HTTP400]③ 访问短码真正 302 跳转$curl-s-ihttp://127.0.0.1:5000/ZsY9zD|head-6HTTP/1.1302FOUND Server: Werkzeug/3.1.8 Python/3.10.12 Date: Sun,19Jul202606:54:01 GMT Content-Type: text/html;charsetutf-8 Content-Length:263Location: https://www.bing.com/search?qatomcode④ 自定义短码创建成功 vs 重复冲突$curl-s-w [HTTP %{http_code}]\n-XPOST http://127.0.0.1:5000/api/shorten\-HContent-Type: application/json-d{url:https://atomgit.com,custom_code:xsum26}{code:xsum26,short_url:http://127.0.0.1:5000/xsum26,url:https://atomgit.com}[HTTP201]$curl-s-w [HTTP %{http_code}]\n-XPOST http://127.0.0.1:5000/api/shorten\-HContent-Type: application/json-d{url:https://atomgit.com,custom_code:xsum26}{error:该短码已被占用请换一个}[HTTP409]⑤ 统计接口按点击倒序含最近访问$curl-shttp://127.0.0.1:5000/api/stats/ZsY9zD{clicks:1,code:ZsY9zD,created_at:2026-07-19 14:54:01,last_visit:2026-07-19 14:54:01,recent_visits:[2026-07-19 14:54:01],url:https://www.bing.com/search?qatomcode}$curl-s-o/dev/null-wdashboard HTTP %{http_code}, bytes%{size_download}\nhttp://127.0.0.1:5000/ dashboard HTTP200,bytes4984仪表盘首页返回 200、约 5KB 内联 HTML含 ECharts CDN 与创建表单打开即是能用的管理后台。七、踩坑记录重点省你一小时#现象根因 / 解决1老教程里的atomcode --prompt-file x -y --max-turns 30直接报unexpected argument5.0.0 已移除顶层--max-turns/--disable-tools改由模型自主收尾。现命令atomcode --prompt-file f -y --no-telemetry [-v]2headless 任务用普通后台跑SSH 命令迟迟不返回、像卡死后台进程仍持有终端通道。务必setsid ... log 21 /dev/null 与终端彻底脱离日志落盘后另开窗口tail观察3启动即[warning] Running with Administrator privileges参考机用 root 跑AtomCode 提示模型可能碰系统文件。生产建议建普通用户本次实测无碍4自定义短码长度想放开在 prompt 里把6 位、纯字母数字、查重写死AtomCode 正确实现并区分 201/4095atomcode upgrade/plugin list触发原地升级5.0.0auto_updatetrue执行相关子命令会自动升到最新版属正常行为额外提醒--provider/--model可临时切模型常驻默认在~/.atomcode/config.toml的default_provider。想长期换模型直接改这个文件即可。八、进阶玩法不止于写代码切换/指定模型atomcode --provider p --model m或在config.toml改default_provider支持 OpenAI 兼容协议的任意模型。项目指令.atomcode.md放在项目根目录类似CLAUDE.md/AGENTS.md可写本项目用 Flask、路由要短小、错误返回 JSON等约束每次会话自动注入。插件与技能atomcode plugin list查看/安装技能与命令插件会触发 auto_updateatomcode hooks配置生命周期钩子。WebUI / Daemonatomcode webui起本地浏览器界面参考机上跑在:13457atomcode daemon供 IDE 集成。二次开发AtomCode 本身开源官方仓库可源码编译定制自己的工具链与提示词。九、总结 怎么参加这次征文这次实操结论很直接AtomCode 不是补全工具而是能独立交付项目的编码 Agent。从一句中文 prompt 到 5 个文件 自测通过只花了 108 秒且代码质量并发 WAL、URL 校验、错误码、内联前端都达到了能上线的水准。对想快速验证想法、写完原型、或批量产出小工具的开发者它非常趁手。如果你想参加「码动四季」夏季征文「玩转 AtomCode」投稿方式在活动页面点击【发布文章】即可投稿内容要求原创、未一稿多投AI 辅助不超过全文 30%主题契合开源/实操技术文 ≥1200 字、短篇技巧 ≥600 字评选维度内容质量原创性/深度/结构 影响力阅读/点赞/收藏/评论 专业度实用/契合/创新节奏投稿后 3 个工作日审核 → 再 3 个工作日排期发表 → 季度末评选 → 一周内公布发奖年度总评在冬季截稿后一个月内。本文为作者真实操作记录命令与输出均来自 Ubuntu 22.04 AtomCode 5.0.0 实测。欢迎在 AtomGit 交流群一起交流玩法。—— 用 AtomCode 把想法变成能跑的服务就这么简单。

相关新闻

C++自动并行化与向量化优化:解锁多核CPU与SIMD性能

C++自动并行化与向量化优化:解锁多核CPU与SIMD性能

1. 项目概述:为什么我们需要自动并行与向量化?在C的世界里,性能是永恒的追求。无论是高频交易系统、游戏引擎、科学计算还是大规模数据处理,每一微秒的延迟都可能意味着巨大的成本或体验的折损。我们常常手动编写多线程代码&#…

2026/10/11 9:10:29 阅读更多 →
MyBatis-Plus核心组件BaseMapper与Wrapper实战指南

MyBatis-Plus核心组件BaseMapper与Wrapper实战指南

1. MyBatis-Plus核心价值与数据层设计理念作为MyBatis的增强工具,MyBatis-Plus在数据持久层领域带来了革命性的效率提升。我在多个企业级项目中实践发现,合理运用其特性可以使数据层代码量减少60%以上。BaseMapper和Wrapper这两个核心组件,正…

2026/10/12 10:25:03 阅读更多 →
SmolLM3:30亿参数小模型在多语言与边缘计算中的突破

SmolLM3:30亿参数小模型在多语言与边缘计算中的突破

1. SmolLM3项目概述SmolLM3是一款仅有30亿参数的小型语言模型,却在多语言处理、长文本推理和边缘计算场景中展现出惊人的性能。作为从业者,我最初看到这个参数规模时也持怀疑态度——毕竟当前主流大模型动辄百亿甚至千亿参数。但实测下来,它在…

2026/10/13 17:20:52 阅读更多 →

最新新闻

手把手拆解CoolWeather:Android新手必做的天气项目实战

手把手拆解CoolWeather:Android新手必做的天气项目实战

如果你学 Android 学到一定程度,整天对着 TextView、Button 打转,想找个完整项目练手,那 CoolWeather 这个名字多半听过。它是《第一行代码》里贯穿后半本的重头戏,一个联网的天气应用——启动之后先选城市,然后展示当…

2026/10/14 15:58:04 阅读更多 →
Android天气App实战:从CoolWeather项目掌握网络请求、JSON解析与工程分层

Android天气App实战:从CoolWeather项目掌握网络请求、JSON解析与工程分层

这本书的最后一章实战项目是一道分水岭:前面十几章都是小模块,照着敲完也就记得几个API,只有到天气应用这一步,你才会第一次面对“从零拼一个完整App”的真实压力。也正是从这个项目开始,很多人彻底分清了“会看代码”…

2026/10/14 15:58:04 阅读更多 →
MySQL性能排查第一课:SHOW FULL PROCESSLIST实战指南

MySQL性能排查第一课:SHOW FULL PROCESSLIST实战指南

当数据库告警电话在凌晨两点把你吵醒,监控面板上CPU曲线已经拉平,应用日志里开始蹦出“connection refused”,你手头最想看到的往往不是更多曲线图,而是当前这一刻MySQL里面到底在跑什么。我遇到这种情况,第一反应永远…

2026/10/14 15:58:04 阅读更多 →
element-react Pagination 分页组件:layout 布局、属性事件与源码实现全解析

element-react Pagination 分页组件:layout 布局、属性事件与源码实现全解析

前端UI组件设计系统 【免费下载链接】element-react Element UI 项目地址: https://gitcode.com/gh_mirrors/el/element-react 点击查看 免费下载 当数据量超出单页可承载范围时,分页是 React 管理后台与数据列表中几乎必用的交互模式。本文基于 elemen…

2026/10/14 15:58:04 阅读更多 →
微信小程序日期时间格式化工具封装与iOS NaN兼容方案

微信小程序日期时间格式化工具封装与iOS NaN兼容方案

微信小程序开发中,日期时间格式化几乎是每个项目逃不开的环节。不管是列表页展示“刚刚 / 5分钟前”,还是订单详情需要“2024-05-20 14:30:00”这种标准格式,都得跟日期字符串打交道。我在实际开发中发现,很多初学者直接拿原生Dat…

2026/10/14 15:58:04 阅读更多 →
MySQL索引失效真相与B+树底层原理实战

MySQL索引失效真相与B+树底层原理实战

1. 这不是背题清单,而是索引原理的实战解剖台“MySQL索引相关面试题”——看到这九个字,很多人的第一反应是翻面经、刷八股、默写B树结构图。但我在带过二十多届后端实习生、参与过三十多个中大型系统数据库方案评审后发现:真正卡住工程师的&…

2026/10/14 15:57:02 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →