软件开发方法第七周笔记_CSDN博客

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的语法兼容",意思是它们的基本语法规则是一样的:

  1. 都用尖括号 :<标签>内容</标签>
  2. 都支持嵌套:标签里面可以套标签
  3. 都有属性 :<标签 属性="值">
  4. 都需要闭合 :有开始标签就要有结束标签(或者自闭合<标签/>)

这不难理解------因为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)虽然很强,但它有两个硬伤:

  1. 知识截止:训练完就不更新了,不知道最新的事
  2. 容易胡说八道:问它不知道的事,它会编一个看起来很像真的答案(幻觉)

RAG的解法:先从你的知识库里检索相关内容,然后把检索到的内容+你的问题一起喂给大模型,让它"看着资料回答"。

复制代码
用户提问:"公司报销流程是什么?"
    ↓
① 检索:从知识库找到《报销管理制度.pdf》的相关段落
    ↓
② 拼接:把检索到的段落 + 用户问题 组合成prompt
    "根据以下资料回答问题:
     资料:报销需先填写申请单,经部门主管审批...
     问题:公司报销流程是什么?"
    ↓
③ 生成:大模型根据资料生成回答
    "根据公司规定,报销流程如下:1.填写申请单 2.部门主管审批..."

4.3 RAG的三个核心组件

  1. 向量数据库:把知识库的文档切成块,每块转成向量存起来。常用的有Chroma、Faiss、Milvus
  2. Embedding模型:把文本转成向量。常用的有OpenAI的text-embedding、BGE
  3. 大语言模型:根据检索到的内容生成回答。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定义了三种能力:

  1. Resources:让AI读取数据(文件、数据库记录等)
  2. Tools:让AI执行操作(发邮件、建Issue等)
  3. 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=1Tlog⁡P(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=−∑tlog⁡P(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的优势

  1. 省显存:只训练0.1%的参数,普通显卡就能跑

  2. 省时间:训练快得多

  3. 省存储:保存的LoRA权重只有几MB,原始模型不用复制

  4. 可插拔:一个基础模型 + 多个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 为什么要蒸馏?

  1. 部署成本:GPT-4跑一次要几块钱,小模型跑一次几分钱
  2. 速度:小模型推理快10-100倍
  3. 隐私:用大模型生成数据,然后小模型在本地跑,数据不出门
  4. 定制化:把多个大模型的能力"抄"到一个小模型里

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 逆向工程是什么?

正向开发:写代码 → 编译 → 可执行程序

逆向工程:可执行程序 → 反编译 → 还原代码

为什么要逆向?

  1. 安全研究:找漏洞、分析恶意软件
  2. 兼容开发:搞清楚别人软件的协议,做兼容版本
  3. 破解:绕过验证、去除限制(灰色地带)
  4. 学习:看优秀软件怎么实现的

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

为什么用模型当裁判?

  1. 灵活:可以评判"回答质量"、"代码质量"、"是否安全"等主观指标
  2. 便宜:用8B小模型当裁判,成本可控
  3. 可迭代:裁判模型本身也可以优化

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 给同学们的建议

  1. 基础要扎实:XML、HTTP、Session这些基础不会过时,AI也要基于这些
  2. 学会用AI工具:Dify、Cursor、Copilot这些工具能大幅提效
  3. 理解大模型原理:预训练、微调、RAG这些概念是AI开发的ABC
  4. 关注前沿:MCP、Agentic RL这些新东西变化很快,保持学习
  5. 动手实践:搭一个RAG系统、微调一个小模型、用Dify搞个工作流------比看100篇文章都有用

14.4 最后的话

这堂课让我意识到,"软件开发方法"在AI时代有了全新的含义。不只是设计模式和敏捷开发,还包括怎么用AI开发软件、怎么开发AI软件、怎么让AI帮你开发AI软件(套娃了属于是)。

如果你觉得这篇博客有帮助,点赞+收藏+关注三连,这是我持续输出的最大动力!

有什么问题欢迎评论区交流,我看到都会回复。


免责声明:本文基于课堂随手笔记扩展整理,部分内容加入了个人理解和推测,不保证完全准确。如有错误,欢迎指正。

版权声明:本文原创,转载请注明出处。


写于 2026年10月14日,重庆邮电大学

相关推荐
虎头金猫1 小时前
从上传PPT到观众远程打开互动页面:Claper在CentOS 7上的Docker部署、互动组件设置与固定访问地址实战
linux·运维·网络·人工智能·docker·centos·powerpoint
龙亘川1 小时前
水质决策报表业务建模:从自定义报表到六时间尺度自动报表闭环
大数据·人工智能·智慧城市·开源软件
科研小牛马1 小时前
北航何静:Codex调用SketchUp实操,常见智能体均适用
人工智能
机器人梦想家1 小时前
【AI工具】Task Kit:把 Spec Kit 的契约化思想搬来管日常工作
人工智能
ck0135791 小时前
图片抠图怎么做?从背景去除到透明 PNG 的实用教程
人工智能·测试工具·音视频·媒体·视频
Vae_Mars1 小时前
幂等性学习笔记
笔记·学习·wpf
美狐美颜sdk1 小时前
直播APP接入第三方视频美颜SDK安全吗?数据处理与隐私问题分析
人工智能·音视频·美颜sdk·第三方美颜sdk·视频美颜sdk·美颜api
liferecords1 小时前
Xiaomi-OCR-0:小米把 1.7 亿样本灌进 0.8B 小模型,文档解析和 OCR 问答一把抓
人工智能·大模型·ocr·多模态
全栈开发圈1 小时前
新书速览|让AI推荐你的品牌:GEO营销实践
人工智能