name: AI coding class: center, middle ## AI 与软件开发之浅见 #### AI (极)简史、开发提效与开发者的未来 Some demo for fun can be found at http://10.10.50.50/aaron/ai-work Updates of this topic will go to http://ashang.org/share/ai-dev.html --- ### 认知 refresh - AI 不再只做短期问答,而是发展出“长期计划 + 任务推进 + 多轮协作”能力 - 长期记忆与状态管理: AI 不再缺少记忆 - 提示词工程不再那么重要, AI 已经进化到更少的指导 - 当然烂问题除外 - 键盘将会几乎消失,语音就可以了 - 只对失语者必须 - Cool 公司吸引开发者的不再是最好的机械键盘,而是最好的麦克风 - 最好的开发语言?不是 Go / Rust / C / C++ / Python / PHP - 而是 ENGLISH - 或者,很快,母语 - 将 `99.99%` = 英语 - 大概率你母语输出更好吧 - World Models (世界模型)? - 世界模型旨在让AI系统对空间和时间有持续的把握 - Gemini 已发布雏形 --- ### AI, from Chat Bot to Agents Paradigm - 交互 - 你问,它答 -> 你给目标,它拆解步骤并执行 - 连接 - 封闭系统,难以读取私有数据 -> 通过 MCP 协议连接一切 API 和本地工具 - 标准 - 碎片化,每个 Agent 单独配置 -> 依靠 agents.md 等标准实现通用化配置 --- ### Agent Skills - 轻量级、按需加载的方法,旨在保留上下文并改善响应时间 - 结构化封装的智能体能力,比如“代码审查”、“自动化报告生成” - Skills 与 MCP 结合,能让 agent 重复使用技能并可被不同模型调用 - 代表 agent 精细化任务分解的下一步,使智能体更模块化 - 特别适合需要高效、上下文感知任务执行的场景 --- ### 这几个月 AI 的飞速进展 - 大模型新版本、智能体、协议/标准、生态 - 比起 AI,没有哪个事物更确切适用“**日新月异**”这个成语来形容 - SOTA (state-of-the-art,榜一大哥) 模型/智能体能力评测 - 每~~周~~日更迭 - Google Gemini 3, pro, flash - 1M context,多模态原生,极低延迟,移动端执行复杂任务,经济/快 - Anthropic Claude Opus 4.5/4.6 - 1M context, 解决上下文腐烂,Coding SOTA - OpenAI GPT-5.2/5.3 Codex - GLM-5, 744B - 长链路任务时表现极佳 - DeepSeek V3.2 / V4 - Kimi K2/2.5 - Minimax M2 --- ### At the time being, Dec 2025 | 任务类型 | 领先模型 | | ---------- | --------------------- | | 推理 & 数学 | GPT-5.2 / GPT-5.3 | | 代码生成 & 自动化 | Claude Opus(4.6) | | 超长上下文处理 | Gemini 系列 | | 开源性价比 | GLM 系列 / Kimi K2.5 | | 实时 speed | Grok / Devstral Small | - Source: ([Reddit][1]) [1]: https://www.reddit.com/r/jenova_ai/comments/1pzcdkn/compare_ai_models_and_agents_in_2025_gpt52_claude --- ### 连接/接口协议标准化 - Linux Foundation 下成立 Agentic AI Foundation - AAIF - LF AAIF 初创三剑客: MCP + AGENTS.md + Goose - MCP - Model Context Protocol - 模型连接协议 - Anthropic 捐赠 - 智能体与外部工具、数据库、API 的整合规范协议 - 解决不同供应商之间互操作性;降低开发 agent 化 AI 的集成复杂度 - AGENTS.md - OpenAI 捐赠 - 定义工程中智能体的行为、技能及执行逻辑,方便共享标准 agent 模板。 - Goose - Block 捐赠 - MCP 的原生标杆 - Agent 平台,与任意模型结合,真实执行命令,本地独立完成任务循环 - 自主思考需求拆解成步骤,自动阅读报错信息,修改代码,直到测试通过 - 动态能力:在会话中途增加一个技能扩展,不需要重启或重新配置 --- ### Try, or refer to - https://claude.ai/ - https://manus.im/ - https://z.ai/ - https://kimi.com/ - https://agent.minimax.io/ - https://modelcontextprotocol.io/ - https://block.github.io/goose/ - https://agents.md/ - https://aaif.io/ --- ### 待续 Sorry 先停一下 --- 今天真写不动了 保证不烂尾 。。。 一周不更新完的话,就在这里立一个:下面没有了 控制在80 pages以内 --- ### Why AI - AI 不再是研究部门/算法团队的专属 - 已经直接进入开发工作流 - 问题不再是 “要不要用 AI”,而是 ”怎么用” - 代码、文档、调试、设计都在被影响 --- ### Topics - AI 简史 - AI 如何提升效率 - 对开发者的影响 --- ### AI 简史 - 诞生:1943 - 1956 - 信息论,控制论与早期神经网络 - 符号推理 - 图灵测试 - 1956年达特茅斯会议:AI的诞生 - 第一波浪潮 - 黄金年代:1956 - 1974 - 自然语言 - 乐观思潮 - 第一次AI低谷:1974 - 1980 - 第二波浪潮 - 繁荣:1980—1987 - 专家系统 知识革命 - 第二次AI低谷:1987—1993 - 第三波浪潮 - 大数据与机器学习:1993—2019 - 智能代理 - 深度学习,大数据和通用人工智能:2011至2019 - 第四波浪潮 - 强化学习与大型语言模型: 2020至今 --- ### 强化学习与大型语言模型 - https://zh.wikipedia.org/wiki/Attention_Is_All_You_Need - 2017 - Transformer 大模型 - https://en.wikipedia.org/wiki/Artificial_intelligence - https://en.wikipedia.org/wiki/History_of_artificial_intelligence - https://en.wikipedia.org/wiki/Outline_of_artificial_intelligence - https://en.wikipedia.org/wiki/Pattern_recognition --- ### AGI now? or WHEN? - https://en.wikipedia.org/wiki/AI_effect --- ### 模型到“AI 产品” - 模型 ≠ 产品 - AI 嵌入工具链,而不是单独存在 - 真正改变的是: - Chat bot - 交互模式 - SO - copy & paste - API即服务(OpenAI / Anthropic / DeepSeek / Qwen) - IDE 深度集成 Copilot / Cursor / Code Agent --- ### 模型 - How to choose --- ## Benchmarking - Massive Multitask Language Understanding (MMLU) - HLE, Humanity's Last Exam - https://lastexam.ai/ - https://huggingface.co/datasets/cais/hle - https://github.com/centerforaisafety/hle >Hummingbirds within Apodiformes uniquely have a bilaterally paired oval bone, a sesamoid embedded in >the caudolateral portion of the expanded, cruciate aponeurosis of insertion of m. depressor caudae. > How many paired tendons are supported by this sesamoid bone? Answer with a number. > 蜂鸟属于雨燕目,其独特的特征是两侧成对的卵圆形骨,即籽骨,它嵌入在尾部下压肌附着点扩张的十字形腱膜的尾外侧部分。这块籽骨支撑着多少对肌腱?请用数字回答。 - https://chatgpt.com/c/695c7413-8ab4-8321-ac45-191063b735ad - https://gemini.google.com/u/1/app/c9bf8264a9f242da --- ## Benchmarking - https://github.com/SWE-bench/SWE-bench - https://en.wikipedia.org/wiki/Language_model_benchmark - https://lmarena.ai/ - https://lmarena.ai/leaderboard/webdev --- ## Models - https://huggingface.co/models - https://github.com/QwenLM/Qwen3-Omni - https://ai.google.dev/gemma/docs/core - https://huggingface.co/models?search=google/gemma - https://deepmind.google/models/gemma/ - https://www.kaggle.com/models?query=gemma - https://github.com/meta-llama/llama-models --- ### Non-Open Models - OpenAI - GPT-4.1 / GPT-4o / GPT-4o-mini/ o1 ... - Anthropic - Claude Haiku / Sonnet / Opus - https://console.anthropic.com/ - https://claude.ai/ - Google - Gemini Pro / Flash --- ### Open Models - Meta - Llama 3.x /4.x - Google - gemma - DeepSeek - Qwen - Kimi K2 - Minimax M2 - https://agent.minimax.io/ --- ## Agentic - Agent Skill >Less structure, > >more intelligence. - https://cline.bot/ - https://roocode.com/ - https://kilo.ai/ --- ## IDE - https://cursor.com/changelog - https://cursor.com/2025 --- ## CLI - Gemini CLI - lots of forks - Qwen Qoder CLI - Claude code - aider - https://cursor.com/docs/cli/headless - https://cursor.com/docs/cli/overview --- ## App - https://linear.app/ - https://jazz.tools/ --- ## Code review - https://www.qodo.ai/ - /compliance for comprehensive compliance checks for security, ticket requirements, and custom organizational rules - /improve to scan code changes and provide meaningful feedback to improve PR code - /describe to automatically generate a PR description, diagram walkthrough, and summary - /create-ticket to generate a ticket in your integrated ticket tracking system (Jira, Linear, monday.dev) ### Tickets / Issues / Bugs / Features - https://monday.com/w/dev --- ### AI 的能力边界 - 能做什么 - 代码生成 / 重构 / 注释 - 文档理解 - Pattern matching(模式复用) - 不能做什么 - 对真实业务负责 - 理解隐含上下文 - 替你判断“是否该这么做” - AI 是放大器,不是替代品 --- ### AI 示例 - RFC - 篇幅长 - 文字密集 - 行为分散在多个章节 - 实现难点: - 状态机复杂 - Corner case 多 - 不同厂商实现差异大 - Debug 困难: - 抓包 → 人工分析 - 状态与报文难以对应 --- ### 高价值场景 - 样板代码生成 - Boilerplate / Scaffolding - CRUD、YANG /JSON /API schema - Config → internal struct 映射 - 配置校验逻辑:冲突规则 - 默认值策略 - 代码解释与快速上手 - 读老代码、读陌生语言 - 重构与迁移 - 同步/异步 - Python → Go / Rust - Debug 辅助 - 日志分析 - 错误模式识别 - 可能原因枚举 - 文档 - 设计说明、注释 - 文档生成、更新 --- ### 范式改变 - 过去: - 查文档 → StackOverflow → 试错 - 现在: - 对话式理解 - 即时上下文反馈 - 新技术的冷启动成本显著下降 --- ## 工程工具链/ 开发流演进 - IDE:Copilot / Cursor - 即时解释 - CLI:AI 辅助生成 - CI/CD: - 生成测试 - 分析失败原因 - Code Review: - 辅助 reviewer --- ## 潜在风险 - 代码能跑 ≠ 代码正确 - AI 垃圾 - 效率陷阱:AI 不是“免费午餐” - 直接 copy 不理解 - 代码“看起来对” - 长期依赖导致基础能力退化 - 依赖过度导致: - 理解能力下降 - Debug 能力退化 --- ### 技术债不可见,但在积累 - AI 写的、但没有被工程化吸收的代码 - 代码可运行 - CI 通过 - 测试覆盖看起来正常 - MR 中必须回答: - “我们为什么在当时做了这个技术/架构决策” - 为什么这样设计? - 替代方案是什么?- 为什么不用它们? - 鼓励工程判断而非盲目速度 - AI 是 工具革命/思维革命/范式革命 - 真正决定你价值的不是“会不会用 AI” - 而是是否理解你在构建什么系统 --- ## 正确姿势 - 永远要求: - Explain why - 给出替代方案 - 所有关键逻辑: - AI 负责生成 - 永远由工程师最终 review & 决策 --- ## AI 不会“淘汰程序员”,但会重排价值 - 被压缩的: - 纯语法型工作 - 重复型实现 - 被放大的: - 架构设计 - 系统理解 - 性能/可靠性/安全 - 复杂业务建模 - Debug 与问题定位 --- ## 开发者 - 价值迁移方向 - 写代码 → 定义问题 - 实现功能 → 设计系统 - 记 API → 组合能力 - 单点技能 → 工程判断 - 未来开发者的分化趋势 - AI 放大型工程师(强) - AI 依赖型执行者(风险) - 拒绝 AI 的传统开发者(远远抛下!) - 应对: 个人强化 - 基础 CS/ 系统设计/ 思考 - Prompting(结构化提问) - Review AI 输出 - AI 辅助而非替代 Code Review --- ### 组织应对 - 建立 AI 使用规范 - 防止“影子代码” - 已经在运行或影响行为,但没有被团队真正理解、拥有、维护的代码。 - AI 生成 → 看起来对 → 能跑 → 合并 → 上线 - AI 重构了某个模块 - 改动范围看起来很小 - 但:行为边界悄然变化 / 假设发生漂移 - Debug 从“分析系统”退化成“碰运气” - 没人知道怎么修,但设计意图不清,错误路径不透明 - 只能反复“再生成一版” --- ## MoE 每个Expert(专家)网络负责处理特定类型的输入或任务,例如语言理解、逻辑推理、数学计算等。模型根据输入动态选择最合适的Expert组合,提高效率和准确性。 通过Gating Network(门控网络)动态选择和组合Expert,实现资源的高效利用,避免所有专家同时运行。 通过增加Expert数量来扩展模型能力,而不必重新训练整个模型。 单个Expert失效不会导致整个系统崩溃,其他Expert可以接管或补偿。 用户无需关心后台如何选择Expert,只需享受更快、更准确的响应。 提示词引导 用户可以通过精心设计的提示词(Prompt Engineering),引导模型激活更相关的Expert。例如,明确提到“请用数学专家回答”这个问题,可能会影响门控网络的选择(但并非直接控制)。 定制化MoE模型 在特定应用场景下,开发者可以通过微调或设计特定的门控逻辑,让模型倾向于选择某些Expert,但这需要模型训练阶段的干预,用户无法实时控制。 你是什么角色 --- ## Pre-training --- ## Fine Tuning SFT --- ### IDE - 语法高亮, Syntax highlighting - 自动缩进, Folding - 自动完成 - 自动补全 - Refactoring - AI --- ### Related topics --- ### Q&A --- ### --- ### References - https://platform.moonshot.cn/docs/guide/start-using-kimi-api - https://herbsutter.com/ - https://en.wikipedia.org/wiki/The_Elements_of_Programming_Style - https://clang-analyzer.llvm.org/ - https://clang.llvm.org/extra/clang-tidy/ - https://youtu.be/QrrH2lcl9ew?t=474 - https://survey.stackoverflow.co/2024/technology#admired-and-desired - https://survey.stackoverflow.co/2023/#technology - https://www.techug.com/post/97-things-every-programmer-should-know/ - https://www.tiobe.com/tiobe-index/ - https://cplusplus.com/reference/ - https://cplusplus.com/reference/stl/ - https://cplusplus.com/doc/tutorial/ --- ### In Search Of Excellence > Your employer can’t force you to be a good programmer; > a lot of times your employer isn’t even in a position to judge whether you’re good. > If you want to be great, you’re responsible for making yourself great. --- ### Questions ❤️ --- ### Refactoring - 不改变代码的外部行为情况下而修改源代码 - 轮流增加新的测试和功能 - 增进代码间的清晰性和一致性 - 自动化的单元测试保证了重构后的代码仍然能够正常运作。 - 重构既不修正错误,也不增加新的功能 - 目的是用于提高代码的可读性或者改变代码内部结构与设计或者删除死码,使其在将来更容易进行维护和开发。 - 重构可以存在于结构层面或是语意层面,但前提是不影响代码在转换前后的功能 - 在重构中最关键的是去有意地“清理”代码,把不同的功能分开,然后对重构后的代码进行测试(任何对代码的编辑都有可能引发错误)。 - 新的实现方法需要切合实际地改善现有设计,并且不改变原软件的功能或行为。 --- ### Refactoring - 案例 - 现有的逻辑结构下难以加入新的功能,因此对代码进行重构,以便后续开发。 - 修改变量的名称使其具有更明确的含义 - 例如从单个字母的`i`重构为`interestRate` - 把一段if区块中的代码变为一个子程序。 - 更复杂一点的重构是用多态性来替换if 条件式。 - 进一步还可重新设计程序的算法,例如重新设计数据结构。 --- ### Refactoring scenarios - 封装成员变量(Encapsulate Field) - 将仅限于本类使用的变量重写成私有(private)成员变量,并提供访问方法(accessor method)。这种重构方式可以将与外部调用者无关的变量隐藏起来,减少代码的耦合性,并减少意外出错的概率。 - 提取方法(Extract Method) - 将大段代码中的一部分提取后,构成一个新方法。这种重构可以使整段程序的结构变得更清晰,从而增加可读性。这也对函数(Function)通用。 - 类一般化(Generalize Type) - 将多个类/函数共享的类型抽象出可以公用的基类(base class),然后利用多态性追加每个类/函数需要的特殊函数。这种重构可以让结构更加清晰,同时可以增加代码的可维护性。 - 函数归父(Pull Up)—或译函数上移,指的是方法从子类移动到父类。 - 函数归子(Push Down)—或译函数下移,指的是方法从父类移动到子类。 - 方法更名(Rename Method)—将方法名称以更好的表达它的用途。 --- ### Refactoring ```cpp class SomeClass { public: int memberA; //... }; ``` ```c++ class SomeClass { private: int memberA; public: int getMemberA(); void setMemberA(int a); //... }; ``` --- --- ### Questions ❤. ❤️ ---