diff --git a/README.md b/README.md
index d13ba4f..008c18b 100644
--- a/README.md
+++ b/README.md
@@ -3706,7 +3706,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 大模型IO交互链路概览
-
+
* LangChain模块对比大家熟知的Java Spring生态
@@ -3817,7 +3817,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 大模型使用开发的Model IO链路核心三要素
- 
+ 
| 组件 | 作用 | 典型类/方法 |
| :---------: | :------------------------: | :-------------------------------------------: |
@@ -3825,7 +3825,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| **Models** | 对接不同LLM服务的统一接口 | `ChatOpenAI` |
| **Parsers** | 将模型输出转换为结构化数据 | `StrOutputParser`, `JsonOutputParser` |
- 
+ 
* LangChain支持的模型类型说明
@@ -3843,11 +3843,9 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 典型模型:GPT-4V、Qwen-omni-turbo
* 其他更多....
-
-
* LangChain开发LLM聊天模型快速编码实战
- ```
+ ```python
from langchain_openai import ChatOpenAI
# 调用Chat Completion API
@@ -3859,21 +3857,12 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print(response)
```
-
-
-
-
-
-
-
-#### 第6集 类型增强模块Typing应用和案例实战《上》
-
-**简介: 类型增强模块Typing应用和案例实战《上》**
+#### 类型增强模块Typing应用和案例》
* Python的动态类型痛点
- ```
+ ```python
# 传统动态类型代码示例
def calculate(a, b):
return a + b # 无法直观看出参数类型和返回值类型
@@ -3910,8 +3899,6 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
data: bytes = b"binary" # 字节类型
```
-
-
* 容器类型
* 有多种内置的类型别名,比如`List`、`Tuple`、`Dict`等,可用于注解变量和函数的预期类型
@@ -3920,76 +3907,65 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* `Dict[str, int]`表示键是字符串类型,值是整数类型的字典
* `Set[int]`表示整数类型的集合
-
+
* `List`同质元素的序列容器
* 适用场景:列表类型数据,元素类型相同
- ```
+ ```python
from typing import List
-
scores: List[int] = [90, 85, 95] # 整型列表
matrix: List[List[float]] = [[1.1, 2.2], [3.3]] # 嵌套列表
```
-
+
* `Dict` 键值对映射容器
-
+
* 适用场景:字典类型数据,需指定键值类型
-
- ```
+
+ ```python
from typing import Dict
-
person: Dict[str, str] = {"name": "Bob", "job": "dev"} # 字符串字典
config: Dict[str, Union[int, str]] = {"timeout": 30} # 混合值类型
-
```
-
+
* `Tuple`固定长度、类型的不可变序列
-
- * 适用场景:坐标、数据库记录等固定结构
- * 变长声明:`Tuple[T, ...]`:元素类型相同但长度不限 , ():空元组
-
-
- ```
- from typing import Tuple
+
+ - 适用场景:坐标、数据库记录等固定结构
+ - 变长声明:`Tuple[T, ...]`:元素类型相同但长度不限 , ():空元组
+ ```python
+ from typing import Tuple
point: Tuple[float, float] = (3.14, 2.71) # 二元坐标
rgb: Tuple[int, int, int] = (255, 0, 128) # 颜色值
flexible: Tuple[str, ...] = ("a", "b", "c") # 任意长度元组
```
-
+
* `Set` 无序不重复元素的集合
- * 适用场景:去重数据、集合运算
+ - 适用场景:去重数据、集合运算
- ```
+ ```python
from typing import Set
-
unique_ids: Set[int] = {1, 2, 3} # 整型集合
tags: Set[Union[str, int]] = {"urgent", 1001} # 混合类型集合
```
-
-
-
-
- * 任意类型 `Any`
-
- * 动态类型占位符,放弃类型检查, 应尽量避免过度使用
- * 适用场景:兼容无类型代码或动态行为
-
- ```
- from typing import Any
- def debug_log(obj: Any) -> None:
- print(repr(obj))
+ * 任意类型 `Any`
- ```
+ - 动态类型占位符,放弃类型检查, 应尽量避免过度使用
+ - 适用场景:兼容无类型代码或动态行为
+
+ ```python
+ from typing import Any
+ def debug_log(obj: Any) -> None:
+ print(repr(obj))
+ ```
* 函数类型注解
* 为函数添加typing模块的注解后,函数使用者就能清晰的了解函数的参数以及返回值类型
- ```
+ ```python
def greet(name: str) -> str: # 参数类型 -> 返回值类型
return f"Hello, {name}"
@@ -4006,7 +3982,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 精确值类型约束, 替代简单字符串枚举
* 适用场景:枚举值的类型安全
- ```
+ ```python
from typing import Literal
# 限定特定值
@@ -4019,32 +3995,12 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
send_request("PATCH", "/api") # ❌ mypy报错
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第7集 类型增强模块Typing应用和案例实战《下》
-
-**简介: 类型增强模块Typing应用和案例实战《下》**
-
* `Union`联合类型
* Union允许参数接受多种不同类型的数据。
* 例如 `Union[int, float]`表示变量可以是int类型或float类型
- ```
+ ```python
from typing import Union
def process_input(value: Union[int, str]) -> None:
@@ -4068,7 +4024,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* `= None`可省略,它表示默认参数。
* 从 Python 3.10 开始,Optional[Type] 可以直接用 `Type | None` 替代,写法更清晰
- ```
+ ```python
from typing import Optional
def greet1(name: Optional[str] = None) -> str:
@@ -4095,7 +4051,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 自定义类型别名提高代码可读性。
- ```
+ ```python
from typing import Tuple
# 基本别名
@@ -4115,7 +4071,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 创建具有类型检查的语义化新类型
* 适合 区分相同基础类型的不同用途
- ```
+ ```python
from typing import NewType
# 创建强类型
@@ -4135,7 +4091,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 创建通用类型参数
* 适用场景:泛型函数/类的类型参数化;比如创建一个函数,无论是处理整数、字符串还是自定义对象
- ```
+ ```python
from typing import TypeVar, Sequence
T = TypeVar('T') # 无约束类型
@@ -4148,7 +4104,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
return sum(values)
```
- ```
+ ```python
from typing import TypeVar
# 定义一个泛型变量T
@@ -4169,34 +4125,12 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print(get_first_item(words)) # 输出: apple
```
-
-
-
-
-
-
-
-
-
-
-
+### Prompt提示词工程和案例最佳实践
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第三十一章 Prompt提示词工程和案例最佳实践
-
-
-
-#### 第1集 大模型必备Prompt提示词工程
-
-**简介: 大模型必备Prompt提示词工程讲解**
+#### 大模型必备Prompt提示词工程
* 什么是Prompt Engineering提示词工程
@@ -4211,12 +4145,12 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 大模型就是你的员工,你可以有多个助手,OpenAI、DeepSeek、千问等
* 作为老板的你,需要正确的下达任务,描述合理和交付目标等
- ```
+ ```python
传统编程:写代码→计算机执行
Prompt工程:写自然语言指令→大模型生成结果
```
- 
+ 
* Prompt设计四要素
@@ -4224,7 +4158,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 作用:限定模型回答视角
- ```
+ ```python
[差] 写一首关于春天的诗
[优] 你是一位擅长写现代诗的诗人,请用比喻手法创作一首8行的春天主题短诗
```
@@ -4233,7 +4167,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* STAR原则:Situation 场景、Task 任务、Action 行动、Result 结果
- ```
+ ```python
(场景)用户提交了一个技术问题
(任务)需要给出准确且易懂的解答
(行动)分步骤说明解决方案
@@ -4244,7 +4178,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 常用格式指令:分点列表、指定段落数、表格呈现、代码格式
- ```
+ ```python
用JSON格式输出包含以下字段:
{
"summary": "不超过50字的摘要",
@@ -4274,7 +4208,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 模板结构设计(黄金公式)
- ```
+ ```python
# 标准三段式结构
prompt_template = """
[角色设定]
@@ -4300,29 +4234,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| 生成结果过于笼统 | 缺少具体步骤要求 | 添加"分步骤详细说明"指令 |
| 格式不符合要求 | 未提供明确格式示例 | 添加XML/JSON标记示例 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 Prompt提示词工程多案例最佳实践
-
-**简介: Prompt提示词工程多案例最佳实践**
+#### Prompt提示词工程多案例最佳实践
* 需求
@@ -4343,7 +4255,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 好prompt
- ```
+ ```python
你是一位科技专栏作家,请用通俗易懂的方式向高中生解释:
1. 什么是人工智能(用1个生活化比喻说明)
2. 列举3个当前主流应用场景
@@ -4363,7 +4275,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 差Prompt:
- ```
+ ```python
写个Python程序
```
@@ -4372,7 +4284,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 好Prompt:
- ```
+ ```python
编写一个Python函数,实现以下功能:
- 输入:字符串形式的日期(格式:YYYY-MM-DD)
- 输出:该日期对应的季度(1-4)
@@ -4396,7 +4308,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 差Prompt
- ```
+ ```python
如何优化网站性能?
```
@@ -4405,7 +4317,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 好Prompt
- ```
+ ```python
针对使用SpringBoot+Vue3的技术栈,请给出5项可量化的性能优化方案:
要求:
1. 每项方案包含:
@@ -4429,7 +4341,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 差Prompt
- ```
+ ```python
分析这份销售数据
```
@@ -4438,7 +4350,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 好Prompt
- ```
+ ```python
你是一位资深数据分析师,请完成以下任务:
数据集特征:
- 时间范围:2027年1-12月
@@ -4463,23 +4375,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 指定分析方法论
* 规范输出格式
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 LangChain 提示模板PromptTemplate介绍
-
-**简介: LangChain 提示模板PromptTemplate介绍**
+#### LangChain 提示模板PromptTemplate介绍
* 需求
@@ -4494,7 +4390,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 动态内容组装
* 避免Prompt硬编码
- 
+ 
* PromptTemplate核心变量和方法
* template 定义具体的模板格式,其中 `{变量名}` 是占位符
@@ -4506,7 +4402,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 创建PromptTemplate对象简单模版
- ```
+ ```python
from langchain.prompts import PromptTemplate
# 定义模板
@@ -4534,7 +4430,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 自动推断变量
- ```
+ ```python
from langchain.prompts import PromptTemplate
# 当不显式声明 input_variables 时
@@ -4546,7 +4442,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 默认值设置
- ```
+ ```python
from langchain.prompts import PromptTemplate
template = """分析用户情绪(默认分析类型:{analysis_type}):
用户输入:{user_input}
@@ -4569,33 +4465,11 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print(prompt_template.partial_variables)
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 PromptTemplate结合LLM案例实战
-
-**简介: PromptTemplate结合LLM案例实战**
+#### PromptTemplate结合LLM案例实战
* 案例实战
- ```
+ ```python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
@@ -4629,19 +4503,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
-
-
-
-
-
-
-
-
-
-
-#### 第5集 大模型ChatModel聊天模型和Token计算
-
-**简介: 大模型里面ChatModel聊天模型介绍**
+#### 大模型ChatModel聊天模型和Token计算
* 什么是**ChatModel**
@@ -4677,7 +4539,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 参考案例OpenAI代码
- ```
+ ```python
# 多轮对话示例
messages = [
{"role": "system", "content": "你是一个电影推荐助手"},
@@ -4695,8 +4557,6 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
# 输出:《星际穿越》的主演是马修·麦康纳和安妮·海瑟薇...
```
-
-
* Chat聊天多轮对话中的Token如何计算
* 在多轮对话场景下,上下文通常涵盖以下几部分:
@@ -4730,24 +4590,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 8k、32k Tokens :支持长上下文的模型,如 GPT-4 等,有更大的上下文窗口,分别为 8192 个和 32768 个 Token。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第6集 聊天模型ChatPromptTemplate讲解
-
-**简介: 聊天模型ChatPromptTemplate讲解**
+#### 聊天模型ChatPromptTemplate讲解
* ChatPromptTemplate 核心概念
@@ -4756,7 +4600,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 天然适配聊天模型(如GPT-3.5/4)
* 可维护对话上下文
- 
+ 
* 消息类型体系
@@ -4791,7 +4635,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 使用from_messages构建多轮对话模板
- ```
+ ```python
from langchain_core.prompts import ChatPromptTemplate
# 定义消息列表,包含系统指令、用户输入和AI回复模板, 通过元组列表定义角色和模板,动态插入name和user_input变量
@@ -4817,7 +4661,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 结合`from_template`与`from_messages`
- ```
+ ```python
from langchain_core.prompts import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
@@ -4846,34 +4690,11 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
# 输出结果示例:
# SystemMessage(content='你是一个翻译助手,请用中文回答。')
- # HumanMessage(content='将'I love Python'翻译成中文。')
+ # HumanMessage(content='将'I love Python'翻译成中文。'
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第7集 LangChain聊天模型多案例实战
-
-**简介: LangChain聊天模型多案例实战**
+#### LangChain聊天模型多案例实战
* 需求
@@ -4883,7 +4704,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 领域专家案例实战
- ```
+ ```python
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage
@@ -4912,7 +4733,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 带参数的领域专家
- ```
+ ```python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
@@ -4955,7 +4776,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 合规客服系统
- ```
+ ```python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
@@ -4981,32 +4802,10 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print(response)
```
-
+### LCEL表达式和输出解析器多案例实战
-
-
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第三十二章 LCEL表达式和输出解析器多案例实战
-
-
-
-#### 第1集 LangChain链和LLMChain链案例实战
-
-**简介: LangChain链和LLMChain链案例实战**
+#### LangChain链和LLMChain链案例实战
* 什么是Chain链
@@ -5014,7 +4813,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 本质:将多个处理单元(模型/工具/逻辑)按特定顺序连接起来,形成完整的任务处理流程
* 想象Java中的责任链模式或工作流引擎中的步骤串联。
- ```
+ ```java
// 传统Java责任链模式(对比理解)
public interface Handler {
void handle(Request request);
@@ -5057,7 +4856,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 代码示例
- ```
+ ```python
from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate
@@ -5081,36 +4880,18 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
llm=model,
prompt=prompt_template
)
+ # LLMChain 类在 LangChain 0.1.17 中已被弃用,建议使用 RunnableSequence(如 prompt | llm)
+ llm_chain = prompt_template | model
# 执行调用(类似service.execute(input)),run方法被淘汰了,统一invoke方法调用
result = llm_chain.invoke("智能手机")
print(result)
# 输出:"1. 高清OLED屏幕 2. 5000mAh大电池 3. 旗舰级处理器"
```
+
+ * 其他常见的Chain,比如 `SequentialChain、TransformChain、RouterChain、RetrievalChain` 部分已经淘汰
- * 其他常见的Chain,比如 `SequentialChain、TransformChain、RouterChain、RetrievalChain` 部分已经淘汰了
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 新版LCEL表达式讲解和案例实战
-
-**简介: 新版LCEL表达式讲解和案例实战**
+#### 新版LCEL表达式讲解和案例实战
* **什么是LCEL(LangChain Expression Language**)
@@ -5142,7 +4923,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- 简单问答、单步生成任务(如生成公司名称、翻译句子)。
- 快速原型开发,无需复杂配置
- ```
+ ```python
chain = LLMChain(llm=model, prompt=prompt)
result = chain.invoke({"text": "Hello"})
```
@@ -5155,7 +4936,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- 复杂工作流(如多模型协作、动态路由、实时流式交互)。
- 生产级应用开发,需高并发、稳定性和可观察性(如集成LangSmith跟踪)
- ```
+ ```python
chain = prompt | model | output_parser
result = chain.invoke({"text": "Hello"})
```
@@ -5168,7 +4949,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 语法规则:`chain = component_a | component_b | component_c `
* 案例实战:构建一个简单的问答链
- ```
+ ```python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
@@ -5193,7 +4974,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print(result)
```
- ```
+ ```python
# 旧版本的写法, 创建LLMChain(类似构建一个Service类)
chain = LLMChain(
llm=model,
@@ -5206,23 +4987,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
# 输出:"1. 高清OLED屏幕 2. 5000mAh大电池 3. 旗舰级处理器"
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 LLM大模型Stream流式输出实战
-
-**简介: LLM大模型Stream流式输出实战**
+#### LLM大模型Stream流式输出实战
* Stream流式响应实战
@@ -5232,7 +4998,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 案例实战:故事小助手
- ```
+ ```python
from langchain_openai import ChatOpenAI
# #模型
@@ -5249,7 +5015,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 案例实战:科普助手(采用LCEL表达式进行)
- ```
+ ```python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
@@ -5284,21 +5050,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 等待时间较长:涉及大语言模型的节点可能需要较长时间才能返回完整结果。
* 复杂性较高:事件驱动的流式响应需要精细的控制和管理
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 输出解析器OutputParse实战和原理讲解
-
-**简介: 输出解析器OutputParse实战和原理讲解**
+#### 输出解析器OutputParse实战和原理讲解
* 为什么需要输出解析OutputParse?
* 大模型原始输出通常是**非结构化文本**
@@ -5306,7 +5058,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 将大模型的自由文本转为结构化数据(类似Java的JSON/XML解析)
* 自动处理模型输出的格式错误
-
+
* 解析器工作原理
@@ -5323,7 +5075,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 输出解析器基础结构三要素
- ```
+ ```python
from langchain.output_parsers import XxxParser
# 要素1:创建解析器(类似Java的Gson实例)
@@ -5342,7 +5094,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 测试查看 多个解析器prompt提示词
- ```
+ ```python
from langchain_core.output_parsers import JsonOutputParser,CommaSeparatedListOutputParser
from langchain_core.prompts import ChatPromptTemplate
@@ -5370,7 +5122,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 案例实战
- ```
+ ```python
from langchain_core.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
@@ -5402,19 +5154,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 虽然有解析器,但是存在大模型返回内容不符合格式要求,则一样会报错
* 本质解析器还是Prompt提示词内容,如果有报错则可以让大模型重试
-
-
-
-
-
-
-
-
-
-
-#### 第5集 LangChain字符串和列表输出解析器实战
-
-**简介: LangChain字符串和列表输出解析器实战**
+#### LangChain字符串和列表输出解析器实战
* 需求
@@ -5428,7 +5168,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **适用场景**:无需结构化处理,直接返回原始文本
- ```
+ ```python
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
@@ -5458,7 +5198,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **功能**:将逗号分隔的文本解析为列表。
* **适用场景**:模型生成多个选项或标签。
- ```
+ ```python
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import CommaSeparatedListOutputParser
from langchain_openai import ChatOpenAI
@@ -5477,35 +5217,20 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
# 调用
result = chain.invoke({"topic": "Java"})
- print(result) # 输出:["机器学习", "深度学习", "神经网络"]
+ print(result) # 输出:["机器学习", "深度学习", "神经网络"]
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第6集 Json输出解析器和问答系统答案提取实战
-
-**简介: Json输出解析器和问答系统答案提取实战**
+#### Json输出解析器和问答系统答案提取实战
* `JsonOutputParser`
* **功能**:将模型输出解析为 JSON 对象。
* **适用场景**:需要模型返回结构化数据(如 API 响应),**多数要结合Pydantic进行使用**
- ```
+ ```python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import JsonOutputParser
@@ -5531,7 +5256,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 目标:从模型回答中提取答案和置信度。
- ```
+ ```python
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
@@ -5566,30 +5291,12 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
#答案:地球的平均半径约为6,371公里。,置信度:0.95
```
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
+### Pydantic模型和LLM高级解析器实战
-### 第三十三章 Pydantic模型和LLM高级解析器实战
-
-
-
-
-
-#### 第1集 Python模型管理Pydantic介绍和安装
-
-**简介: Python模型管理Pydantic介绍和安装**
+#### Python模型管理Pydantic介绍和安装
* 什么是Pydatic
@@ -5614,13 +5321,13 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- **序列化**:轻松转换数据为字典/JSON
- **配置管理**:支持复杂配置项的验证
-
+
* 对比Java开发的模型验证
* 典型Java方式(需手写校验逻辑)
- ```
+ ```java
public class User {
private String name;
private int age;
@@ -5639,7 +5346,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 传统Python方式(样板代码)
- ```
+ ```python
class User:
def __init__(self, name: str, age: int):
if not isinstance(name, str):
@@ -5654,7 +5361,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* pydantic方式(声明式验证)
- ```
+ ```python
# 只需3行代码即可实现完整验证!
from pydantic import BaseModel, Field
class User(BaseModel):
@@ -5668,7 +5375,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 模块安装 Pydantic V2(需要Python 3.10+)
- ```
+ ```shell
pip install pydantic==2.7.4
```
@@ -5676,7 +5383,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* Pydantic 的主要方法是创建继承自 BaseModel 的自定义类
- ```
+ ```python
from pydantic import BaseModel
# 类似Java中的POJO,但更强大
@@ -5695,7 +5402,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 创建实例与校验
- ```
+ ```python
try:
UserProfile(username=123) # 触发验证错误
except ValueError as e:
@@ -5710,7 +5417,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 字段类型验证
- ```
+ ```python
from pydantic import BaseModel,HttpUrl,ValidationError
class WebSite(BaseModel):
@@ -5739,7 +5446,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 数据解析/序列化
- ```
+ ```python
from pydantic import BaseModel
class Item(BaseModel):
@@ -5756,26 +5463,13 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 调试技巧:打印模型结构
- ```
+ ```python
print(Website.model_json_schema())
- # 输出完整的JSON Schema
+ # 输出完整的JSON Schem
```
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 Pydantic字段校验Field函数多案例实战
-
-**简介:Pydantic字段校验Field多案例实战**
+#### Pydantic字段校验Field函数多案例实战
* Filed函数讲解
@@ -5801,7 +5495,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* Field 的第一个参数是 default,而 ... 在此处的语义等价于“无默认值”。
* 若省略 default 参数(如 Field(title="用户名")),Pydantic 会隐式使用 ...,但显式写出更明确
- ```
+ ```python
from pydantic import BaseModel, Field
class User(BaseModel):
name: str = Field(..., title="用户名", min_length=2)
@@ -5814,7 +5508,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 可选字段(有默认值)
- ```
+ ```python
from pydantic import BaseModel, Field
class UserOptional(BaseModel):
name: str = Field("Guest", title="用户名") # 默认值为 "Guest"
@@ -5826,7 +5520,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 以下两种写法完全等价, 使用 `Field` 的优势在于可以附加额外参数(如 `title`、`min_length`、`description` 等)。
- ```
+ ```python
# 写法 1:省略 Field,直接类型注解
name: str
@@ -5836,7 +5530,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 数值类型必填
- ```
+ ```python
from pydantic import BaseModel, Field, ValidationError
class Product(BaseModel):
@@ -5855,7 +5549,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 嵌套模型必填
- ```
+ ```python
from pydantic import BaseModel, Field
class Address(BaseModel):
city: str = Field(..., min_length=1)
@@ -5874,7 +5568,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 明确可选字段
- ```
+ ```python
from pydantic import BaseModel, Field
from typing import Optional
@@ -5888,7 +5582,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 混合使用默认值和必填
- ```
+ ```python
from pydantic import BaseModel, Field
class Config(BaseModel):
@@ -5903,19 +5597,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
Config(timeout=5) # 触发 ValidationError
```
-
-
-
-
-
-
-
-
-
-#### 第3集 Pydantic自定义验证器多案例实战
-
-**简介:Pydantic自定义验证器多案例实战**
+#### Pydantic自定义验证器多案例实战
* `@field_validator`介绍
@@ -5927,7 +5610,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基础语法
- ```
+ ```python
from pydantic import BaseModel, ValidationError, field_validator
class User(BaseModel):
@@ -5955,7 +5638,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 字符串格式校验
- ```
+ ```python
from pydantic import BaseModel, Field,field_validator
class User(BaseModel):
@@ -5976,7 +5659,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 验证用户名和长度
- ```
+ ```python
from pydantic import BaseModel, Field,field_validator
class User(BaseModel):
username: str = Field(..., min_length=3)
@@ -5996,7 +5679,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 密码复杂性验证
- ```
+ ```python
from pydantic import BaseModel, Field,field_validator
class Account(BaseModel):
@@ -6019,7 +5702,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 多个字段共享验证器
- ```
+ ```python
from pydantic import BaseModel, Field,field_validator
class Product(BaseModel):
price: float
@@ -6042,7 +5725,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 忘记返回值:验证器必须返回字段的值(除非明确要修改)。
- ```
+ ```python
@field_validator("email")
def validate_email(cls, v):
if "@" not in v:
@@ -6068,23 +5751,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| `parse_obj()` | `model_validate()` |
| `update_forward_refs()` | `model_rebuild()` |
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 重点-解析器PydanticOutputParser实战
-
-**简介:重点-解析器PydanticOutputParser实战**
+#### 重点-解析器PydanticOutputParser实战
* 为啥要用为什么需要Pydantic解析?
@@ -6095,7 +5763,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **案例实战一:大模型信息输出提取( `PydanticOutputParser` 结合Pydantic模型验证输出)**
- ```
+ ```python
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
from langchain_core.output_parsers import PydanticOutputParser
@@ -6153,7 +5821,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 新版才支持从pydantic获取约束模型,该参数并非强制要求,而是可选的增强功能
* `JsonOutputParser`可以处理流式返回的部分JSON对象。
- ```
+ ```python
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
from langchain_core.prompts import ChatPromptTemplate
@@ -6201,21 +5869,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
# print(chunk) # 逐词输出
```
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 重点-大模型修复机制OutputFixingParser
-
-**简介:大模型修复机制OutputFixingParser解析器**
+#### 重点-大模型修复机制OutputFixingParser
* `OutputFixingParser`
@@ -6226,13 +5881,13 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 兼容性:与Pydantic数据模型无缝集成,支持结构化输出验证。
* 容错机制:避免因模型输出不稳定导致程序中断
-
+
* 核心语法与使用步骤
* 基础语法
- ```
+ ```python
from langchain.output_parsers import OutputFixingParser, PydanticOutputParser
from langchain_openai import ChatOpenAI
@@ -6268,7 +5923,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 检测到错误后,将错误信息与原始输入传递给LLM。
* LLM根据提示生成符合Pydantic模型的修正结果。
- ```
+ ```python
from langchain.output_parsers import OutputFixingParser
from langchain_core.output_parsers import PydanticOutputParser
from langchain_openai import ChatOpenAI
@@ -6313,7 +5968,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 完整正常案例
- ```
+ ```python
from langchain.output_parsers import OutputFixingParser
from langchain_core.output_parsers import PydanticOutputParser
from langchain_openai import ChatOpenAI
@@ -6359,28 +6014,10 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 提示词不清晰:在提示模板中明确格式要求。
* 网络问题:通过代理服务优化API访问
-
-
-
-
+### AI大模型必备之RAG和智能医生实战
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第三十四章 AI大模型必备之RAG和智能医生实战
-
-
-
-#### 第1集 什么是大模型的幻觉输出
-
-**简介: 什么是大模型的幻觉输出**
+#### 什么是大模型的幻觉输出
* “幻觉输出”(Hallucination)
@@ -6400,7 +6037,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 矛盾内容
* 例:同一段回答中前后逻辑冲突(如先说“地球是平的”,后又说“地球绕太阳公转”)
-
+
* 幻觉产生的根本原因
@@ -6451,19 +6088,11 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- **提示词设计**:明确要求模型标注不确定性(如“回答需基于2023年数据”)。
- **多源验证**:对关键信息人工交叉核对(如学术论文、权威网站)。
+#### 带你走进RAG检索增强生成和应用场景
+**简介: 带你走进RAG检索增强生成和应用场景**
-
-
-
-
-
-
-#### 第2集 带你走进RAG检索增强生成和应用场景
-
-**简介: 带你走进RAG检索增强生成和应用场景**
-
-* 什么是RAG技术
+* 什么是RAG技术
* RAG(Retrieval-Augmented Generation)检索增强生成,是结合信息检索与文本生成的AI技术架构。
* 核心思想:
@@ -6471,11 +6100,11 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 再将检索结果与问题共同输入生成模型得到最终答案
* 类比人类解答问题的过程:遇到问题时先查资料(检索),再结合资料组织回答(生成)
- 
+ 
* 用Java伪代码描述RAG工作流程:
- ```
+ ```java
public class JavaRAG {
public static void main(String[] args) {
// 1. 加载文档
@@ -6523,7 +6152,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 技术架构
-
+
* **涉及的技术链路环节: 文档加载器->文档转换器->文本嵌入模型->向量存储->检索器**
@@ -6547,7 +6176,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 实时检索最新的产品文档、FAQ。
* 生成个性化回答(如退货政策、故障排查)。
- ```
+ ```python
用户问:"这个小滴手机支持老人家使用不?"
系统检索:产品适合人群相关词条
生成回答:"我们这个产品适合18岁以上的成人使用,包括中老年人等"
@@ -6564,7 +6193,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 检索权威医学数据库(如PubMed、临床指南)。
* 生成基于循证医学的答案,标注参考文献来源。
- ```
+ ```python
用户问:"二甲双胍的禁忌症有哪些?"
系统检索:最新《临床用药指南》第5.3节
生成回答:"根据2023版用药指南,二甲双胍禁用于以下情况:1)严重肾功能不全..."
@@ -6581,7 +6210,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 检索实时财报、新闻、行业数据 → 输入生成模型。
* 自动生成带有数据支撑的投资建议。
- ```
+ ```python
用户问:"XXX公司财报如何"
系统检索:某某公司财报
生成回答:"根据公司的财报和解读,利润和负债..."
@@ -6589,21 +6218,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 效果:析师效率提升,报告更新频率加快
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 LLM智能AI医生+RAG系统案例实战《上》
-
-**简介: LLM智能AI医生+RAG系统案例实战**
+#### LLM智能AI医生+RAG系统案例实战
* 需求
@@ -6615,7 +6230,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 创建项目和安装相关环境
- ```
+ ```python
# 创建并激活虚拟环境
python -m venv .venv
source .venv/bin/activate
@@ -6630,46 +6245,28 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 下载相关资料 ,使用**【wget】或者【浏览器】远程下载相关依赖包(需要替换群里最新的)**
- ```
+ ```python
原生资料下载方式(账号 - 密码 - ip地址 - 端口 需要替换群里最新的,【其他路径不变】)
wget --http-user=用户名 --http-password=密码 http://ip:端口/dcloud_pan/aipan_xd-rag.zip
-
#比如 命令行下
wget --http-user=admin --http-password=xdclass.net888 http://47.115.31.28:9088/dcloud_pan/aipan_xd-rag.zip
-
# 比如 浏览器直接访问
http://47.115.31.28:9088/dcloud_pan/aipan_xd-rag.zip
```
-
+
* 解压后执行【**依赖很多,版本差异大,务必按照下面执行,否则课程无法进行下去,加我微信 xdclass6**】
```
# 安装依赖
pip install -r requirements.txt
```
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 LLM智能AI医生+RAG系统案例实战《下》
-
-**简介: LLM智能AI医生+RAG系统案例实战**
-
* 效果测试
-
+
* 多数同学的问题
* **为啥可以根据我们的提问,进行检索到对应的词条?而且还可以正确检索?**
@@ -6677,35 +6274,18 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **为啥检索到词条后,还可以用调整输出内容,更加友好?**
* **什么是嵌入大模型?和前面学的LLM大模型有啥区别?**
-
-
-
-
-
-
-
-
-
+
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
+### RAG 检索增强生成之Loader实战
-### 第三十五章 RAG 检索增强生成之Loader实战
-
-
-
-#### 第1集 RAG系统链路和数据加载Loaders技术
-
-**简介: RAG系统链路和数据加载Loaders技术**
+#### RAG系统链路和数据加载Loaders技术
* RAG系统与LLM交互架构图
* 注意
* 万丈高楼平地起,基础需要打牢固,一步步进行,然后学会举一反三使用
* 如果直接讲Agent智能体项目,那项目涉及到的很多技术就懵逼了,要学会思路
-
-
-
+
* **涉及的技术链路环节: 文档加载器->文档转换器->文本嵌入模型->向量存储->检索器**
@@ -6719,7 +6299,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
网页
```
- 
+ 
* 文档加载器 (Document Loaders)
@@ -6727,8 +6307,6 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 将不同来源的原始数据(如PDF、网页、JSON、、HTML、数据库等)转换为统一格式的文档对象,便于后续处理。
* **核心任务**:数据源适配与初步结构化
-
-
* LangChain里面的Loader
* 接口文档地址【如果失效就忽略):https://python.langchain.com/docs/integrations/document_loaders/
@@ -6748,7 +6326,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* LangChain 设计了一个统一的接口`BaseLoader`来加载和解析文档,
- ```
+ ```python
class BaseLoader(ABC): # noqa: B024
"""Interface for Document Loader.
@@ -6772,7 +6350,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **`page_content`**: 文本内容
* **`metadata`**: 元数据(如来源、创建时间、作者等)
- ```
+ ```python
class Document(BaseMedia):
"""Class for storing a piece of text and associated metadata.
@@ -6823,23 +6401,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 其他加载器 (自定义) ...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 文档加载器Loaders技术多案例实战
-
-**简介: 文档加载器Loaders技术多案例实战**
+#### 文档加载器Loaders技术多案例实战
* TextLoader - 加载纯文本文件
@@ -6848,7 +6410,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- **`encoding`**: 文件编码(默认 `utf-8`)
- **`autodetect_encoding`**: 自动检测编码(如处理中文乱码)
- ```
+ ```python
from langchain_community.document_loaders import TextLoader
# 文本加载
loader = TextLoader("data/test.txt")
@@ -6863,7 +6425,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基础案例代码
- ```
+ ```python
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader("data/test.csv", csv_args={"delimiter": ","})
@@ -6876,7 +6438,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 可指定列名,按行生成文档
- ```
+ ```python
from langchain_community.document_loaders import CSVLoader
#loader = CSVLoader("data/test.csv", csv_args={"delimiter": ","})
@@ -6889,8 +6451,6 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print(documents[1].page_content)
```
-
-
* JSONLoader - 加载 JSON 文件
* 核心参数详解
@@ -6926,7 +6486,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 编码实战
- ```
+ ```python
from langchain_community.document_loaders import JSONLoader
loader = JSONLoader(
file_path="data/test.json",
@@ -6936,28 +6496,11 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
docs = loader.load()
print(len(docs))
- print(docs[0])
+ print(docs[0]
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 PDF文档加载器实战和常见问题处理
-**简介: PDF文档加载器实战和常见问题处理**
+#### PDF文档加载器实战和常见问题处理
* `PyPDFLoader` 加载PDF文件
@@ -6971,13 +6514,13 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 安装依赖库
- ```
+ ```python
pip install pypdf
```
* 案例代码实战
- ```
+ ```python
from langchain_community.document_loaders import PyPDFLoader
# PDF加载
loader = PyPDFLoader("data/test.pdf")
@@ -6996,14 +6539,14 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 按需加载, 通过 `load()` 方法的参数控制加载范围:
- ```
+ ```python
# 加载指定页码范围(例如第2页到第4页)
pages = loader.load([1, 2, 3]) # 注意页码从0开始(第1页对应索引0)
```
* 提取所有文本合并为单个文档, 若需将全部页面内容合并为一个字符串:
- ```
+ ```python
full_text = "\n\n".join([page.page_content for page in pages])
print(f"合并后的全文长度: {len(full_text)} 字符")
```
@@ -7021,7 +6564,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 调整分块策略:选择合适的分隔符或分块大小
- ```
+ ```python
text_splitter = RecursiveCharacterTextSplitter(
separators=["\n\n", "\n", "."], # 按段落、句子分割
chunk_size=500,
@@ -7033,7 +6576,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **批量处理PDF**:遍历文件夹内所有PDF文件。
- ```
+ ```python
import os
pdf_folder = "docs/"
all_pages = []
@@ -7043,31 +6586,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
all_pages.extend(loader.load())
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 Loader进阶-PDF文档里面的图片提取解析
-
-**简介: Loader进阶-PDF文档里面的图片提取解析**
+#### Loader进阶-PDF文档里面的图片提取解析
* 如何提取PDF里面的图片文案?
@@ -7109,38 +6629,15 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 代码实战
- ```
+ ```python
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("data/pdf-img.pdf", extract_images=True)
pages = loader.load()
print(pages[0].page_content)
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 网页加载器WebBaseLoader案例实战
+#### 网页加载器WebBaseLoader案例实战
**简介: Web网页加载器WebBaseLoader案例实战**
@@ -7158,7 +6655,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 安装依赖库
- ```
+ ```python
pip install beautifulsoup4 # HTML 解析依赖(默认已包含)
pip install requests # 网络请求依赖(默认已包含)
```
@@ -7173,7 +6670,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基础用法:加载单个网页
- ```
+ ```python
import os
#代码中设置USER_AGENT, 设置USER_AGENT的代码一定要放在WebBaseLoader 这个包前面,不然还是会报错
os.environ['USER_AGENT'] = 'Mozilla/5.0 (Windows NT 14.0; Win64; x64) AppleWebKit/567.36 (KHTML, like Gecko) Chrome/58.0.444.11 Safari/337.3'
@@ -7196,7 +6693,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 批量加载多个网页
- ```
+ ```python
import os
#代码中设置USER_AGENT, 注意设置USER_AGENT的代码一定要放在WebBaseLoader 这个包前面,不然还是会报错
os.environ['USER_AGENT'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
@@ -7221,17 +6718,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 更多详细API和参数 https://python.langchain.com/docs/integrations/document_loaders/web_base/
-
-
-
-
-
-
-
-
-#### 第6集 Word文档加载器实战和常见问题处理
-
-**简介: Word文档加载器实战和常见问题处理**
+#### Word文档加载器实战和常见问题处理
* `Docx2txtLoader`介绍
@@ -7243,7 +6730,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 安装依赖库
- ```
+ ```python
pip install docx2txt # 核心文本提取库
```
@@ -7253,7 +6740,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基础用法:加载单个Word文档
- ```
+ ```python
from langchain_community.document_loaders import Docx2txtLoader
# 初始化加载器,传入文件路径
@@ -7270,7 +6757,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 批量加载文档
- ```
+ ```python
from langchain_community.document_loaders import Docx2txtLoader
import os
@@ -7302,39 +6789,16 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 原因:Docx2txtLoader 仅提取文本,忽略图片。
* 解决:使用 python-docx 单独提取图片,也可以使用其他组件,类似OCR
+### RAG检索增强生成之文档切割
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第三十六章 RAG检索增强生成之文档切割
-
-
-
-
-#### 第1集 RAG系统链路构建之文档切割转换
-
-**简介: RAG系统链路构建之文档切割转换**
+#### RAG系统链路构建之文档切割转换
* 构建RAG系统:**涉及的技术链路环节: 文档加载器->文档转换器->文本嵌入模型->向量存储->检索器**
* RAG数据流水线示意图
- ```
+ ```python
原始数据 → 数据加载 → 预处理 → 向量化 → 存储 → 检索增强生成
↗ ↗ ↗
PDF 文本清洗 嵌入模型
@@ -7342,7 +6806,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
网页
```
- 
+ 
* 需求背景,为啥要用?
@@ -7352,8 +6816,6 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 格式兼容性问题:PDF/HTML/代码等不同格式的结构差异
-
-
* 文档转换器(Document Transformers)
* 文档转换器是 LangChain 处理文档流水线的核心组件,负责对原始文档进行结构化和语义化处理,
@@ -7367,23 +6829,23 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **文本分块**:按固定长度或语义分割(防止截断完整句子)
* **去噪处理**:移除特殊字符、乱码、广告内容
* **元数据注入**:添加来源、时间戳等上下文信息
-
+
* 效果
* **保留语义完整性**:避免因分割导致上下文断裂或信息丢失
* **适配模型输入限制**:确保分割后的文本块长度符合大语言模型(LLM)的token限制
* **优化向量化效果**:通过合理分块提升向量表示的语义精度,从而提高检索匹配率
-
+
| 问题类型 | 原始文档示例 | 转换前问题 | 转换后效果 |
| :--------: | :-----------: | :-----------------------: | :--------------------: |
| 长文本溢出 | 500页法律合同 | 直接输入导致API报错 | 分割为上下文合规的段落 |
| 信息碎片化 | 产品手册PDF | 技术参数分散在不同页面 | 按功能模块重组内容 |
| 噪音污染 | 网页抓取内容 | 包含广告/导航栏等干扰信息 | 提取纯净正文内容 |
| 格式混乱 | 代码仓库文档 | Markdown/代码片段混合 | 分离代码与说明文本 |
-
+
* 基础类和核心参数说明
- ```
+ ```python
from langchain_text_splitters import TextSplitter
#源码
class TextSplitter(BaseDocumentTransformer, ABC):
@@ -7399,7 +6861,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
strip_whitespace: bool = True,
) -> None:
```
-
+
* 方法说明
* `TextSplitter`本身没有实现`split_text`,要文档分割器按自己的分割策略实现分割
@@ -7409,13 +6871,13 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* `split_text()`是基础文本分割方法
* `create_documents()`在`split_text()`基础上封装了元数据绑定逻辑
* `split_documents()`内部调用`create_documents()`并自动处理元数据传递
-
+
| 方法 | 输入类型 | 输出类型 | 元数据处理 | 典型使用场景 |
| :----------------------- | :------------------- | :--------------- | :------------------------- | :------------------------------------ |
| **`split_text()`** | **单个字符串** | `List[str]` | ❌ 不保留元数据 | 仅需分割纯文本内容时使用 |
| **`create_documents()`** | **字符串列表** | `List[Document]` | ✅ 需手动传递元数据 | 从原始文本构建带元数据的文档对象 |
| **`split_documents()`** | **Document对象列表** | `List[Document]` | ✅ 自动继承输入文档的元数据 | 分割已加载的文档对象(如PDF解析结果) |
-
+
* `chunk_size`
@@ -7426,10 +6888,10 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 防止文本过长超出模型处理限制,影响检索精度。
* 较小的chunk_size能提高检索细粒度,会导致上下文缺失。
-
+
* 例子
- ```
+ ```python
# 设置chunk_size=100,分割文本为不超过100字符的块
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
@@ -7437,7 +6899,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
#分割结果:["Python是一种解释型语言,适合快速开发。", "开发。它支持面向对象编程,语法简洁。"](假设每个块接近100字符)
```
-
+
* `chunk_overlap`
* 定义:相邻文本块之间的重叠字符数,用于保留上下文连贯性。
@@ -7446,16 +6908,16 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 案例一
- ```
+ ```python
如果chunk_size设为1024,chunk_overlap设为128, 对一个长度为2560的文本序列,会切分成3个chunk:
chunk 1: 第1-1024个token
chunk 2: 第897-1920个token (与chunk 1重叠128个)
chunk 3: 第1793-2560个token (与chunk 2重叠128个)
```
-
+
* 案例二
- ```
+ ```python
# 设置chunk_size=50,chunk_overlap=10
text = "深度学习需要大量数据和计算资源。卷积神经网络(CNN)在图像处理中表现优异。"
text_splitter = CharacterTextSplitter(chunk_size=50, chunk_overlap=10)
@@ -7464,7 +6926,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
# 重叠部分"计算资源。"确保第二块包含前一块的结尾
```
-
+
* `separators`
* 定义:分隔符优先级列表,用于递归分割文本。
@@ -7473,7 +6935,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 例子
- ```
+ ```python
# 默认分隔符:["\n\n", "\n", " ", ""]
text_splitter = RecursiveCharacterTextSplitter(
separators=["\n\n", "。", ",", " "]
@@ -7483,28 +6945,9 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
#分割流程:先按\n\n分割为两段,若仍超长则按。继续分割
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 字符文档转换器TextSplitter案例实战
-
-**简介: 文档转换器CharacterTextSplitter案例实战**
+#### 字符文档转换器TextSplitter案例实战
* `CharacterTextSplitter` 字符分割器
@@ -7528,7 +6971,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 长文本处理
- ```
+ ```python
from langchain.text_splitter import CharacterTextSplitter
text = "是一段 需要被分割的 长文本示例....,每个文本块的最大长度(字符数或token数)Document loaders are designed to load document objects. LangChain has hundreds of integrations with various data sources to load data from: Slack, Notion, Google Drive"
@@ -7547,7 +6990,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 日志文件处理
- ```
+ ```python
from langchain.text_splitter import CharacterTextSplitter
log_data = """
@@ -7571,43 +7014,23 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| 特性 | 优势 | 局限性 |
| :--------: | :----------------------: | :----------------------------------------: |
| 分割速度 | ⚡️ 极快(O(n)复杂度) | 不考虑语义结构 |
- | 内存消耗 | 🟢 极低 | 可能切断完整语义单元, 对语义关联性保持较弱 |
- | 配置灵活性 | 🛠️ 支持自定义分隔符和重叠 | 需要预定义有效分隔符 |
- | 多语言支持 | 🌍 支持任意字符集文本 | 对表意文字计算可能不准确 |
-
-* 适合场景
-
- * 推荐使用:
- - 结构化日志处理
- - 代码文件解析
- - 已知明确分隔符的文本(如Markdown)
- - 需要精确控制块大小的场景
- * 不推荐使用:
- - 自然语言段落(建议用RecursiveCharacterSplitter)
- - 需要保持语义完整性的场景
- - 包含复杂嵌套结构的文本
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ | 内存消耗 | 🟢 极低 | 可能切断完整语义单元, 对语义关联性保持较弱 |
+ | 配置灵活性 | 🛠️ 支持自定义分隔符和重叠 | 需要预定义有效分隔符 |
+ | 多语言支持 | 🌍 支持任意字符集文本 | 对表意文字计算可能不准确 |
+* 适合场景
-#### 第3集 递归字符文档转换器TextSplitter案例实战
+ * 推荐使用:
+ - 结构化日志处理
+ - 代码文件解析
+ - 已知明确分隔符的文本(如Markdown)
+ - 需要精确控制块大小的场景
+ * 不推荐使用:
+ - 自然语言段落(建议用RecursiveCharacterSplitter)
+ - 需要保持语义完整性的场景
+ - 包含复杂嵌套结构的文本
-**简介: 递归字符文档转换器TextSplitter案例实战**
+#### 递归字符文档转换器TextSplitter案例实战
* `RecursiveCharacterTextSplitter` 递归字符分割器
@@ -7619,7 +7042,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 核心参数说明
- ```
+ ```python
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
@@ -7635,7 +7058,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基础案例测试, 处理后chunk之间也有overlap
- ```
+ ```python
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
@@ -7657,7 +7080,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 学术论文处理
- ```
+ ```python
from langchain.text_splitter import RecursiveCharacterTextSplitter
paper_text = """
@@ -7681,7 +7104,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 避坑指南
- ```
+ ```python
# 错误示范:不合理的separators顺序
bad_splitter = RecursiveCharacterTextSplitter(
separators=[" ", "\n"], # 空格优先会导致过早分割
@@ -7712,27 +7135,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 包含嵌套结构的文本(如Markdown)
* 需要保持段落完整性的问答系统
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 分割器常见问题和优化最佳实践
-
-**简介: 分割器常见问题和优化最佳实践**
+#### 分割器常见问题和优化最佳实践
* 其他常见分割器
@@ -7770,7 +7173,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 文本总长度不足:当输入文本长度 ≤ chunk_size时,不会触发分割。
- ```
+ ```python
#解释:文本长度远小于chunk_size,不触发分割,无重叠。
from langchain_text_splitters import CharacterTextSplitter
text = "这是一个非常短的测试文本。"
@@ -7788,7 +7191,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 递归分割策略:RecursiveCharacterTextSplitter优先保证块大小,可能牺牲重叠。
- ```
+ ```python
# 解释:当无法找到分隔符时,按字符数硬分割,强制保留重叠。
from langchain_text_splitters import RecursiveCharacterTextSplitter
@@ -7817,7 +7220,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 函数是一个内置函数,用于在迭代过程中同时获取元素的索引和值。
* 它返回一个枚举对象,包含了索引和对应的元素
- ```
+ ```python
# enumerate(iterable, start=0)
#参数:iterable:必需,一个可迭代对象,如列表、元组、字符串等。
#参数:start:可选,指定索引的起始值,默认为 0。
@@ -7829,7 +7232,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 分隔符强制分割:在分隔符处切割时,剩余文本不足以形成重叠。
- ```
+ ```python
#解释:分隔符优先切割,每个块正好为7个字符,无法形成重叠。
from langchain_text_splitters import CharacterTextSplitter
@@ -7865,7 +7268,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 分割Python代码时,`RecursiveCharacterTextSplitter.from_language(Language.PYTHON)`
* 会自动识别函数、类等结构,避免打断代码逻辑
- ```
+ ```python
from langchain_text_splitters import Language, RecursiveCharacterTextSplitter
python_splitter = RecursiveCharacterTextSplitter.from_language(
language=Language.PYTHON, chunk_size=200, chunk_overlap=50
@@ -7881,7 +7284,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 使用MarkdownHeaderTextSplitter按标题分割,保留元数据
* 输入Markdown内容将按标题层级生成带元数据的块
- ```
+ ```python
headers_to_split_on = [("#", "Header 1"), ("##", "Header 2")]
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on)
```
@@ -7906,32 +7309,15 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **实验验证:通过AB测试对比不同参数的检索准确率与生成质量**
-
-
-
-
-
-
-
+### 人工智能和高等数学核心基础扫盲
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第三十七章 人工智能和高等数学核心基础扫盲
-
-
-
-#### 第1集 扫盲-AI大模型必备之向量-张量和应用场景
-
-**简介: 扫盲-AI大模型必备之向量-张量和应用场景**
+#### 扫盲-AI大模型必备之向量-张量和应用场景
* 什么是向量
* 向量就是一串有序的数字,像一条带方向的“箭头”, 在机器学习里面尤其重要
-
+
* 世间万物使用计算机表示,用的数字化语言,让计算机能理解复杂事物, 每个数据都包含多种属性
@@ -7943,7 +7329,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 向量就是有几个数字横向或者纵向排列而成,每个数字代表一个属性。
- ```
+ ```python
// 传统Java数据存储
String[] names = {"小明", "身高", "体重"};
Object[] person = {"张三", 175, 68.5};
@@ -7975,7 +7361,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- 高维向量表示用户画像
- ```
+ ```python
public class UserVector {
// 每个维度代表一个特征
float[] features = new float[256];
@@ -8049,19 +7435,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 多维向量 → 更长的数字串(像详细简历)。
* 张量 → 数字的“集装箱”(像Excel表格、图片集、视频流)。
-
-
-
-
-
-
-
-
-
-
-#### 第2集 扫盲-高等数学里面的求和-点积公式讲解
-
-**简介: 高等数学里面的求和-点积公式讲解**
+#### 扫盲-高等数学里面的求和-点积公式讲解
* **什么是求和符号?**
@@ -8071,21 +7445,19 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基本形式
-
+
- 
+ 
* **单变量求和示例**
* 计算1到5的整数和:
-
+
* 计算前3个偶数的平方和:
-
-
-
+
* 点积(内积)的定义与计算
@@ -8093,41 +7465,27 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 点积是**两个向量对应分量相乘后求和**的运算,结果是一个标量(数值)。
-
+
* 几何意义
* 点积反映两个向量的夹角关系
* 通过在空间中引入笛卡尔坐标系,向量之间的点积既可以由向量坐标的代数运算得出
-
+
* 点积计算示例
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 扫盲-向量的相似度计算之余弦相似度
-
-**简介: 扫盲-向量的相似度计算之余弦相似度**
+#### 扫盲-向量的相似度计算之余弦相似度
* 补充:三角函数
* **正弦(sinθ)**:对边长度与斜边长度的比值。
* **余弦(cosθ)**:邻边长度与斜边长度的比值(即夹角的两边)
-
+
* 为啥要学余弦相似度?
@@ -8138,9 +7496,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **LLM大模型的RAG原理:用户输入自然语言query,找到最相关的文档**
* 这些场景的共同点:需要量化两个事物的相似程度,向量空间中的"方向感"
-
-
-
+
* 什么是余弦相似度?
@@ -8150,9 +7506,9 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 公式(向量的模长等于其各分量平方和的平方根)
- 
+ 
-
+
* **直观理解**
@@ -8177,7 +7533,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 以二维向量为例:向量A = [3, 4],向量B = [1, 2]
* 结论:两个向量方向高度相似!
-
+
* 大模型中的核心应用场景
@@ -8194,27 +7550,11 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 物品向量:[0.4, 0.1, 0.0](科技类文章)
* 相似度 ≈ 0.3×0.4 + 0.5×0.1 = 0.17 → 推荐该文章。
-
-
* 为什么重要:掌握余弦相似度,就是掌握了**连接数据与智能的钥匙**!
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 科学计算核心库NumPy和推荐系统案例
-
-**简介: 科学计算核心库NumPy和推荐系统案例**
+#### 科学计算核心库NumPy和推荐系统案例
* 什么是 NumPy?
@@ -8227,7 +7567,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 原生 Python 列表的痛点
- ```
+ ```python
# 计算两个列表元素相加
a = [1, 2, 3]
b = [4, 5, 6]
@@ -8236,7 +7576,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* NumPy 的解决方案
- ```
+ ```python
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
@@ -8252,7 +7592,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基础安装
- ```
+ ```python
# 常规安装
pip install numpy
@@ -8267,7 +7607,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 案例1:基础向量计算
- ```
+ ```python
import numpy as np
def cos_sim(v1, v2):
@@ -8299,7 +7639,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 案例2:推荐系统
- ```
+ ```python
import numpy as np
def cosine_similarity(a, b):
@@ -8335,34 +7675,10 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print("推荐排序:", recommendations)
```
-
-
-
-
-
-
-
-
-
+### RAG系统必备之嵌入大模型Embedding
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
-### 第三十八章 RAG系统必备之嵌入大模型Embedding
-
-
-
-#### 第1集 嵌入大模型Embedding和LLM大模型对比
-
-**简介: 嵌入大模型Embedding和LLM大模型对比**
+#### 嵌入大模型Embedding和LLM大模型对比
* 什么是文本嵌入Text Embedding
@@ -8387,7 +7703,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **语义感知**:相似的文字数字也相似
- ```
+ ```python
# "狗"和"犬"的嵌入向量距离近
# "苹果"(水果)和"苹果"(手机)的嵌入距离远
```
@@ -8408,7 +7724,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 句子1和2相近,因为维度大体相同
-
+
* 应用场景
@@ -8428,7 +7744,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 这些向量可以用于计算文本之间的相似度、进行信息检索和聚类分析
* 文本嵌入的整体链路 `原始文本 → Embedding模型 → 数值向量 → 存储/比较`
-
+
* LLM 大模型 vs Embedding 大模型
@@ -8468,31 +7784,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* Embedding:把论文段落转为向量,计算与数据库的相似度
* LLM:若发现高相似度,自动改写重复段落并给出修改建议
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第2集 LangChain框架文本嵌入Embedding实战
-
-**简介: LangChain框架文本嵌入Embedding实战**
+#### LangChain框架文本嵌入Embedding实战
* LangChain框架中的Embedding
@@ -8506,7 +7798,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 源码查看
- ```
+ ```python
from langchain.embeddings import OpenAIEmbeddings
from abc import ABC, abstractmethod
@@ -8554,9 +7846,9 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 在线嵌入模型使用,也可以使用其他的厂商
* 地址:https://bailian.console.aliyun.com/
- 
+ 
- ```
+ ```python
from langchain_community.embeddings import DashScopeEmbeddings
# 初始化模型
@@ -8580,23 +7872,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print(len(embeddings[0])) # 1536
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第3集 本地私有化部署嵌入大模型Embedding实战
-
-**简介: 本地私有化部署嵌入模型Embedding实战**
+#### 本地私有化部署嵌入大模型Embedding实战
* 为什么要本地部署嵌入大模型
@@ -8615,7 +7892,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
用户数据 → 企业内网服务器 → 本地模型处理 → 结果存于本地数据库
```
- 
+ 
* 部署实战
@@ -8623,7 +7900,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 地址:https://ollama.com/search?c=embed
- ```
+ ```python
#下载嵌入模型
ollama run mofanke/acge_text_embedding
@@ -8645,7 +7922,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 由于 LangChain 0.3.x 尚未原生支持 Ollama 嵌入模型,需自定义接口类
* `pip install requests`
- ```
+ ```python
from typing import List, Optional
from langchain.embeddings.base import Embeddings
import requests
@@ -8678,7 +7955,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 使用自定义嵌入模型处理文档
- ```
+ ```python
embeddings = OllamaEmbeddings(
model="mofanke/acge_text_embedding",
base_url="http://localhost:11434"
@@ -8699,25 +7976,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
print(len(embeddings[0])) # 1024
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第4集 【面试题】RAG系统构建之嵌入模型性能优化
-
-**简介: RAG系统构建之嵌入模型性能优化**
+#### 【面试题】RAG系统构建之嵌入模型性能优化
* 需求背景(面试高频题目)
@@ -8736,7 +7996,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 技术架构图
- ```
+ ```python
[应用程序] → 检查缓存 → 命中 → 返回缓存嵌入
↓
未命中 → 调用模型 → 存储结果 → 返回新嵌入
@@ -8750,7 +8010,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 核心语法与参数
- ```
+ ```python
from langchain.storage import LocalFileStore
from langchain.embeddings import CacheBackedEmbeddings
@@ -8770,7 +8030,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 存储支持多类型
- ```
+ ```python
#这个包里面
from langchain.storage
@@ -8806,7 +8066,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基础版本(无缓存)
- ```
+ ```python
from langchain.embeddings import OpenAIEmbeddings
# 初始化模型
@@ -8819,7 +8079,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 带缓存版本
- ```
+ ```python
from langchain.storage import LocalFileStore
from langchain.embeddings import CacheBackedEmbeddings
@@ -8844,7 +8104,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 高级配置示例(分布式案例-存储Redis)
- ```
+ ```python
# 带TTL的Redis缓存
from redis import Redis
from langchain.storage import RedisStore
@@ -8859,27 +8119,8 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
)
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#### 第5集 嵌入大模型CacheBackedEmbeddings案例实战
-
-**简介: 嵌入模型CacheBackedEmbeddings案例实战**
+#### 嵌入大模型CacheBackedEmbeddings案例实战
* **案例实战:对比嵌入大模型使用缓存前后性能区别**
@@ -8900,8 +8141,11 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 编码实战
- ```
- from langchain.embeddings import CacheBackedEmbeddings,DashScopeEmbeddings
+ ```python
+ from langchain.embeddings import CacheBackedEmbeddings
+ # 已被弃用,需改为从 langchain_community.embeddings 导入
+ # from langchain.embeddings import DashScopeEmbeddings
+ from langchain_community.embeddings import DashScopeEmbeddings
import time
# 初始化模型和缓存
from langchain.storage import LocalFileStore
@@ -8954,40 +8198,15 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
| RedisStore | 高性能、支持分布式 | 需要运维Redis | 生产环境集群 |
| InMemoryStore | 最快速度 | 重启丢失数据 | 临时测试 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- **愿景:"IT路上的持续充电平台,让技术不再难学"**
-**更多高级课程请访问 xdclass.net**
-
### 第三十九章 大模型必备技术Milvus向量数据库
-
-
-#### 第1集 向量数据库介绍和技术选型思考
-
-**简介: 向量数据库介绍和技术选型思考**
+#### 向量数据库介绍和技术选型思考
* 为什么要用向量数据库,不能用MySQL存储?
* 文档块通过嵌入模型处理后得到对应向量,下一步就是将向量存储到数据库中,方便后续进行检索使用
- 
+ 
* 传统数据库的局限性
@@ -9136,7 +8355,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 适用场景:推荐系统、图像检索、自然语言处理(NLP)等
* 全球大厂使用者
- 
+ 
* 支持部署的架构
@@ -9145,15 +8364,15 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* Milvus Standalone 是单机服务器部署,所有组件都捆绑在一个 Docker 镜像中,方便部署
* Milvus Distributed 可部署在 K8S 集群上,采用云原生架构,适合十亿规模甚至更大的场景,该架构可确保关键组件的冗余。
-
+
-
+
* Milvus 架构解析
* 数据处理流程 :插入数据 → 生成日志 → 持久化到存储层 → 构建索引 → 支持查询。
-
+
| 组件名称 | 核心职责 | 关键特性 |
| :-------------: | :----------------------------------------------------------: | :---------------------------: |
@@ -9171,7 +8390,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 每列代表一个字段,每行代表一个实体。
* 下图显示了一个有 8 列和 6 个实体的 Collection
- 
+ 
@@ -9308,7 +8527,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 基于向量夹角的相似度。
-
+
@@ -9345,7 +8564,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 三者协作关系
-
+
| 维度 | 分区(Partition) | 分片(Shard) | 段(Segment) |
| :--------: | :---------------: | :--------------------: | :----------------: |
@@ -9377,13 +8596,13 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 系统自动将数据均分到3个分片(假设集群有3个节点)
-
+
* **段阶段(自动完成)**
* 分片内数据按512MB大小自动切割成多个段
-
+
* 三者协作原理
@@ -9494,7 +8713,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
- **Milvus Standalone**适用于中型数据集,可扩展至 1 亿向量。
- **Milvus Distributed 专为**大规模部署而设计,能够处理从一亿到数百亿向量的数据集。
- 
+ 
* Milvus分层架构(Docker部署都包括了)
@@ -9600,7 +8819,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* **版本兼容性**:注意 Attu 与 Milvus 版本的匹配,避免接口不兼容问题【**当前安装的Milvus版本 V2.5X**】
* GitHub地址:https://github.com/zilliztech/attu
- 
+ 
* 核心功能
@@ -9622,7 +8841,7 @@ public JsonData list(@RequestParam(value = "parent_id")Long parentId){
* 安装实战(根据系统选择对应的客户端下载,输入ip+端口)
- 
+ 