Phi-3-mini-128k-instruct搭建个人知识库问答系统基于本地文档你是不是也遇到过这种情况电脑里存了几百份PDF报告、技术文档和会议纪要想找某个具体信息时要么记不清文件名要么得一个个文件打开翻找费时又费力。或者你有一个小团队内部积累了大量产品手册、客户资料新同事来了想快速了解只能靠老员工口口相传信息传递效率很低。今天我们就来解决这个痛点。我将带你一步步搭建一个完全运行在自己电脑上的智能知识库问答系统。你不用再依赖那些需要联网、有隐私风险的在线服务也不用担心文档内容泄露。核心思路很简单让AI模型学会“阅读”你的本地文档然后像一位熟悉所有资料的专家一样随时回答你的问题。我们会用到微软开源的轻量级模型Phi-3-mini-128k-instruct以及一套成熟的RAG检索增强生成技术框架。整个过程就像给你的文档库装上一个超级大脑让它不仅能存储更能理解和对话。1. 为什么选择这个方案在开始动手之前我们先聊聊为什么这套组合拳值得一试。市面上有很多现成的知识库产品但它们要么收费不菲要么需要你把数据上传到云端总让人有点不放心。自己从头开发一个技术门槛又太高。Phi-3-mini-128k-instruct模型是微软推出的一个“小身材大智慧”的代表。它参数规模不大对硬件要求友好但在指令跟随和逻辑推理上表现不错最关键的是它支持128K的超长上下文。这意味着它能一次性“记住”并处理很长的文本非常适合用来消化你的长篇文档。RAG技术则是解决“AI胡说八道”问题的利器。传统的大语言模型容易产生“幻觉”编造一些不存在的信息。RAG的思路很巧妙当用户提问时系统不是让模型凭空回忆而是先去你的文档库里通过语义搜索找到最相关的几段原文然后把问题和这些原文一起交给模型让它基于这些确凿的证据来生成答案。这就好比考试时允许你开卷答案的准确性自然大大提高。这套方案的另一个巨大优势是私有化。所有数据——你的原始文档、处理后的向量、以及最终的问答交互——都完全留在你的本地环境里。对于处理公司内部资料、个人隐私文件或者任何敏感信息这提供了最基本的安全保障。2. 搭建前的准备工作工欲善其事必先利其器。我们先来把需要的工具和环境准备好整个过程就像搭积木一块块来并不复杂。2.1 核心工具介绍我们需要以下几样东西模型Phi-3-mini-128k-instruct。我们将从Hugging Face模型库获取它。别担心下载下来就是一个可以直接使用的文件。向量数据库ChromaDB。它是一个轻量级、易用的开源向量数据库专门为存储和检索文本的向量表示嵌入而设计。我们的文档在变成向量后就存在这里。文本嵌入模型BGE或Sentence Transformers。它的任务是把一段段文字转换成计算机能理解的“向量”一串数字。这个向量的神奇之处在于语义相近的文本其向量在数学空间里的距离也更近这是我们能实现语义搜索的基础。RAG框架LangChain。它是一个强大的开源框架把上面提到的模型、数据库、文档处理流程像链条一样串联起来大大简化了我们的开发工作。它提供了很多现成的“链”我们直接调用就行。Python环境。这是运行所有代码的基础。2.2 环境配置步骤打开你的命令行终端我们一步步来。首先创建一个专属的项目文件夹并进入它mkdir personal_knowledge_qa cd personal_knowledge_qa接着建议你创建一个独立的Python虚拟环境避免包版本冲突python -m venv venv # 激活虚拟环境 # 在 Windows 上 venv\Scripts\activate # 在 macOS/Linux 上 source venv/bin/activate现在安装我们需要的所有Python包。你可以一次性安装pip install torch langchain langchain-community chromadb sentence-transformers pypdf python-dotenvtorch: PyTorch深度学习框架运行模型的基础。langchain和langchain-community: 核心的RAG框架。chromadb: 向量数据库。sentence-transformers: 包含我们需要的文本嵌入模型。pypdf: 用来读取PDF文件。python-dotenv: 方便管理配置如API密钥虽然本地运行不一定需要。安装完成后环境就准备好了。接下来在你的项目文件夹里创建一个名为documents的文件夹把你想要导入的文档支持.txt, .md, .pdf等格式放进去。再创建一个Python脚本文件比如叫build_qa.py我们所有的代码都会写在这里。3. 构建知识库的核心流程现在进入最核心的部分如何把你的静态文档变成AI可以理解和检索的动态知识库。这个过程主要分为三步加载与切分、向量化与存储、检索与问答。3.1 第一步加载与切分文档文档不能一整篇扔给系统那样效率太低检索也不精准。我们需要把它切成有意义的“块”。from langchain_community.document_loaders import DirectoryLoader, PyPDFLoader, TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter # 1. 加载文档 # 指定你的文档目录 documents_path ./documents # 使用DirectoryLoader自动加载目录下多种格式的文件 loader DirectoryLoader( documents_path, glob**/*.pdf, # 例如加载所有PDF文件。可以改为 *.* 加载所有支持格式 loader_clsPyPDFLoader, # 对于PDF文件使用PyPDFLoader # 如果需要加载txt或md文件可以添加更多loader这里以PDF为例 ) documents loader.load() print(f成功加载了 {len(documents)} 个文档。) # 2. 切分文档 text_splitter RecursiveCharacterTextSplitter( chunk_size500, # 每个文本块的最大字符数 chunk_overlap50, # 块与块之间的重叠字符数防止上下文断裂 separators[\n\n, \n, 。, , , , , , ] # 按这些分隔符优先切分 ) chunks text_splitter.split_documents(documents) print(f文档被切分成了 {len(chunks)} 个文本块。)这段代码做了两件事DirectoryLoader会扫描你documents文件夹里的文件并根据后缀名调用对应的加载器如PyPDFLoader把文件内容读出来。RecursiveCharacterTextSplitter则负责把长文本按设定的尺寸这里500字符和重叠区50字符切分成小块。重叠很重要它能确保一个句子或概念不会在块的开头或结尾被生硬地切断保留了上下文。3.2 第二步向量化与存储文本块准备好后我们要把它们转换成向量并存入向量数据库。from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma # 1. 初始化嵌入模型 # 这里选用一个轻量且效果不错的中文嵌入模型 embedding_model HuggingFaceEmbeddings( model_nameBAAI/bge-small-zh-v1.5, # 也可以尝试 sentence-transformers/all-MiniLM-L6-v2 model_kwargs{device: cpu}, # 使用CPU如果显卡好可改为 cuda encode_kwargs{normalize_embeddings: True} # 标准化向量有利于相似度计算 ) # 2. 创建向量数据库并存储 # 指定一个目录来持久化存储向量数据库 persist_directory ./chroma_db # 将文本块转换为向量并存入ChromaDB vector_db Chroma.from_documents( documentschunks, embeddingembedding_model, persist_directorypersist_directory ) # 持久化保存到磁盘 vector_db.persist() print(f知识库构建完成向量已保存至 {persist_directory})这里的关键是HuggingFaceEmbeddings它负责调用我们指定的模型BAAI/bge-small-zh-v1.5把每一个文本块变成一串高维向量。Chroma.from_documents方法则一次性完成向量化和存储。persist()操作把数据库保存到本地硬盘下次启动就不用重新处理文档了。3.3 第三步检索与生成答案知识库建好了现在来实现问答功能。我们创建一个检索器和一个基于Phi-3模型的问答链。from langchain.chains import RetrievalQA from langchain_community.llms import HuggingFacePipeline from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline import torch # 1. 加载Phi-3-mini模型和分词器 model_name microsoft/Phi-3-mini-128k-instruct tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) # 注意模型较大确保你的硬盘有足够空间约10GB model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, # 使用半精度浮点数减少内存占用 device_mapauto, # 自动分配模型层到CPU/GPU trust_remote_codeTrue ) # 2. 创建文本生成管道 pipe pipeline( text-generation, modelmodel, tokenizertokenizer, max_new_tokens512, # 生成答案的最大长度 temperature0.1, # 较低的温度使输出更确定、更聚焦 do_sampleTrue, ) # 3. 将管道包装成LangChain的LLM对象 llm HuggingFacePipeline(pipelinepipe) # 4. 从之前保存的目录加载向量数据库 vector_db Chroma( persist_directory./chroma_db, embedding_functionembedding_model ) # 5. 创建检索器这里设置返回最相关的4个文本块 retriever vector_db.as_retriever(search_kwargs{k: 4}) # 6. 创建检索增强生成RAG链 qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # 将检索到的所有文档“塞”进提示词 retrieverretriever, return_source_documentsTrue, # 返回参考来源方便追溯 verboseFalse # 设为True可以看到详细的处理过程 ) print(智能问答系统初始化完成) print(你可以开始提问了。输入 quit 或 exit 退出。)这段代码稍微长一点但逻辑很清晰首先加载Phi-3模型和分词器。device_map”auto”会让程序自动利用你的GPU如果有的话否则使用CPU。然后创建一个文本生成管道设置生成参数比如max_new_tokens控制答案长度temperature控制创造性这里设低是为了答案更严谨。接着从本地加载我们之前构建好的向量数据库并把它变成一个检索器retriever它负责根据问题查找相关文档块。最后用RetrievalQA把语言模型LLM和检索器Retriever绑在一起形成一个完整的问答链。chain_type”stuff”是一种简单的处理方式它把检索到的所有相关文本块和问题一起组合成一个大提示词送给模型。4. 让系统跑起来提问与优化系统搭建完毕是时候检验成果了。我们写一个简单的交互循环。# 简单的问答循环 while True: query input(\n请输入你的问题: ) if query.lower() in [quit, exit, 退出]: print(再见) break if not query.strip(): continue print(正在思考...) try: # 获取答案和参考来源 result qa_chain({query: query}) answer result[result] source_docs result[source_documents] print(f\n【答案】\n{answer}) print(f\n【参考来源】) for i, doc in enumerate(source_docs[:2]): # 展示前2个来源 print(f 片段 {i1}: {doc.page_content[:150]}...) # 展示片段前150字符 print(f 来自文档: {doc.metadata.get(source, 未知)}\n) except Exception as e: print(f出错了: {e})运行你的build_qa.py脚本。第一次运行会下载模型需要一些时间和网络。之后你就可以在终端里用自然语言提问了。系统会先显示“正在思考…”然后给出答案并附上它做出判断所依据的文档片段及其出处这大大增加了答案的可信度。可能遇到的问题与优化建议答案不准确可能是检索到的文档块不相关。可以尝试调整chunk_size比如调到800或chunk_overlap比如调到100或者调整检索数量k。回答“不知道”如果问题完全超出知识库范围模型可能会诚实地说不知道。这是RAG的优点避免了编造。速度慢首次加载模型和生成第一个答案可能较慢。后续问答会快很多。确保你的机器内存足够至少8GB以上为佳。想处理更多格式DirectoryLoader支持多种加载器你可以同时加载PDF、TXT、MD甚至Word、PPT文件需要安装额外库如unstructured。5. 总结跟着走完这一趟你应该已经成功在本地搭建起了一个专属的智能知识库问答系统。我们利用了Phi-3-mini模型强大的指令理解和长文本处理能力结合RAG技术确保了答案的准确性和可追溯性整个过程完全私有化数据安全掌握在自己手中。实际用下来对于结构化的文档问答比如从产品手册里找规格、从会议纪要里查结论、从研究报告中提取观点效果非常不错。它就像一个不知疲倦的、精通你所有文档的助理。当然它也不是万能的对于高度抽象、需要深度推理或者知识库中完全不存在的信息它的能力是有限的。你可以在这个基础上做很多扩展比如为它加一个好看的网页界面用Gradio或Streamlit或者设置定时任务让它自动更新知识库。最重要的是你亲手把一堆冰冷的文件变成了一个能对话、能思考的知识体这个过程的成就感或许比工具本身更有价值。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
Phi-3-mini-128k-instruct搭建个人知识库问答系统:基于本地文档
Phi-3-mini-128k-instruct搭建个人知识库问答系统基于本地文档你是不是也遇到过这种情况电脑里存了几百份PDF报告、技术文档和会议纪要想找某个具体信息时要么记不清文件名要么得一个个文件打开翻找费时又费力。或者你有一个小团队内部积累了大量产品手册、客户资料新同事来了想快速了解只能靠老员工口口相传信息传递效率很低。今天我们就来解决这个痛点。我将带你一步步搭建一个完全运行在自己电脑上的智能知识库问答系统。你不用再依赖那些需要联网、有隐私风险的在线服务也不用担心文档内容泄露。核心思路很简单让AI模型学会“阅读”你的本地文档然后像一位熟悉所有资料的专家一样随时回答你的问题。我们会用到微软开源的轻量级模型Phi-3-mini-128k-instruct以及一套成熟的RAG检索增强生成技术框架。整个过程就像给你的文档库装上一个超级大脑让它不仅能存储更能理解和对话。1. 为什么选择这个方案在开始动手之前我们先聊聊为什么这套组合拳值得一试。市面上有很多现成的知识库产品但它们要么收费不菲要么需要你把数据上传到云端总让人有点不放心。自己从头开发一个技术门槛又太高。Phi-3-mini-128k-instruct模型是微软推出的一个“小身材大智慧”的代表。它参数规模不大对硬件要求友好但在指令跟随和逻辑推理上表现不错最关键的是它支持128K的超长上下文。这意味着它能一次性“记住”并处理很长的文本非常适合用来消化你的长篇文档。RAG技术则是解决“AI胡说八道”问题的利器。传统的大语言模型容易产生“幻觉”编造一些不存在的信息。RAG的思路很巧妙当用户提问时系统不是让模型凭空回忆而是先去你的文档库里通过语义搜索找到最相关的几段原文然后把问题和这些原文一起交给模型让它基于这些确凿的证据来生成答案。这就好比考试时允许你开卷答案的准确性自然大大提高。这套方案的另一个巨大优势是私有化。所有数据——你的原始文档、处理后的向量、以及最终的问答交互——都完全留在你的本地环境里。对于处理公司内部资料、个人隐私文件或者任何敏感信息这提供了最基本的安全保障。2. 搭建前的准备工作工欲善其事必先利其器。我们先来把需要的工具和环境准备好整个过程就像搭积木一块块来并不复杂。2.1 核心工具介绍我们需要以下几样东西模型Phi-3-mini-128k-instruct。我们将从Hugging Face模型库获取它。别担心下载下来就是一个可以直接使用的文件。向量数据库ChromaDB。它是一个轻量级、易用的开源向量数据库专门为存储和检索文本的向量表示嵌入而设计。我们的文档在变成向量后就存在这里。文本嵌入模型BGE或Sentence Transformers。它的任务是把一段段文字转换成计算机能理解的“向量”一串数字。这个向量的神奇之处在于语义相近的文本其向量在数学空间里的距离也更近这是我们能实现语义搜索的基础。RAG框架LangChain。它是一个强大的开源框架把上面提到的模型、数据库、文档处理流程像链条一样串联起来大大简化了我们的开发工作。它提供了很多现成的“链”我们直接调用就行。Python环境。这是运行所有代码的基础。2.2 环境配置步骤打开你的命令行终端我们一步步来。首先创建一个专属的项目文件夹并进入它mkdir personal_knowledge_qa cd personal_knowledge_qa接着建议你创建一个独立的Python虚拟环境避免包版本冲突python -m venv venv # 激活虚拟环境 # 在 Windows 上 venv\Scripts\activate # 在 macOS/Linux 上 source venv/bin/activate现在安装我们需要的所有Python包。你可以一次性安装pip install torch langchain langchain-community chromadb sentence-transformers pypdf python-dotenvtorch: PyTorch深度学习框架运行模型的基础。langchain和langchain-community: 核心的RAG框架。chromadb: 向量数据库。sentence-transformers: 包含我们需要的文本嵌入模型。pypdf: 用来读取PDF文件。python-dotenv: 方便管理配置如API密钥虽然本地运行不一定需要。安装完成后环境就准备好了。接下来在你的项目文件夹里创建一个名为documents的文件夹把你想要导入的文档支持.txt, .md, .pdf等格式放进去。再创建一个Python脚本文件比如叫build_qa.py我们所有的代码都会写在这里。3. 构建知识库的核心流程现在进入最核心的部分如何把你的静态文档变成AI可以理解和检索的动态知识库。这个过程主要分为三步加载与切分、向量化与存储、检索与问答。3.1 第一步加载与切分文档文档不能一整篇扔给系统那样效率太低检索也不精准。我们需要把它切成有意义的“块”。from langchain_community.document_loaders import DirectoryLoader, PyPDFLoader, TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter # 1. 加载文档 # 指定你的文档目录 documents_path ./documents # 使用DirectoryLoader自动加载目录下多种格式的文件 loader DirectoryLoader( documents_path, glob**/*.pdf, # 例如加载所有PDF文件。可以改为 *.* 加载所有支持格式 loader_clsPyPDFLoader, # 对于PDF文件使用PyPDFLoader # 如果需要加载txt或md文件可以添加更多loader这里以PDF为例 ) documents loader.load() print(f成功加载了 {len(documents)} 个文档。) # 2. 切分文档 text_splitter RecursiveCharacterTextSplitter( chunk_size500, # 每个文本块的最大字符数 chunk_overlap50, # 块与块之间的重叠字符数防止上下文断裂 separators[\n\n, \n, 。, , , , , , ] # 按这些分隔符优先切分 ) chunks text_splitter.split_documents(documents) print(f文档被切分成了 {len(chunks)} 个文本块。)这段代码做了两件事DirectoryLoader会扫描你documents文件夹里的文件并根据后缀名调用对应的加载器如PyPDFLoader把文件内容读出来。RecursiveCharacterTextSplitter则负责把长文本按设定的尺寸这里500字符和重叠区50字符切分成小块。重叠很重要它能确保一个句子或概念不会在块的开头或结尾被生硬地切断保留了上下文。3.2 第二步向量化与存储文本块准备好后我们要把它们转换成向量并存入向量数据库。from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma # 1. 初始化嵌入模型 # 这里选用一个轻量且效果不错的中文嵌入模型 embedding_model HuggingFaceEmbeddings( model_nameBAAI/bge-small-zh-v1.5, # 也可以尝试 sentence-transformers/all-MiniLM-L6-v2 model_kwargs{device: cpu}, # 使用CPU如果显卡好可改为 cuda encode_kwargs{normalize_embeddings: True} # 标准化向量有利于相似度计算 ) # 2. 创建向量数据库并存储 # 指定一个目录来持久化存储向量数据库 persist_directory ./chroma_db # 将文本块转换为向量并存入ChromaDB vector_db Chroma.from_documents( documentschunks, embeddingembedding_model, persist_directorypersist_directory ) # 持久化保存到磁盘 vector_db.persist() print(f知识库构建完成向量已保存至 {persist_directory})这里的关键是HuggingFaceEmbeddings它负责调用我们指定的模型BAAI/bge-small-zh-v1.5把每一个文本块变成一串高维向量。Chroma.from_documents方法则一次性完成向量化和存储。persist()操作把数据库保存到本地硬盘下次启动就不用重新处理文档了。3.3 第三步检索与生成答案知识库建好了现在来实现问答功能。我们创建一个检索器和一个基于Phi-3模型的问答链。from langchain.chains import RetrievalQA from langchain_community.llms import HuggingFacePipeline from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline import torch # 1. 加载Phi-3-mini模型和分词器 model_name microsoft/Phi-3-mini-128k-instruct tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) # 注意模型较大确保你的硬盘有足够空间约10GB model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, # 使用半精度浮点数减少内存占用 device_mapauto, # 自动分配模型层到CPU/GPU trust_remote_codeTrue ) # 2. 创建文本生成管道 pipe pipeline( text-generation, modelmodel, tokenizertokenizer, max_new_tokens512, # 生成答案的最大长度 temperature0.1, # 较低的温度使输出更确定、更聚焦 do_sampleTrue, ) # 3. 将管道包装成LangChain的LLM对象 llm HuggingFacePipeline(pipelinepipe) # 4. 从之前保存的目录加载向量数据库 vector_db Chroma( persist_directory./chroma_db, embedding_functionembedding_model ) # 5. 创建检索器这里设置返回最相关的4个文本块 retriever vector_db.as_retriever(search_kwargs{k: 4}) # 6. 创建检索增强生成RAG链 qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, # 将检索到的所有文档“塞”进提示词 retrieverretriever, return_source_documentsTrue, # 返回参考来源方便追溯 verboseFalse # 设为True可以看到详细的处理过程 ) print(智能问答系统初始化完成) print(你可以开始提问了。输入 quit 或 exit 退出。)这段代码稍微长一点但逻辑很清晰首先加载Phi-3模型和分词器。device_map”auto”会让程序自动利用你的GPU如果有的话否则使用CPU。然后创建一个文本生成管道设置生成参数比如max_new_tokens控制答案长度temperature控制创造性这里设低是为了答案更严谨。接着从本地加载我们之前构建好的向量数据库并把它变成一个检索器retriever它负责根据问题查找相关文档块。最后用RetrievalQA把语言模型LLM和检索器Retriever绑在一起形成一个完整的问答链。chain_type”stuff”是一种简单的处理方式它把检索到的所有相关文本块和问题一起组合成一个大提示词送给模型。4. 让系统跑起来提问与优化系统搭建完毕是时候检验成果了。我们写一个简单的交互循环。# 简单的问答循环 while True: query input(\n请输入你的问题: ) if query.lower() in [quit, exit, 退出]: print(再见) break if not query.strip(): continue print(正在思考...) try: # 获取答案和参考来源 result qa_chain({query: query}) answer result[result] source_docs result[source_documents] print(f\n【答案】\n{answer}) print(f\n【参考来源】) for i, doc in enumerate(source_docs[:2]): # 展示前2个来源 print(f 片段 {i1}: {doc.page_content[:150]}...) # 展示片段前150字符 print(f 来自文档: {doc.metadata.get(source, 未知)}\n) except Exception as e: print(f出错了: {e})运行你的build_qa.py脚本。第一次运行会下载模型需要一些时间和网络。之后你就可以在终端里用自然语言提问了。系统会先显示“正在思考…”然后给出答案并附上它做出判断所依据的文档片段及其出处这大大增加了答案的可信度。可能遇到的问题与优化建议答案不准确可能是检索到的文档块不相关。可以尝试调整chunk_size比如调到800或chunk_overlap比如调到100或者调整检索数量k。回答“不知道”如果问题完全超出知识库范围模型可能会诚实地说不知道。这是RAG的优点避免了编造。速度慢首次加载模型和生成第一个答案可能较慢。后续问答会快很多。确保你的机器内存足够至少8GB以上为佳。想处理更多格式DirectoryLoader支持多种加载器你可以同时加载PDF、TXT、MD甚至Word、PPT文件需要安装额外库如unstructured。5. 总结跟着走完这一趟你应该已经成功在本地搭建起了一个专属的智能知识库问答系统。我们利用了Phi-3-mini模型强大的指令理解和长文本处理能力结合RAG技术确保了答案的准确性和可追溯性整个过程完全私有化数据安全掌握在自己手中。实际用下来对于结构化的文档问答比如从产品手册里找规格、从会议纪要里查结论、从研究报告中提取观点效果非常不错。它就像一个不知疲倦的、精通你所有文档的助理。当然它也不是万能的对于高度抽象、需要深度推理或者知识库中完全不存在的信息它的能力是有限的。你可以在这个基础上做很多扩展比如为它加一个好看的网页界面用Gradio或Streamlit或者设置定时任务让它自动更新知识库。最重要的是你亲手把一堆冰冷的文件变成了一个能对话、能思考的知识体这个过程的成就感或许比工具本身更有价值。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。