diff --git a/README.md b/README.md
index cdf8f9a..793373a 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@
- 企业问答知识库: 知识库检索内容问答、自定义上传到知识库、在线解析URL地址、实时联网搜索等
- 文档AI助手:文档概要总结、内容进行分段总结、AIGC营销内容生产等
-
+
- **AI大模型的行业解决方案和案例库参考**
- https://page.dingtalk.com/wow/dingtalk/default/dingtalk/I0HfYX4QStBIpLgxnZQe
@@ -234,7 +234,7 @@
#### AI智能化云盘需求文档说明
-
+
#### 架构图的作用和绘制技巧
@@ -2579,7 +2579,7 @@ CREATE TABLE `account` (
* 技术架构图
-
+
AI补充接口文档和注释字段操作
@@ -2682,7 +2682,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 开发网盘里面可以创建文件夹
- 
+ 
* 业务逻辑方法梳理(**哪些方法会其他地方复用**)
* 检查父文件ID是否存在(抽)
@@ -3401,7 +3401,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 移动m1到m2文件夹
* 查看m1和m2文件夹相关数据
-## 测试
+
### 智能化网盘文件进阶实战-批量删除和复制
@@ -3412,7 +3412,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 开发文件删除接口,需要支持文件夹和文件删除
* 支持批量选择操作删除,包括支持存储空间的处理
-
+
* 业务逻辑设计(逐步可以发现,用之前封装好的方法提高效率)
@@ -3500,7 +3500,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 网盘文件复制功能开发实战
* 需要支持批量复制,存储空间验证等
-
+
* 思考
@@ -3620,7 +3620,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 老帆解压后,也上传到小滴AI网盘
* 几十G的视频文件,1秒就完成上传了,惊呼如何实现这个功能的
-
+
* 文件秒传功能的需求背景
* 在大文件传输的场景中,尤其是网盘服务,用户经常需要上传相同或相似的文件。
@@ -3656,7 +3656,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 检查当前账号的容量是否有
* 如果存在,则直接返回文件ID,建立关联关系,不需要上传,直接秒传成功
-
+
* 编码实战
@@ -3697,7 +3697,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 两类文件上传前,都需要先调用文件秒传接口
* 通过此接口判断是否已经存在对应的文件
-
+
@@ -3728,7 +3728,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 通过计算文件的MD5值,如果服务器上已存在相同MD5值的文件
* 则可以直接提供下载链接,无需重新上传,节省了带宽和时间
-
+
* 企业内部通信 **员工文件共享**:
@@ -3775,7 +3775,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
#### 大文件传输需求背景和常见解决方案《上》
-
+
* 需求背景
* 用户上传大文件的需求越来越普遍,尤其是在云存储、视频分享、在线教育等领域
@@ -3804,7 +3804,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **分片文件合并**
* 文件上传到服务器临时存储空间,等待全部分片都上传完成后,进行合并完成最终的文件
-
+
#### 大文件传输需求背景和常见解决方案《下》
@@ -3840,7 +3840,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **续传处理,从最后一个成功上传的片段继续上传剩余片段。**
* 文件合并,所有片段上传完成后,服务器端合并片段生成完整文件。
-
+
#### 思考能力-大文件传输方案前后端交互逻辑
@@ -3848,7 +3848,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **方案一:前端传到服务器,服务器再把文件传输到MinIO**
-
+
* 优点
* **集中管理**:
@@ -3871,7 +3871,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **方案二:前端直接传输到MinIO(课程采取的方案)**
-
+
* **优点**:
* **减少延迟**:前端直接将文件上传到MinIO,减少了文件在后端的中转时间,显著提高了上传效率。
@@ -3890,7 +3890,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **前端直接传输到MinIO 交互时序图讲解**
-
+
#### AWS-S3大文件和原生API方案优缺点对比
@@ -4680,7 +4680,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 老王有几十G《冰冰的游泳视频》存储在小滴网盘上面
* 需要分享给老帆,但是又不能公开分享下载,所以需要开发分享转存功能
-
+
* AI智能云盘分享文件
@@ -4692,11 +4692,11 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* share主表
- 
+ 
* share_file子表
- 
+ 
@@ -4795,7 +4795,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 开发创建文件分享相关接口
* 注意:后端存储分享链接的域名
- 
+ 
* 业务逻辑
@@ -4868,7 +4868,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 根据我的分享列表,取消对应的分享链接
- 
+ 
* 业务逻辑
@@ -4952,7 +4952,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 如果是需要提求取码的链接,如何第一次校验,后续可以不校验,实现安全访问?
* 如何确保不被越权访问?
-
+
* 前后端交互逻辑和解决方案
* 用户访问分享链接,统一调用后端【基本分享信息】接口 `/api/share/v1/visit?shareId=XXXX`
@@ -4978,7 +4978,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 需求
* 用户访问分享链接,进入对应的分享文件页面
-
+
* 业务逻辑
@@ -5080,7 +5080,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 开发校验分享码,方便后续访问,返回临时的token
- 
+ 
* 业务逻辑
@@ -5124,7 +5124,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 开发查看文件分享链接的详情文件接口
- 
+ 
* 思考难点
* 如何校验访问token和分享ID的关联性
@@ -5168,7 +5168,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **哪些接口需要校验token,如何实现复用?**
* **解决方案:自定义注解+AOP切面**
-
+
* 自定义注解基础知识
* Annotation(注解)
@@ -5321,7 +5321,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 需求
* 开发查看某个分享链接的子文件列表接口
-
+
* 业务逻辑
@@ -5381,7 +5381,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 选择分享的文件,部分或者全部转存到自己的网盘
* 和文件复制功能类似
- 
+ 
* 业务逻辑设计
@@ -5504,7 +5504,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **文件恢复:**
- 用户可以从回收站中恢复误删的文件或文件夹,恢复到原来的位置。
- 
+ 
* 相关接口说明
@@ -5518,7 +5518,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- 文件恢复时,更新文件表中的状态字段和路径字段,但是还有前其他业务逻辑
- 文件彻底删除时,从文件关联表中删除文件信息,物理删除,但是file表不去操作
-
+
@@ -5568,7 +5568,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 注意
* 彻底删除文件是指删除关联关系,实际物理存储数据不删除,不清空物理存储内容,方便做分析和后续有人重新上传
-
+
* 业务逻辑
@@ -5696,7 +5696,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 课程地址:https://xdclass.net/videoDetailsPage?id=94
* 进阶内容可以让AI读取数据库,完成智搜问答
- 
+ 
* 编码实战
@@ -5729,7 +5729,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 前端直接请求 MinIO 下载(预签名 URL 方式,和上传一样)
- 
+ 
* 后端生成一个带有时间限制和权限的预签名 URL(Presigned URL)
* 前端通过该 URL 直接访问 MinIO 下载文件。
@@ -5751,7 +5751,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 后端代理下载(文件流中转)
- 
+ 
* 客户端请求后端 API,后端从 MinIO 读取文件流
* 通过 HTTP Response 将文件流传给客户端。
@@ -5791,7 +5791,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 前端通过临时签名地址,直接从文件存储引擎进行下载
* 前端传递需要下载的文件ID,可以是多个非文件夹类型的文件ID
-
+
* 编码实战(可以支持单个或者多个文件下载)
@@ -5837,103 +5837,77 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* BugFix还有非核心接口等,后续会提供对应的代码
* 测试实战
-### 第二十章 下一个互联网10年-LLM大模型新机会
-
-#### 第1集 给兄弟们学-AI大模型板块课程的建议
-
-**简介: 给兄弟们学-AI大模型板块课程的建议**
-
-* AI大模型板块课程说明
-
- * **千言万语给兄弟们说下**
-
- * 不要被时代抛弃,上一个互联网10年2014到2024;2025就是就是下一个互联网10年的起点
-
- * 传统Java后端、前端、测试开发 已经逐步被淘汰了,切勿停留在这个阶段
-
- * **很多知识不是自己不学就行,要提升更高的认知,最直接的:不学就被行业的发展淘汰**
-
- * 很多同学没赶上2017到2022年的第一波互联网红利,现在25年又是一个#互联网时代新起点
- * 各个行业都需要接入大模型,开发对应的智能体;
- * 因为市场人员缺少太多,企业招聘不到人员,就会降低学历提高待遇,这个就是机会
- * 大专以上学历+后端/前端、测试能力 ,就可以学!!
-
- 
-
- 
-
- * 学习我们小滴课堂的兄弟们的基本画像说明
-
- * 多年前端、后端Java、测试、运维等方向工作为主,没有相关人工智能、机器学习的基础,概念不懂
- * 新人入行,包括大专、本科学历的大学生;其他行业转行过来的兄弟们
-
- * D哥的目标
-
- * 让大家可以快速上手AI大模型相关基础,包括极速上手
- * **从研发工程师角度,让大家通俗易懂理解LLM大模型的相关概念,避免太专业的概念导致不懂**
-
-
+### 下一个互联网10年-LLM大模型新机会
+#### 给兄弟们学-AI大模型板块课程的建议
+- AI大模型板块课程说明
+ - **千言万语给兄弟们说下**
+ - 不要被时代抛弃,上一个互联网10年2014到2024;2025就是就是下一个互联网10年的起点
+ - 传统Java后端、前端、测试开发 已经逐步被淘汰了,切勿停留在这个阶段
+ - **很多知识不是自己不学就行,要提升更高的认知,最直接的:不学就被行业的发展淘汰**
+ - 很多同学没赶上2017到2022年的第一波互联网红利,现在25年又是一个#互联网时代新起点
+ - 各个行业都需要接入大模型,开发对应的智能体;
+ - 因为市场人员缺少太多,企业招聘不到人员,就会降低学历提高待遇,这个就是机会
+ - 大专以上学历+后端/前端、测试能力 ,就可以学!!
+ 
+ 
+ - 学习我们小滴课堂的兄弟们的基本画像说明
+ - 多年前端、后端Java、测试、运维等方向工作为主,没有相关人工智能、机器学习的基础,概念不懂
+ - 新人入行,包括大专、本科学历的大学生;其他行业转行过来的兄弟们
+ - D哥的目标
+ - 让大家可以快速上手AI大模型相关基础,包括极速上手
+ - **从研发工程师角度,让大家通俗易懂理解LLM大模型的相关概念,避免太专业的概念导致不懂**
+#### 认识LLM-为什么可以回答我们的问题?
-#### 第2集 认识LLM-为什么可以回答我们的问题?
-
-**简介: 认识LLM-为什么可以回答我们的问题?**
-
-* 什么是LLM
-
- * 是Large Language Model 大语言模型的首字母简写
-
- * LLM是基于深度学习的自然语言处理(NLP)模型,通过海量文本数据训练,能够理解、生成和推理人类语言。
-
- * 其核心能力包括:
+- 什么是LLM
+ - 是Large Language Model 大语言模型的首字母简写
+ - LLM是基于深度学习的自然语言处理(NLP)模型,通过海量文本数据训练,能够理解、生成和推理人类语言。
+ - 其核心能力包括:
- **文本生成**(对话、代码、故事)
-
- **语义理解**(问答、摘要、分类)
-
- **推理能力**(逻辑判断、数学计算)
-* **为什么大模型可以根据我们的输入回答对应的问题?**
+- **为什么大模型可以根据我们的输入回答对应的问题?**
- * 核心能力:理解自然语言、生成连贯文本、完成特定任务
+ - 核心能力:理解自然语言、生成连贯文本、完成特定任务
- * 几个关键点:训练数据、模式识别、概率预测、上下文理解
+ - 几个关键点:训练数据、模式识别、概率预测、上下文理解
- * **Java类比:类似大家的IDEA/VSCode工具智能代码补全工具,但能力扩展到所有自然语言领域**
+ - **Java类比:类似大家的IDEA/VSCode工具智能代码补全工具,但能力扩展到所有自然语言领域**
- * Java程序员熟悉的方式理解LLM的文本补全能力:
+ - Java程序员熟悉的方式理解LLM的文本补全能力:
- * 好比一个拥有超强记忆力的代码补全工具(类似IDE的智能提示,但能力放大1000倍)
+ - 好比一个拥有超强记忆力的代码补全工具(类似IDE的智能提示,但能力放大1000倍)
- * **海量知识库**(相当于训练数据)
+ - **海量知识库**(相当于训练数据)
- 模型"阅读"过整个互联网的文本(就像你看了JDK所有源码+StackOverflow+GitHub)
- 示例理解:当看到`public static void main(`会自动补全参数`String[] args)`
- * **模式识别专家**(类似编译器语法分析)
+ - **模式识别专家**(类似编译器语法分析)
- 建立了词语/句子的关联规则库
-
- 示例:看到"北京是中国的",后面大概率接"首都"
- * **概率预测器**(类似条件判断的加强版)
+ - **概率预测器**(类似条件判断的加强版)
- ```
+ ```java
// 伪代码示意(实际使用概率分布)
String predictNextWord(String context) {
Map probabilities = model.calculate(context);
@@ -5941,15 +5915,14 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
}
```
- * **上下文关联引擎**(类似程序的作用域链)
+ - **上下文关联引擎**(类似程序的作用域链)
- 能记住前文关键信息(变量声明、方法参数等)
-
- 示例:前文提到"用Java实现快速排序",后面自动关联`Comparable`接口
- * 场景:补全代码注释
+ - 场景:补全代码注释
- ```
+ ```java
/ 用户输入:
/**
* 计算阶乘
@@ -5962,34 +5935,18 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
}
```
- * 为什么能补充合理内容?
- * **模式匹配**:像正则表达式匹配,但处理语义层面
- * **概率择优**:总选择可能性最高的选项(类似优先修复编译警告)
- * **知识蒸馏**:从训练数据中提炼出常识规则(如国家首都对应关系)
+ - 为什么能补充合理内容?
+ - **模式匹配**:像正则表达式匹配,但处理语义层面
+ - **概率择优**:总选择可能性最高的选项(类似优先修复编译警告)
+ - **知识蒸馏**:从训练数据中提炼出常识规则(如国家首都对应关系)
> **Java开发者启示**:可以把LLM视为一个`超级StringProcessor`,其`process()`方法基于统计规律而非硬编码规则,通过分析上下文token序列生成最合理的后续内容。
- * **简单的话解释,比如“猜测下一个最可能的词”并不断重复这个过程。**
-
-
-
-
+ - **简单的话解释,比如“猜测下一个最可能的词”并不断重复这个过程。**
+#### 大模型发展历程和业内主流LLM讲解
-
-
-
-
-
-
-
-
-
-#### 第3集 大模型发展历程和业内主流LLM讲解
-
-**简介: 大模型发展历程和业内主流LLM讲解**
-
-* 发展历程(重点时间线)
+- 发展历程(重点时间线)
| 阶段 | 时间范围 | 核心突破 | 代表模型 |
| :-------------: | :-------: | :----------------: | :-------------: |
@@ -5999,86 +5956,64 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| 大模型爆发期 | 2020-2022 | 千亿参数规模 | GPT-3, T5 |
| 多模态时代 | 2023-至今 | 文本+图像+代码融合 | GPT-4, PaLM |
- * 早期探索(2017年前)-**习惯称为人工智障**
- * **2013-2017:RNN/LSTM 时代**
- * 模型:Word2Vec、LSTM、Seq2Seq
- * 局限性:难以处理长文本依赖,训练效率低
- * **2017:Transformer 革命**
- * 里程碑论文 **《Attention Is All You Need》**(Google)提出 **自注意力机制**,解决长距离依赖问题,现代LLM基础。
- * 预训练模型崛起(2018-2020)
- * **2018:BERT(Bidirectional Encoder)**
- * 技术突破:双向上下文建模,掩码语言模型(MLM)。
- * 应用:文本分类、问答系统。
- * **2018:GPT-1(Generative Pre-trained Transformer)**
- * 技术突破:单向自回归生成(Decoder-only)。
- * 应用:文本生成、续写任务。
- * **2019:GPT-2**
- * 参数规模:15亿,展示 **零样本学习**(Zero-shot)能力。
- * 争议:因生成虚假新闻风险,OpenAI暂未开源完整模型。
- * 千亿参数时代(2020-2022)
- * **2020:GPT-3**
- * 参数规模:1750亿,**Few-shot 学习** 能力显著提升。
- * 标志性应用:代码生成(Codex)、对话系统(ChatGPT前身)。
- * **2022:Meta LLaMA**
- * 开源模型(7B-65B参数),推动社区生态发展。
- * 多模态与垂直化(2023至今)
- * **GPT-4**:支持图像输入,逻辑推理能力显著增强。
- * **开源社区爆发**:Alpaca、Vicuna、Falcon 等轻量级模型涌现。
- * **行业应用**:医疗、法律、编程等垂直领域定制化LLM
-
-* 国内外主流大模型(**每个厂商都有多个大模型产品**)
-
- * 国际主流模型
-
- * **GPT系列**(OpenAI):当前最先进的商业闭源模型
- * 地址:https://openai.com/
- * **LLaMA**(Meta):开源可商用的先进模型
- * 地址:https://ai.meta.com/llama
- * **Gemini**(谷歌):多任务协同、搜索整合
- * 地址:https://deepmind.google
-
- * 国内主流模型
-
- - **文心一言**(百度):中文理解强、知识图谱融合、多模态生成
- - 地址:https://wenxin.baidu.com/
-
- - **通义千问**(阿里云):电商场景优化、代码生成强、多模态交互
- - 地址:https://tongyi.aliyun.com/
-
- - **Kimi Chat**(月之暗面):长上下文、数据分析可视化、文档解析
- - 地址:https://kimi.moonshot.cn
-
- - **ChatGLM**(智谱):开源可商用、中英双语平衡、轻量化部署
- - 地址:https://chatglm.cn/
- - **DeepSeek**(深度求索):国货之光,低成本、性能强大的推理大模型
- - 地址:https://deepseek.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 AI大模型常见的四大分类维度你知多少
-
-**简介: AI大模型常见的四大分类维度你知多少**
-
-* 需求
-
- * 前面介绍了不同的厂商的大模型,每个厂商都有多个大模型产品,有什么分类规则吗?
- * 注意:由于有比较多人工智能、机器学习、算法等领域的专业名称,不需要全部都了解,关键的课程接下去会讲
-
-* LLM大语言模型的常见分类维度
-
- * 模型架构维度(类比Java框架设计)
+ - 早期探索(2017年前)-**习惯称为人工智障**
+ - **2013-2017:RNN/LSTM 时代**
+ - 模型:Word2Vec、LSTM、Seq2Seq
+ - 局限性:难以处理长文本依赖,训练效率低
+ - **2017:Transformer 革命**
+ - 里程碑论文 **《Attention Is All You Need》**(Google)提出 **自注意力机制**,解决长距离依赖问题,现代LLM基础。
+ - 预训练模型崛起(2018-2020)
+ - **2018:BERT(Bidirectional Encoder)**
+ - 技术突破:双向上下文建模,掩码语言模型(MLM)。
+ - 应用:文本分类、问答系统。
+ - **2018:GPT-1(Generative Pre-trained Transformer)**
+ - 技术突破:单向自回归生成(Decoder-only)。
+ - 应用:文本生成、续写任务。
+ - **2019:GPT-2**
+ - 参数规模:15亿,展示 **零样本学习**(Zero-shot)能力。
+ - 争议:因生成虚假新闻风险,OpenAI暂未开源完整模型。
+ - 千亿参数时代(2020-2022)
+ - **2020:GPT-3**
+ - 参数规模:1750亿,**Few-shot 学习** 能力显著提升。
+ - 标志性应用:代码生成(Codex)、对话系统(ChatGPT前身)。
+ - **2022:Meta LLaMA**
+ - 开源模型(7B-65B参数),推动社区生态发展。
+ - 多模态与垂直化(2023至今)
+ - **GPT-4**:支持图像输入,逻辑推理能力显著增强。
+ - **开源社区爆发**:Alpaca、Vicuna、Falcon 等轻量级模型涌现。
+ - **行业应用**:医疗、法律、编程等垂直领域定制化LLM
+
+- 国内外主流大模型(**每个厂商都有多个大模型产品**)
+
+ - 国际主流模型
+ - **GPT系列**(OpenAI):当前最先进的商业闭源模型
+ - 地址:https://openai.com/
+ - **LLaMA**(Meta):开源可商用的先进模型
+ - 地址:https://ai.meta.com/llama
+ - **Gemini**(谷歌):多任务协同、搜索整合
+ - 地址:[https://deepmind.google](https://deepmind.google/)
+ - 国内主流模型
+ - **文心一言**(百度):中文理解强、知识图谱融合、多模态生成
+ - 地址:https://wenxin.baidu.com/
+ - **通义千问**(阿里云):电商场景优化、代码生成强、多模态交互
+ - 地址:https://tongyi.aliyun.com/
+ - **Kimi Chat**(月之暗面):长上下文、数据分析可视化、文档解析
+ - 地址:[https://kimi.moonshot.cn](https://kimi.moonshot.cn/)
+ - **ChatGLM**(智谱):开源可商用、中英双语平衡、轻量化部署
+ - 地址:https://chatglm.cn/
+ - **DeepSeek**(深度求索):国货之光,低成本、性能强大的推理大模型
+ - 地址:https://deepseek.com/
+
+#### AI大模型常见的四大分类维度你知多少
+
+- 需求
+
+ - 前面介绍了不同的厂商的大模型,每个厂商都有多个大模型产品,有什么分类规则吗?
+ - 注意:由于有比较多人工智能、机器学习、算法等领域的专业名称,不需要全部都了解,关键的课程接下去会讲
+
+- LLM大语言模型的常见分类维度
+
+ - 模型架构维度(类比Java框架设计)
| 类型 | 典型代表 | 特点 | Java类比 |
| :--------------------: | :------: | :---------------: | :-------------------------: |
@@ -6086,14 +6021,14 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| **自编码模型**(双向) | BERT系列 | 理解上下文语义 | 类似`Map`结构双向索引 |
| **混合架构** | T5 | 编码器-解码器结构 | 类似Spring MVC分层架构 |
- * 功能用途维度(对应开发需求类型)
+ - 功能用途维度(对应开发需求类型)
| 类型 | 典型场景 | Java开发示例 | 代表模型 |
| :------------: | :------: | :------------------------: | :------------------: |
| **指令大模型** | 需求实现 | 根据描述生成Controller代码 | GPT-4, Claude |
| **推理大模型** | 问题排查 | 分析OOM异常原因 | Code Llama, DeepSeek |
- * 参数规模维度(类比系统复杂度)
+ - 参数规模维度(类比系统复杂度)
| 类型 | 参数量级 | 特点 | Java工程类比 |
| :------: | :------: | :--------------------: | :----------------: |
@@ -6101,7 +6036,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| 标准模型 | 1B-100B | 通用能力强 | 类似Spring框架 |
| 超大模型 | >100B | 复杂推理能力 | 类似分布式系统集群 |
- * 部署方式维度(类比系统架构)
+ - 部署方式维度(类比系统架构)
| 型 | 特点 | 适用场景 | Java类比 |
| :------: | :------: | :----------: | :-----------------: |
@@ -6110,14 +6045,14 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
-* **功能用途维度思考大模型选择**
+- **功能用途维度思考大模型选择**
- * 推理大模型(Reasoning Models)
+ - 推理大模型(Reasoning Models)
- * **特点**:擅长逻辑推理、数学计算、代码调试
- * 典型应用:Java异常堆栈分析、系统设计模式选择建议、算法复杂度优化
+ - **特点**:擅长逻辑推理、数学计算、代码调试
+ - 典型应用:Java异常堆栈分析、系统设计模式选择建议、算法复杂度优化
- ```
+ ```java
// 类比Java中的复杂业务逻辑处理
public class MathSolver {
public static void main(String[] args) {
@@ -6130,16 +6065,15 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
}
```
- * 代表模型:DeepSeek-R1(深度求索)、Google Minerva、GPT-4(OpenAI)
+ - 代表模型:DeepSeek-R1(深度求索)、Google Minerva、GPT-4(OpenAI)
- * 指令大模型(Instruction Models)
+ - 指令大模型(Instruction Models)
- **特点**:擅长理解复杂指令,完成多步骤任务
-
- 典型应用
- 根据需求生成API文档、将用户故事转化为技术方案、自动化测试用例生成
- ```
+ ```java
// 示例:指令模型处理用户需求
用户输入:
"我需要一个Java方法,接收用户ID列表,返回这些用户的订单总数"
@@ -6151,14 +6085,13 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
.mapToInt(user -> orderService.getOrderCount(user))
.sum();
}
-
```
- 代表模型:GPT-3、Claude 3、阿里云的通义千问
- * **推理大模型VS指令大模型对比**
+ - **推理大模型VS指令大模型对比**
| 维度 | 推理大模型 | 指令大模型 |
| :------: | :----------------------------: | :---------------------------------: |
@@ -6169,32 +6102,16 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| 适用场景 | 系统故障排查、性能优化 | 需求实现、文档生成 |
| 评估指标 | 答案准确性 | 指令遵循度 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 LLM场景面试题-如何根据业务选择大模型
+#### LLM场景面试题-如何根据业务选择大模型
-**简介: LLM场景面试题-如何根据业务选择大模型**
+- 互联网公司AI大模型面试题
-* 互联网公司AI大模型面试题
+ - **面试官:公司里面基于AI大模型进行开发,指令大模型和推理大模型,如何选择?**
- * **面试官:公司里面基于AI大模型进行开发,指令大模型和推理大模型,如何选择?**
+- 回答建议
-* 回答建议
-
- * 业务应用中选择大模型时,需根据具体场景的核心需求、任务类型和数据特点多个考虑
- * 根据业务场景和成本衡量,也可以选择不同的大模型或者组合一起使用
+ - 业务应用中选择大模型时,需根据具体场景的核心需求、任务类型和数据特点多个考虑
+ - 根据业务场景和成本衡量,也可以选择不同的大模型或者组合一起使用
| **维度** | **指令大模型** | **推理大模型** |
| :--------------: | :----------------------------------: | :--------------------------------: |
@@ -6204,21 +6121,21 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| **典型错误类型** | 可能偏离指令或生成不相关内容 | 逻辑漏洞、计算错误或步骤缺失 |
| **资源消耗** | 通常更轻量(可部署较小参数模型) | 需要更大参数量支持复杂推理 |
-
+
-* 案例应用说明
+- 案例应用说明
- * 金融行业
+ - 金融行业
- * 典型需求:合规报告生成、风险评估、反欺诈检测
+ - 典型需求:合规报告生成、风险评估、反欺诈检测
- * 模型选择决策
+ - 模型选择决策
- 
+ 
- * 案例代码参考
+ - 案例代码参考
- ```
+ ```java
// 使用指令模型生成合规检查代码
String prompt = """
[指令执行] 生成Java方法:
@@ -6235,22 +6152,22 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
""";
```
- * 医疗行业
+ - 医疗行业
- * 典型需求:病历摘要生成、诊断建议、药物相互作用检查
+ - 典型需求:病历摘要生成、诊断建议、药物相互作用检查
- * 模型组合策略
+ - 模型组合策略
- * **指令模型**处理结构化任务:
+ - **指令模型**处理结构化任务:
- 将问诊对话转为标准病历格式
- 生成检查报告模板
- * **推理模型**处理复杂场景:
+ - **推理模型**处理复杂场景:
- 鉴别相似病症
- 解释检测指标关联性
- * 案例代码参考
+ - 案例代码参考
- ```
+ ```java
// 类似伪代码参考
public class MedicalAgent {
@Resource
@@ -6271,110 +6188,96 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
}
```
- * **优先选择指令大模型的场景**
+ - **优先选择指令大模型的场景**
- * **客户服务**:
- * 任务:自动回复咨询、处理标准化请求(如订单查询)
- * 优势:快速生成自然对话,理解用户意图
- * **内容生成**:
- * 任务:营销文案撰写、社交媒体内容生成
- * 优势:保证语言流畅性和创意性
+ - **客户服务**:
+ - 任务:自动回复咨询、处理标准化请求(如订单查询)
+ - 优势:快速生成自然对话,理解用户意图
+ - **内容生成**:
+ - 任务:营销文案撰写、社交媒体内容生成
+ - 优势:保证语言流畅性和创意性
- * **优先选择推理大模型的场景**
+ - **优先选择推理大模型的场景**
- * **金融分析**:
+ - **金融分析**:
- 任务:财务报表解读、投资组合风险推导
- 案例:通过链式推理分析“某公司负债率上升对股价的影响路径”
- * **科研与工程**:
+ - **科研与工程**:
- 任务:数学建模、实验数据分析
- 示例:推导“气候变化对区域降雨量的非线性影响方程”
-* **选择不同功能类型的大模型注意事项**
-
- * **指令大模型的局限**:
- * 对隐含逻辑任务(如“预测A→B→C的连锁反应”)可能生成看似合理但缺乏严谨推导的答案。
-
- * **推理大模型的陷阱**:
- - 需验证中间步骤(如数学符号是否正确),避免“自信的错误”(如GPT-4可能错误使用公式但语气肯定)。
-
- * **混合部署建议**:
- - 前端用指令模型交互,后端用推理模型处理复杂任务(例如客服系统自动转接技术问题到推理引擎)。
-
- * 选择模型的核心原则:
- * **任务复杂度**:简单指令→通用模型,深度推理→专用模型
- * **容错成本**:高风险场景(如医疗、金融)优先选择可解释性强的推理模型
- * **ROI评估**:平衡开发成本(微调/提示工程)与业务收益
-
- * 简单案例方便记忆参考:
-
- - **电商公司**:用指令模型处理客服对话,用推理模型分析用户行为数据。
-
- - **量化基金**:用推理模型推导交易策略,用指令模型生成合规报告。
-
-
-
-
-
+- **选择不同功能类型的大模型注意事项**
+ - **指令大模型的局限**:
+ - 对隐含逻辑任务(如“预测A→B→C的连锁反应”)可能生成看似合理但缺乏严谨推导的答案。
+ - **推理大模型的陷阱**:
+ - 需验证中间步骤(如数学符号是否正确),避免“自信的错误”(如GPT-4可能错误使用公式但语气肯定)。
+ - **混合部署建议**:
+ - 前端用指令模型交互,后端用推理模型处理复杂任务(例如客服系统自动转接技术问题到推理引擎)。
+ - 选择模型的核心原则:
+ - **任务复杂度**:简单指令→通用模型,深度推理→专用模型
+ - **容错成本**:高风险场景(如医疗、金融)优先选择可解释性强的推理模型
+ - **ROI评估**:平衡开发成本(微调/提示工程)与业务收益
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
+ - 简单案例方便记忆参考:
-### 第二十一章 LLM大模型核心概念和面试题
+ - **电商公司**:用指令模型处理客服对话,用推理模型分析用户行为数据。
+ - **量化基金**:用推理模型推导交易策略,用指令模型生成合规报告。
+
-#### 第1集 LLM大模型常见核心术语认识第一季
+### LLM大模型核心概念和面试题
-**简介: LLM大模型常见核心术语认识第一季**
+#### LLM大模型常见核心术语认识第一季
-* 需求
+- 需求
- * 人工智能、大语言模型、机器学习等很多专业术语,没接触过的同学难理解,看博文都懵逼
- * 我们这边给大家快速补充基础的概念和术语,通过对比的方式,方便大家看博文资料和课程都方便
- * **涉及到比需要更加深入的知识点,我们就会单独的拎一集出来讲解**
- * **当前阶段就把课程讲的先理解,然后逐步进阶**
+ - 人工智能、大语言模型、机器学习等很多专业术语,没接触过的同学难理解,看博文都懵逼
+ - 我们这边给大家快速补充基础的概念和术语,通过对比的方式,方便大家看博文资料和课程都方便
+ - **涉及到比需要更加深入的知识点,我们就会单独的拎一集出来讲解**
+ - **当前阶段就把课程讲的先理解,然后逐步进阶**
-* 常见术语
+- 常见术语
- * Token(标记)
+ - Token(标记)
- * 相当于自然语言处理的"字节",是文本处理的最小单位(可能是单词/字/标点)
- * Java类比:类似`StringTokenizer`分割后的元素
+ - 相当于自然语言处理的"字节",是文本处理的最小单位(可能是单词/字/标点)
+ - Java类比:类似`StringTokenizer`分割后的元素
- ```
+ ```java
// 输入文本:"public static void main"
// Token化结果:["public", "static", "void", "main"]
```
- * Transformer(变换器架构)
+ - Transformer(变换器架构)
- * 通俗解释:当前最主流的大模型基础架构,通过自注意力机制理解上下文
- * Java类比:相当于Java中的`Spring框架`——提供了一套处理文本的通用组件,开发者无需从头写网络结构。
+ - 通俗解释:当前最主流的大模型基础架构,通过自注意力机制理解上下文
+ - Java类比:相当于Java中的`Spring框架`——提供了一套处理文本的通用组件,开发者无需从头写网络结构。
- * 自注意力机制(Self-Attention)
+ - 自注意力机制(Self-Attention)
- * 让模型自动分析文本中每个词与其他词的关系, 类似`Map`的智能索引
- * 通俗解释:类似阅读代码时,IDE高亮显示`变量A`,在哪些位置被调用——模型通过权重标记词与词的相关性。
+ - 让模型自动分析文本中每个词与其他词的关系, 类似`Map`的智能索引
+ - 通俗解释:类似阅读代码时,IDE高亮显示`变量A`,在哪些位置被调用——模型通过权重标记词与词的相关性。
- ```
+ ```java
// 示例:模型会计算 "猫" 和 "抓" 的关联权重
double 猫_抓_权重 = 0.92;
```
- * 损失函数(Loss Function)
+ - 损失函数(Loss Function)
- * 定义:衡量模型预测结果与正确答案的差距, 模型的"错误检测器",指导参数调整方向
- * 通俗解释:类似单元测试的断言——模型通过不断减少损失值来“通过测试”。
+ - 定义:衡量模型预测结果与正确答案的差距, 模型的"错误检测器",指导参数调整方向
+ - 通俗解释:类似单元测试的断言——模型通过不断减少损失值来“通过测试”。
- ```
+ ```java
// 训练过程伪代码
while (loss > threshold) {
adjustParameters(); // 类似修改代码通过测试
@@ -6382,19 +6285,19 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
}
```
- * Prompt工程
+ - Prompt工程
- * 定义:通过设计输入文本(提示词)引导模型生成预期输出。
- * 通俗解释:类似写SQL查询时调整WHERE条件——不同的提问方式会得到不同结果
+ - 定义:通过设计输入文本(提示词)引导模型生成预期输出。
+ - 通俗解释:类似写SQL查询时调整WHERE条件——不同的提问方式会得到不同结果
- ```
+ ```sql
-- 坏Prompt:
SELECT * FROM products;
-- 好Prompt:
SELECT name, price FROM products WHERE category='电子产品' ORDER BY price DESC LIMIT 10;
```
- ```
+ ```java
// 低效提示:
"写个排序方法" → 可能得到冒泡排序
@@ -6407,44 +6310,23 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
"""
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+#### LLM大模型常见核心术语认识第二季
+- 继续进阶常见概念
+ - Temperature(温度参数)
-#### 第2集 LLM大模型常见核心术语认识第二季
-
-**简介: LLM大模型常见核心术语认识第二季**
-
-* 继续进阶常见概念
-
- * Temperature(温度参数)
-
- * 控模型生成文本的随机程度。值越大,回复内容越赋有多样性、随机性;设为 0 根据事实回答。日常聊天建议设置为 0.7
- * 参数对比
+ - 控模型生成文本的随机程度。值越大,回复内容越赋有多样性、随机性;设为 0 根据事实回答。日常聊天建议设置为 0.7
+ - 参数对比
| 温度值 | 输出特点 | Java类比 |
| :----: | :------: | :------------: |
| 0.2 | 保守准确 | `final`常量 |
| 0.8 | 富有创意 | `Random`随机数 |
- ```
+ ```java
// 低温度生成(确定性高)
model.setTemperature(0.1); // 总是返回相同代码
@@ -6452,77 +6334,59 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
model.setTemperature(0.7); // 可能给出多种设计模式实现
```
- * 找个LLM进行测试 `我今天被公司解雇了,很难过` 0.2和0.7温度的区别
+ - 找个LLM进行测试 `我今天被公司解雇了,很难过` 0.2和0.7温度的区别
- 
+ 
- * 预训练(Pre-training)
+ - 预训练(Pre-training)
- * 定义:在大规模通用文本上训练模型,学习语言通用规律。
- * 通俗解释::类似让新员工先学习公司技术栈规范(如Java编码规范),打好基础。
+ - 定义:在大规模通用文本上训练模型,学习语言通用规律。
+ - 通俗解释::类似让新员工先学习公司技术栈规范(如Java编码规范),打好基础。
- * Fine-tuning(微调)
+ - Fine-tuning(微调)
- * 在预训练模型基础上进行领域适配,用特定领域数据调整模型,就像给汽车加装越野套件,
- * Java类比:在Spring Boot Starter基础上自定义配置
+ - 在预训练模型基础上进行领域适配,用特定领域数据调整模型,就像给汽车加装越野套件,
+ - Java类比:在Spring Boot Starter基础上自定义配置
- ```
+ ```java
// 预训练模型 = 标准JDK
// 微调过程 = 添加Apache Commons工具库
```
- * RLHF(人类反馈强化学习)
+ - RLHF(人类反馈强化学习)
- * 通俗解释:通过人类评分优化模型输出的"AI教练系统"
- * 训练流程
+ - 通俗解释:通过人类评分优化模型输出的"AI教练系统"
+ - 训练流程
- 
+ 
- * 模型蒸馏(Knowledge Distillation)
+ - 模型蒸馏(Knowledge Distillation)
- * 定义:
- * 将大模型的知识“压缩”到小模型中。
- * 将大语言模型(教师模型)的知识高效迁移到小型模型(学生模型)的技术,保持性能的同时降低计算成本和部署难度
- * 通俗解释:类似将资深架构师的经验总结成《Java开发手册》供新人学习,小模型继承大模型能力,但体积更小推理更快。
+ - 定义:
+ - 将大模型的知识“压缩”到小模型中。
+ - 将大语言模型(教师模型)的知识高效迁移到小型模型(学生模型)的技术,保持性能的同时降低计算成本和部署难度
+ - 通俗解释:类似将资深架构师的经验总结成《Java开发手册》供新人学习,小模型继承大模型能力,但体积更小推理更快。
+#### 大力出奇迹-LLM大模型里面的参数是什么
+- **疑惑点:大语言模型里面有很多个细化版本,里面有很多B,这个是什么意思?**
+ - 通义千问大模型:通义千问2.5-7B、通义千问-QwQ-32B、通义千问2.5-72B
+ - 脸书旗下的Llama大模型:Llama2-7B、Llama2-13B、Llama3.3-70B-Instruct
+ - DeepSeek大模型:DeepSeek-R1-Distill-Qwen-7B、DeepSeek-R1-Distill-Qwen-14B、DeepSeek-R1-Distill-Llama-70B
+ - 回答
+ - 在大模型的语境中,“b”通常代表“Billion”,即“十亿”,这是用来表示模型训练中所使用参数的数量的单位。
+ - 例如,当我们说某个大模型有“175B”个参数时,意味着该模型拥有1750亿个参数。
+ - 参数的数量是衡量模型复杂性和能力的一个重要指标,一般来说,参数越多,模型的训练就越复杂,其能力也往往越强。
+ - 在这个上下文中,“b”作为“Billion”的缩写,是用来量化大模型规模的关键指标之一。
-
-
-
-
-
-
-
-
-
-#### 第3集 大力出奇迹-LLM大模型里面的参数是什么
-
-**简介: 大力出奇迹-大语言模型的里面的参数是什么**
-
-* **疑惑点:大语言模型里面有很多个细化版本,里面有很多B,这个是什么意思?**
-
- * 通义千问大模型:通义千问2.5-7B、通义千问-QwQ-32B、通义千问2.5-72B
-
- * 脸书旗下的Llama大模型:Llama2-7B、Llama2-13B、Llama3.3-70B-Instruct
-
- * DeepSeek大模型:DeepSeek-R1-Distill-Qwen-7B、DeepSeek-R1-Distill-Qwen-14B、DeepSeek-R1-Distill-Llama-70B
-
- * 回答
-
- * 在大模型的语境中,“b”通常代表“Billion”,即“十亿”,这是用来表示模型训练中所使用参数的数量的单位。
- * 例如,当我们说某个大模型有“175B”个参数时,意味着该模型拥有1750亿个参数。
- * 参数的数量是衡量模型复杂性和能力的一个重要指标,一般来说,参数越多,模型的训练就越复杂,其能力也往往越强。
- * 在这个上下文中,“b”作为“Billion”的缩写,是用来量化大模型规模的关键指标之一。
-
- ```
+ ```java
// 神经网络中的参数结构示例
class NeuralLayer {
double[][] weights; // 权重矩阵(核心参数)
@@ -6530,13 +6394,13 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
}
```
-* **参数(Parameters)的直观理解**
+- **参数(Parameters)的直观理解**
- **类比编程**:
- 可理解为代码中的 **“变量”**,但LLM的参数是模型通过海量数据自动学习得到的权重(Weights)
- ```
+ ```java
// 传统代码中的变量(人工定义规则)
if (input.contains("你好")) {
response = "你好!";
@@ -6558,89 +6422,59 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- 参数规模的演进
| 模型 | 参数量 | 特点(对比Java工程) | 对比老王的工作年限 |
- | :------------------: | :----: | :--------------------------------------: | --------------------- |
+ | :------------------: | :----: | :--------------------------------------: | :-------------------- |
| **GPT-1** | 1.17亿 | 相当于一个中型Java项目的代码行数 | 大四实习生 |
| **GPT-3** | 1750亿 | 相当于整个Maven中央库所有jar包的代码总量 | 工作5年的高级工程师 |
| **DeepSeek-R1-671b** | 6710亿 | 远超全球所有开源Java项目的代码规模总和 | 工作100年的不死工程师 |
- * **参数量 vs 模型能力**
-
+ - **参数量 vs 模型能力**
- **正向关系**:参数越多,模型记忆和推理能力越强(类似大型代码库功能更全面)。
-
- **边际效应**:超过一定规模后,性能提升变缓(需权衡成本与收益)。
-
- **训练成本**:千亿参数需数千块GPU(如GPT-3训练成本约460万美元)。
-
- **推理延迟**:参数越多,单次请求计算量越大(代码量越多,启动和调试越慢,优化点越多)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 钱花的明白-大模型里面的Token如何计算
+#### 钱花的明白-大模型里面的Token如何计算
**简介: 钱花的明白-大模型里面的Token如何计算**
-* 需求
- * 很多同学看到大模型的文档里有token,好奇这个是做啥的,和JWT的token啥区别?
- * 包括很多在线的LLM大模型接口里面,按照token进行收费的
-
-
-
-* 什么是LLM里面的token
-
- * Token 是文本的基本单位,用于将文本分解为模型能够处理的最小单元
- * 在大语言模型中,通过对输入文本进行 Token 化,将文本转换为模型可以理解的数字表示形式,以便模型进行处理和生成输出。
- * 作用
- * Token是文本处理的基本单元,大模型运行的计算成本非常高,按token计费是为了更精准控制资源使用
- * **不是直接用字或单词来计量,而是文本经过模型分词器切分后,Token ≠ 单词 ≠ 字符**
- * 输入输出限制:模型最大处理长度(如GPT-4最多32k tokens)
- * 费用计算:API调用按Token数量计费(如$0.06/1k tokens)
- * 例如
- * 使用 Hugging Face 的 BERT 分词器对英文文本 `"Hello, world! This is a test sentence."` 进行分词,
- * 得到的 Tokens 列表为 `['hello', ',', 'world', '!', 'this', 'is', 'a', 'test', 'sentence', '.']`。
- * 统计数量 :计算 Tokens 列表的长度,即为 Tokens 的数量
- * 一般的大模型计费方式
- * **你输入的内容+AI输出的内容,都要花钱,和律师按照小时收费一样**
- * 好比 你问很多,AI回答很少,也是要花钱的
-
-
+- 需求
+ - 很多同学看到大模型的文档里有token,好奇这个是做啥的,和JWT的token啥区别?
+ - 包括很多在线的LLM大模型接口里面,按照token进行收费的
-* 在线计算方式
-
- * Token的长度并不固定它长度取决于具体模型的Tokenizer(分词器)规则,不同模型的token计算方式有所差异
- * Hugging Face Tokenizer【需要科学上网】
- * https://huggingface.co/tokenizers
- * OpenAI官方工具:Tokenizer Playground【需要科学上网】
- * https://platform.openai.com/tokenizer
- * 国内在线工具【直接访问】
- * https://dashscope.console.aliyun.com/tokenizer
-
-* 建议:
-
- * 业务场景选择,如果面向国内用户,中文为主的业务建议选择国内的大模型,英文的考虑海外的,Token计算不一样
-
-* 文字长度与 Token 数量的换算
+
+- 什么是LLM里面的token
+ - Token 是文本的基本单位,用于将文本分解为模型能够处理的最小单元
+ - 在大语言模型中,通过对输入文本进行 Token 化,将文本转换为模型可以理解的数字表示形式,以便模型进行处理和生成输出。
+ - 作用
+ - Token是文本处理的基本单元,大模型运行的计算成本非常高,按token计费是为了更精准控制资源使用
+ - **不是直接用字或单词来计量,而是文本经过模型分词器切分后,Token ≠ 单词 ≠ 字符**
+ - 输入输出限制:模型最大处理长度(如GPT-4最多32k tokens)
+ - 费用计算:API调用按Token数量计费(如$0.06/1k tokens)
+ - 例如
+ - 使用 Hugging Face 的 BERT 分词器对英文文本 `"Hello, world! This is a test sentence."` 进行分词,
+ - 得到的 Tokens 列表为 `['hello', ',', 'world', '!', 'this', 'is', 'a', 'test', 'sentence', '.']`。
+ - 统计数量 :计算 Tokens 列表的长度,即为 Tokens 的数量
+ - 一般的大模型计费方式
+ - **你输入的内容+AI输出的内容,都要花钱,和律师按照小时收费一样**
+ - 好比 你问很多,AI回答很少,也是要花钱的
+- 在线计算方式
+ - Token的长度并不固定它长度取决于具体模型的Tokenizer(分词器)规则,不同模型的token计算方式有所差异
+ - Hugging Face Tokenizer【需要科学上网】
+ - https://huggingface.co/tokenizers
+ - OpenAI官方工具:Tokenizer Playground【需要科学上网】
+ - https://platform.openai.com/tokenizer
+ - 国内在线工具【直接访问】
+ - https://dashscope.console.aliyun.com/tokenizer
+- 建议:
+ - 业务场景选择,如果面向国内用户,中文为主的业务建议选择国内的大模型,英文的考虑海外的,Token计算不一样
+- 文字长度与 Token 数量的换算
- **中文** :通常情况下,1 个中文字符 ≈ 0.6 个 Token。每百万 Token 大约相当于 70-100 万个汉字。
- 例如
- 中文文本 `"你好,世界!"` 按字符分割,每个字符独立为 Token,Token 数量为 6。
- “你好,我是通义千问”会被转换成['你好', ',', '我是', '通', '义', '千', '问']。
-
- **英文** :一般情况下,1 个英文字符 ≈ 0.3 个 Token。每百万 Token 大约相当于 50-75 万个单词。
- 例如
- 英文文本 `"Hello, world!"` 按单词分割,Token 数量为 4。
@@ -6648,41 +6482,19 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
+### 手把手教你部署本地的AI大模型+DeepSeek
+#### 在线LLM接口API和私有化部署选择和思考
+- 需求
+ - LLM大语言模型分在线API调用和私有化部署,两个方式都需要学
+ - 私有化部署大模型后,使用方式也都是调用接口
+ - 不同企业、经费、数据安全和项目领域也决定如何选择
+ 
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第二十二章 手把手教你部署本地的AI大模型+DeepSeek
-
-
-
-#### 第1集 在线LLM接口API和私有化部署选择和思考
-
-**简介: 在线LLM接口API和私有化部署选择和思考**
-
-* 需求
-
- * LLM大语言模型分在线API调用和私有化部署,两个方式都需要学
- * 私有化部署大模型后,使用方式也都是调用接口
- * 不同企业、经费、数据安全和项目领域也决定如何选择
-
-
-
-* 关键差异点对比
+- 关键差异点对比
| 维度 | 在线API调用 | 私有化部署 | Java技术栈类比 |
| :------------: | :------------: | :-------------: | :----------------------------: |
@@ -6694,69 +6506,59 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| **突发流量** | 弹性扩展 | 需预留资源 | 云函数 vs 固定线程池 |
| **更新频率** | 自动升级 | 手动更新 | SpringCloud Config vs 本地配置 |
-* **面试官:说下项目为什么要私有化部署LLM**
+- **面试官:说下项目为什么要私有化部署LLM**
- * 数据安全与隐私保护
- * 避免数据泄露风险 :企业数据本地存储,无需上传云端,降低敏感信息泄露风险,如金融客户交易记录等。
- * 最关键
- * 私有化部署允许企业将模型和数据完全掌控在本地,避免了将数据上传至云端进行处理时可能带来的数据泄露风险
- * 例如
- * 金融机构处理的客户数据极为敏感,包括银行交易记录、信用评分、投资组合等,
- * 如果使用云端 LLM 提供的服务,客户输入的所有内容都可能被外部服务器存储和分析,
- * 即便服务提供商声明不会保存数据,依然存在潜在泄露的风险,本地私有部署确保数据始终在企业内部环境运行
- * 性能与响应速度
- * 低延迟响应 :本地部署模型无需网络传输数据,响应时间更短,适用于实时性要求高的场景,如智能客服系统。
- * 可定制化与灵活性
- * 满足个性需求 :企业可依据自身业务特点,对模型架构、参数等进行定制,如电商企业针对商品和用户行为数据定制 LLM。
- * 成本效益
- * 长期成本优化 :初期虽有硬件投资,但长期可避免持续增长的云服务费用,降低运营成本。
- * 充分利用资源 :企业可利用现有硬件资源,提高资源利用率,进一步降低成本。
- * 减少依赖与控制技术栈
- * 降低对供应商的依赖 :企业可自主选择技术、基础设施和工具,减少对通用模型的依赖。
- * 掌握技术主动权 :企业可自主进行技术创新和优化,推动人工智能技术在企业内部的发展
+ - 数据安全与隐私保护
+ - 避免数据泄露风险 :企业数据本地存储,无需上传云端,降低敏感信息泄露风险,如金融客户交易记录等。
+ - 最关键
+ - 私有化部署允许企业将模型和数据完全掌控在本地,避免了将数据上传至云端进行处理时可能带来的数据泄露风险
+ - 例如
+ - 金融机构处理的客户数据极为敏感,包括银行交易记录、信用评分、投资组合等,
+ - 如果使用云端 LLM 提供的服务,客户输入的所有内容都可能被外部服务器存储和分析,
+ - 即便服务提供商声明不会保存数据,依然存在潜在泄露的风险,本地私有部署确保数据始终在企业内部环境运行
+ - 性能与响应速度
+ - 低延迟响应 :本地部署模型无需网络传输数据,响应时间更短,适用于实时性要求高的场景,如智能客服系统。
+ - 可定制化与灵活性
+ - 满足个性需求 :企业可依据自身业务特点,对模型架构、参数等进行定制,如电商企业针对商品和用户行为数据定制 LLM。
+ - 成本效益
+ - 长期成本优化 :初期虽有硬件投资,但长期可避免持续增长的云服务费用,降低运营成本。
+ - 充分利用资源 :企业可利用现有硬件资源,提高资源利用率,进一步降低成本。
+ - 减少依赖与控制技术栈
+ - 降低对供应商的依赖 :企业可自主选择技术、基础设施和工具,减少对通用模型的依赖。
+ - 掌握技术主动权 :企业可自主进行技术创新和优化,推动人工智能技术在企业内部的发展
-* 记住关键点:适合私有化部署的三大特征
+- 记住关键点:适合私有化部署的三大特征
- * 数据敏感性高:处理个人隐私/商业机密/国家秘密,如:银行反洗钱分析、医疗影像诊断
+ - 数据敏感性高:处理个人隐私/商业机密/国家秘密,如:银行反洗钱分析、医疗影像诊断
- * 业务定制需求强:需要深度融合行业知识,如:法律合同审查、工业缺陷检测
+ - 业务定制需求强:需要深度融合行业知识,如:法律合同审查、工业缺陷检测
- * 规模化应用场景:日均调用量超50万次,如:智能客服中心、电商推荐系统
+ - 规模化应用场景:日均调用量超50万次,如:智能客服中心、电商推荐系统
- * **前期使用在线大模型的API,做大做强就是私有化部署大模型**
+ - **前期使用在线大模型的API,做大做强就是私有化部署大模型**
+#### 基于在线大语言模型API调用操作实战
+- 知识点
+ - 实操在线的API大语言模型调用,厂商很多,多数大同小异
+ - 包括后续框架整合也是,请求协议基本和OpenAI一样, 毕竟龙头老大,也方便迁移
+ - 由于国内网络访问限制,OpenAI应用的开发也可以直接换国内的大模型,开发一样
+ 
+ - OpenAI 提供的SDK 来调用大模型
+ - Python: https://github.com/openai/openai-python
+ - NodeJS:https://github.com/openai/openai-node
+ - 基于 openai 的模型进行开发,只需要将 `base_url` 和 `api_key` 替换成 国内大模型的配置,可无缝将服务迁移至对应的大模型
+ - 举例月之暗面的大模型例子
-#### 第2集 基于在线大语言模型API调用操作实战
-
-**简介: 基于在线大语言模型API调用操作实战**
-
-* 知识点
-
- * 实操在线的API大语言模型调用,厂商很多,多数大同小异
- * 包括后续框架整合也是,请求协议基本和OpenAI一样, 毕竟龙头老大,也方便迁移
- * 由于国内网络访问限制,OpenAI应用的开发也可以直接换国内的大模型,开发一样
-
-
-
- * OpenAI 提供的SDK 来调用大模型
-
- * Python: https://github.com/openai/openai-python
- * NodeJS:https://github.com/openai/openai-node
-
- * 基于 openai 的模型进行开发,只需要将 `base_url` 和 `api_key` 替换成 国内大模型的配置,可无缝将服务迁移至对应的大模型
-
- * 举例月之暗面的大模型例子
-
- ```
+ ```python
from openai import OpenAI
client = OpenAI(
@@ -6765,74 +6567,58 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
)
```
-* 在线LLM接口调用实操测试(**有些有免费额度,用完就需要花钱啦,老铁们**)
+- 在线LLM接口调用实操测试(**有些有免费额度,用完就需要花钱啦,老铁们**)
- * **通义千问**(阿里云)
+ - **通义千问**(阿里云)
- * 地址:https://bailian.console.aliyun.com/
+ - 地址:https://bailian.console.aliyun.com/
- 
+ 
- **DeepSeek**(深度求索)
- 地址:https://api-docs.deepseek.com/zh-cn/
- 
+ 
- **Kimi Chat**(月之暗面)
- 地址:https://platform.moonshot.cn/
-
-
-
-
-
-
-
-
-
+#### 私有化部署DeepSeek大模型的硬件配置
+- 需求
+ - 大模型有很多都提供了开源版本,即可以实现私有化部署
+ - **那作为工程师的你,知道私有化部署大模型有哪些方式**
+ - **国运级别的大模型DeepSeek不同参数需要的资源和适合场景**
+- 开源大模型常见的私有化部署方式
+ - 源码部署
-#### 第3集 私有化部署DeepSeek大模型的硬件配置
+ - 依赖比较多,需要对应的环境比较多,且不同版本系统兼容性比较多,类似源码安装K8S
+ - 常见的源码部署主要有 transformers、vLLM、llama.cpp 等方式,使用算力平台操作比较多
+ - 需要Transformers、Python、 Pytorch等环境 ,后续讲算力平台的时候操作
-**简介: 私有化部署DeepSeek大模型架构和硬件配置**
+ - 应用部署
-* 需求
-
- * 大模型有很多都提供了开源版本,即可以实现私有化部署
- * **那作为工程师的你,知道私有化部署大模型有哪些方式**
- * **国运级别的大模型DeepSeek不同参数需要的资源和适合场景**
-
-* 开源大模型常见的私有化部署方式
-
- * 源码部署
+ - 基于 Ollama 部署
- * 依赖比较多,需要对应的环境比较多,且不同版本系统兼容性比较多,类似源码安装K8S
- * 常见的源码部署主要有 transformers、vLLM、llama.cpp 等方式,使用算力平台操作比较多
- * 需要Transformers、Python、 Pytorch等环境 ,后续讲算力平台的时候操作
+ - Ollama 是一个开源的 AI 模型部署工具,帮助用户在本地环境或云端部署和管理大型语言模型
+ - 官网:https://ollama.com/
+ - 部署过程相对简单,支持Win、Mac、Linux
- * 应用部署
+ - LM Studio部署
- * 基于 Ollama 部署
+ - 官网:https://lmstudio.ai/
+ - 部署过程相对简单,支持Win、Mac、Linux
- * Ollama 是一个开源的 AI 模型部署工具,帮助用户在本地环境或云端部署和管理大型语言模型
- * 官网:https://ollama.com/
- * 部署过程相对简单,支持Win、Mac、Linux
+ 
- * LM Studio部署
+- 本地部署 DeepSeek 硬件配置
- * 官网:https://lmstudio.ai/
- * 部署过程相对简单,支持Win、Mac、Linux
-
- 
-
-* 本地部署 DeepSeek 硬件配置
-
- * 轻量级模型(1.5B-8B)
+ - 轻量级模型(1.5B-8B)
| **型版本** | **DeepSeek-R1-1.5B** | **DeepSeek-R1-7B** | **DeepSeek-R1-8B** |
| :------------: | :---------------------: | :-----------------------: | :-------------------------: |
@@ -6848,7 +6634,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| **成本范围** | ¥2,000-5,000 | ¥5,000-10,000 | ¥6,000-12,000 |
| **性价比建议** | 适合个人开发者入门 | 中小团队轻量级NLP项目首选 | 技术团队效率工具开发 |
- * 企业级模型(14B-32B)
+ - 企业级模型(14B-32B)
| **模型版本** | **DeepSeek-R1-14B** | **DeepSeek-R1-32B** |
| :------------: | :-----------------------: | :-----------------------: |
@@ -6863,7 +6649,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| - **典型案例** | 金融风险报告自动化 | 蛋白质结构预测/3D建模辅助 |
| **成本范围** | ¥20,000-30,000 | ¥40,000-100,000 |
- * 科研级模型(70B-671B)
+ - 科研级模型(70B-671B)
| **模型版本** | **DeepSeek-R1-70B** | **DeepSeek-R1-671B** |
| :------------: | :-----------------------------: | :-------------------------: |
@@ -6878,82 +6664,45 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| **成本范围** | ¥400,000+ | ¥20,000,000+ |
| **生态支持** | HuggingFace加速库优化 | 定制化CUDA内核+混合精度训练 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 Ollama介绍和本地快速安装
-
-**简介: Ollama介绍和本地快速安装**
-
-* 什么是Ollama
- * 一款专注于本地化运行大型语言模型(LLM)的开源工具,Ollama = 大模型领域的"Docker" + "Maven"
- * 支持通过类 Docker 命令管理模型容器,实现快速下载、切换和运行。
- * 提供兼容 OpenAI 的接口(如 `http://localhost:11434/v1/chat/completions`)
- * 核心功能:
- * 模型仓库管理(类似Maven中央仓库)
- * 本地模型运行(类似Docker运行多个容器)
- * REST API服务(对外提供大模型接口可以访问)
- * 跨平台兼容性(Windows/macOS/Linux)
- * 特点
- * 隐私保护:完全离线运行,适合处理敏感数据(如医疗记录)
- * 资源优化:支持 GPU 加速(如设置OLLAMA_CUDA_DEVICE=0)
- * 官网:https://ollama.com/
- * 文档:https://github.com/ollama/ollama/blob/main/README.md#quickstart
-
-* 安装实操(官网下载对应的包,不同系统选择不一样)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 Ollama常用命令讲解和实战
-
-**简介: Ollama安装和常用命令讲解**
-
-* 常用命令
- * 模型管理
- * ollama pull <模型名>:下载模型(如 `ollama pull qwen2.5-coder:14b`、`ollama pull qwen2.5:7b-instruct`)
- * ollama run <模型名>:运行模型(如 `ollama run qwen2.5-coder:14b`)
- * ollama list:列出已安装的模型
- * ollama rm <模型名>:删除指定模型
- * 服务控制
- * ollama serve:启动本地服务(默认端口 11434)
- * ollama create -f ./Modelfile:通过配置文件创建自定义模型
- * 系统操作
- * --version:查看版本信息
- * ollama help:获取命令帮助
-* 核心命令手册类比Maven命令
+
+
+#### Ollama介绍和本地快速安装
+
+- 什么是Ollama
+ - 一款专注于本地化运行大型语言模型(LLM)的开源工具,Ollama = 大模型领域的"Docker" + "Maven"
+ - 支持通过类 Docker 命令管理模型容器,实现快速下载、切换和运行。
+ - 提供兼容 OpenAI 的接口(如 `http://localhost:11434/v1/chat/completions`)
+ - 核心功能:
+ - 模型仓库管理(类似Maven中央仓库)
+ - 本地模型运行(类似Docker运行多个容器)
+ - REST API服务(对外提供大模型接口可以访问)
+ - 跨平台兼容性(Windows/macOS/Linux)
+ - 特点
+ - 隐私保护:完全离线运行,适合处理敏感数据(如医疗记录)
+ - 资源优化:支持 GPU 加速(如设置OLLAMA_CUDA_DEVICE=0)
+ - 官网:https://ollama.com/
+ - 文档:https://github.com/ollama/ollama/blob/main/README.md#quickstart
+- 安装实操(官网下载对应的包,不同系统选择不一样)
+
+
+
+
+
+#### Ollama常用命令讲解和实战
+
+- 常用命令
+ - 模型管理
+ - ollama pull <模型名>:下载模型(如 `ollama pull qwen2.5-coder:14b`、`ollama pull qwen2.5:7b-instruct`)
+ - ollama run <模型名>:运行模型(如 `ollama run qwen2.5-coder:14b`)
+ - ollama list:列出已安装的模型
+ - ollama rm <模型名>:删除指定模型
+ - 服务控制
+ - ollama serve:启动本地服务(默认端口 11434)
+ - ollama create -f ./Modelfile:通过配置文件创建自定义模型
+ - 系统操作
+ - --version:查看版本信息
+ - ollama help:获取命令帮助
+- 核心命令手册类比Maven命令
| 命令格式 | 功能说明 | Java开发类比 |
| :--------------------: | :------------------------------: | :-----------------------: |
@@ -6965,26 +6714,16 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
+#### 本地电脑私有化部署多版本DeepSeek
+- 需求
+ - 使用ollama部署DeepSeek大模型,deepseek-r1:7b,deepseek-r1:14b
+ - 注意:电脑配置不高的,不要部署14b哈
+ 
-
-
-
-
-#### 第6集 本地电脑私有化部署多版本DeepSeek
-
-**简介: 本地电脑私有化部署多版本DeepSeek**
-
-* 需求
-
- * 使用ollama部署DeepSeek大模型,deepseek-r1:7b,deepseek-r1:14b
- * 注意:电脑配置不高的,不要部署14b哈
-
-
-
-* 部署实战
+- 部署实战
```
#部署7b
@@ -6994,116 +6733,78 @@ ollama run deepseek-r1:7b
ollama run deepseek-r1:14b
```
-* 问题: `算下deeeeep里面有几个e`
-
-
-
+- 问题: `算下deeeeep里面有几个e`
+
+#### AI大模型可视化界面介绍和部署实战
+- 需求
+ - 前面部署了大模型,包括在线和私有化部署大模型,但都是基于命令操作
+ - 也可以利用可视化工具进行操作,可以自己研发、也可以利用开源的
+- LLM客户端开源工具讲解,方便进行调试和个人使用
+ - Dify
+ - 开源的 LLM 应用开发平台, 轻松构建和运营生成式 AI 原生应用。
+ - 地址:https://dify.ai/zh
+ - Cherry Studio
+ - 支持多服务商集成的AI对话客户端
+ - 地址:https://cherry-ai.com/
-#### 第7集 AI大模型可视化界面介绍和部署实战
-
-**简介: AI大模型可视化界面介绍和部署实战**
-
-* 需求
+ 
- * 前面部署了大模型,包括在线和私有化部署大模型,但都是基于命令操作
- * 也可以利用可视化工具进行操作,可以自己研发、也可以利用开源的
+ - Chatbox
-* LLM客户端开源工具讲解,方便进行调试和个人使用
+ - 是一个支持多种流行LLM模型的桌面客户端,可在 Windows、Mac 和 Linux 上使用,也支持网页直接访问
+ - 配置Ollama允许远程连接 https://chatboxai.app/zh/help-center/connect-chatbox-remote-ollama-service-guide
+ - 地址:https://chatboxai.app/
- * Dify
+ 
- * 开源的 LLM 应用开发平台, 轻松构建和运营生成式 AI 原生应用。
- * 地址:https://dify.ai/zh
+- Chatbox安装和实操
- * Cherry Studio
+ - 安装包:官网直接下载,根据自己的系统选择
+ - 配置大模型服务
- * 支持多服务商集成的AI对话客户端
- * 地址:https://cherry-ai.com/
-
- 
-
- * Chatbox
-
- * 是一个支持多种流行LLM模型的桌面客户端,可在 Windows、Mac 和 Linux 上使用,也支持网页直接访问
- * 配置Ollama允许远程连接 https://chatboxai.app/zh/help-center/connect-chatbox-remote-ollama-service-guide
- * 地址:https://chatboxai.app/
-
- 
-
-* Chatbox安装和实操
-
- * 安装包:官网直接下载,根据自己的系统选择
- * 配置大模型服务
-
- 
+ 
+### 大模型编码实战-SpringBoot开发接入大模型
+#### SpringBoot整合大模型调用实战《上》
+- 需求
+ - 有了大模型接口,业务项目如何开发呢?
+ - 解决方案
+ - 自定义HttpClient客户端,在Java代码中通过HTTP请求发送指令并获取结果, 适合快速开发和小规模应用
+ - 使用Spring-Starter,比如spring-ai-openai 进行整合,不用自己封装,比较多中大型项目采用
+ - 使用Spring AI Alibaba 创建应用,使用里面封装的工具进行调用,比SpringAI更好用
+ - 本地还是在线的模型选择
+ - **开发的时候建议选择在线大模型,可以灵活切换,避免本地开发卡顿的情况**
+- 什么是SpringAI
+ - Spring 生态中面向 AI 工程的应用框架,简化生成式 AI 的集成与开发
+ - 支持跨模型兼容性(如 OpenAI、DeepSeek 等)和多种功能(聊天、嵌入、流式输出等)
+ - 地址: https://spring.io/projects/spring-ai
+- 大模型服务平台百炼
+ - 是一站式的大模型开发及应用构建平台。不论是开发者还是业务人员,都能深入参与大模型应用的设计和构建。
+ - 可以通过简单的界面操作,在5分钟内开发出一款大模型应用,在几小时内训练出一个专属模型
+ - 地址:https://bailian.console.aliyun.com/
+- 项目配置实战
+ - 添加依赖
+ - https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第二十三章 大模型编码实战-SpringBoot开发接入大模型
-
-
-
-#### 第1集 SpringBoot整合大模型调用实战《上》
-
-**简介: SpringBoot整合大模型调用实战《上》**
-
-* 需求
- * 有了大模型接口,业务项目如何开发呢?
- * 解决方案
- * 自定义HttpClient客户端,在Java代码中通过HTTP请求发送指令并获取结果, 适合快速开发和小规模应用
- * 使用Spring-Starter,比如spring-ai-openai 进行整合,不用自己封装,比较多中大型项目采用
- * 使用Spring AI Alibaba 创建应用,使用里面封装的工具进行调用,比SpringAI更好用
- * 本地还是在线的模型选择
- * **开发的时候建议选择在线大模型,可以灵活切换,避免本地开发卡顿的情况**
-* 什么是SpringAI
- * Spring 生态中面向 AI 工程的应用框架,简化生成式 AI 的集成与开发
- * 支持跨模型兼容性(如 OpenAI、DeepSeek 等)和多种功能(聊天、嵌入、流式输出等)
- * 地址: https://spring.io/projects/spring-ai
-
-* 大模型服务平台百炼
- * 是一站式的大模型开发及应用构建平台。不论是开发者还是业务人员,都能深入参与大模型应用的设计和构建。
- * 可以通过简单的界面操作,在5分钟内开发出一款大模型应用,在几小时内训练出一个专属模型
- * 地址:https://bailian.console.aliyun.com/
-
-
-* 项目配置实战
-
- * 添加依赖
-
- * https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
-
- ```
+ ```xml
com.alibaba
dashscope-sdk-java
@@ -7117,34 +6818,20 @@ ollama run deepseek-r1:14b
```
- * 配置相关配置文件
+ - 配置相关配置文件
- ```
+ ```yaml
ai:
key: sk-571ca8cb9b7947a89d7d302e525c89dc
```
- * 配置基础代码
-
-
-
-
-
-
-
-
-
-
-
+ - 配置基础代码
+#### SpringBoot整合大模型调用实战《下》
-#### 第2集 SpringBoot整合大模型调用实战《下》
+- 编码实战
-**简介: SpringBoot整合大模型调用实战《下》**
-
-* 编码实战
-
- ```
+ ```java
@Value("${ai.key}")
private String apiKey;
@@ -7186,70 +6873,41 @@ ollama run deepseek-r1:14b
// 执行模型调用并返回结果
return gen.call(param);
}
-
```
+#### SpringBoot整合大模型链路测试实战
+- 测试案例测试(非流式输出)
+ - 参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api
+ - 下面的返回协议
+
-
-
-
-
-
-
-
-
-
-#### 第3集 SpringBoot整合大模型链路测试实战
-
-**简介: SpringBoot整合大模型链路测试实战**
-
-* 测试案例测试(非流式输出)
- * 参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/use-qwen-by-calling-api
- * 下面的返回协议
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 LLM大模型应用开发选Java还是Python
+#### LLM大模型应用开发选Java还是Python
**简洁:LLM大模型应用开发选Java还是Python**
-* **问题点:**
+- **问题点:**
- * **为什么很多企业招聘都是Java开发后端项目+Python封装模型服务?**
- * **LLM大模型应用开发选Java还是Python?**
+ - **为什么很多企业招聘都是Java开发后端项目+Python封装模型服务?**
+ - **LLM大模型应用开发选Java还是Python?**
-* **技术选型思考**
+- **技术选型思考**
- * 架构分层设计理念
+ - 架构分层设计理念
- * 企业级AI智能体开发采用分层架构,核心思想:
- * 前端交互层: 处理用户请求、界面渲染(Web/App)
- * 业务逻辑层(Java后端):企业级功能实现、数据管理、安全控制
- * AI模型层(Python ):大模型训练、推理、算法优化
+ - 企业级AI智能体开发采用分层架构,核心思想:
+ - 前端交互层: 处理用户请求、界面渲染(Web/App)
+ - 业务逻辑层(Java后端):企业级功能实现、数据管理、安全控制
+ - AI模型层(Python ):大模型训练、推理、算法优化
- * Java开发后端项目的核心优势
+ - Java开发后端项目的核心优势
| 维度 | Java优势 | 企业级场景示例 |
| :----------: | :----------------------------------------------: | :------------------------: |
@@ -7258,7 +6916,7 @@ ollama run deepseek-r1:14b
| **生态体系** | Spring全家桶(Boot/Cloud) + 微服务治理 | 分布式架构、服务熔断/限流 |
| **安全机制** | 完善的权限框架(Spring Security) + 企业级加密库 | 用户认证、支付网关接口 |
- * Python开发大模型的不可替代性
+ - Python开发大模型的不可替代性
| 维度 | Python优势 | AI开发场景示例 |
| :----------: | :---------------------------------------------------------: | :--------------------------------: |
@@ -7267,7 +6925,7 @@ ollama run deepseek-r1:14b
| **社区资源** | 丰富的预训练模型库 + 活跃的AI开发者社区 | 快速集成GPT-4、Llama2等模型 |
| **GPU支持** | CUDA深度集成 → 高效利用硬件加速 | 分布式训练、大模型推理优化 |
- * 交互链路
+ - 交互链路
```
[前端] ←HTTP→ [Java微服务集群] ←REST/gRPC→ [Python模型服务]
@@ -7277,68 +6935,52 @@ ollama run deepseek-r1:14b
[Kafka/RabbitMQ]
```
- * Python在Al领域占据主导地位
+ - Python在Al领域占据主导地位
- * 尤其是在机器学习和大模型方面。
- * 常见的技术包括深度学习框架如PyTorch、TensorFlow,模型服务化工具如FastAPl、Flask
- * 分布式训练库如Hugging Face Transformers、 DeepSpeed等
+ - 尤其是在机器学习和大模型方面。
+ - 常见的技术包括深度学习框架如PyTorch、TensorFlow,模型服务化工具如FastAPl、Flask
+ - 分布式训练库如Hugging Face Transformers、 DeepSpeed等
- * 对比Java的技术栈
+ - 对比Java的技术栈
- * Java在大模型开发中相对较少,但也有一些工具和框架,比如Deeplearning4j。
+ - Java在大模型开发中相对较少,但也有一些工具和框架,比如Deeplearning4j。
- * Java在传统后端服务方面有优势,但在直接处理大模型训练和推理方面不如Python成熟
+ - Java在传统后端服务方面有优势,但在直接处理大模型训练和推理方面不如Python成熟
- * 但Python在性能和高并发处理上可能不如Java,尤其是在微服务架构中。
+ - 但Python在性能和高并发处理上可能不如Java,尤其是在微服务架构中。
- * Java的优势在于高性能、成熟的生态系统,适合构建高并发的生产环境服务
+ - Java的优势在于高性能、成熟的生态系统,适合构建高并发的生产环境服务
- * **最终方案:Python负责模型推理,Java处理业务逻辑和APl网关,将Python的大模型服务与Java后端集成,比如通过REST API**
+ - **最终方案:Python负责模型推理,Java处理业务逻辑和APl网关,将Python的大模型服务与Java后端集成,比如通过REST API**
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 MaaS介绍和Python开发LLM技术选型
+#### MaaS介绍和Python开发LLM技术选型
**简介: MaaS介绍和Python开发LLM技术选型**
-* 什么是MaaS 模型服务(**可以认为就是调用尝试提供的在线LLM大模型API服务**)
+- 什么是MaaS 模型服务(**可以认为就是调用尝试提供的在线LLM大模型API服务**)
- * Model as a Service (模型即服务)是一种将AI模型以云端服务形式提供给用户的商业模式
+ - Model as a Service (模型即服务)是一种将AI模型以云端服务形式提供给用户的商业模式
- * 目标是通过**降低技术门槛**和**控制成本**,推动大模型技术的规模化应用
+ - 目标是通过**降低技术门槛**和**控制成本**,推动大模型技术的规模化应用
- * **模型层**
+ - **模型层**
- 核心AI能力层,提供可直接调用的模型服务(如API、SDK),支持语言、图像、推荐等多样化任务
- 示例:商汤科技通过MaaS提供DeepSeek模型服务,阿里的百炼平台提供多种模型服务
- * 关键点
+ - 关键点
- * 降低门槛:用户无需理解模型内部原理,通过API即可调用
- * 成本节约:按需付费模式避免自建算力设施的高额投入
- * 灵活性支持多模型切换(如通用大模型与行业模型协同)
- * 持续更新:服务商负责模型优化与维护,用户始终使用最新技术
+ - 降低门槛:用户无需理解模型内部原理,通过API即可调用
+ - 成本节约:按需付费模式避免自建算力设施的高额投入
+ - 灵活性支持多模型切换(如通用大模型与行业模型协同)
+ - 持续更新:服务商负责模型优化与维护,用户始终使用最新技术
- * 大厂的机会和挑战
+ - 大厂的机会和挑战
- * 成本压力(价格战,卷)
- * 部分厂商(如腾讯、华为)因算力成本高导致亏损,例如DeepSeek R1每百万token成本约150元,而服务定价仅16元
+ - 成本压力(价格战,卷)
+ - 部分厂商(如腾讯、华为)因算力成本高导致亏损,例如DeepSeek R1每百万token成本约150元,而服务定价仅16元
- 模式升级
@@ -7350,66 +6992,41 @@ ollama run deepseek-r1:14b
-* 技术选型架构图
+- 技术选型架构图
-
+ 
-* 开发AI大模型的Python技术选型(部分技术选型)
+- 开发AI大模型的Python技术选型(部分技术选型)
- * Python Web 服务框架
+ - Python Web 服务框架
- * FastAPI框架,对比就是Java的SpringBoot框架
- * 地址:https://github.com/fastapi/fastapi
+ - FastAPI框架,对比就是Java的SpringBoot框架
+ - 地址:https://github.com/fastapi/fastapi
- * 大模型开发框架
+ - 大模型开发框架
- * LangChain,统一多个大模型交互,让大模型开发工程化,通过这个对接很多大模型,方便切换
- * 地址:https://www.langchain.com/
+ - LangChain,统一多个大模型交互,让大模型开发工程化,通过这个对接很多大模型,方便切换
+ - 地址:https://www.langchain.com/
- * 对象验证模型
+ - 对象验证模型
- * Pydantic,对象参数验证封装,类似Hibernate Validator
- * 地址:https://pydantic.com.cn/
+ - Pydantic,对象参数验证封装,类似Hibernate Validator
+ - 地址:https://pydantic.com.cn/
- * 大模型调用监控
+ - 大模型调用监控
- * LangSmith,和业务系统的Prometheus监控一样
- * 地址:https://www.langchain.com/langsmith
+ - LangSmith,和业务系统的Prometheus监控一样
+ - 地址:https://www.langchain.com/langsmith
-* **现在 后端或者前端、测试同学的问题?**
-
- * **那如果不会Python怎么办?不担心,用1天时间教会大家Python核心语法和进阶使用**
-
-
-
-
-
-
-
-
-
+- **现在 后端或者前端、测试同学的问题?**
+ - **那如果不会Python怎么办?不担心,用1天时间教会大家Python核心语法和进阶使用**
+### AI大模型版-Python零基础极速上手实战
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第二十四章 AI大模型版-Python零基础极速上手实战
-
-
-
-#### 第1集 Python语言的前世今生和版本-编辑器说明
-
-**简介: Python语言的前世今生和版本-编辑器说明**
+#### Python语言的前世今生和版本-编辑器说明
* Python语言
@@ -7421,7 +7038,7 @@ ollama run deepseek-r1:14b
* **极简语法** 示例:用一行代码打印"Hello World"
- ```
+ ```python
print("Hello World!")
```
@@ -7429,7 +7046,7 @@ ollama run deepseek-r1:14b
* **动态类型** :变量类型自动判断(无需声明类型)
- ```
+ ```python
age = 25 # 自动识别为整数
name = "小滴课堂-老王" # 自动识别为字符串
```
@@ -7470,7 +7087,7 @@ ollama run deepseek-r1:14b
* 查看当前电脑是否有安装
- ```
+ ```python
# 查看当前Python版本
python --version
```
@@ -7485,23 +7102,7 @@ ollama run deepseek-r1:14b
| **Spyder** | IDE | 科学计算/数值分析 | 低 | 内置变量查看器、MATLAB风格界面 | [spyder-ide.org](https://www.spyder-ide.org/) |
| **Sublime Text** | 编辑器 | 快速编辑/轻量开发 | 中低 | 启动极快、多光标编辑 | [sublimetext.com](https://www.sublimetext.com/) |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 Python环境安装和编辑器安装实战
-
-**简介: Python环境安装和编辑器安装实战**
+#### Python环境安装和编辑器安装实战
* Python配置环境变量
@@ -7509,7 +7110,7 @@ ollama run deepseek-r1:14b
* 自己去官网下载(结合网上的博文搜索下安装和升级方式)
* 地址:https://www.python.org/
- 
+ 
* 编辑器 **Visual Studio Code(AI开发首选)**
@@ -7517,11 +7118,11 @@ ollama run deepseek-r1:14b
* 地址:https://code.visualstudio.com/Download
* 使用地址 https://code.visualstudio.com/docs/python/python-quick-start
- 
+ 
* 推荐插件组合
- ```
+ ```python
Python 微软官方支持
Pylance 类型提示增强
Python Snippets 编码技巧
@@ -7531,49 +7132,25 @@ ollama run deepseek-r1:14b
* 编辑器英文改中文
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-#### 第3集 Python标识符-缩进-注释-常见错误
-
-**简介: Python标识符-缩进-注释-常见错误**
+#### Python标识符-缩进-注释-常见错误
* 运行第一行代码(右下角选择Python解释器版本)
- ```
+ ```python
# 经典入门程序
print("Hello World!") # 打印输出
print(2 + 3 * 4) # 数学运算
```
-
+
* 标识符规则(变量/函数/类命名)
* 合法命名规范
- ```
+ ```python
# 正确示例
age = 18 # 纯字母
student_name = "冰冰" # 含下划线
@@ -7583,7 +7160,7 @@ ollama run deepseek-r1:14b
* 非法命名示例
- ```
+ ```python
2name = "错误" # ❌ 数字开头
class = "计算机" # ❌ 使用保留字
first-name = "张" # ❌ 含连字符
@@ -7602,7 +7179,7 @@ ollama run deepseek-r1:14b
* 单行注释
- ```
+ ```python
# 计算圆的面积(解释代码作用)
radius = 5
area = 3.14 * radius ** 2 # 公式 πr²
@@ -7610,7 +7187,7 @@ ollama run deepseek-r1:14b
* 多行注释
- ```
+ ```python
"""
作者:小滴课堂-二当家
日期:2030-10-01
@@ -7633,7 +7210,7 @@ ollama run deepseek-r1:14b
* Python 3.12全部保留字(35个)
- ```
+ ```python
# 查看当前版本关键字
import keyword
print(keyword.kwlist)
@@ -7650,7 +7227,7 @@ ollama run deepseek-r1:14b
* 行与缩进
- ```
+ ```python
# 正确缩进示例
if 10 > 5:
print("条件成立") # 缩进4个空格
@@ -7663,7 +7240,7 @@ ollama run deepseek-r1:14b
* 缩进错误
- ```
+ ```python
# 错误示例
def greet():
print("Hello") # ❌ 缺少缩进
@@ -7675,14 +7252,14 @@ ollama run deepseek-r1:14b
* 混用空格和Tab
- ```
+ ```python
# 文件统一使用4个空格缩进
# 在编辑器中设置:空格替代Tab
```
* 错误使用保留字
- ```
+ ```python
# 错误示例
class = "计算机科学" # ❌ class是关键字
@@ -7690,25 +7267,13 @@ ollama run deepseek-r1:14b
class_name = "计算机科学"
```
-
-
-
-
-
-
-
-
-
-
-#### 第4集 Python输出高级技巧和f-string字符串语法
-
-**简介: Python输出高级技巧和f-string字符串语法**
+#### Python输出高级技巧和f-string字符串语法
* print输出
* 基本语法
- ```
+ ```python
print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
```
@@ -7721,7 +7286,7 @@ ollama run deepseek-r1:14b
* 默认输出是换行的,如果要实现不换行需要在变量末尾加上 **end=" "**:
- ```
+ ```python
# 输出多个值
print("Hello", "Python", 2030) # Hello Python 2023
@@ -7735,7 +7300,7 @@ ollama run deepseek-r1:14b
* **str.format()**(推荐):
- ```
+ ```python
print("Name: {}, Age: {}".format(name, age)) # 按顺序填充
print("Name: {name}, Age: {age}".format(name="老王", age=30)) # 按关键字填充
```
@@ -7745,7 +7310,7 @@ ollama run deepseek-r1:14b
* f-string 格式化字符串以 f 开头,后跟着字符串,字符串中的表达式用大括号 {} 包起来,会将变量或表达式计算后的值替换
* 之前习惯用百分号 (%),现在更简单,不用再去判断使用 %s,还是 %d
- ```
+ ```python
name = "小明"
age = 18
print(f"姓名:{name},年龄:{age}") # 姓名:小明,年龄:18
@@ -7753,7 +7318,7 @@ ollama run deepseek-r1:14b
* 支持任意合法的Python表达式:
- ```
+ ```python
# 数学运算
print(f"结果:{3 * 4 + 5}") # 结果:17
@@ -7764,7 +7329,7 @@ ollama run deepseek-r1:14b
* 常见错误
- ```
+ ```python
# 错误示例1:忘记f前缀
name = "韩梅梅"
print("姓名:{name}") # 不会报错,但输出原样文本
@@ -7782,30 +7347,14 @@ ollama run deepseek-r1:14b
* `f-string`中不能使用反斜杠转义字符(如`\n`),需用变量代替
* 速度对比
- ```
+ ```python
# 速度测试对比(1,000,000次):
# f-string: 0.12秒
# format方法: 0.25秒
# %格式化: 0.18秒
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 Python用户输入和模块导入模块讲解
-
-**简介: Python用户输入和模块导入模块讲解**
+#### Python用户输入和模块导入模块讲解
* 用户输入
@@ -7813,13 +7362,13 @@ ollama run deepseek-r1:14b
* 基本语法
- ```
+ ```python
user_input = input("提示信息:")
```
* 案例代码
- ```
+ ```python
# 基本输入
name = input("请输入姓名:")
print(f"你好,{name}!")
@@ -7851,14 +7400,14 @@ ollama run deepseek-r1:14b
* 导入整个模块
- ```
+ ```python
import math
print(math.sqrt(16)) # 4.0
```
* 导入特定功能
- ```
+ ```python
from math import sqrt, pi
print(sqrt(16)) # 4.0
print(pi) # 3.141592653589793
@@ -7866,7 +7415,7 @@ ollama run deepseek-r1:14b
* 相对导入(包内使用)
- ```
+ ```python
# 在 mypackage/sub/mod.py 中
from .. import utils # 上级目录导入
from . import helper # 同级目录导入
@@ -7879,7 +7428,7 @@ ollama run deepseek-r1:14b
- 标准库模块 → 第三方库 → 自定义模块
- 绝对导入优先于相对导入
- ```
+ ```python
# 推荐
import numpy as np
from django.db import models
@@ -7890,24 +7439,14 @@ ollama run deepseek-r1:14b
* 案例作业
- ```
+ ```python
# 导入自定义模块
# 假设存在一个 my_module.py,内容为:def greet(): print("Hello!")
import my_module
my_module.greet() # Hello!
```
-
-
-
-
-
-
-
-
-#### 第6集 Python的变量和常见数据类型讲解
-
-**简介: Python的变量和常见数据类型讲解**
+#### Python的变量和常见数据类型讲解
* 变量
@@ -7936,7 +7475,7 @@ ollama run deepseek-r1:14b
* 数据容器(序列)是一种可以存储多个元素的Python数据类型,包含:**list(列表)、tuple(元组)、str(字符串)、set(集合)、dict(字典)**
- ```
+ ```python
1. 数字类型(Numbers)
- 整数(int)
- 浮点数(float)
@@ -7985,7 +7524,7 @@ ollama run deepseek-r1:14b
* 特点:无大小限制,支持二进制(0b1010)、八进制(0o12)、十六进制(0x1A)
* 案例:
- ```
+ ```python
a = 10 # 十进制
b = 0b1010 # 二进制 → 10
c = 1_000_000 # 分隔符增强可读性(Python3.6+)
@@ -7998,7 +7537,7 @@ ollama run deepseek-r1:14b
* 特点:带小数点的数,可用科学计数法(2.5e3 = 2500.0)
* **案例**:
- ```
+ ```python
x = 3.14
y = 2.5e-3 # 0.0025
```
@@ -8008,31 +7547,16 @@ ollama run deepseek-r1:14b
* 取值:True(1) / False(0)
* 案例
- ```
+ ```python
is_active = True
print(int(is_active)) # 1
```
+### AI大模型版-Python核心数据类型讲解
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第二十五章 AI大模型版-Python核心数据类型讲解
-
-
-
-#### 第1集 Python的字符串和常见方法操作
-
-**简介: Python的字符串和常见方法操作**
+#### Python的字符串和常见方法操作
* 字符串基础
@@ -8040,7 +7564,7 @@ ollama run deepseek-r1:14b
* 字符串一旦创建,内容不可修改(修改会创建新对象)
- ```
+ ```python
s1 = '单引号字符串'
s2 = "双引号字符串"
s3 = '''三引号支持
@@ -8059,7 +7583,7 @@ ollama run deepseek-r1:14b
* 索引与切片
- ```
+ ```python
s = "Python"
print(s[0]) # P(正向索引,从0开始)
print(s[-1]) # n(反向索引,从-1开始)
@@ -8072,7 +7596,7 @@ ollama run deepseek-r1:14b
* 大小写转换
- ```
+ ```python
s = "Hello, Python"
print(s.upper()) # HELLO, PYTHON
print(s.lower()) # hello, python
@@ -8082,7 +7606,7 @@ ollama run deepseek-r1:14b
* 查找和替换
- ```
+ ```python
s = "Hello World"
# 查找子串位置
print(s.find("World")) # 6(返回首次出现的索引,找不到返回-1)
@@ -8097,7 +7621,7 @@ ollama run deepseek-r1:14b
* 字符串分割与连接
- ```
+ ```python
# 分割为列表
s = "apple,banana,orange"
print(s.split(",")) # ['apple', 'banana', 'orange']
@@ -8113,7 +7637,7 @@ ollama run deepseek-r1:14b
* 去除空白与填充
- ```
+ ```python
s = " Python "
print(s.strip()) # "Python"(去除两侧空白)
print(s.lstrip()) # "Python "(去左空白)
@@ -8129,7 +7653,7 @@ ollama run deepseek-r1:14b
* 旧式格式化(%)
- ```
+ ```python
name = "Alice"
age = 25
print("Name: %s, Age: %d" % (name, age)) # Name: Alice, Age: 25
@@ -8137,14 +7661,14 @@ ollama run deepseek-r1:14b
* str.format()
- ```
+ ```python
print("{} + {} = {}".format(3, 5, 8)) # 3 + 5 = 8(按顺序)
print("{name}喜欢{language}".format(name="小明", language="Python")) # 关键字参数
```
* f-string(Python 3.6+)
- ```
+ ```python
price = 19.99
print(f"价格:{price:.2f}元") # 价格:19.99元(保留两位小数)
```
@@ -8159,25 +7683,7 @@ ollama run deepseek-r1:14b
| `startswith()` | 判断是否以某子串开头 | `"file.txt".startswith("file") → True` |
| `endswith()` | 判断是否以某子串结尾 | `"image.jpg".endswith(".jpg") → True` |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 Python常用自带初级函数讲解
-
-**简介: Python常用自带初级函数讲解**
+#### Python常用自带初级函数讲解
* Python很多函数,没法一个个记住,掌握高频的使用的即可
@@ -8190,7 +7696,7 @@ ollama run deepseek-r1:14b
* **功能**:输出内容到控制台
* **参数**:`*values`(多个值)、`sep`(分隔符)、`end`(结束符)
- ```
+ ```python
print("Hello", "World", sep=", ", end="!") # Hello, World!
```
@@ -8200,7 +7706,7 @@ ollama run deepseek-r1:14b
* **参数**:`prompt`(提示信息)
* **案例**:
- ```
+ ```python
name = input("请输入姓名:")
print(f"你好,{name}!")
```
@@ -8212,7 +7718,7 @@ ollama run deepseek-r1:14b
* **功能**:强制类型转换
* **案例**
- ```
+ ```python
num = int("123") # 字符串→整数 → 123
price = float("9.9") # 字符串→浮点数 → 9.9
text = str(100) # 整数→字符串 → "100"
@@ -8223,7 +7729,7 @@ ollama run deepseek-r1:14b
* **功能**:创建或转换容器类型
* **案例**:
- ```
+ ```python
# 1. 字符串转列表(按字符拆分)
chars = list("Python")
print(chars) # 输出:['P', 'y', 't', 'h', 'o', 'n']
@@ -8289,7 +7795,7 @@ ollama run deepseek-r1:14b
* **参数**:`start`, `stop`, `step`
* **案例**
- ```
+ ```python
range(stop) # 生成 [0, stop) 的整数序列,步长=1
range(start, stop) # 生成 [start, stop) 的整数序列,步长=1
range(start, stop, step) # 生成 [start, stop) 的整数序列,步长=step
@@ -8311,7 +7817,7 @@ ollama run deepseek-r1:14b
* **功能**:获取容器长度(字符串、列表、字典等)
* **案例**
- ```
+ ```python
text = "Python"
print(len(text)) # 6
```
@@ -8321,7 +7827,7 @@ ollama run deepseek-r1:14b
* **功能**:计算总和、最大值、最小值
* **案例**
- ```
+ ```python
nums = [1, 2, 3]
print(sum(nums)) # 6
print(max(nums)) # 3
@@ -8334,7 +7840,7 @@ ollama run deepseek-r1:14b
* **功能**:获取当前时间戳(单位:秒)从1970年到现在的秒数
* **案例**:
- ```
+ ```python
import time
start = time.time()
time.sleep(2) # 暂停2秒
@@ -8348,39 +7854,19 @@ ollama run deepseek-r1:14b
* **功能**:格式化时间
* **案例**:
- ```
+ ```python
import time
now = time.strftime("%Y-%m-%d %H:%M:%S")
print(now) # 2030-10-01 14:30:00
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 Python的列表List和常见方法操作
-
-**简介: Python的列表List和常见方法操作**
+#### Python的列表List和常见方法操作
* 列表List
* 定义方式
- ```
+ ```python
list1 = [1, 2, 3] # 直接定义
list2 = list("abc") # 通过可迭代对象转换 → ['a', 'b', 'c']
list3 = [] # 空列表
@@ -8395,7 +7881,7 @@ ollama run deepseek-r1:14b
* 索引与切片
- ```
+ ```python
lst = ["a", "b", "c", "d", "e"]
# 索引
print(lst[0]) # a(正向索引,从0开始)
@@ -8437,19 +7923,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-
-
-#### 第4集 Python的字典Dict和常见方法操作
-
-**简介: Python的字典Dict和常见方法操作**
+#### Python的字典Dict和常见方法操作
* 字典Dict
@@ -8475,7 +7949,7 @@ ollama run deepseek-r1:14b
* 增删改查
- ```
+ ```python
student = {"name": "Alice", "age": 20}
# 查:通过键访问
@@ -8507,7 +7981,7 @@ ollama run deepseek-r1:14b
* 键不可变:列表、字典等可变类型不能作为键。
- ```
+ ```python
# 错误示例:列表作为键
invalid_dict = {["id"]: 1001} # TypeError: unhashable type: 'list'
```
@@ -8518,7 +7992,7 @@ ollama run deepseek-r1:14b
* 统计单词频率
- ```
+ ```python
text = "apple banana apple orange banana apple"
words = text.split()
word_count = {}
@@ -8529,23 +8003,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 Python的元组Tulple和常见方法操作
-
-**简介: Python的元组Tulple和常见方法操作**
+#### Python的元组Tulple和常见方法操作
* 元组Tulple
@@ -8553,7 +8011,7 @@ ollama run deepseek-r1:14b
* 语法:使用圆括号 `()`,元素用逗号分隔(**单元素元组必须加逗号**)
* 元组比列表更轻量,适用于只读场景。
- ```
+ ```python
t1 = () # 空元组
t2 = (1,) # 单元素元组 → (1,)
t3 = (1, "a", True) # 混合类型
@@ -8564,7 +8022,7 @@ ollama run deepseek-r1:14b
* 不可变性:元组一旦创建,元素不能增删改(但可包含可变元素,如列表,可以修改这个里面的内容)
- ```
+ ```python
t = (1, 2, 3)
t[0] = 100 # 报错:TypeError(不可修改元素)
@@ -8581,14 +8039,14 @@ ollama run deepseek-r1:14b
* **单元素元组的逗号**:单元素必须加逗号,否则视为普通变量
- ```
+ ```python
t = (1,) # 正确 → 元组
t = (1) # 错误 → 整数1
```
* 元组真的完全不可变吗?元组本身的引用不可变,但若包含可变元素(如列表),其内部可修改
- ```
+ ```python
t = (1, [2, 3])
t[1].append(4) # 合法 → (1, [2,3,4])
```
@@ -8601,21 +8059,21 @@ ollama run deepseek-r1:14b
* count(obj) 统计元素出现的次数
- ```
+ ```python
t = (1, 2, 2, 3, 2)
print(t.count(2)) # 3
```
* index(obj) 返回元素首次出现的索引(找不到时报错)
- ```
+ ```python
t = ("a", "b", "c", "b")
print(t.index("b")) # 1
```
* 索引与切片
- ```
+ ```python
t = (10, 20, 30, 40, 50)
# 索引
@@ -8629,7 +8087,7 @@ ollama run deepseek-r1:14b
* 元组拼接与重复
- ```
+ ```python
t1 = (1, 2)
t2 = (3, 4)
@@ -8643,7 +8101,7 @@ ollama run deepseek-r1:14b
* 元组普通解包(Unpacking)
- ```
+ ```python
a, b, c = (10, 20, 30)
print(a, b, c) # 10 20 30
```
@@ -8652,7 +8110,7 @@ ollama run deepseek-r1:14b
* 学生信息存储与解包
- ```
+ ```python
student = ("小滴课堂-老王", 20, "Computer Science")
name, age, major = student
print(f"{name}主修{major}") # 小滴课堂-老王主修Computer Science
@@ -8660,28 +8118,14 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第6集 Python的集合Set和常见方法操作
-
-**简介: Python的集合Set和常见方法操作**
+#### Python的集合Set和常见方法操作
* 集合Set
* 集合是一个**无序、不重复元素**的容器,元素必须是不可变类型(如数字、字符串、元组)
* 集合与字典的关系, 字典的键集合类似集合,但字典存储键值对,集合仅存储键。
- ```
+ ```python
# 创建集合
s1 = {1, 2, 3} # 直接定义
s2 = set([1, 2, 2, 3]) # 通过可迭代对象 → {1, 2, 3}
@@ -8698,7 +8142,7 @@ ollama run deepseek-r1:14b
* 不可变版本的集合,不可增删元素,可哈希(可作为字典的键)
- ```
+ ```python
fs = frozenset([1, 2, 3])
```
@@ -8706,14 +8150,14 @@ ollama run deepseek-r1:14b
* 集合元素无顺序,无法通过索引访问
- ```
+ ```python
s = {3, 1, 2}
print(list(s)) # 输出顺序不确定(如 [1,2,3] 或 [3,1,2])
```
* 如何创建空集合?
- ```
+ ```python
s = set() # 正确(空集合)
s = {} # 错误(创建的是空字典)
```
@@ -8754,7 +8198,7 @@ ollama run deepseek-r1:14b
* 去重
- ```
+ ```python
lst = [1, 2, 2, 3, 3, 3]
unique = set(lst) # {1, 2, 3}
new_lst = list(unique) # [1, 2, 3](但顺序可能丢失)
@@ -8762,7 +8206,7 @@ ollama run deepseek-r1:14b
* 集合运算应用
- ```
+ ```python
# 统计两个列表的共同元素
list1 = [1, 2, 3]
list2 = [2, 3, 4]
@@ -8771,7 +8215,7 @@ ollama run deepseek-r1:14b
* 权限管理系统
- ```
+ ```python
# 用户权限集合
user_permissions = {"read", "write"}
required_permissions = {"write", "execute"}
@@ -8786,24 +8230,9 @@ ollama run deepseek-r1:14b
+### AI大模型版-逻辑判断和多种高级循环实战
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第二十六章 AI大模型版-逻辑判断和多种高级循环实战
-
-
-
-#### 第1集 Python逻辑判断和比较运算符
-
-**简介: Python逻辑判断和比较运算符**
+#### Python逻辑判断和比较运算符
* 比较运算符
@@ -8839,7 +8268,7 @@ ollama run deepseek-r1:14b
* 语法:结果1 if 条件 else 结果2
- ```
+ ```python
# 返回两个数中的较大值
a, b = 5, 10
max_value = a if a > b else b # 10
@@ -8851,7 +8280,7 @@ ollama run deepseek-r1:14b
* 基本语法
- ```
+ ```python
if 条件1:
代码块1
elif 条件2:
@@ -8862,7 +8291,7 @@ ollama run deepseek-r1:14b
* 案例代码
- ```
+ ```python
# 判断成绩等级
score = 85
if score >= 90:
@@ -8873,31 +8302,13 @@ ollama run deepseek-r1:14b
print("C")
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 Python常见循环语法和循环控制语句
-
-**简介: Python常见循环语法和循环控制语句**
+#### Python常见循环语法和循环控制语句
* for循环基础
* 语法
- ```
+ ```python
for 变量 in 可迭代对象:
循环体代码
```
@@ -8906,7 +8317,7 @@ ollama run deepseek-r1:14b
* 遍历列表
- ```
+ ```python
teachers = ["老帆", "冰冰", "Anna"]
for t in teachers:
print(f"老王 love 小滴课堂 {t}!")
@@ -8919,7 +8330,7 @@ ollama run deepseek-r1:14b
* 遍历字符串
- ```
+ ```python
word = "小滴课堂"
for char in word:
print(char.upper(), end=" ") # 小 滴 课 堂
@@ -8927,7 +8338,7 @@ ollama run deepseek-r1:14b
* 遍历字典
- ```
+ ```python
# 遍历字典
dict1 = {"Monday": "星期一", "Tuesday": "星期二"}
for key in dict1.keys():
@@ -8936,7 +8347,7 @@ ollama run deepseek-r1:14b
* 结合range函数 生成整数序列
- ```
+ ```python
for j in range(1, 5):
print(j) # 输出1,2,3,4
```
@@ -8947,7 +8358,7 @@ ollama run deepseek-r1:14b
* 语法
- ```
+ ```python
while 条件表达式:
循环体代码
```
@@ -8956,7 +8367,7 @@ ollama run deepseek-r1:14b
* 计数器
- ```
+ ```python
count = 0
while count < 5:
print(f"Count: {count}")
@@ -8972,7 +8383,7 @@ ollama run deepseek-r1:14b
* 用户输入验证
- ```
+ ```python
password = ""
while password != "secret123":
password = input("Enter password: ")
@@ -8983,7 +8394,7 @@ ollama run deepseek-r1:14b
* break:立即终止循环
- ```
+ ```python
for num in range(10):
if num == 5:
break
@@ -8992,7 +8403,7 @@ ollama run deepseek-r1:14b
* continue:跳过当前迭代
- ```
+ ```python
for num in range(10):
if num % 2 == 0:
continue
@@ -9001,17 +8412,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-#### 第3集 Python高级for循环列表推导式案例实战
-
-**简介: Python高级for循环语法和案例实战**
+#### Python高级for循环列表推导式案例实战
* 什么是推导式
@@ -9035,7 +8436,7 @@ ollama run deepseek-r1:14b
* 案例:生成1-10的平方列表
- ```
+ ```python
squares = [x**2 for x in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
```
@@ -9044,7 +8445,7 @@ ollama run deepseek-r1:14b
* 等价于
- ```
+ ```python
new_list = []
for item in iterable:
if condition:
@@ -9064,7 +8465,7 @@ ollama run deepseek-r1:14b
* 案例:筛选偶数
- ```
+ ```python
evens = [x for x in range(20) if x % 2 == 0]
print(evens) # [0, 2, 4, ..., 18]
```
@@ -9075,7 +8476,7 @@ ollama run deepseek-r1:14b
* 案例:数值转换
- ```
+ ```python
nums = [12, -5, 8, -3, 0]
abs_nums = [x if x >= 0 else -x for x in nums]
print(abs_nums) # [12, 5, 8, 3, 0]
@@ -9087,7 +8488,7 @@ ollama run deepseek-r1:14b
* 考试成绩转换,转换为等级制(80分以上为A,其他为B)
- ```
+ ```python
# 原始成绩列表
scores = [78, 92, 65, 88, 54]
@@ -9098,17 +8499,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-#### 第4集 Python高级推导式字典-元组-集合
-
-**简介: Python高级推导式字典-元组-集合**
+#### Python高级推导式字典-元组-集合
* 字典推导
@@ -9123,7 +8514,7 @@ ollama run deepseek-r1:14b
* **键值转换**
- ```
+ ```python
# 反转字典的键值对
original = {'a': 1, 'b': 2, 'c': 3}
reversed_dict = {v: k for k, v in original.items()}
@@ -9132,7 +8523,7 @@ ollama run deepseek-r1:14b
* **复杂数据重组**
- ```
+ ```python
students = [
{'name': 'Alice', 'math': 85, 'english': 90},
{'name': 'Bob', 'math': 78, 'english': 82},
@@ -9158,7 +8549,7 @@ ollama run deepseek-r1:14b
* **交集和并集案例**
- ```
+ ```python
A = {1, 2, 3}
B = {3, 4, 5}
@@ -9172,7 +8563,7 @@ ollama run deepseek-r1:14b
* **数据去重**
- ```
+ ```python
words = ['apple', 'banana', 'apple', 'orange', 'banana']
unique_words = {word.upper() for word in words}
print(unique_words) # {'APPLE', 'BANANA', 'ORANGE'}
@@ -9180,7 +8571,7 @@ ollama run deepseek-r1:14b
* **特征提取**
- ```
+ ```python
text = "The quick brown fox jumps over the lazy dog"
vowels = {'a', 'e', 'i', 'o', 'u'}
@@ -9207,7 +8598,7 @@ ollama run deepseek-r1:14b
* 生成一个包含数字 1~9 的元组
- ```
+ ```python
a = (x for x in range(1,10)) # 返回的a是生成器对象
tuple(a) # 使用 tuple()函数,将生成器对象转换成元组
@@ -9216,21 +8607,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 Python迭代器介绍和常见方法讲解
-
-**简介: Python迭代器介绍和常见方法讲解**
+#### Python迭代器介绍和常见方法讲解
* 什么迭代器
@@ -9253,7 +8630,7 @@ ollama run deepseek-r1:14b
* `__next__()`用于从迭代器中返回下一个值,如果没有可返回值,抛出 `StopIteration`异常,用next() 函数来触发它。
* 常见可迭代对象:列表、元组、字符串、字典、集合、文件对象、生成器
- ```
+ ```python
# 验证可迭代对象
from collections.abc import Iterable
@@ -9270,7 +8647,7 @@ ollama run deepseek-r1:14b
* 使用常规for语句进行遍历
- ```
+ ```python
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
@@ -9282,7 +8659,7 @@ ollama run deepseek-r1:14b
* 使用 next() 函数
* `next()` 函数用于从迭代器中获取下一个元素。
- ```
+ ```python
# 手动使用迭代器
numbers = [1, 2, 3]
iterator = iter(numbers)
@@ -9297,7 +8674,7 @@ ollama run deepseek-r1:14b
* `for` 循环实际上是通过调用 `iter()` 和 `next()` 来实现的。
- ```
+ ```python
for item in my_list:
print(item)
@@ -9314,15 +8691,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-#### 第6集 如何自定义迭代器和生成器案例实战
-
-**简介: 自定义迭代器和生成器案例实战**
+#### 如何自定义迭代器和生成器案例实战
* 如何自定义迭代器?
@@ -9331,7 +8700,7 @@ ollama run deepseek-r1:14b
* `__next__()` 返回下一个元素,如果没有更多元素,则抛出 StopIteration 异常。
* 示例:自定义一个范围迭代器
- ```
+ ```python
# __xxx__ 形式的方法被称为魔术方法或特殊方法,有特殊的名称和用途,通常用于实现某些内置操作, 例如,__init__ 用于对象初始化
# self是一个具有特殊意义的参数,是一个约定俗成的名称,代表类的实例本身。当定义一个类的方法(成员函数)时,按照惯例,第一个参数通常被命名为self
# 在Python中,self是一个显式传递的参数,而在Java中,this是一个隐式的引用
@@ -9369,7 +8738,7 @@ ollama run deepseek-r1:14b
* 每调用生成器的 **next()** 方法进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 **yield** 语句。
* 生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果
- ```
+ ```python
def lifecycle_gen():
print("Stage 1")
yield "A"
@@ -9392,7 +8761,7 @@ ollama run deepseek-r1:14b
* 案例二: 使用生成器实现无限序列,例如自然数序列
- ```
+ ```python
def natural_numbers():
num = 1
while True:
@@ -9427,22 +8796,9 @@ ollama run deepseek-r1:14b
+### AI大模型版-高级函数和Lambda实战
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第二十七章 AI大模型版-高级函数和Lambda实战
-
-#### 第1集 Python的函数语法规范和返回值语法
-
-**简介: Python的函数语法规范和返回值语法**
+#### Python的函数语法规范和返回值语法
* 函数语法格式
@@ -9450,7 +8806,7 @@ ollama run deepseek-r1:14b
* 格式如下
- ```
+ ```python
def 函数名(参数):
"""文档字符串(可选)"""
代码块
@@ -9459,7 +8815,7 @@ ollama run deepseek-r1:14b
* 案例:计算两个数的和
- ```
+ ```python
def add(a, b):
"""返回a + b的结果"""
result = a + b
@@ -9473,7 +8829,7 @@ ollama run deepseek-r1:14b
* **不可变对象**(如整数、字符串、元组):函数内修改会创建新对象,不影响原数据。
- ```
+ ```python
def modify_num(n):
n += 10
print("函数内n:", n) # 20
@@ -9485,7 +8841,7 @@ ollama run deepseek-r1:14b
* **可变对象**(如列表、字典):函数内修改直接影响原对象。
- ```
+ ```python
def modify_list(lst):
lst.append(4)
print("函数内lst:", lst) # [1,2,3,4]
@@ -9504,7 +8860,7 @@ ollama run deepseek-r1:14b
* 返回单个值
- ```
+ ```python
def square(n):
return n ** 2
@@ -9513,7 +8869,7 @@ ollama run deepseek-r1:14b
* 返回多个值(元组解包)
- ```
+ ```python
def calculate(a, b):
return a + b, a - b, a * b
@@ -9523,7 +8879,7 @@ ollama run deepseek-r1:14b
* 无返回值(隐式返回None)
- ```
+ ```python
def greet(name):
print(f"Hello, {name}!")
@@ -9551,7 +8907,7 @@ ollama run deepseek-r1:14b
* 必须显式赋值
- ```
+ ```python
# 错误示范:不能直接声明未初始化的变量
x = # SyntaxError
@@ -9562,7 +8918,7 @@ ollama run deepseek-r1:14b
* 作为默认参数
- ```
+ ```python
def greet(name=None):
print(f"Hello, {name or 'Guest'}!")
@@ -9573,7 +8929,7 @@ ollama run deepseek-r1:14b
* 学生成绩分析器,接收成绩列表,返回最高分、平均分
- ```
+ ```python
def analyze_scores(scores):
"""接收成绩列表,返回最高分、平均分"""
max_score = max(scores)
@@ -9585,29 +8941,9 @@ ollama run deepseek-r1:14b
print(f"最高分:{max_val}, 平均分:{avg_val:.1f}")
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 Python参数类型高阶语法特性讲解
-
-**简介: Python参数类型高阶语法特性讲解**
+#### Python参数类型高阶语法特性讲解
* 函数参数类型
@@ -9623,7 +8959,7 @@ ollama run deepseek-r1:14b
* 定义:按参数定义顺序传递,数量必须匹配。
- ```
+ ```python
def greet(name, message):
print(f"{message}, {name}!")
@@ -9634,7 +8970,7 @@ ollama run deepseek-r1:14b
* 定义:按参数名指定,顺序可打乱
- ```
+ ```python
greet(message="Hi", name="Bob") # Hi, Bob!
```
@@ -9643,7 +8979,7 @@ ollama run deepseek-r1:14b
* **定义**:参数定义时指定默认值,调用时可省略。
- ```
+ ```python
def register(name, age=18, city="北京"):
print(f"姓名:{name}, 年龄:{age}, 城市:{city}")
@@ -9655,7 +8991,7 @@ ollama run deepseek-r1:14b
* **定义**:接收任意数量的位置参数,打包为元组。
- ```
+ ```python
def sum_numbers(*args):
return sum(args)
@@ -9667,7 +9003,7 @@ ollama run deepseek-r1:14b
* **定义**:接收任意数量的关键字参数,打包为字典。
- ```
+ ```python
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
@@ -9683,7 +9019,7 @@ ollama run deepseek-r1:14b
* **标准顺序**:`位置参数 → 默认参数 → *args → **kwargs`
- ```
+ ```python
def add(a, b, c):
return a + b + c
@@ -9696,7 +9032,7 @@ ollama run deepseek-r1:14b
* 列表/元组解包为位置参数(*)
- ```
+ ```python
def add(a, b, c):
return a + b + c
@@ -9706,7 +9042,7 @@ ollama run deepseek-r1:14b
* 字典解包为关键字参数( ** )
- ```
+ ```python
def greet(name, message):
print(f"{message}, {name}!")
@@ -9719,7 +9055,7 @@ ollama run deepseek-r1:14b
* 参数顺序错误
- ```
+ ```python
# 错误:位置参数在关键字参数后
func(a=1, 2) # SyntaxError
@@ -9734,7 +9070,7 @@ ollama run deepseek-r1:14b
* 混合参数类型
- ```
+ ```python
def complex_func(a, b, c=0, *args, **kwargs):
print("a:", a)
print("b:", b)
@@ -9754,7 +9090,7 @@ ollama run deepseek-r1:14b
* 动态生成SQL查询
- ```
+ ```python
def build_sql(table, **conditions):
query = f"SELECT * FROM {table}"
if conditions:
@@ -9769,19 +9105,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-
-
-#### 第3集 匿名函数Lambda讲解和案例实战
-
-**简介: 匿名函数Lambda讲解和案例实战**
+#### 匿名函数Lambda讲解和案例实战
* 什么是Lambda函数
@@ -9790,7 +9114,7 @@ ollama run deepseek-r1:14b
- **无名称**:无需`def`关键字定义。
- **单行表达式**:只能包含一个表达式,不能有代码块或复杂逻辑; 可以设置多个参数,参数使用逗号 **,** 隔开
- ```
+ ```python
# 示例1:加法函数
add = lambda a, b: a + b
print(add(3, 5)) # 8
@@ -9824,7 +9148,7 @@ ollama run deepseek-r1:14b
| **函数作为参数传递** | 必须使用Lambda | 无法直接替代 |
| **性能** | 相近(但生成器更节省内存) | 相近 |
- ```
+ ```python
# 示例:筛选偶数并平方
numbers = [1, 2, 3, 4, 5]
@@ -9843,7 +9167,7 @@ ollama run deepseek-r1:14b
* 仅限单个表达式,无法包含复杂逻辑(如循环、多条件分支)
- ```
+ ```python
# 错误示例:Lambda中不能包含if-else代码块
invalid = lambda x: if x > 0: x else -x # SyntaxError
@@ -9854,7 +9178,7 @@ ollama run deepseek-r1:14b
* 可读性较低, 过度使用会降低代码可读性,尤其是嵌套Lambda
- ```
+ ```python
# 复杂Lambda示例(不推荐)
complex_lambda = lambda x: (lambda y: x + y)(10)
print(complex_lambda(5)) # 15
@@ -9863,31 +9187,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 数据处理领域Python高阶函数实战
-
-**简介: 数据处理领域Python高阶函数实战**
+#### 数据处理领域Python高阶函数实战
* 什么是高阶函数
@@ -9907,7 +9207,7 @@ ollama run deepseek-r1:14b
* 功能:对可迭代对象的每个元素应用func,返回迭代器。
* 示例:将列表元素平方
- ```
+ ```python
numbers = [1, 2, 3, 4]
squared = map(lambda x: x**2, numbers)
print(list(squared)) # [1, 4, 9, 16]
@@ -9915,7 +9215,7 @@ ollama run deepseek-r1:14b
* 对比列表推导式
- ```
+ ```python
squared = [x**2 for x in numbers] # 结果相同,但立即生成列表
```
@@ -9924,7 +9224,7 @@ ollama run deepseek-r1:14b
* 功能:筛选满足func条件为True的元素,返回迭代器。
* 示例:过滤偶数
- ```
+ ```python
even = filter(lambda x: x % 2 == 0, numbers)
print(list(even)) # [2, 4]
```
@@ -9942,7 +9242,7 @@ ollama run deepseek-r1:14b
* 应用场景:累积计算(求和、求积、合并字典等)。
* 示例:计算乘积
- ```
+ ```python
from functools import reduce
product = reduce(lambda a, b: a * b, [1, 2, 3, 4])
print(product) # 24(计算过程:((1*2)*3)*4)
@@ -9953,7 +9253,7 @@ ollama run deepseek-r1:14b
* 功能:排序可迭代对象,key指定排序规则。
* 示例:按字符串长度排序
- ```
+ ```python
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # ['date', 'apple', 'banana', 'cherry']
@@ -9963,7 +9263,7 @@ ollama run deepseek-r1:14b
* 数据清洗管道
- ```
+ ```python
data = [5, 12, 8, "10", 3.5, "7"]
# 步骤1:过滤非整数
@@ -9976,7 +9276,7 @@ ollama run deepseek-r1:14b
* 字典合并(使用reduce)
- ```
+ ```python
from functools import reduce
dicts = [{"a": 1}, {"b": 2}, {"a": 3, "c": 4}]
@@ -9991,7 +9291,7 @@ ollama run deepseek-r1:14b
* map、filter返回迭代器,适合处理大数据(逐项处理,不一次性加载到内存)
- ```
+ ```python
large_data = range(1_000_000)
squared_iter = map(lambda x: x**2, large_data) # 内存友好
```
@@ -10000,7 +9300,7 @@ ollama run deepseek-r1:14b
* **避免过度嵌套**:复杂的`lambda`或链式调用可能降低代码可读性。
- ```
+ ```python
# 不推荐:难以理解的嵌套
result = map(lambda x: x*2, filter(lambda x: x>5, data))
@@ -10017,30 +9317,9 @@ ollama run deepseek-r1:14b
+### AI大模型版-Python异常处理和OOP编程
-
-
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第二十八章 AI大模型版-Python异常处理和OOP编程
-
-
-
-#### 第1集 异常处理Try-Except语法案例实战
-
-**简介: 异常处理Try-Except语法案例实战**
+#### 异常处理Try-Except语法案例实战
* 为什么需要异常处理
@@ -10050,7 +9329,7 @@ ollama run deepseek-r1:14b
* 基本语法
- ```
+ ```python
try:
# 可能引发异常的代码
代码块
@@ -10084,7 +9363,7 @@ ollama run deepseek-r1:14b
* 基础异常捕获
- ```
+ ```python
try:
num = int(input("请输入一个数字:"))
result = 100 / num
@@ -10103,7 +9382,7 @@ ollama run deepseek-r1:14b
* 捕获多个异常
- ```
+ ```python
try:
with open("data.txt", "r") as f:
content = f.read()
@@ -10113,7 +9392,7 @@ ollama run deepseek-r1:14b
* 自定义异常类
- ```
+ ```python
class InvalidAgeError(Exception):
"""年龄无效异常"""
def __init__(self, age):
@@ -10135,15 +9414,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-#### 第2集 Python面向对象编程OOP编程语法
+#### Python面向对象编程OOP编程语法
**简介: Python面向对象编程OOP编程语法**
@@ -10151,7 +9422,7 @@ ollama run deepseek-r1:14b
* 基本结构
- ```
+ ```python
class 类名:
"""类文档字符串"""
@@ -10196,7 +9467,7 @@ ollama run deepseek-r1:14b
* 案例代码
- ```
+ ```python
class Dog:
# 类属性(所有实例共享)
species = "Canis familiaris"
@@ -10219,7 +9490,7 @@ ollama run deepseek-r1:14b
* 类属性操作
- ```
+ ```python
# 定义类
class Car:
wheels = 4 # 类属性
@@ -10248,7 +9519,7 @@ ollama run deepseek-r1:14b
* 实例属性操作
- ```
+ ```python
# 定义类
class Student:
school = "清华大学" # 类属性
@@ -10275,7 +9546,7 @@ ollama run deepseek-r1:14b
* 完整案例:学生类
- ```
+ ```python
class Student:
school = "清华大学" # 类属性,所有实例属性共享
@@ -10307,19 +9578,7 @@ ollama run deepseek-r1:14b
print(Student.get_school_year()) # 2023-2024学年
```
-
-
-
-
-
-
-
-
-
-
-#### 第3集 OOP编程进阶和综合案例实战
-
-**简介: OOP编程进阶和综合案例实战**
+#### OOP编程进阶和综合案例实战
* 多个方法对比
@@ -10331,7 +9590,7 @@ ollama run deepseek-r1:14b
* 类方法深度案例
- ```
+ ```python
class Date:
def __init__(self, year, month, day):
self.year = year
@@ -10359,7 +9618,7 @@ ollama run deepseek-r1:14b
* 静态方法深度案例
- ```
+ ```python
class MathUtils:
@staticmethod
@@ -10381,7 +9640,7 @@ ollama run deepseek-r1:14b
* python中cls代表的是类的本身,相对应的self则是类的一个实例对象。
* cls等同于类本身,类方法中可以通过使用cls来实例化一个对象。
- ```
+ ```python
class Person(object):
def __init__(self, name, age):
self.name = name
@@ -10404,7 +9663,7 @@ ollama run deepseek-r1:14b
* 综合案例:学生管理系统
- ```
+ ```python
# 魔术方法__repr__和__str__,在打印对象时能够获得对象的当前状态信息
# 如果一个类没有定义__str__方法,Python解释器会调用内置的__repr__方法来获取对象的字符串表示。
# 如果也没有定义__repr__方法 即 representation,Python会使用默认的字符串表示形式,即返回对象在计算机内存中的实际地址。
@@ -10457,27 +9716,7 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 OOP编程的继承和抽象方法-重写实战
-
-**简介: OOP编程的继承和方法重写案例实战**
+#### OOP编程的继承和抽象方法-重写实战
* Python面向对象编程里面的继承
@@ -10486,7 +9725,7 @@ ollama run deepseek-r1:14b
* **多态基础**:不同子类对同一方法的不同实现
* 语法特点
- ```
+ ```python
class ParentClass:
# 父类定义
pass
@@ -10498,9 +9737,9 @@ ollama run deepseek-r1:14b
-
+
- ```
+ ```python
class Animal: # 基类/父类
def __init__(self, name):
self.name = name
@@ -10521,7 +9760,7 @@ ollama run deepseek-r1:14b
* 完全重写案例
- ```
+ ```python
class Vehicle:
def run(self):
print("交通工具运行中...")
@@ -10538,7 +9777,7 @@ ollama run deepseek-r1:14b
* 扩展式重写(使用super())
- ```
+ ```python
class Phone:
def __init__(self, brand):
self.brand = brand
@@ -10564,7 +9803,7 @@ ollama run deepseek-r1:14b
* super()工作原理
- ```
+ ```python
class Base:
def __init__(self):
print("Base初始化")
@@ -10601,7 +9840,7 @@ ollama run deepseek-r1:14b
* 抽象方法是定义在抽象基类中的方法,它只有方法签名,没有具体的实现。
* 子类必须重写抽象方法并提供具体的实现
- ```
+ ```python
from abc import ABC, abstractmethod
#Shape是一个抽象基类,area是一个抽象方法。因为Shape继承了ABC,
@@ -10635,28 +9874,9 @@ ollama run deepseek-r1:14b
+### AI大模型版-文件处理和常用模块实战
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第二十九章 AI大模型版-文件处理和常用模块实战
-
-
-
-#### 第1集 Python文件IO操作案例最佳实践
-
-**简介: Python文件IO操作案例实战**
+#### Python文件IO操作案例最佳实践
* 文件操作步骤
@@ -10678,7 +9898,7 @@ ollama run deepseek-r1:14b
* 常规操作文件打开读取
- ```
+ ```python
# 不推荐(可能忘记关闭文件)
file = open("test.txt", "r")
try:
@@ -10700,7 +9920,7 @@ ollama run deepseek-r1:14b
* `mode`(可选,默认为 `'r'`)
指定文件的打开模式,常用模式如下
- ```
+ ```python
with open(file_path, mode='r', encoding=None, ...) as file_object:
# 在此代码块内操作文件
# 文件会自动关闭(无论是否发生异常)
@@ -10710,7 +9930,7 @@ ollama run deepseek-r1:14b
* 基础文件读写 (**明确指定文件编码**:避免中文乱码,优先使用`utf-8`。)
- ```
+ ```python
# 写入文件(覆盖模式)
with open("test.txt", "w", encoding="utf-8") as f:
f.write("Hello, World!\n")
@@ -10729,7 +9949,7 @@ ollama run deepseek-r1:14b
* 逐行读取和写入
- ```
+ ```python
# 写入多行
lines = ["Python\n", "Java\n", "C++\n"]
with open("languages.txt", "w", encoding="utf-8") as f:
@@ -10748,7 +9968,7 @@ ollama run deepseek-r1:14b
* 追加内容
- ```
+ ```python
with open("test.txt", "a", encoding="utf-8") as f:
f.write("\n追加的内容")
@@ -10756,7 +9976,7 @@ ollama run deepseek-r1:14b
* 读取特定行数
- ```
+ ```python
with open("test.txt", "r", encoding="utf-8") as f:
first_line = f.readline() # 读取第一行
next_lines = f.readlines() # 读取剩余所有行(返回列表)
@@ -10764,28 +9984,14 @@ ollama run deepseek-r1:14b
* 二进制文件操作(图片复制)
- ```
+ ```python
with open("input.jpg", "rb") as src, open("output.jpg", "wb") as dst:
dst.write(src.read()) # 复制图片
```
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 Python的pip模块安装和管理实战
-
-**简介: Python的pip模块安装和管理实战**
+#### Python的pip模块安装和管理实战
* 什么是pip
@@ -10798,7 +10004,7 @@ ollama run deepseek-r1:14b
* 安装与管理包
- ```
+ ```python
# 安装最新版本
pip install requests
@@ -10817,7 +10023,7 @@ ollama run deepseek-r1:14b
* 环境检查
- ```
+ ```python
# 查看已安装包列表
pip list
@@ -10833,7 +10039,7 @@ ollama run deepseek-r1:14b
* 一个项目里面会有很多依赖包,可以通过pip freeze查看和导出
* 包括网上下载的Python项目,可以通过这个命令安装对应的环境
- ```
+ ```python
# 导出环境依赖
pip freeze > requirements.txt
@@ -10846,7 +10052,7 @@ ollama run deepseek-r1:14b
* 镜像源配置加速
- ```
+ ```python
# 临时使用镜像源安装依赖包
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
@@ -10876,7 +10082,7 @@ ollama run deepseek-r1:14b
* 配置文件管理
- ```
+ ```python
配置文件路径:
Windows: %APPDATA%\pip\pip.ini
macOS/Linux: ~/.config/pip/pip.conf
@@ -10884,25 +10090,13 @@ ollama run deepseek-r1:14b
* 查看系统配置的镜像源操作
- ```
+ ```python
pip config list
```
-
-
-
-
-
-
-
-
-
-
-#### 第3集 Python常用内置模块案例实战
-
-**简介: Python常用内置模块案例实战**
+#### Python常用内置模块案例实战
* 讲解Python自带高频模块使用
@@ -10919,7 +10113,7 @@ ollama run deepseek-r1:14b
* **核心功能**:文件/目录操作、路径管理、环境变量。
* 常用函数与案例
- ```
+ ```python
import os
# 1.1 获取当前工作目录
@@ -10946,7 +10140,7 @@ ollama run deepseek-r1:14b
* **核心功能**:序列化(Python对象→JSON字符串)、反序列化(JSON→Python对象)。
* 常用函数与案例
- ```
+ ```python
import json
# 2.1 字典转JSON字符串
@@ -10975,7 +10169,7 @@ ollama run deepseek-r1:14b
* **核心功能**:命令行参数、程序退出、系统路径。
* 常用函数与案例
- ```
+ ```python
import sys
# 3.1 获取命令行参数
@@ -10998,7 +10192,7 @@ ollama run deepseek-r1:14b
* **核心功能**:生成伪随机数、随机选择元素。
* 常用函数与案例
- ```
+ ```python
import random
# 4.1 生成随机整数(包含两端)
@@ -11028,7 +10222,7 @@ ollama run deepseek-r1:14b
* **核心功能**:数学函数、常数。
* 常用函数与案例
- ```
+ ```python
import math
# 5.1 计算平方根和幂
@@ -11055,23 +10249,6 @@ ollama run deepseek-r1:14b
-
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第三十章 LLM大模型开发核心-LangChain框架实战
-
## 大模型
### LLM大模型开发核心-LangChain框架实战
@@ -27119,15 +26296,9 @@ tools = [web_search, retriever_tool]
* AI智能体中心测试,包括AI网盘智答、AI智能聊天助理、AI在线文档助手等相关功能
* 功能测试实战
+### 高阶内容-大模型LLM微调和环境准备
-
-### 第五十八章 高阶内容-大模型LLM微调和环境准备
-
-
-
-#### 第1集 大模型微调FineTune介绍和常见方式
-
-**简介: 大模型微调FineTune介绍和常见方式**
+#### 大模型微调FineTune介绍和常见方式
* 什么是大模型微调?
@@ -27137,7 +26308,7 @@ tools = [web_search, retriever_tool]
* 现阶段使用的是通用大模型,也叫基座模型(预训练好的模型),微调是让大模型具备行业垂直的知识,更加深入和专业
* **注意:本章和下章内容难度比较高,包括很多专业术语、特殊文件等,适当学习,可以二刷**
-
+
* 为什么要进行微调?
@@ -27162,7 +26333,7 @@ tools = [web_search, retriever_tool]
* 通俗的例子
- ```
+ ```markdown
把大模型想象成一位知识渊博的万能专家,它已经学习了各种各样的知识。
全参数微调就像是让这位专家专门去学习某个特定领域的知识,而且是全方位、深入地学习。
@@ -27244,22 +26415,10 @@ tools = [web_search, retriever_tool]
+#### 面试题-大模型微调和RAG技术适合场景
-
-
-
-
-
-
-
-
-
-#### 第2集 面试题-大模型微调和RAG技术适合场景
-
-**简介: 面试题-大模型微调和RAG技术适合场景**
-
* RAG核心原理回顾
```
@@ -27274,7 +26433,7 @@ tools = [web_search, retriever_tool]
* 增强(Augment):将检索结果注入Prompt
* 生成(Generate):基于增强后的上下文生成回答
-
+
* **面试官:解释下什么是 RAG+微调技术,项目中如何进行选择**
@@ -27314,19 +26473,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-#### 第3集 没有GPU咋办-算力平台介绍和使用
-
-**简介: 没有GPU咋办-算力平台介绍和使用**
+#### 没有GPU咋办-算力平台介绍和使用
* 什么是算力平台
@@ -27336,7 +26483,7 @@ tools = [web_search, retriever_tool]
* 大模型微调训练的算力需求(前面也讲过英伟达显卡的价格,价格贵,且难采购)
-
+
* 常见的算力平台
@@ -27347,37 +26494,21 @@ tools = [web_search, retriever_tool]
* 显卡机器选择
- 
+ 
* 系统镜像选择【基础镜像或社区镜像都可以】
- 
+ 
- 
+ 
* `jupyter` 操作
- 
+ 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 大模型微调必备环境Conda介绍和使用
-
-**简介: 大模型微调必备环境Conda介绍和使用**
+#### 大模型微调必备环境Conda介绍和使用
* Conda 是什么?
@@ -27409,7 +26540,7 @@ tools = [web_search, retriever_tool]
* 配置conda镜像源
- ```
+ ```python
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
```
@@ -27420,27 +26551,27 @@ tools = [web_search, retriever_tool]
* 创建环境
- ```
+ ```python
# 创建名为 `myenv` 的环境,并指定 Python 版本
conda create --name myenv python=3.9
```
* 激活环境
- ```
+ ```python
conda activate myenv # 激活环境
# 退出环境
```
* 查看所有环境
- ```
+ ```python
conda env list
```
* 删除环境
- ```
+ ```python
conda remove --name myenv --all
```
@@ -27448,40 +26579,20 @@ tools = [web_search, retriever_tool]
* 在 Conda 环境中用 `conda install`,若某些包 Conda 没有,可以用 `pip install`
- ```
+ ```python
conda install numpy
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 千问QWEN大模型微调垂直领域实战需求
-
-**简介: 千问QWEN大模型微调垂直领域实战需求**
+#### 千问QWEN大模型微调垂直领域实战需求
* 需求
* 选择阿里的通义千问大模型进行微调,QWEN1.8B的【可以换成其他大参数的替换,这里用小的模型训练速度快一点】
* 训练AI律师大模型,即在基座大模型上,采用Lora微调,让大模型针对法律这块更加专业
- 
+ 
* 举一反三能力
* 训练微调的数据集可以多个行业【医生、客服、金融、工业互联】等都适合
@@ -27497,7 +26608,7 @@ tools = [web_search, retriever_tool]
* https://modelscope.cn/datasets/Robin021/DISC-Law-SFT/files
- 
+ 
* 准备基座大模型代码,即千问大模型代码文件
@@ -27507,13 +26618,13 @@ tools = [web_search, retriever_tool]
* https://www.modelscope.cn/models/Qwen/Qwen-1_8B-Chat
- 
+ 
* 安装大模型微调代码相关依赖包
* 执行大模型微调代码【耗时久点】
- 
+ 
* 微调后的模型文件合并
@@ -27521,30 +26632,11 @@ tools = [web_search, retriever_tool]
+### 高阶内容-垂直业务领域大模型LLM微调实战
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第五十九章 高阶内容-垂直业务领域大模型LLM微调实战
-
-
-
-#### 第1集 垂直领域大模型微调数据集格式和转换实战
-
-**简介: 垂直领域大模型微调数据集格式和转换实战**
+#### 垂直领域大模型微调数据集格式和转换实战
* 需求
@@ -27555,13 +26647,13 @@ tools = [web_search, retriever_tool]
* 查看数据集的格式要求 https://github.com/QwenLM/Qwen/blob/main/README_CN.md
- 
+ 
* 下载数据集 https://modelscope.cn/datasets/Robin021/DISC-Law-SFT/files
* 编写代码 `format_dataset_file.py`
- ```
+ ```python
import json
# 读取以.jsonl结尾的文件,将每行解析为JSON对象并存储在列表中
@@ -27636,27 +26728,11 @@ tools = [web_search, retriever_tool]
* 转换格式实战
- 
-
-
-
-
-
-
-
-
-
-
+ 
-
-
-
-
-#### 第2集 服务器安装大模型千问QWEN项目实战
-
-**简介: 服务器安装大模型千问QWEN项目实战**
+#### 服务器安装大模型千问QWEN项目实战
* 需求
@@ -27669,7 +26745,7 @@ tools = [web_search, retriever_tool]
* 创建conda环境
- ```
+ ```python
#创建环境
conda create -n qwen_env python=3.11
@@ -27682,7 +26758,7 @@ tools = [web_search, retriever_tool]
* 安装git大文件下载
- 
+ 
* 想要使用git拉大的数据文件需要下载 `git lfs `
@@ -27690,7 +26766,7 @@ tools = [web_search, retriever_tool]
* 通过替换 Git 仓库中的大文件为指针文件,并将实际的文件存储在远程服务器上
* 从而避免 Git 仓库体积过大,提高克隆和拉取的速度
- ```
+ ```python
#安装和更新源
sudo apt-get update
sudo apt-get install git
@@ -27723,7 +26799,7 @@ tools = [web_search, retriever_tool]
* `finetune_requirements.txt`下载, 使用**【wget】或者【浏览器】远程下载相关依赖包(需要替换群里最新的)**
- ```
+ ```python
原生资料下载方式(账号 - 密码 - ip地址 - 端口 需要替换群里最新的,【其他路径不变】)
wget --http-user=用户名 --http-password=密码 http://ip:端口/dcloud_pan/finetune_requirements.zip
@@ -27740,25 +26816,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 魔塔下载预训练模型文件和训练数据集配置
-
-**简介: 魔塔下载预训练模型文件和训练数据集配置**
+#### 魔塔下载预训练模型文件和训练数据集配置
* 需求
@@ -27783,32 +26841,18 @@ tools = [web_search, retriever_tool]
* 修改MODEL改为模型文件路径
* 修改DATA改为训练数据集路径
- 
-
-
-
-
+ 
-
-
-
-
-
-
-
-
-#### 第4集 垂直领域大模型微调训练操作实战
-
-**简介: 垂直领域大模型微调训练操作实战**
+#### 垂直领域大模型微调训练操作实战
* 大模型微调全流程操作实战
* 进入finetune文件夹里的`finetune_lora_single_gpu.sh`文件
* 修改模型微调参数-根据机器的实际情况调整
- 
+ 
* 运行 `bash finetune/finetune_lora_single_gpu.sh`
@@ -27818,7 +26862,7 @@ tools = [web_search, retriever_tool]
* 是版本问题,参数被移除, 所以直接注释即可
* 操作: vim对应的文件 ,然后输入 /dispatch_batches,然后回车,输入 i 即可修改
- 
+ 
* 耗时大概几小时,待训练完成可以在目录看到output的输出的模型权重文件
@@ -27854,23 +26898,15 @@ tools = [web_search, retriever_tool]
* 硬件资源消耗
- 
-
-
-
-
-
-
-
+ 
-#### 第5集 Lora微调大模型文件合并操作实战
-**简介: Lora微调大模型文件合并操作实战**
+#### Lora微调大模型文件合并操作实战
* 微调训练完成后
- 
+ 
* 需求
@@ -27879,7 +26915,7 @@ tools = [web_search, retriever_tool]
* 案例实战, 创建 `merge_find_tune.py` 文件
- ```
+ ```python
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
@@ -27930,37 +26966,17 @@ tools = [web_search, retriever_tool]
* 当调用 `AutoPeftModelForCausalLM.from_pretrained(path_to_adapter)` 时
* 代码会:从 `adapter_config.json` 读取基座模型名称(如 `Qwen/Qwen-1_8B-Chat`)。
- 
-
-
-
-
-
-
-
-
-
-
-
-
+ 
-
-
-
-
-#### 第6集 垂直大模型微调前后推理效果对比实战
-
-**简介: 垂直大模型微调前后推理效果对比实战**
+#### 垂直大模型微调前后推理效果对比实战
* 需求
* 对比本地私有化部署的千问大模型,微调前后的回答效果测试
* 看到微调前和微调后的结果差别,微调后的模型在遇到相同问题的时候可以做出更专业的回答
-
-
* 注意:
* 不采用BLUE方式评估,直接看同个问题的大模型回复效果
* BLEU(Bilingual Evaluation Understudy)是一个常用的机器翻译评价指标
@@ -27971,7 +26987,7 @@ tools = [web_search, retriever_tool]
* 创建 `fine_tune_inference.py` 文件
- ```
+ ```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
@@ -27993,60 +27009,29 @@ tools = [web_search, retriever_tool]
input_text = "请预测这个案子的判决\n公诉机关指控,被告人贾某某因年迈患病,欲给自己和妻子准备棺材,遂于2013年三四月间,在宽甸满族自治县大川头镇新丰村七组曲西沟被害人杜某某所有的天然林中,擅自砍伐55年生的落叶松树1株。数日后,其又在该组半截沟被害人韩某甲、韩某乙共同所有的人工林中,擅自砍伐平均60年生杉松树2株。贾某某两次共计砍伐树木3株。2013年10月16日,经宽甸满族自治县森林公安局鉴定,贾某某所盗伐树木核立木蓄积3.5187立方米。2013年10月22日,宽甸满族自治县森林公安局将贾某某盗伐所获的大部分木材分别返还给韩某甲、杜某某,并取得被害人谅解。公诉机关提供了相应的证据,认为被告人贾某某的行为触犯了《中华人民共和国《刑法》》××××之规定,应以××罪处罚。被告人贾某某能如实供述自己的罪行,应依据《中华人民共和国《刑法》》××××之规定处罚。\n这个案子可能怎么判做出可能的裁断\n公诉机关指控,被告人贾某某因年迈患病,欲给自己和妻子准备棺材,遂于2013年三四月间,在宽甸满族自治县大川头镇新丰村七组曲西沟被害人杜某某所有的天然林中,擅自砍伐55年生的落叶松树1株。数日后,其又在该组半截沟被害人韩某甲、韩某乙共同所有的人工林中,擅自砍伐平均60年生杉松树2株。贾某某两次共计砍伐树木3株。2013年10月16日,经宽甸满族自治县森林公安局鉴定,贾某某所盗伐树木核立木蓄积3.5187立方米。2013年10月22日,宽甸满族自治县森林公安局将贾某某盗伐所获的大部分木材分别返还给韩某甲、杜某某,并取得被害人谅解。公诉机关提供了相应的证据,认为被告人贾某某的行为触犯了《中华人民共和国《刑法》》××××之规定,应以××罪处罚。被告人贾某某能如实供述自己的罪行,应依据《中华人民共和国《刑法》》××××之规定处罚。"
-
- # 微调前的模型
- pre_finetune_model_path = "/root/autodl-tmp/test1/Qwen/models/Qwen-1_8B-Chat"
- pre_finetune_response = get_model_response(pre_finetune_model_path, input_text)
- if pre_finetune_response:
- print("微调前的结果:" + pre_finetune_response)
-
- # 微调后的模型
- post_finetune_model_path = "/root/autodl-tmp/test1/Qwen/models/Qwen-1_8B-Chat_finetune"
- post_finetune_response = get_model_response(post_finetune_model_path, input_text)
- if post_finetune_response:
- print("微调后的结果:" + post_finetune_response)
- ```
-
- 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ # 微调前的模型
+ pre_finetune_model_path = "/root/autodl-tmp/test1/Qwen/models/Qwen-1_8B-Chat"
+ pre_finetune_response = get_model_response(pre_finetune_model_path, input_text)
+ if pre_finetune_response:
+ print("微调前的结果:" + pre_finetune_response)
+
+ # 微调后的模型
+ post_finetune_model_path = "/root/autodl-tmp/test1/Qwen/models/Qwen-1_8B-Chat_finetune"
+ post_finetune_response = get_model_response(post_finetune_model_path, input_text)
+ if post_finetune_response:
+ print("微调后的结果:" + post_finetune_response)
+ ```
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
+ 
-### 第六十章 高阶内容一统天下的MCP技术应用实战
+
+### 高阶内容一统天下的MCP技术应用实战
-#### 第1集 MCP诞生的需求背景和项目效果演示
-**简介: MCP诞生的需求背景和项目效果演示**
+#### MCP诞生的需求背景和项目效果演示
* 需求背景
@@ -28056,9 +27041,9 @@ tools = [web_search, retriever_tool]
- **上下文局限**:模型上下文窗口有限,难以处理长文本或动态数据。
- **规范不统一**: 每个接口工具没有标准规范,导致难以维护和工程化
-
+
- 
+ 
* MCP 的诞生与目标
@@ -28082,7 +27067,7 @@ tools = [web_search, retriever_tool]
-
+
* 相关资源(地址如果过期可以搜索资料)
@@ -28143,34 +27128,18 @@ tools = [web_search, retriever_tool]
* MCP本质:就是统一了对接协议+多个工具封装
- 
+ 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 大模型+MCP里的角色你知道有哪些吗
-
-**简介: 大模型+MCP里的角色你知道有哪些吗**
+#### 大模型+MCP里的角色你知道有哪些吗
* 需求
* 掌握MCP(Model Context Protocol)中的核心角色
* 包括**MCP主机(Host)、MCP客户端(Client)、MCP服务器(Server)、数据源/外部工具**和**智能体(Agent)**
-
+
* 核心角色讲解
@@ -28257,21 +27226,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 面试题-Function Call工具和MCP技术对比
-
-**简介: 面试题-Function Call工具和MCP技术对比**
+#### 面试题-Function Call工具和MCP技术对比
* MCP解决的核心问题
@@ -28290,8 +27245,6 @@ tools = [web_search, retriever_tool]
* **面试题:那是不是Tool工具没用了,都是用MCP了?应该如何选择 **
-
-
* Tool工具和MCP对比
| 技术演进阶段 | **常规 Tool/Function Call** | **MCP 协议** |
@@ -28319,25 +27272,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 MCP部署模式和通信原理讲解
-
-**简介: MCP部署模式和通信原理讲解**
+#### MCP部署模式和通信原理讲解
* MCP服务类型
@@ -28367,7 +27302,7 @@ tools = [web_search, retriever_tool]
* 魔搭社区MCP广场:提供1500+预置服务,如高德地图API、支付宝支付接口,支持一键部署到阿里云函数计算
* 优势:跨网络访问、弹性计费
- 
+ 
* MCP常见的通信机制
@@ -28452,27 +27387,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 MCP常见命令行工具和包管理说明
-
-**简介: MCP常见命令行工具和包管理说明**
+#### MCP常见命令行工具和包管理说明
* `npx`:Node.js 的 “即跑即用” 执行工具
@@ -28501,7 +27416,7 @@ tools = [web_search, retriever_tool]
| 临时运行远程包 | `npx create-react-app my-app` | 临时下载`create-react-app`并创建项目 |
| 传递环境变量 | `npx -e DEBUG=true node server.js` | 设置环境变量`DEBUG=true`后运行`server.js` |
-
+
* `uv`:Rust 编写的 Python 极速包管理器
@@ -28561,7 +27476,7 @@ tools = [web_search, retriever_tool]
| 传递参数 | `uvx mcp-server-fetch --port=8080` | 向`mcp-server-fetch`传递端口参数 |
| 指定 Python 版本 | `uvx -p 3.10 my-tool` | 临时环境使用 Python 3.10 |
-
+
* 总结
@@ -28582,23 +27497,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第6集 AI编辑器+MCP实战之高德地图MCPServer
-
-**简介: AI编辑器+MCP实战之高德地图MCPServer**
+#### AI编辑器+MCP实战之高德地图MCPServer
* 需求
@@ -28620,15 +27519,15 @@ tools = [web_search, retriever_tool]
* 配置MCP(新版才支持MCP,如果有同学下载过,记得更新)
- 
+ 
* 高德地图开发者配置
* 地址:https://lbs.amap.com/
- 
+ 
- 
+ 
* MCP案例效果演示(参考高德地图官方案例)
@@ -28692,35 +27591,22 @@ tools = [web_search, retriever_tool]
* MCP本质:就是统一了对接协议+多个工具封装
- 
+ 
+### 高阶内容-MCP Server服务开发实战
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第六十一章 高阶内容-MCP Server服务开发实战
-
-
-
-#### 第1集 手把手教你开发自己的MCPServer《上》
-
-**简介: 手把手教你开发自己的MCPServer**
+#### 手把手教你开发自己的MCPServer《上》
* 需求
* 掌握MCP开发的知识点,开发自己的专属MCPServer
* 案例实现:基于高德地图接口,开发定制化的MCP服务
-
+
* 参考官方文档:https://modelcontextprotocol.io/introduction
@@ -28769,7 +27655,7 @@ tools = [web_search, retriever_tool]
* 编写代码
- ```
+ ```python
from typing import Any, Optional
import httpx
from mcp.server.fastmcp import FastMCP # 假设FastMCP框架与原代码兼容
@@ -28851,27 +27737,11 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 手把手教你开发自己的MCPServer《下》
-
-**简介: 手把手教你开发自己的MCPServer**
+#### 手把手教你开发自己的MCPServer《下》
* 完善 `weather.py`
- ```
+ ```python
@mcp.tool()
async def get_realtime_weather(city_adcode: str) -> str:
"""
@@ -28917,7 +27787,7 @@ tools = [web_search, retriever_tool]
* AI编辑器配置MCP
- ```
+ ```python
{
"mcpServers": {
"weather": {
@@ -28935,7 +27805,7 @@ tools = [web_search, retriever_tool]
* 测试
- ```
+ ```python
问题一:北京天气如何
问题而:北京未来3天的天气如何
@@ -28943,25 +27813,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 MCP服务调试之MCP Inspector实战
-
-**简介: MCP服务调试之MCP Inspector实战**
+#### MCP服务调试之MCP Inspector实战
* 什么是MCP Inspector
@@ -28974,7 +27826,7 @@ tools = [web_search, retriever_tool]
* 方式一
- ```
+ ```python
# 使用 npm 运行(推荐)
npx @modelcontextprotocol/inspector
@@ -28984,7 +27836,7 @@ tools = [web_search, retriever_tool]
* 方式二: 执行以下命令可以启动 MCP Inspector:
- ```
+ ```python
# server.py 是MCP Server文件的名称,会提示是否安装依赖包 输入 y 即可
mcp dev server.py
@@ -28992,7 +27844,7 @@ tools = [web_search, retriever_tool]
浏览器访问 http://localhost:端口
```
-
+
* **基础操作流程**
@@ -29000,23 +27852,11 @@ tools = [web_search, retriever_tool]
* **浏览服务**:查看服务器提供的资源(如 “本地文件”)、工具(如 “统计 TXT 文件数量”)和提示模板。
* **执行测试**:在工具输入框填入参数(如关键词 “大模型”),点击 “Run” 触发调用,查看响应结果和日志
- 
-
-
-
-
+ 
-
-
-
-
-
-
-#### 第4集 LLM大模型整合MCP交互流程全链路解析
-
-**简介: LLM大模型整合MCP交互流程全链路解析**
+#### LLM大模型整合MCP交互流程全链路解析
* MCP Client 客户端
@@ -29032,7 +27872,7 @@ tools = [web_search, retriever_tool]
* **LLM**:执行语义理解、工具决策、响应生成,如 DeepSeek/GPT-X 等大模型。
* **MCP 服务器(MCP Server)**:提供具体工具服务(如数据库查询、文件操作),遵循 MCP 协议标准。
-
+
* 整体细化工作流程如下
@@ -29060,21 +27900,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 大模型开发MCPClient+Server综合实战《上》
-
-**简介: 大模型开发MCP Client+Server综合实战《上》**
+#### 大模型开发MCPClient+Server综合实战《上》
* 需求
@@ -29133,7 +27959,7 @@ tools = [web_search, retriever_tool]
* 代码流程参考MCP官方案例:https://modelcontextprotocol.io/quickstart/client
- ```
+ ```python
import asyncio
import json
import sys
@@ -29237,21 +28063,11 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-#### 第6集 大模型开发MCPClient+Server综合实战《下》
-
-**简介: 大模型开发MCP Client+Server综合实战《下》**
+#### 大模型开发MCPClient+Server综合实战《下》
* 继续完善代码
- ```
+ ```python
async def query_llm(self, user_query: str) -> dict:
"""
调用通义千问API解析用户查询为工具调用指令
@@ -29406,7 +28222,7 @@ tools = [web_search, retriever_tool]
* 运行 `uv run client.py ./weather.py`
* 提问:北京明天天气如何
- 
+ 
* 工具调用流程
@@ -29416,19 +28232,7 @@ tools = [web_search, retriever_tool]
-
-
-
-
-
-
-
-
-
-
-#### 第7集 简历优化-大模型高阶技术MCP和微调板块
-
-**简介:简历优化-大模型高阶技术MCP和微调板块**
+#### 简历优化-大模型高阶技术MCP和微调板块
* 大模型高阶内容总结
* **大模型微调与环境准备**
@@ -29464,36 +28268,11 @@ tools = [web_search, retriever_tool]
+### AI智能化云盘项目课程总结和未来规划
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第六十二章 AI智能化云盘项目课程总结和未来规划
-
-
-
-#### 第1集 AI智能化云盘大课-知识点总结串讲《上》
-
-**简介: AI智能化云盘大课-知识点总结串讲《上》**
+#### AI智能化云盘大课-知识点总结串讲《上》
- 线上地址:面试官如果提问是否有线上地址
@@ -29504,45 +28283,13 @@ tools = [web_search, retriever_tool]
- 课程知识点回顾
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 AI智能化云盘大课-知识点总结串讲《下》
-
-**简介: AI智能化云盘大课-知识点总结串讲《下》**
+#### AI智能化云盘大课-知识点总结串讲《下》
- 课程知识点回顾
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 跳槽面试-避免同质化问题-选择性包装
-
-**简介: 跳槽面试-避免同质化-选择性包装**
+#### 跳槽面试-避免同质化问题-选择性包装
- 跳槽简历关键点:**避免同质化严重,每个人履历不一样,选择性定制化包装**
- 100份简历,90份都是雷同的,某些大型机构或者B站上免费项目,播放量几百万,已经被写烂了
@@ -29551,7 +28298,7 @@ tools = [web_search, retriever_tool]
- 一年10万+线下习人员,线上还更多,很多同期毕业疯狂海投简历,班里都在卷你,这个怎么有竞争力?
- 下面是我和某个大厂面试官的聊天,也是我本身当了面试官招聘遇到的问题点
-
+
- **我们的区别:**
- **小滴课堂这边一个大课学习人数不多,基本500到1千人,加上会专属定制化简历,而且都是不同城市和时间段**
@@ -29564,8 +28311,6 @@ tools = [web_search, retriever_tool]
- 都是工作多年需要具备的**方法论**,不能四处拼凑,需要系统去提升,而且**越早学习越好,公司可以不用,但是不能不会**
- **前端、后端、测试、大数据、运维等方向,年限上来都需要具备独立带项目,包括项目各个岗位技术都需要会,有所侧重**
-
-
- 技术培训的你应该知道的事情
- 技术是每年一小变,三年一大变,持续学习是关键
- 大家也是过来人,小滴课堂-每个技术栈课程不贵,从专题技术到大课,不同阶段你收获也不一样
@@ -29575,8 +28320,6 @@ tools = [web_search, retriever_tool]
- 定时复习专题课程笔记+大课里面的笔记和解决方案
- 技术是不断演进的,后端+大数据,小滴课堂也会不断上架新的技术,做好技术储备,就不会被淘汰!!!
-
-
* 为啥说免费的才是最贵的,比如【盗版视频】或者【割韭菜的机构】
- 视频录制时间旧 或者 **讲师水平Low**,但导致学不到技术甚至还【学错了技术】我面试过不少人员
- **有些虽然是新的,但是讲干货少,如果免费能学到大量知识,线下培训机构如何生存?**
@@ -29599,15 +28342,7 @@ tools = [web_search, retriever_tool]
- 能给公司和技术团队带来新血液,提升一个档次
- 你学了大课,里面N多技术难点解决方案,就可以让你靠这些去跳槽涨薪!!!
-
-
-
-
-
-
-
-
-#### 第4集 新大课预告-与时俱进的项目学习和能力提升
+#### 新大课预告-与时俱进的项目学习和能力提升
**简介: 新大课预告-与时俱进的项目学习和能力提升**
@@ -29647,7 +28382,7 @@ tools = [web_search, retriever_tool]
- 工作1~5年,目标肯定是往架构师,学了两个大课,往下就是架构能力提升
- 在校大学生,学霸,两个项目大课+架构大课,你已经超越同龄人很多,大厂都喜欢潜力好的小年轻
-
+
- **期待下一个大课(预计11月首发)**
diff --git a/src/test/java/org/ycloud/aipan/ChangeImages.java b/src/test/java/org/ycloud/aipan/ChangeImages.java
index 84a899e..f856cc4 100644
--- a/src/test/java/org/ycloud/aipan/ChangeImages.java
+++ b/src/test/java/org/ycloud/aipan/ChangeImages.java
@@ -6,14 +6,20 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
+import java.util.stream.Collectors;
public class ChangeImages {
- private static final Path SOURCE_DIR = Paths.get("D:/学习/2025/AI智能化云盘学习笔记/笔记/img");
+ private static final Path SOURCE_DIR = Paths.get("D:/学习/012A7B5D2D6E32186CB71EF8B70559AE/9143TRAINING_AIPAN/img/");
private static final Path TARGET_DIR = Paths.get("D:/IdeaProjects/learn/ycloud-aipan/img");
public static void main(String[] args) {
- List images = List.of("1-5916295.png","image-20250429170519143.png","image-20250429205355439.png","image-20250429175110088.png","image-20250418190055953.png","image-20250503110127541.png","image-20250503110211729.png","image-20250503112608773.png","image-20250503121359088.png","image-20250503105739654.png","image-20250503155805463.png","image-20250502230152621.png","image-20250502230846228.png","image-20250503160856611.png","image-20250505175724176.png","image-20250505175523502.png","image-20250505175611890.png","image-20250504135738921.png","image-20250504140455882.png","image-20250505180150494.png");
+ List images = List.of("image-20241217115445442.png","image-20241217151318969.png","p411278-4421764.png","image-20241217155520041.png","image-20241217155622979.png","image-20241217180704525.png","image-20241217160721765.png","image-20241220112247685.png","image-20241224104021085.png","image-20241224104920314.png","image-20241224112405905.png","image-20241224113826448.png","image-20241225144548702.png","image-20241225143220117.png","image-20241225154054266.png","image-20241224104920314.png","image-20241230155838690.png","image-20241224104920314.png","image-20241226151209235.png","image-20241226170055385.png","image-20241226170536073.png","image-20241226173942236.png","image-20241226174734539.png","image-20241226181052870.png","image-20241226181539405.png","image-20250102105611605.png","image-20250102112917137.png","image-20250102105611605.png","image-20250102112809176.png","image-20250102113509986.png","image-20250106111000289.png","image-20250102120855474.png","image-20250109104619121.png","image-20250109121800333.png","image-20250111114307556.png","image-20250109144926951.png","image-20250109151616086.png","image-20250111143911256.png","image-20250111145735013.png","image-20250111151939099.png","image-20250111153820365.png","image-20250111153939309.png","image-20250112153356980.png","image-20250209161809990.png","image-20250209160053934.png","image-20250209160114104.png","image-20250209161809990.png","image-20250209165144296.png","image-20250209170358274.png","image-20250209173200844.png","image-20250209173200844.png","image-20250209183003105.png","image-20250209184513246.png","image-20250209170358274.png","image-20250209201234335.png","image-20250211143108361.png","image-20250211142728274.png","image-20250211144837347.png","image-20250212145415243.png","image-20250212151944390.png","image-20250212151957281.png","image-20250212151944390.png","image-20250215115400776.png","image-20250215115329505.png","image-20250215170037818.png","image-20250215165633327.png","image-20250217140255457.png","export_3t84b.png","image-20250217154619961.png","image-20250217162419684.png","image-20250217162403779.png","image-20250217145235399.png","image-20250217145923315.png","image-20250217171804241.png","image-20250217174017791.png","image-20250217175605827.png","image-20250217180343600.png","image-20250218215557400.png","image-20250217183246768.png","image-20250217183301366.png","image-20250217184140019.png","image-20250220160752180.png","image-20250221114009228.png","image-20250221163209450.png","image-20250221171517215.png","image-20250221182622154.png","image-20250222104830863.png","image-20250226192931778.png","image-20250301141529448.png","image-20250301140529990.png","image-20250301140503525.png","image-20250301140650448.png","export_a9yct.png","image-20250301152117731.png","1.png","image-20250301152117731.png","image-20250304142514844.png","1-1073680.png","2.png","image-20250301152117731.png","image-20250228151848080.png","export_4232z.png","2-1580890.png","1-1579900.png","image-20250314122237372.png","0.png","image-20250313142026018.png","image-20250313151603856.png","image-20250313151918579.png","image-20250313151657094.png","image-20250313151724171.png","image-20250313161943645.png","image-20250313162742811.png","image-20250313162827278.png","image-20250313164754696.png","image-20250315152627015.png","image-20250313170520819.png","image-20250313170904153.png","1-1859494.png","image-20250313210027704.png","image-20250313212722723.png","image-20250313215608473.png","milvus-adopters.png","image-20250318151846918.png","image-20250318155633751.png","export_qtyb85.png","collection-explained.png","image-20250313170520819.png","0-2288864.png","2-2287117.png","4.png","image-20250318190605311.png","image-20250318201255473.png","1-2540349.png","2-2540359.png","3-2540810.png","1-2537508.png","export_j1u9v.png","1-2885071.png","2-2902256.png","1-2901569.png","3-2907855.png","1-3069367.png","3-3070285.png","1-3135889.png","image-20250328123503960.png","1-3222765.png","image-20250329170410782.png","image-20250329170551464.png","image-20250329175530690.png","image-20250329181733895.png","12.png","image-20250331231807616.png","image-20250401104847864.png","1-3479667.png","1-3677655.png","image-20250404162459285.png","image-20250404162420533.png","image-20250418190055953.png","image-20250414104551285.png","image-20250421203059141.png","image-20250421213741268.png","image-20250427120524719.png","1-21919531.png","1-5916295.png","image-20250429170519143.png","image-20250429205355439.png","image-20250429175110088.png","image-20250418190055953.png","image-20250503110127541.png","image-20250503110211729.png","image-20250503112608773.png","image-20250503121359088.png","image-20250503105739654.png","image-20250503155805463.png","image-20250502230152621.png","image-20250502230846228.png","image-20250503160856611.png","image-20250505175724176.png","image-20250505175523502.png","image-20250505175611890.png","image-20250504135738921.png","image-20250504140455882.png","image-20250505180150494.png","export_46r6n.png","1-1579900.png","1-6602595.png","image-20250507152936338.png","image-20250507164544185.png","image-20250507153151800.png","image-20250507153602535.png","image-20250507191028469.png","image-20250507160639326.png","image-20250507160720935.png","image-20250507101838496.png","image-20250507162647289.png","image-20250507163540289.png","image-20250507171055503.png","image-20250507175553536.png","image-20250507175054688.png","image-20250507181021664.png","image-20250507185955720.png","image-20250507190622705.png","image-20250507183612289.png","image-20250507191011385.png","image-20250516120455028.png","image-20250516120749731.png","640","image-20250516150129724.png","image-20250516115111504.png","image-20250516174456576.png","image-20250516185431850.png","image-20250516185926880.png","image-20250516171611941.png","image-20250517110433609.png","image-20250517110357780.png","image-20250516150129724.png","image-20250517184138642.png","image-20250519103003922.png","image-20250519103502394.png","image-20250517231022448.png","image-20250517235950465.png","image-20240418111148522.png","data_connection-95ff2033a8faa5f3ba41376c0f6dd32a.jpg","data_connection-95ff2033a8faa5f3ba41376c0f6dd32a.jpg","data_connection-95ff2033a8faa5f3ba41376c0f6dd32a.jpg","data_connection-95ff2033a8faa5f3ba41376c0f6dd32a.jpg","data_connection-95ff2033a8faa5f3ba41376c0f6dd32a.jpg","select-deployment-option.jpeg","tool_invocation-7f277888701ee431a17607f1a035c080-20250328134624442.png","tool_results-71b4b90f33a56563c102d91e7821a993.png");
+ // 去重
+
+ images = images.stream().distinct().toList();
+ System.out.println(images.size());
+
try {
for (String image : images) {
Path sourceFile = SOURCE_DIR.resolve(image);