AI时代软件开发方法第七周笔记:从预训练到逆向工程,一堂课逛完AI开发全链路
写在前面 :这是我在"软件开发方法"第七周课堂上的随手笔记,回来后花了一个周末扩展整理成这篇博客。课堂内容从XML/HTML一路讲到预训练、微调、逆向工程、Agentic RL,横跨了AI软件开发的整条链路。我尽量用大白话写,争取让你笑着读完还能学到东西。如果觉得有帮助,点个赞收个藏,咱们一起在AI时代打怪升级!
一、开篇:一堂课逛完AI开发全链路
说实话,上这堂课之前,我对"软件开发方法"这门课的期待就是------讲讲设计模式、聊聊敏捷开发、背背SOLID原则,然后考试写个工厂模式完事。
结果第七周这堂课直接给我整懵了。
老师从XML/HTML的语法兼容讲起,一路横扫Session/Cookie、RAG知识库、MCP协议、Dify工作流、预训练、有监督微调、LoRA、知识蒸馏、逆向工程、Agentic RL、奖励函数设计......
这哪是软件开发方法课啊,这是AI开发全链路速通班!
但仔细一想,还真是这么回事。2024年了,软件开发的"方法"早就不是写个CRUD、配个Spring Boot那么简单了。现在的软件开发,你得懂怎么让AI帮你写代码、怎么微调一个专属模型、怎么搭一个RAG系统、怎么用Dify拖拖拽拽搞个工作流出来。
所以这堂课的内容,恰恰是当下软件开发最前沿的"方法"。
我按照课堂讲的顺序,把每个知识点都扩展了一下,加了很多自己的理解和例子。有些地方我可能理解得不太对,欢迎大佬们在评论区指正。
准备好了吗?咱们开始!
二、XML vs HTML:标记语言的前世今生
2.1 课堂笔记原文
XML和HTML的语法兼容;嵌套使用这个范围的大小。XML比HTML的灵活性和结构化的表达要优越。
2.2 大白话解读
先说一个最基本的:XML和HTML到底啥关系?
打个比方:HTML像是预制板房 ------墙是墙、门是门、窗是窗,标签都是规定好的(<html>、<head>、<body>、<div>),你只能在这些标签里填内容。你不能自己发明一个<沙发>标签。
XML像是乐高积木 ------标签你自己定义!你想叫<学生>就叫<学生>,想叫<订单>就叫<订单>,想叫<出门带伞>也可以(虽然不太规范)。
xml
<!-- XML:你自己定义标签 -->
<课堂笔记>
<日期>2024-10-14</日期>
<主题>软件开发方法</主题>
<知识点 importance="高">预训练</知识点>
<知识点 importance="中">逆向工程</知识点>
</课堂笔记>
html
<!-- HTML:标签是固定的 -->
<div class="note">
<h2>课堂笔记</h2>
<p>日期:2024-10-14</p>
<p>主题:软件开发方法</p>
</div>
2.3 语法兼容是什么意思?
老师说"XML和HTML的语法兼容",意思是它们的基本语法规则是一样的:
- 都用尖括号 :
<标签>内容</标签> - 都支持嵌套:标签里面可以套标签
- 都有属性 :
<标签 属性="值"> - 都需要闭合 :有开始标签就要有结束标签(或者自闭合
<标签/>)
这不难理解------因为HTML的早期版本(HTML 4之前)本来就是基于XML(更准确地说是SGML)的子集。到了HTML5,虽然不再严格基于XML了,但语法习惯保留了下来。
2.4 为什么说XML更灵活、结构化更好?
灵活性:XML的标签是你自己定义的,所以它可以描述任何结构化的数据。配置文件、数据交换、接口协议......XML都能干。
xml
<!-- XML可以描述任何东西 -->
<订单 id="20241014001">
<买家>
<姓名>张三</姓名>
<电话>13800138000</电话>
</买家>
<商品>
<名称>AI开发入门书</名称>
<数量>1</数量>
<价格>99.9</价格>
</商品>
</订单>
结构化表达:XML的树状嵌套结构天然适合表达"包含关系"和"层次关系"。你看上面的例子,订单包含买家和商品,买家包含姓名和电话------层次一目了然。
HTML虽然也能嵌套,但它的标签语义是固定的(<div>就是个容器,<p>就是个段落),不能精确表达数据的结构含义。
2.5 现实中的选择
| 场景 | 用XML | 用HTML |
|---|---|---|
| 数据交换/接口 | ✅ SOAP、SVG | ❌ |
| 配置文件 | ✅ Spring、Maven | ❌ |
| 网页展示 | ❌ | ✅ 浏览器只认HTML |
| API响应 | ✅ 但JSON更流行 | ❌ |
说实话,现在XML在数据交换领域已经被JSON干翻了(JSON更轻量、更好解析)。但在某些领域(比如SVG矢量图、Office文档格式、Spring配置)XML依然是王者。
一句话总结:HTML是给人看网页的,XML是给机器看数据的。语法相似,但XML更自由、更结构化。
三、Session与Cookie:Web开发的"记忆系统"
3.1 课堂笔记原文
Session state ------token令牌;cookie记忆功能。记录地址加端口进行强绑定,这样可以和浏览器建立长时间的会话不会断掉。
3.2 为什么需要"记忆"?
HTTP协议有个"致命缺陷"------它是无状态的。
啥意思?就是你每次请求一个网页,服务器都把你当成陌生人。你上一秒刚登录了,下一秒刷新页面,服务器就问你"你谁啊?"
这显然不行。你网购的时候,加了个商品到购物车,翻个页面购物车还在------这就需要"记忆"。
Session和Cookie就是Web开发的两大记忆系统。
3.3 Cookie:浏览器端的"小纸条"
Cookie是服务器给你的浏览器塞的一张"小纸条"。以后你每次请求,浏览器都把这张纸条带上,服务器一看就知道你是谁了。
第一次请求:
浏览器 → 服务器:你好,我要登录
服务器 → 浏览器:好的,你是用户007,这张纸条(Set-Cookie: user=007)收好
第二次请求:
浏览器 → 服务器:你好(带上纸条 user=007)
服务器:哦,是007啊,欢迎回来!
Cookie的特点:
- 存在浏览器端(客户端)
- 每次请求自动带上
- 有过期时间
- 有大小限制(一般4KB)
3.4 Session:服务器端的"登记簿"
Session是服务器端的记忆。服务器给每个用户分配一个"房间"(Session对象),里面存着你的信息。然后给你一个"房卡"(Session ID),你每次拿着房卡来,服务器就带你进对应的房间。
用户登录 → 服务器创建Session(房间号=abc123)
→ 服务器把房卡发给浏览器:Set-Cookie: JSESSIONID=abc123
用户下次请求 → 浏览器带上房卡 abc123
→ 服务器查登记簿:abc123 → 哦是张三
3.5 Token:不用服务器的"身份证"
Token是更现代的方案。服务器不需要存Session了------它把你的信息加密成一个Token发给你,你自己保管。下次你带Token来,服务器解密就知道你是谁。
JWT(JSON Web Token)是最常见的Token方案:
eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoi5byg5LiJIn0.sflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|_______ Header _______||______ Payload _______||________ Signature ________|
算法信息 用户信息 防篡改签名
3.6 三者对比
| Cookie | Session | Token | |
|---|---|---|---|
| 存储位置 | 浏览器 | 服务器 | 客户端(自带信息) |
| 服务器压力 | 小 | 大(要存每个用户) | 小 |
| 跨域支持 | 差 | 差 | 好 |
| 安全性 | 一般 | 较好 | 好(加密签名) |
| 适用场景 | 简单状态 | 传统Web | 前后端分离/移动端 |
3.7 "地址加端口强绑定"
老师说的"记录地址加端口进行强绑定",指的是长连接(Keep-Alive)。
默认情况下,HTTP每次请求完就断开连接。但如果是长连接模式,服务器和浏览器保持TCP连接不断开(绑定IP+端口),后续请求复用这个连接,省去了反复握手的开销。
这在WebSocket、流式响应(比如AI逐字返回回答)的场景特别重要------你不想每输出一个字就重新连一次吧?
一句话总结:Cookie是浏览器的小纸条,Session是服务器的登记簿,Token是自带的加密身份证。现代开发多用Token。
四、RAG + Streamlit:给AI装上知识库和漂亮界面
4.1 课堂笔记原文
不只是某一个技术的简单运用,有RAG回答知识库,Streamlit的页面框和上下文的加载。
4.2 RAG是什么?
RAG = Retrieval-Augmented Generation = 检索增强生成
问题背景:大语言模型(如GPT-4)虽然很强,但它有两个硬伤:
- 知识截止:训练完就不更新了,不知道最新的事
- 容易胡说八道:问它不知道的事,它会编一个看起来很像真的答案(幻觉)
RAG的解法:先从你的知识库里检索相关内容,然后把检索到的内容+你的问题一起喂给大模型,让它"看着资料回答"。
用户提问:"公司报销流程是什么?"
↓
① 检索:从知识库找到《报销管理制度.pdf》的相关段落
↓
② 拼接:把检索到的段落 + 用户问题 组合成prompt
"根据以下资料回答问题:
资料:报销需先填写申请单,经部门主管审批...
问题:公司报销流程是什么?"
↓
③ 生成:大模型根据资料生成回答
"根据公司规定,报销流程如下:1.填写申请单 2.部门主管审批..."
4.3 RAG的三个核心组件
- 向量数据库:把知识库的文档切成块,每块转成向量存起来。常用的有Chroma、Faiss、Milvus
- Embedding模型:把文本转成向量。常用的有OpenAI的text-embedding、BGE
- 大语言模型:根据检索到的内容生成回答。GPT-4、Claude、通义千问都行
4.4 Streamlit:Python一行代码搞网页
Streamlit是Python的Web框架,专门给数据科学/AI应用用的。不用写HTML/CSS/JS,纯Python就能搞出漂亮的交互页面。
python
import streamlit as st
st.title("我的AI助手🤖")
# 输入框
user_input = st.text_input("问点什么:")
if user_input:
# 调用RAG
answer = rag_pipeline(user_input)
st.write(answer)
就这几行代码,运行streamlit run app.py,浏览器就出来一个漂亮的问答页面!
4.5 课堂提到的"上下文加载"
老师说的"上下文的加载",指的是把对话历史传给模型,让它有"记忆"。
python
# 每次对话都把历史带上
messages = [
{"role": "user", "content": "我叫张三"},
{"role": "assistant", "content": "你好张三!"},
{"role": "user", "content": "我叫什么?"}, # 模型能回答"张三"因为有上下文
]
但上下文有长度限制(GPT-4是128K token),所以需要:
- 滑动窗口:只保留最近N轮对话
- 摘要压缩:把旧对话摘要后再拼上最近对话
- 向量检索:从历史对话中检索相关部分(又是RAG的思想)
一句话总结:RAG给AI装上你的专属知识库,Streamlit让你用Python快速搭出AI应用的漂亮界面。两者结合就是"私有知识AI助手"的最快方案。
五、MCP协议:AI工具界的"USB-C接口"
5.1 课堂笔记原文
MCP,标准化的连接协议;需要统一规划接口,不然的话原本在codex到cursor的编辑器后就不能用了。
5.2 MCP是什么?
MCP = Model Context Protocol = 模型上下文协议
这是Anthropic(Claude的母公司)2024年底推出的一个开放协议,目标是标准化AI模型跟外部工具/数据源的连接方式。
5.3 为什么需要MCP?
打个比方:以前每个AI工具接外部服务,都要单独写适配代码。
ChatGPT → 接GitHub → 写一套接口
Claude → 接GitHub → 再写一套接口
Cursor → 接GitHub → 又写一套接口
这就像以前手机充电线------苹果用Lightning、安卓用Micro-USB、有的用Type-C,每个手机配一根线,烦死了。
MCP就是AI工具界的USB-C接口。只要外部服务实现了MCP协议,任何支持MCP的AI工具都能直接用。
GitHub → 实现MCP协议 → 一个MCP Server
ChatGPT → 支持MCP → 直接连
Claude → 支持MCP → 直接连
Cursor → 支持MCP → 直接连
5.4 MCP的架构
AI应用(MCP Client)
↕ MCP协议(JSON-RPC)
MCP Server(工具/数据源的适配器)
↕
外部服务(GitHub/数据库/文件系统...)
MCP定义了三种能力:
- Resources:让AI读取数据(文件、数据库记录等)
- Tools:让AI执行操作(发邮件、建Issue等)
- Prompts:提供预设的提示词模板
5.5 老师说的"统一规划接口"
老师强调"需要统一规划接口,不然的话原本在codex到cursor的编辑器后就不能用了"------意思是如果你给Codex(OpenAI的代码工具)写的插件接口,换到Cursor编辑器就不能用了,因为没有统一标准。
有了MCP,你写一个MCP Server,Codex、Cursor、Claude Desktop都能用。写一次,到处运行。
一句话总结:MCP是AI连接外部工具的标准化协议,就像USB-C统一了充电线,MCP统一了AI工具的接口。
六、Dify工作流:拖拽式AI编程
6.1 课堂笔记原文
把出门带伞和穿厚衣服分成两个工作流;然后workflow------dify------进行拖拽的工作进行相应的适配。Dify,把积木和工作流串成一个大的思维链------供AI参考。
6.2 Dify是什么?
Dify是一个开源的LLM应用开发平台。不用写代码,拖拖拽拽就能搭出AI应用。
6.3 工作流的例子:出门带伞
老师举了个特别接地气的例子:"出门带伞和穿厚衣服"。
用Dify的工作流来实现:
输入:今天天气数据(温度、降水概率)
↓
[判断节点1] 降水概率 > 50%?
├── 是 → 建议"带伞"
└── 否 → 不带伞
↓
[判断节点2] 温度 < 10℃?
├── 是 → 建议"穿厚衣服"
└── 否 → 不用穿厚
↓
[合并节点] 把两个建议拼起来
↓
输出:"今天出门请带伞,穿厚衣服"
在Dify里,上面这些"判断节点"、"合并节点"都是可视化的积木块,你拖出来连上线就行,不用写if-else代码。
6.4 工作流 vs 简单对话
为什么要搞工作流?直接问AI"今天该不该带伞"不行吗?
区别在于控制力:
- 简单对话:AI自由发挥,可能跑偏
- 工作流:每一步你都控制了,AI只在指定节点做指定的事
工作流适合需要确定性流程的场景:
- 客服机器人:先分类问题 → 查知识库 → 生成回答 → 转人工
- 数据分析:取数据 → 清洗 → 分析 → 生成报告
- 审批流程:提交 → 审核条件 → 主管审批 → 归档
6.5 "把积木串成大的思维链"
老师说的"把积木和工作流串成一个大的思维链------供AI参考",指的是Dify的核心思想:
每个"积木"(节点)做一件小事,串起来就能完成复杂任务。这跟人类的思维方式一样------你不会一步到位想出完整答案,而是一步一步推理。
这就是**Chain of Thought(思维链)**的工程化实现。
一句话总结:Dify让你拖拖拽拽搭AI应用,工作流把复杂任务拆成小步骤,每步可控、可调试、可复用。
七、预训练:AI的"九年义务教育"
7.1 课堂笔记原文
在预训练中的一些基础回答;LM首先要学会的是先把尽可能多的基础知识和语言规律吸收到参数里。只有这一步打稳了,模型后面才有能力去理解问题、组织表达,并逐步形成像样的生成能力。预训练做的事情,本质上就是让模型先埋头读大量文本,例如Wiki百科、新闻、书籍、对话语料等,从中学习事实知识、语言模式以及上下文之间的统计关系。这个阶段通常是"无监督"的:人类不需要逐条告诉模型哪里对、哪里错,而是让它自己从海量文本里总结规律,逐步建立起对世界知识和语言结构的内部表征。更直白地说,模型在这一阶段的核心目标就是学会高质量地词语接龙。
7.2 大白话:预训练就是"读万卷书"
预训练这个词听着高大上,其实说白了就是------让AI读海量的书,学会"词语接龙"。
你想想你小时候是怎么学会说话的?没人给你一本教科书一条一条教,你就是听大人说话、看电视、读书,自然而然就学会了。你学会了"秦始皇"后面大概率跟"统一六国","今天天气"后面大概率跟"真好"。
AI的预训练也是这个道理:
给AI看: "秦始皇是中国历史上的第一位皇帝"
AI学会: "秦始皇" → "是" → "中国" → "历史" → "上" → "的" → "第一" → "位" → "皇帝"
下次你问"秦始皇是谁",AI就能接龙出"是中国历史上的第一位皇帝"
7.3 为什么是"无监督"?
老师说"这个阶段通常是无监督的"------意思是没有人一条条标注"这句话对、那句话错"。
AI就是自己读文本,每次遮住下一个词,猜被遮住的是什么。猜对了就加强,猜错了就调整。老师就是文本本身。
输入: "中国首都是____"
目标: "北京"
AI猜: "上海" → 错了 → 调整参数
AI猜: "北京" → 对了 → 加强参数
重复几万亿次,AI就学会了语言的规律和世界知识。
7.4 预训练的数据量
| 模型 | 训练数据量 | 相当于 |
|---|---|---|
| GPT-2 | 40GB文本 | 读了几万本书 |
| GPT-3 | 570GB文本 | 读了一个图书馆 |
| GPT-4 | ~10TB文本 | 读了全人类的书 |
这就是为什么大模型这么强------它真的"读"了全人类积累的文本。
7.5 "词语接龙"的数学本质
预训练的目标函数叫"下一个token预测":
L=−∑t=1TlogP(wt∣w1,w2,...,wt−1)L = -\sum_{t=1}^{T} \log P(w_t | w_1, w_2, ..., w_{t-1})L=−t=1∑TlogP(wt∣w1,w2,...,wt−1)
翻译成人话:给定前面的词,预测下一个词的概率,让这个概率尽可能大。对所有位置求和,就是总的损失。最小化损失 = 最好地接龙。
7.6 预训练的问题
预训练出来的模型只会"接龙"------你给它一段话,它继续往下写。但它不会"回答问题"------你问它"1+1等于几",它可能接着写"1+1等于几是一道数学题"而不是回答"2"。
这就是为什么需要下一步------有监督微调(SFT)。
一句话总结:预训练就是让AI读海量文本学会词语接龙,是无监督的,相当于AI的"九年义务教育"。
八、有监督微调SFT:AI的"高考冲刺班"
8.1 课堂笔记原文
有监督微调(Supervised Fine-Tuning)
8.2 SFT是什么?
预训练出来的模型只会"接龙",不会"对话"。SFT就是教它怎么跟人对话。
方法:准备大量"问题-回答"对,让模型学习这种格式。
训练数据示例:
{"question": "1+1等于几?", "answer": "1+1等于2"}
{"question": "今天天气怎么样?", "answer": "我无法获取实时天气,但你可以查看天气APP"}
{"question": "帮我写个Python函数", "answer": "好的,请告诉我你需要什么功能..."}
模型看了几万条这样的对话,就学会了:别人问问题,我要回答,而不是接着写。
8.3 SFT vs 预训练
| 预训练 | SFT | |
|---|---|---|
| 数据量 | 万亿token | 几万到几十万条 |
| 数据类型 | 无标注文本 | 问答对 |
| 学习方式 | 自己读(无监督) | 有标准答案(有监督) |
| 目标 | 学语言和知识 | 学对话格式和行为 |
| 比喻 | 九年义务教育 | 高考冲刺班 |
8.4 SFT的损失函数
LSFT=−∑tlogP(yt∣x,y1,...,yt−1)L_{SFT} = -\sum_{t} \log P(y_t | x, y_1, ..., y_{t-1})LSFT=−t∑logP(yt∣x,y1,...,yt−1)
跟预训练很像,但只对"回答"部分算损失(不对"问题"部分算),这叫损失掩码。
8.5 SFT之后还有RLHF
SFT出来的模型已经能对话了,但回答质量可能一般。下一步通常还会做RLHF(人类反馈强化学习)------让人类给回答打分,模型根据评分继续优化。
预训练 → SFT → RLHF → 部署
读书 → 学对话 → 学好对话 → 上岗
一句话总结:SFT用有标注的问答对教预训练模型学会对话,相当于高考冲刺班。
九、LoRA低秩适配:穷人家的微调方案
9.1 课堂笔记原文
监督微调的LORA------低秩适配的领域适配
9.2 全量微调的痛点
全量微调(Full Fine-Tuning)要更新模型的所有参数。GPT-3有1750亿参数------你要在GPU里存这些参数、存梯度、存优化器状态......
1750亿参数 × (参数4字节 + 梯度4字节 + 优化器8字节) ≈ 280GB显存
一张A100 80GB都装不下!普通人根本玩不起。
9.3 LoRA的核心思想
LoRA = Low-Rank Adaptation = 低秩适配
关键洞察:微调时参数的变化量ΔW是"低秩"的------不需要更新全部参数,只需要一个低秩近似就够了。
具体做法:冻结原始权重W,只训练一个小矩阵A和B:
W′=W+ΔW=W+B×AW' = W + \Delta W = W + B \times AW′=W+ΔW=W+B×A
其中 W 是原始权重(冻结不训练),A 是 d×r 矩阵,B 是 r×d 矩阵,r 远小于 d。
原始:W (d×d) = 4096×4096 = 1678万参数
LoRA:A (d×r) + B (r×d) = 4096×8 + 8×4096 = 6.6万参数
参数量减少了 99.6%!
9.4 LoRA的优势
-
省显存:只训练0.1%的参数,普通显卡就能跑
-
省时间:训练快得多
-
省存储:保存的LoRA权重只有几MB,原始模型不用复制
-
可插拔:一个基础模型 + 多个LoRA = 多个专用模型
基础模型(7B)+ LoRA-客服(10MB)= 客服模型
基础模型(7B)+ LoRA-代码(10MB)= 代码模型
基础模型(7B)+ LoRA-医疗(10MB)= 医疗模型
9.5 LoRA的秩r怎么选?
r(秩)是LoRA最重要的超参数:
- r太小(如2):表达能力不够,学不好
- r太大(如64):参数多了,失去LoRA的意义
- 常用值:r=8或r=16,大多数任务够用
一句话总结:LoRA通过低秩分解只训练0.1%的参数,让普通人也能微调大模型。是"穷人家的微调方案"。
十、知识蒸馏:AI界的"抄作业"艺术
10.1 课堂笔记原文
还有知识蒸馏------从别的模型中回答的问题反馈到预训练的数据;(抄作业)
10.2 知识蒸馏是什么?
老师用了一个特别形象的比喻------"抄作业"。
你有个学霸同桌,考试特别厉害。你把题目给他做,他写完答案你抄过来------这就是知识蒸馏。
在AI里:
-
教师模型(学霸):大模型,很强但很慢很贵
-
学生模型(你):小模型,快但不太行
-
蒸馏过程:让教师模型回答一堆问题,把答案作为训练数据训练学生模型
教师模型(GPT-4)→ 回答100万道题 → 生成100万条问答对
↓
学生模型(1.5B)← 用这些问答对训练 ← 变强了!
10.3 为什么要蒸馏?
- 部署成本:GPT-4跑一次要几块钱,小模型跑一次几分钱
- 速度:小模型推理快10-100倍
- 隐私:用大模型生成数据,然后小模型在本地跑,数据不出门
- 定制化:把多个大模型的能力"抄"到一个小模型里
10.4 蒸馏的方式
方式1:回答蒸馏(老师说的这种)
给教师模型输入 → 得到回答 → 用(输入, 回答)训练学生模型
方式2: logits蒸馏
给教师模型输入 → 得到每个词的概率分布 → 让学生模型学这个分布
不只是学最终答案,还学教师的"思考过程"(概率分布)
方式3:特征蒸馏
教师模型的中间层特征 → 学生模型学中间层表示
更深层的知识迁移
10.5 蒸馏在2024年的新趋势
现在很多开源模型都是蒸馏出来的:
- DeepSeek-R1-Distill:把R1的推理能力蒸馏到1.5B/7B/14B小模型
- Alpaca:从GPT-3.5蒸馏到LLaMA-7B
- Vicuna:从GPT-4蒸馏到LLaMA-13B
一句话总结:知识蒸馏让小模型"抄"大模型的作业,获得接近大模型的能力但速度快成本低。是AI界的"抄作业"艺术。
十一、逆向工程:当AI当起黑客
11.1 课堂笔记原文
DSH,反编译是一回事;配环境交给AI来处理。AI打补丁可以查错优化代码的逻辑和性能。后边还讲到一个2048下游戏;然后用解码的考试,和逆向的能力,还原脚本。用AI自己破解密钥和密码;静态分析和二进制分析;用deepseek harness;IDA,REA提供了逆向分析的指导;AI做逆向的进步非常大。用某款软件------用REC录屏软件,用AI做对应的软件。逆向一切的REA,clawcode接deepseek;接入智能体。
11.2 逆向工程是什么?
正向开发:写代码 → 编译 → 可执行程序
逆向工程:可执行程序 → 反编译 → 还原代码
为什么要逆向?
- 安全研究:找漏洞、分析恶意软件
- 兼容开发:搞清楚别人软件的协议,做兼容版本
- 破解:绕过验证、去除限制(灰色地带)
- 学习:看优秀软件怎么实现的
11.3 传统逆向工具
| 工具 | 用途 | 特点 |
|---|---|---|
| IDA Pro | 反汇编+反编译 | 逆向界的"IDE",最专业 |
| Ghidra | 反编译 | NSA开源的,免费 |
| x64dbg | 动态调试 | Windows调试利器 |
| radare2 | 逆向框架 | 命令行,脚本化 |
11.4 AI怎么帮逆向?
老师讲了好几个AI辅助逆向的场景:
场景1:反编译理解
反编译出来的代码通常很难读(变量名是v1,v2,v3,逻辑混乱)
→ AI帮你重命名变量、添加注释、解释逻辑
→ "这段代码是在检查注册码是否合法"
场景2:配环境
逆向工具配置环境很麻烦(各种依赖、版本冲突)
→ AI帮你自动配好环境
→ "你需要安装Python 3.10 + frida + keystone-engine..."
场景3:AI打补丁
发现代码有bug → AI分析原因 → AI生成补丁
不只是修bug,还能优化性能
场景4:2048游戏逆向
老师提到用2048游戏做练习:
→ 反编译2048 → 理解游戏逻辑 → 还原源码
→ 甚至修改代码让游戏自动玩
场景5:破解密钥
AI做静态分析(看代码不运行)+ 二进制分析(看机器码)
→ 找到加密算法 → 推导密钥
→ DeepSeek harness提供自动化分析
场景6:录屏+AI做软件
用REC录屏软件录下某个软件的操作
→ AI分析录屏 → 理解软件行为 → 仿制一个类似的
11.5 AI逆向工具链
老师提到了几个工具:
- DeepSeek harness:DeepSeek提供的逆向分析框架
- IDA + AI插件:IDA里接入AI辅助分析
- REA:逆向分析指导
- Clawcode + DeepSeek:编辑器接DeepSeek做逆向
- Agentic方式:让AI智能体自主探索二进制
11.6 AI做逆向的进步
老师说"AI做逆向的进步非常大"。确实,2024年以来:
- AI能理解反编译的混乱代码
- AI能自动识别加密算法
- AI能生成漏洞利用代码
- AI能自动化分析恶意软件
但也要注意法律边界------逆向别人的商业软件用于破解是违法的,用于安全研究和互操作是合法的。
一句话总结:AI让逆向工程从"手工活"变成"半自动",从理解代码到破解密钥,AI都能帮上大忙。但要注意法律边界。
十二、Agentic RL:让AI学会自主行动
12.1 课堂笔记原文
Agentic RL------轻量级的智能体的学习------把模型S变成智能体的专项工具。训练模型的选择------相当于有一个预训练的区别------考虑模型的基础大小------(需要有一定的专业能力。)
12.2 什么是Agentic RL?
Agentic RL = Agentic Reinforcement Learning = 智能体强化学习
之前的AI(包括ChatGPT)是被动的------你问它答,不问不动。
Agentic AI是主动的------给它一个目标,它自己规划步骤、调用工具、执行操作、检查结果,循环往复直到完成。
目标:"帮我订明天去北京的机票"
Agent的自主行动:
① 查日历 → 明天是10月15日
② 查航班 → 北京10月15日航班列表
③ 比价 → 最便宜的是国航CA1234,6:00起飞
④ 调用订票API → 下单
⑤ 确认 → 订票成功,确认码XXX
12.3 RL(强化学习)怎么训练Agent?
强化学习的核心:试错+奖励
Agent做了动作 → 环境给反馈(奖励/惩罚)→ Agent调整策略
做得好 → 奖励 → 以后多做
做得差 → 惩罚 → 以后少做
就像训练狗:
- 狗坐下 → 给零食 → 以后多坐下
- 狗乱叫 → 不给零食 → 以后少乱叫
12.4 轻量级智能体
老师说的"轻量级的智能体的学习",指的是不需要从头训练一个大模型,而是在已有模型基础上做轻量级RL微调。
基础模型(已有能力)
+ RL微调(学会当Agent)
= 专项智能体
12.5 模型选择
老师说"训练模型的选择------考虑模型的基础大小------需要有一定的专业能力"。
意思是:不是什么模型都能当Agent。太小模型(如1.5B)理解力不够,当不了Agent。一般要7B以上才有基本的Agent能力。
| 模型大小 | Agent能力 | 适用场景 |
|---|---|---|
| 1.5B | 差 | 简单对话 |
| 7B | 基本 | 简单Agent任务 |
| 14B | 不错 | 中等Agent任务 |
| 70B+ | 强 | 复杂Agent任务 |
一句话总结:Agentic RL让AI从"被动回答"变成"主动行动",通过强化学习训练模型自主规划、调用工具、完成任务。
十三、奖励函数设计:怎么给AI打分
13.1 课堂笔记原文
奖励函数的设计------用千问的模型8B来做训基础。
13.2 奖励函数为什么重要?
强化学习里有一句名言:"垃圾奖励函数进,垃圾策略出"(Garbage reward in, garbage policy out)。
奖励函数就是告诉AI"什么好什么差"的规则。规则定错了,AI就学歪了。
奖励函数定得好 → AI学到正确行为
奖励函数定得差 → AI学到错误行为(甚至钻空子)
13.3 奖励函数的坑
经典翻车案例:
目标:让AI走到终点
奖励:每走一步+1分
结果:AI在原地转圈刷分,永远不到终点
修正:到终点+100分,每步-1分
结果:AI直奔终点
目标:让AI写有趣的笑话
奖励:笑话越长分越高
结果:AI写又长又无聊的东西
修正:用另一个AI评判"好不好笑"
13.4 用模型做奖励函数
老师说的"用千问的模型8B来做训基础",指的是用另一个大模型来当裁判,给Agent的行为打分。
这叫模型作为裁判(LLM-as-Judge):
Agent的回答 → 送给裁判模型(千问8B)→ 裁判打分 → 反馈给Agent
为什么用模型当裁判?
- 灵活:可以评判"回答质量"、"代码质量"、"是否安全"等主观指标
- 便宜:用8B小模型当裁判,成本可控
- 可迭代:裁判模型本身也可以优化
13.5 奖励函数的类型
| 类型 | 怎么算 | 例子 |
|---|---|---|
| 结果奖励 | 看最终结果 | 任务完成+1,失败-1 |
| 过程奖励 | 看每一步 | 每步是否合理 |
| 格式奖励 | 看输出格式 | JSON格式正确+1 |
| 安全奖励 | 看是否安全 | 没有害信息+1 |
| 效率奖励 | 看步骤数 | 步骤越少分越高 |
一句话总结:奖励函数是强化学习的核心,定得好AI学得好,定得差AI学歪了。用大模型当裁判是当前主流方案。
十四、总结:AI时代软件开发的新范式
14.1 这堂课教了什么?
回顾一下这堂课的内容链路:
XML/HTML → 数据的描述
↓
Session/Cookie/Token → 应用的状态管理
↓
RAG + Streamlit → AI应用的基础架构
↓
MCP协议 → AI工具的标准化连接
↓
Dify工作流 → AI应用的可视化编排
↓
预训练 → 大模型的基础能力
↓
SFT微调 → 让模型学会对话
↓
LoRA → 低成本微调
↓
知识蒸馏 → 小模型获得大能力
↓
逆向工程 → AI辅助代码分析
↓
Agentic RL → AI自主行动
↓
奖励函数 → 训练Agent的评价标准
14.2 AI时代软件开发的变化
| 传统开发 | AI时代开发 |
|---|---|
| 人写代码 | AI写代码,人审查 |
| 固定逻辑 | 模型推理 |
| 预定义规则 | 从数据学习 |
| 单一工具 | 多工具编排(MCP/Dify) |
| 一次开发 | 持续微调优化 |
| 确定性输出 | 概率性输出(需要兜底) |
14.3 给同学们的建议
- 基础要扎实:XML、HTTP、Session这些基础不会过时,AI也要基于这些
- 学会用AI工具:Dify、Cursor、Copilot这些工具能大幅提效
- 理解大模型原理:预训练、微调、RAG这些概念是AI开发的ABC
- 关注前沿:MCP、Agentic RL这些新东西变化很快,保持学习
- 动手实践:搭一个RAG系统、微调一个小模型、用Dify搞个工作流------比看100篇文章都有用
14.4 最后的话
这堂课让我意识到,"软件开发方法"在AI时代有了全新的含义。不只是设计模式和敏捷开发,还包括怎么用AI开发软件、怎么开发AI软件、怎么让AI帮你开发AI软件(套娃了属于是)。
如果你觉得这篇博客有帮助,点赞+收藏+关注三连,这是我持续输出的最大动力!
有什么问题欢迎评论区交流,我看到都会回复。
免责声明:本文基于课堂随手笔记扩展整理,部分内容加入了个人理解和推测,不保证完全准确。如有错误,欢迎指正。
版权声明:本文原创,转载请注明出处。
写于 2026年10月14日,重庆邮电大学