# 基本概念
# NLP 和 LLM 的区别
NLP 自然语言处理 和 LLM 大语言模型 有一定关联,但也存在明显区别,主要体现在以下几个方面:
- 定义与范畴
# NLP:
# 是人工智能的一个重要分支领域,研究如何让计算机理解、处理和生成人类自然语言
# 涵盖了从文本分析、信息检索、机器翻译到情感分析等众多任务和技术
# 旨在使计算机能与人类进行自然语言交互
# LLM:
# 是一种基于深度学习的人工智能模型,属于 NLP 中的一个特定技术类型
# 以 Transformer 架构为基础,通过学习大量文本数据中的语言模式和知识
# 具备处理和生成自然语言文本的能力
- 研究目的
# NLP:
# 目标广泛,包括实现人机自然交互、文本信息的自动化处理与利用、语言相关问题的智能解决等
# 致力于让计算机像人类一样理解和运用自然语言,提升信息处理效率和智能化水平
# LLM:
# 主要聚焦于学习语言的统计规律和语义知识,通过海量数据训练
# 能根据输入文本生成连贯、合理的自然语言文本
# 旨在模拟人类语言生成能力,为各种 NLP 任务提供语言理解和生成基础
- 技术方法
# NLP:
# 使用多种技术方法,包括基于规则的方法、统计方法、机器学习方法等
# 早期基于规则的方法依赖人工编写语法和语义规则,后来统计和机器学习方法利用数据进行模型训练
# 如支持向量机用于文本分类
# LLM:
# 主要基于深度学习技术,特别是 Transformer 架构,通过堆叠多层 Transformer 块
# 并行计算和自注意力机制捕捉文本长序列依赖关系
# 利用大规模无监督学习从海量文本中自动学习语言特征和模式
- 应用场景
# NLP:
# 应用场景多样,如机器翻译、智能客服、文本摘要、信息抽取、语音识别与合成等
# 涉及多个领域,为不同行业提供自然语言处理解决方案
# LLM:
# 在文本生成、知识问答、对话系统等方面表现出色,为智能写作助手、聊天机器人等提供核心支持
# 还可用于阅读理解、推理计算等任务,为各种 NLP 应用提供语言生成和理解基础能力
# 关于 agent
在人工智能中,agent 通常指智能体,是一种能够感知环境做出决策并且采取行动的一个系统,以下从其特点和类型等方面详细介绍:
- 特点
# 自主性:
# agent 能在没有人类直接干预的情况下,根据自身的内部状态和对环境的感知,自主地决定和执行行动
# 如智能家居系统中的智能温控 agent,可根据室内温度和用户设定自主调节空调温度
# 感知能力:
# agent 具备感知环境信息的能力,通过传感器等设备获取环境中的数据
# 如自动驾驶汽车中的 agent,依靠摄像头、雷达等感知路况和周边车辆、行人等信息
# 交互性:
# agent 可以与环境中的其他实体进行交互,包括其他 agent、人类用户或外部系统
# 如智能客服 agent,能与用户进行对话交互,解答问题和提供帮助
# 目标导向性:
# agent 具有明确的目标,其行动和决策都是为了实现这些目标
# 如物流调度 agent,目标是优化货物配送路线和时间,以提高物流效率
- 类型
# 软件 agent:
# 是运行在计算机系统中的软件程序,可在网络环境或特定软件平台上执行任务
# 如邮件客户端中的垃圾邮件过滤 agent,能自动识别和过滤垃圾邮件
# 硬件 agent:
# 是基于硬件设备实现的智能体,通常具有物理形态和实际的操作能力
# 如机器人 agent,可在现实世界中进行移动、抓取物体等操作
# 混合 agent:
# 结合了软件和硬件的特点,既有软件部分进行数据处理和决策,又有硬件部分实现物理操作和与环境的交互
# 如一些智能穿戴设备中的 agent,既通过软件分析用户的运动和健康数据,又通过硬件传感器收集生理信息
- 应用
# 智能交通:交通流量控制 agent 可根据实时路况调整交通信号灯时长,优化交通流量
# 医疗保健:医疗诊断 agent 能分析患者的病历和检查数据,辅助医生进行疾病诊断
# 工业制造:生产调度 agent 可根据订单需求、设备状态等因素,合理安排生产任务和设备调度
虽然 DeepSeek 可用于构建智能体(agent)或为智能体提供语言处理能力等支持,但它本身不是agent。智能体是基于各种技术构建,能感知环境、采取行动以实现目标的实体或系统,比如长城汽车的 Coffee Agent 是基于大模型技术构建的智能体,而 DeepSeek 是被其融合利用来提升自身能力的大语言模型。
# RAG 的介绍
在大模型中,RAG 即检索增强生成,是一种将检索技术与语言模型生成能力相结合的技术
- 原理
# 检索:RAG 首先会根据输入的问题或提示,从一个庞大的外部知识数据库或语料库中检索相关的信息片段
# 融合:将检索到的相关信息与语言模型已有的知识和上下文信息进行融合
# 生成:利用融合后的信息,语言模型生成更加准确、丰富和有针对性的回答或文本内容
- 优点
# 提高准确性:通过引入外部准确的知识,能有效纠正语言模型可能出现的错误,使生成的内容更符合事实
# 增强时效性:可以及时获取最新的信息并融入生成过程,让生成的文本能够反映最新的事件和知识
# 减少幻觉问题:语言模型有时会生成一些看似合理但实际上错误或无根据的内容
- 应用
# 信息检索与问答系统:用户提问时 RAG 可以快速检索相关知识并生成准确回答,提供更优质的服务
# 内容创作:辅助写作者获取相关资料并生成更有深度和广度的文章、报告等,提高创作效率和质量
# 智能客服:使客服系统能够结合最新的产品信息、常见问题等知识,为用户提供更精准、有效的服务
# Hugging face、Ollama、modelscope 的区别
- 功能定位
# Hugging Face 是个综合性的AI平台,提供大量预训练模型,如自然语言处理/计算机视觉/语音识别等多领域
# 还有模型微调、评估和部署工具,以及丰富的数据集和开发者社区
# Ollama 专注于在本地运行大型语言模型,让用户能在自己计算机上下载和运行模型
# 如 Hugging Face 的语言模型格式为 gguf
- 使用场景
# Hugging Face 适可利用其预训练模型和工具进行各种模型开发、研究实验、构建AI应用等
# Ollama 适合在本地探索语言模型,对隐私和数据安全要求高、追求低延迟和高性能,不依赖外部服务的用户
- 生态系统
# Hugging Face 有庞大的开发者社区,有模型库、数据集、开源产品矩阵等,便于开发者交流合作
# Ollama 生态围绕本地部署和使用语言模型展开,与 Hugging Face Hub 结合可获取更多模型资源
modelscope 是中国版的 Hugging face,支持多种模型格式,如 Safetensor 等。Safetensor 格式常用于模型的微调和其他操作,它在存储和传输模型数据时提供了更高的安全性和稳定性
# 模型微调
# 全量微调可对模型的能力进行深度改造,但要带入全部参数进行训练,消耗大量的算力且有一定的技术门槛
# 相比之下,在绝大多数场景中,如果我们只想提升模型某个具体领域的能力,那高效微调会更加合适
# 2020年前后,深度学习领域诞生了很多高效微调的方法,但现在最主流的高效微调方法只有一种——LORA
# LORA 与 QLORA
- LORA(Low-Rank Adaptation)微调 Github地址 (opens new window)
# 旨在通过引入低秩矩阵来减少微调时需要调整的参数数量,从而显著降低显存和计算资源的消耗
# 具体来说,LoRA微调并不直接调整原始模型的所有参数,而是通过在某些层中插入低秩的适配器层来进行训练
- LORA的原理
# 在标准微调中,我们会修改模型的所有权重,而在LoRA中,只有某些低秩矩阵(适配器)被训练和调整
# 这意味着原始模型的参数保持不变,只是通过少量的新参数来调整模型的输出
# 低秩矩阵的引入可以在显存和计算能力有限的情况下,依然有效地对大型预训练模型进行微调
# 从而让LoRA成为显存较小的设备上的理想选择
- LORA的优势
# 显存优化:只需要调整少量的参数(适配器),显著减少了显存需求,适合显存有限的GPU
# 计算效率:微调过程中的计算负担也更轻,因为减少了需要调整的参数量
# 灵活性:可以与现有的预训练模型轻松结合使用,适用于多种任务,如文本生成、分类、问答等
- QLoRA(Quantized Low-Rank Adaptation)
# 是LoRA的一个扩展版本,它结合了LoRA的低秩适配器和量化技术,进一步优化了计算效率和存储需求
# 与LoRA不同的是,QLoRA会将插入的低秩适配器层的部分权重进行量化(通常量化为INT4或INT8)
# 在保持性能的同时显著降低模型的存储和计算需求
# 核心思想: 在LoRA的基础上加入量化技术,减少权重表示的位数,从而降低显存和计算需求
# 主流微调工具
- unsloth GitHub (opens new window)
# unsloth是一个专为大型语言模型(LLM)设计的微调框架,旨在提高微调效率并减少显存占用
# 它通过手动推导计算密集型数学步骤并手写GPU内核,实现了无需硬件更改即可显著加快训练速度
# unsloth 与 HuggingFace 生态兼容,可以很容易地与 transformers、peft、tr 等库结合
# 以实现模型的监督微调(SFT)和直接偏好优化(DPO),仅需型的加载方式,无需对现有训练代码进行修改
- LLaMA-Factory GitHub (opens new window)
# LLaMA-Factory 是一个统一且高效的微调框架
# 旨在为超过 100种大型语言模型(LLMS)和视觉语言模型(VLMS)提供便捷的微调支持
# 用户能够灵活地定制型以适应各种下游任务,封装程度没有unsloth高
- ms-swift GitHub (opens new window)
# 由魔搭社区开发的高效微调和部署框架,主要针对Qwen系列
# 旨在提供一站式的大模型与多模态大模型的训练、推理、评测、量化和部署方案
# 支持超过450种大型模型(LLMS)和150多种多模态大模型(MLLMs)的训练和部署
# 包括最新的模型版本,如 Qwen2.5、InternLM3、GLM4、Llama3.3、DeepSeek-R1、Yi1.5 等
# 以及多模态模型如 Qwen2.5-VL、Qwen2-Audio、Llama3.2Vision、Llava、InternVL2.5 等
# 操作系统选择
由于绝大多数工业场景下微调会涉及多卡微调,目前只有Linux系统对Deepspeed和其他多卡并行加速库支持较好,因此绝大多数工业场景下都会使用Ubuntu操作系统或CentOS操作系统,若想体验更加真实的工业场景下的微调流程,也可以考虑在AutoDL (opens new window)上租赁显卡。
# 使用 unsloth 微调过程
- 安装部署 unsloth
# 安装部署
pip install unsloth
pip install --force-reinstall --no-cache-dir --no-deps /
git+https://github.com/unslothai/unsloth.git
若是AutoDL (opens new window)服务器,且Github网速不稳,则可以使用如下命令开启AutoDL学术加速:
source /etc/network_turbo
- wandb 安装与注册 官网 (opens new window)
# 在大规模模型训练中,我们往往需要监控和分析大量的训练数据,而WandB可以帮助我们实现这一目标
# 实时可视化:
# WandB可以实时展示训练过程中关键指标的变化,如损失函数、学习率、训练时间等
# 通过这些可视化数据,我们能够直观地了解模型的训练进展,快速发现训练中的异常或瓶颈
# 自动记录与日志管理:
# WandB会自动记录每次实验的参数、代码、输出结果,确保实验结果的可追溯性
# 无论是超参数的设置,还是型的架构调整,WandB都能够帮助我们完整保留实验记录,方便后期对比与调优
# 支持中断与恢复训练:
# 在长时间的预训练任务中,系统中断或需要暂停是常见的情况
# 通过WandB的checkpoint功能,我们可以随时恢复训练,从上次中断的地方继续进行,避免数据和时问的浪费
# 多实验对比:
# 当我们尝试不同的模型配置或超参数时
# WandB允许我们在多个实验之间轻松进行对比分析,帮助我们选择最优的模型配置
# 团队协作:
# WandB还支持团队协作,多个成员可以共同查看实验结果,协同调试模型
# unsloth 和 wandb 已高度集成,只需提供 wandb key即可
# 安装部署
pip install wandb
- DeepSeek-R1-Distill-Llama-8B-GGUF 模型下载
# 安装 modelscope,下载的模型为 Safetensor 格式
pip install modelscope
# 下载 Safetensor 格式的模型
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Llama-8B \
--local_dir D:\DeepSeek\Model\modelscope\8B
- 使用 unsloth 加载本地模型
# 查看显卡信息
nvidia-smi
# 一定要安装支持cuda的pytorch
pip install torch==2.3.0+cu121 torchvision==0.18.0+cu121 torchaudio==2.3.0+cu121 /
-f https://mirror.sjtu.edu.cn/pytorch-wheels/torch_stable.html
# windows上通过whl文件安装triton模块,whl文件:
# whl文件下载:https://hf-mirror.com/madbuda/triton-windows-builds
pip install triton-3.0.0-cp310-cp310-win_amd64.whl
from unsloth import FastLanguageModel
max_seq_length = 2048
dtype = None
# 若显存不足,则可以load in_4bit=True,运行4 bit量化版
# 设置为false,则使用模型原本的精度进行推理
load_in_4bit = False
# 加载模型和分词器(文本和数字的转换)
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "./DeepSeek-R1-Distill-Llama-8B",
# 模型会将输入文本按此长度进行截断或补齐操作
max_seq_length = max_seq_length,
dtype = dtype,
# 计算机通常使用 32 位(float32)或 16 位(float16)来表示浮点数以进行计算和存储数据
# 而load_in_4bit意味着将模型的参数从原本较高的精度(如 32 位)量化为 4 位来进行存储和计算
load_in_4bit = load_in_4bit,
# 如果使用Hugging Face 则设置其 token,model_name为其地址
# token = hf_token
)
# 将模型调整为推理模式
FastLanguageModel.for_inference(model) # 推理模式
# FastLanguageModel.for_training(model) # 训练模式
# 定义一个系统提示,并在其中包含问题和回答生成的占位符
prompt_style = """请写出一个恰当的回答来完成当前对话任务。
### Instruction:
你是一个爱助人为乐的好同志.
### Question:
{}
### Response:
<think>{}"""
# 和模型对话
question = "你还好吗,好久不见了" # 可以设置多个 question
# 首先需要借助分词器,将输入的问题转化为标记索引:
inputs = tokenizer([prompt_style.format(question,"")], return_tensors="pt").to("cuda")
# 再带入inputs进行对话
outputs = model.generate(
input_ids = inputs.input_ids,
max_new_tokens = 1200,
use_cache = True,
)
# 此时得到的回复也是词索引,同样需要分词器将其转化为文本
response = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
print(response.split("### Response:")[1])
- 推理模型微调数据集下载
# DeepseekR1 模型组回复结构与微调数据集结构要求:
# DeepSeekR1及其蒸馏模型,推理过程的具体体现就是在回复内容中,会同时包含推理部分<think>和回复部分
# 因此,在微调的时候,微调数据集的回复部分文本也需要是包含推理和最终回复两部分内容(COT数据集)
# 使用 datasets 进行数据集下载
pip install datasets
# medical-o1-reasoning-SFT 医学推理数据集
# 该数据集专为微调 HuatuoGPT-o1 这一医学大语言模型而设计,旨在提升其在复杂医学推理任务中的表现
# 直接从huggingface上下载medical-o1-reasoning-SFT数据集
https://huggingface.co/datasets/Freedomintelligence/medical-o1-reasoning-SFT
由于huggingface网络受限,若是AutoDL服务器,可以按照如下方式开启学术加速:
# 学术资源加速 https://www.autodl.com/docs/network_turbo/
import subprocess
import os
result = subprocess.run('bash -c "source /etc/network_turbo && env | grep proxy"',
shell=True, capture_output=True, text=True)
output = result.stdout
for line in output.splitlines():
if '=' in line:
var, value = line.split('=', 1)
os.environ[var] = value
或者通过魔塔社区 modelscope 下载
modelscope download --dataset FreedomIntelligence/medical-o1-reasoning-SFT --local_dir ./dir
默认情况下数据集保存在主目录下.cache文件夹中,数据文件格式如下所示:
/root/.cache/huggingface/datasets/autodl-tmp/en/0.0.0/8883d72e8b332269
- 小数据量微调
import wandb
from unsloth import FastLanguageModel
from trl import SFTTrainer
from transformers import TrainingArguments
from unsloth import is_bfloat16_supported
max_seq_length = 2048
dtype = None
load_in_4bit = True
# 读取模型和分词器
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "D:/DeepSeek/Model/ModelScope/8B",
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
)
# 定义一个系统提示,并在其中包含问题和回答生成的占位符。该提示将引导模型逐步思考,并提供一个逻辑严谨、准确的回答。
train_prompt_style = """Below is an instruction that describes a task, paired with an input that provides further context.
Write a response that appropriately completes the request.
Before answering, think carefully about the question and create a step-by-step chain of thoughts to ensure a logical and accurate response.
### Instruction:
You are a medical expert with advanced knowledge in clinical reasoning, diagnostics, and treatment planning.
Please answer the following medical question.
### Question:
{}
### Response:
<think>{}"""
# 设置文本生成结束的标记
EOS_TOKEN = tokenizer.eos_token # <|end_of_sentence|>
# 用于对medical-o1-reasoning-SFT数据集(Question、Complex_CoT、Response)进行修改
# 将Complex_CoT列和Response列进行拼接,并加上文本结束标记
def formatting_prompts_func(examples):
inputs = examples["Question"]
cots = examples["Complex_CoT"]
outputs = examples["Response"]
texts = []
for input, cot, output in zip(inputs, cots, outputs):
text = train_prompt_style.format(input, cot, output) + EOS_TOKEN
texts.append(text)
return {
"text": texts, # "text" 列包含了系统提示、指令、思维链和答案
}
# 将从 Hugging Face Hub 加载 FreedomIntelligence/medical-o1-reasoning-SFT 数据集的前 500个 样本
from datasets import load_dataset
dataset = load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT","en", split="train[0:500]",trust_remote_code=True)
# 或者通过魔塔社区 modelscope 下载后加载
# dataset = load_dataset("/root/autodl-tmp","en", split="train[0:500]",trust_remote_code=True)
# 进行结构化处理,处理后的数据集默认保存再主目录下的 .cache 文件夹中
dataset = dataset.map(
formatting_prompts_func,
batched=True,
)
print(dataset["text"][0])
# 微调模式,通过使用目标模块,我们将通过向模型中添加低秩适配器(low-rank adopter)来设置模型
model = FastLanguageModel.get_peft_model(
model,
r=16,
target_modules=[
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj",
"up_proj",
"down_proj",
],
lora_alpha=16,
lora_dropout=0,
bias="none",
use_gradient_checkpointing="unsloth", # True or "unsloth" for very long context
random_state=3407,
use_rslora=False,
loftq_config=None,
)
# 设置训练参数和训练器,通过提供模型、tokenizer、数据集以及其他重要的训练参数,来优化我们的微调过程。
# 使用 SFTTrainer 进行监督微调,适用于transformers 和 Unsloth 生态中的模型微调
trainer = SFTTrainer(
model=model, # 需要进行微调的预训练模型
tokenizer=tokenizer, # 用于将文本转换为模型可以理解的标记索引的分词器
train_dataset=dataset, # 用于训练的数据集
dataset_text_field="text", # 用于训练的文本字段
max_seq_length=max_seq_length, # 输入序列的最大长度
dataset_num_proc=2, # 用于预处理数据集的进程数
# 用于定义训练超参数
args=TrainingArguments(
per_device_train_batch_size=2, # 每次训练几条数据
gradient_accumulation_steps=4, # 梯度累积几个后更新一次
# num_train_epochs = 1, # 训练几轮,训练所有数据
warmup_steps=5, # 学习率预热步数
max_steps=60, # 训练步数,总共使用 max_steps * per_device_train_batch_size * gradient_accumulation_steps 480步
learning_rate=2e-4, # 学习率(2e-4=0.0002 控制权重更新幅度)
fp16=not is_bfloat16_supported(), # 如果GPU不支持bfloat16,则使用fp16
bf16=is_bfloat16_supported(), # 如果支持bfloat16,则启用bfloat16(训练更稳定)
logging_steps=10, # 每10步打印一次训练日志
optim="adamw_8bit", # 使用8位Adam优化器,减少显存占用
weight_decay=0.01, # 权重衰减系数,用于防止过拟合
lr_scheduler_type="linear", # 学习率调度器类型(线性衰减)
seed=3407, # 随机种子,用于保证结果可重复性
output_dir="outputs", # 输出目录,用于保存训练结果
),
)
wandb.login(key="121212121212")
# 开始训练
trainer_stats = trainer.train()
# 使用微调后的模型推理,model是参与完训练的模型
FastLanguageModel.for_inference(model) # 将模型调整为推理模式
question = "A 61-year-old woman with a long history of involuntary urine loss during activities like coughing or sneezing but no leakage at night undergoes a gynecological exam and Q-tip test. Based on these findings, what would cystometry most likely reveal about her residual volume and detrusor contractions?"
# 首先需要借助分词器,将输入的问题转化为标记索引:
inputs = tokenizer([train_prompt_style.format(question,"")], return_tensors="pt").to("cuda")
# 再带入inputs进行对话
outputs = model.generate(
input_ids = inputs.input_ids,
attention_mask=inputs.attention_mask,
max_new_tokens = 1200,
use_cache = True,
)
# 此时得到的回复也是词索引,同样需要分词器将其转化为文本
response = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0]
print(response.split("### Response:")[1])
- 模型合并,此时本地保存的模型在 outputs 文件夹中
new_model_local = "DeepSeek-R1-Medical-COT-Tiny" # 创建保存的地址
model.save_pretrained(new_model_local)
tokenizer.save_pretrained(new_model_local)
model.save_pretrained_merged(new_model_local, tokenizer, save_method = "merged_16bit",)
训练后的模型文件,如果使用unsloth继续推理调用需要删除 adapter 的2个文件
- 将模型推送到 Hugging Face Hub
new_model_online = "sylone/DeepSeek-R1-Medical-COT" # Hugging Face Hub地址
model.push_to_hub(new_model_online)
tokenizer.push_to_hub(new_model_online)
model.push_to_hub_merged(new_model_online, tokenizer, save_method = "merged_16bit")
# 将其推送到huggingface上并保存为GGUF格式文件并进行调用
model.save_pretrained_gguf("dir", tokenizer,quantization_method="g4km")
# deepseek三部曲,模型部署、模型微调、投喂数据
以下是 DeepSeek 大语言模型的模型部署、模型微调、投喂数据相关内容:
# 模型部署
- 本地部署:可以借助 LM Studio 或 Ollama 等工具。如使用 LM Studio,先确保设备满足显卡 GTX 1060(6GB)及以上等硬件要求,然后在官网 lmstudio.ai 下载安装包完成安装,启动后可通过点击左上方文件夹图标选择本地下载的模型导入,或在设置中选中 Use LM Studio's Hugging Face 复选框后搜索 deepseek 下载模型。若用 Ollama,需先下载该软件,然后通过终端执行命令完成安装。
- 云端部署:腾讯云和阿里云提供了对 DeepSeek 全系模型的支持,开发者可以快速接入 API 并实现一键部署。
# 模型微调
- 加载预训练模型:利用 Hugging Face Transformers 等框架加载 DeepSeek 预训练模型,如使用 Python 的 AutoModelForCausalLM 和 AutoTokenizer 进行加载,使模型具备基础的语言理解和生成能力,为微调做准备。
- 数据预处理:对用于微调的数据集进行处理,将文本转换为模型可理解的 token 序列,确保每个样本的输入和输出都被正确编码,并按照模型要求进行填充或截断。
- 配置微调参数:关键参数包括学习率(通常设为较小值如 5e-5)、批量大小(根据硬件资源选 8 或 16 等)、训练周期(一般 3-5 个周期)等,防止破坏预训练权重和过拟合。
- 开始微调:使用 PyTorch 或 TensorFlow 框架启动微调过程,通过训练循环在训练集上进行微调,并定期保存检查点,以便评估和后续使用。
# 投喂数据
- 选择工具:可结合 AnythingLLM 等工具来投喂数据,AnythingLLM 支持多种文档格式的上传和解析,并能与 DeepSeek 模型无缝对接。
- 数据准备:收集与目标任务相关的各种格式数据,如 PDF、Word、Markdown 等文档,还可以是对话记录等文本数据。
- 上传与处理:以 AnythingLLM 为例,先创建工作区,点击 “上传文件” 按钮选择文档完成上传。对于 PDF 文件,工具会自动提取关键信息并生成摘要,Word 文件可按章节或段落进行拆分和整理,以便模型更好地理解和学习。