1. 项目概述为什么选择Ollama作为AI入门第一站如果你对AI大语言模型充满好奇看着网上各种ChatGPT、Claude的演示心痒痒但又担心隐私、费用或者单纯想折腾点本地能掌控的东西那么Ollama几乎是为这个场景量身定做的。它不是另一个聊天机器人而是一个本地大模型运行与管理框架。简单来说它就像一个“应用商店”加“游戏启动器”只不过里面装的不是App和游戏而是各种开源的大语言模型。你通过几条简单的命令就能把Llama、Mistral、DeepSeek这些响当当的模型下载到自己的电脑上完全离线运行数据不出本地想怎么玩就怎么玩。我最初接触Ollama是因为需要在一个无法连接外网的环境里测试一些AI辅助编程的想法。当时试过手动部署光是处理模型格式、依赖库版本、内存优化就折腾了好几天。直到发现Ollama它用近乎“傻瓜式”的操作把模型下载、环境配置、服务启动、API暴露这些繁琐步骤全部打包了。你只需要关心“我想跑哪个模型”剩下的它来搞定。这对于零基础的初学者或者像我这样不想在环境配置上浪费时间的开发者来说吸引力是巨大的。它极大地降低了本地运行大模型的门槛让你能快速把注意力集中在模型本身的能力和应用上而不是和系统环境搏斗。2. 核心思路拆解Ollama如何实现“一键运行”Ollama的设计哲学非常明确极简、开箱即用、开发者友好。它的“一键”魔法背后是一套精心设计的分层架构和自动化流程。理解这个能帮你更好地使用它甚至在出问题时知道从哪里排查。2.1 核心架构客户端-服务器模型Ollama采用典型的C/S架构。当你安装完Ollama实际上同时安装了一个后台服务Server和一个命令行客户端CLI。Ollama服务Server这是一个常驻后台的进程在macOS/Linux上以ollama serve形式运行Windows上通常作为服务安装。它的核心职责是管理模型的生命周期从Ollama官方仓库或你指定的镜像源下载模型文件通常是GGUF或类似格式将模型加载到内存和显存中并启动一个本地的推理引擎基于Go语言编写底层调用像llama.cpp这样的高性能推理库。同时它还暴露了一个本地HTTP API默认在11434端口供客户端或其他应用程序调用。Ollama命令行客户端CLI这是我们最常打交道的部分。当你输入ollama run llama3.2:1b时CLI会向本地的Server发送请求检查模型是否存在不存在则触发下载然后启动一个交互式聊天会话。CLI本身不负责繁重的计算它只是一个便捷的前端。这种架构的好处是一次安装多处使用。Server启动后你不仅可以用CLI聊天还可以用任何能发送HTTP请求的工具如curl、Postman或者各种编程语言的SDK如Python的ollama库、JavaScript的ollama-js来调用模型轻松集成到你自己的项目中。2.2 模型格式与封装GGUF与ModelfileOllama能支持如此多的模型关键在于它拥抱了社区标准的GGUFGPT-Generated Unified Format格式。GGUF是llama.cpp项目推出的模型格式相比之前的GGML它设计更统一、加载更快、支持更多特性如特殊Token、多模态。几乎所有主流开源模型都有社区转换好的GGUF版本。Ollama所做的是在GGUF文件之上增加了一层Modelfile的封装。一个Ollama模型包如llama3.2:1b其实包含两部分基础的GGUF模型文件包含模型权重和架构信息。Modelfile一个配置文件定义了如何“修饰”这个基础模型。它可以设置系统提示词System Prompt、对话模板Chat Template、参数如温度temperature、上下文长度num_ctx的默认值甚至可以指定从多个GGUF文件中选择哪一个比如区分Q4_K_M还是Q8_0的量化版本。当你运行ollama pull时Ollama会下载这个“模型包”。当你运行ollama run时它读取Modelfile的配置将基础模型和这些配置一并加载呈现给你一个“开箱即用”、对话体验良好的模型实例。这比直接操作原始的GGUF文件要友好得多。2.3 自动化流程从命令到对话让我们拆解ollama run llama3.2:1b这条命令背后发生了什么解析命令CLI解析你要运行的模型标签llama3.2:1b。查询本地CLI向本地Serverlocalhost:11434发送请求询问该模型是否存在。模型不存在触发下载Server检查本地模型库发现没有则根据模型标签从配置的镜像源默认是registry.ollama.ai拉取模型包GGUFModelfile。这里就是很多国内用户遇到“下载太慢”甚至失败的环节。加载模型下载完成后Server调用底层的推理引擎将GGUF模型文件加载到内存/显存中。这个过程会显示“loading model”和进度条耗时取决于模型大小和你的磁盘速度。启动会话模型加载完毕Server准备好接收请求。CLI建立一个连接并开始一个交互式循环将你的输入按照Modelfile中的模板格式化发送给Server进行推理接收流式或非流式的响应并输出到终端。持续服务即使你退出了CLI聊天只要Ollama Server还在运行模型就仍然驻留在内存中等待下一个请求。你可以用ollama list查看已加载的模型用ollama stop停止某个模型释放资源。3. 从零开始Ollama的安装与环境配置理论说再多不如动手装一遍。Ollama的安装本身极其简单但针对不同的操作系统和网络环境有一些细节需要注意这往往是新手遇到的第一个坎。3.1 主流操作系统安装指南macOS / Linux对于macOS和大多数Linux发行版官方推荐一键安装脚本。打开终端Terminal执行以下命令curl -fsSL https://ollama.com/install.sh | sh这条命令会下载安装脚本并自动执行。它会检测你的系统架构Intel/Apple Silicon下载对应的二进制文件将其安装到/usr/local/bin通常需要输入密码并尝试设置开机自启服务。注意如果你对直接curl | sh的方式有安全顾虑这是合理的可以先下载脚本curl -O https://ollama.com/install.sh审阅其内容后再执行bash install.sh。WindowsWindows用户最省心的方式是直接下载安装程序。访问Ollama官网点击下载Windows版本一个.exe文件以管理员身份运行即可。安装程序会自动完成所有设置包括添加环境变量、安装Windows服务。安装后你可以在开始菜单找到“Ollama”或者在PowerShell/CMD中直接使用ollama命令。手动安装高级用户对于无法运行脚本或需要自定义路径的用户可以从GitHub Releases页面直接下载对应平台的二进制压缩包解压后就是一个可执行文件ollama。将其放到系统PATH包含的目录如/usr/local/bin或C:\Windows\system32然后需要手动启动服务在终端运行ollama serve。这种方式需要你自己管理服务的启动和停止。3.2 解决核心痛点国内网络环境下的加速下载安装Ollama本身很快但接下来下载模型才是真正的挑战。默认的镜像源registry.ollama.ai位于海外对于国内用户下载速度可能只有几十KB/s甚至连接超时。这是社区反馈最集中的问题必须优先解决。方法一使用环境变量配置镜像源推荐一劳永逸这是最优雅的解决方案。Ollama允许通过OLLAMA_HOST和OLLAMA_MODELS环境变量来配置。但更直接的是我们可以配置Docker式的镜像仓库地址。目前国内有一些社区维护的镜像站。以Linux/macOS为例在终端中执行# 将默认的镜像源替换为国内镜像站地址 export OLLAMA_HOST0.0.0.0:11434 # 确保服务监听所有IP可选便于其他设备访问 export OLLAMA_MODELS_SOURCEhttps://mirror.ghproxy.com/https://github.com/ollama/ollama # 或者使用其他可用的镜像源例如一些大学或云服务商提供的 # export OLLAMA_MODELS_SOURCEhttps://ollama-mirror.example.com然后再运行ollama serve启动服务。注意环境变量的设置只对当前终端会话有效。为了永久生效你需要将这两行export命令添加到你的shell配置文件中如~/.bashrc,~/.zshrc, 或~/.profile然后重启终端或执行source ~/.zshrc。对于Windows用户可以通过系统属性设置环境变量右键“此电脑” - “属性” - “高级系统设置” - “环境变量”。在“系统变量”或“用户变量”中新建一个变量变量名OLLAMA_MODELS_SOURCE变量值为镜像站URL。重启Ollama服务可以在服务管理器中重启“Ollama”服务或重启电脑。方法二手动下载GGUF文件并导入如果镜像源也不稳定或者你想使用一个非常小众的、镜像站没有的模型可以走手动路线。寻找模型在Hugging Face等模型社区找到目标模型的GGUF格式文件例如llama-3.2-1b-instruct.Q4_K_M.gguf。下载文件使用任何你喜欢的下载工具如浏览器、wget、迅雷将GGUF文件下载到本地。创建Modelfile在GGUF文件同级目录创建一个名为Modelfile的文本文件无后缀。内容至少需要指定模型文件路径FROM ./llama-3.2-1b-instruct.Q4_K_M.gguf # 可以添加更多配置如 # PARAMETER temperature 0.7 # SYSTEM “你是一个乐于助人的AI助手。”创建Ollama模型在终端中切换到该目录运行ollama create my-llama-model -f ./Modelfile这条命令会根据你的Modelfile创建一个名为my-llama-model的本地模型。运行模型现在你就可以像使用官方模型一样运行它了ollama run my-llama-model。这种方法虽然步骤多但给了你最大的灵活性也是解决网络问题的终极方案。实操心得我个人的习惯是对于常用的基础模型如Llama 3.2、DeepSeek Coder优先配置国内镜像源进行拉取速度能跑满带宽。对于一些实验性的或需要特定量化版本的模型则采用手动下载GGUF再创建的方式。两种方式结合基本可以应对所有场景。3.3 安装后的验证与基本命令安装并配置好镜像源后让我们验证一下。启动服务如果安装程序没有自动启动服务在终端输入ollama serve。看到类似Listening on [::]:11434的日志说明服务已就绪。测试运行打开另一个终端窗口尝试运行一个小模型这是最直接的测试。例如运行一个超小参数模型快速验证整个流程ollama run llama3.2:1b如果是第一次运行你会看到下载进度条。下载完成后会进入交互式聊天界面。输入“Hello”看它是否能正常回复。常用命令速查ollama list列出本地已下载的模型。ollama ps显示当前正在运行的模型实例。ollama stop model-name停止某个正在运行的模型释放内存。ollama rm model-name从本地磁盘删除一个模型。ollama pull model-name只下载模型不运行。ollama cp source destination复制一个模型并创建新名称常用于基于一个模型创建不同配置的变体。4. 模型选择与实战找到适合你的“AI伙伴”Ollama的模型库非常丰富从几亿参数到几百亿参数的模型都有。对于零基础用户如何选择第一个模型至关重要。选大了电脑跑不动选小了能力太弱体验差。4.1 模型选择的黄金法则在能力、速度与资源间权衡选择模型时主要看三个维度模型能力、推理速度、硬件资源。它们构成了一个“不可能三角”你需要根据你的主要需求进行取舍。硬件资源你的电脑配置这是硬约束。内存RAM这是最重要的指标。模型运行时会加载到内存中。一个粗略的估算公式是模型参数量单位B十亿 x 量化位数 / 8 ≈ 所需内存GB。例如一个7B70亿参数、Q4_K_M量化约4.5位的模型大概需要7 * 4.5 / 8 ≈ 4 GB内存。这是模型权重本身占用的还需要额外1-2GB给推理时的计算和上下文num_ctx。所以8GB内存的电脑跑7B模型会比较吃力更适合3B以下的模型。显存VRAM如果你有独立显卡NVIDIA GPU并且Ollama正确识别运行ollama run时能看到GPU layers相关的日志那么模型会优先加载到显存中速度远快于纯CPU推理。显存需求估算同上。没有GPU或显存不足时会自动回退到CPU推理。CPU纯CPU推理时核心数和频率影响速度。现代处理器通常都支持一些AI指令集加速如AVX2、AVX-512Ollama的底层库会利用它们。模型能力参数规模通常与能力正相关但非绝对。最新的小模型如Llama 3.2 1B/3B在精心训练下能力可能媲美几年前的超大模型。对于入门我建议从以下“甜点”模型开始Llama 3.2 1B / 3BMeta最新出品的小模型标杆指令跟随能力强对话流畅是体验“智能感”的绝佳起点。1B版本对硬件要求极低。Phi-3-mini (3.8B)微软出品以“小身材大智慧”著称在常识推理和代码能力上表现突出。Gemma 2 (2B/9B)Google的轻量级模型性能均衡对多语言支持较好。Qwen2.5 (0.5B/1.5B/3B)阿里通义千问的轻量版中文能力很强适合中文场景入门。推理速度这直接影响交互体验。在资源允许的情况下可以尝试更高位数的量化版本如Q8_0比Q4_K_M慢但更精确或者稍大的模型。用ollama run时的输出速度Tokens per second作为直观感受。4.2 实战运行你的第一个模型并进行对话假设我们在一台8GB内存的普通笔记本上开始。我们选择llama3.2:1b这个模型它是目前最轻量级的Llama 3.2版本。拉取模型打开终端输入命令。ollama pull llama3.2:1b你会看到下载进度。由于我们之前配置了镜像源速度应该很快。下载完成后可以用ollama list确认。运行与对话ollama run llama3.2:1b加载完成后出现提示符。你可以开始聊天了。试着问它一些问题“用Python写一个计算斐波那契数列的函数。”“用简单的语言解释什么是量子计算。”“给我讲个笑话。” 观察它的回答速度和质量。对于1B的模型不要期望它有深度推理能力但它应该能给出语法正确、结构清晰的回答。调整参数高级在运行命令时可以附加参数来改变模型行为。例如ollama run llama3.2:1b --temperature 0.2 --num_predict 100--temperature 0.2降低“温度”使输出更确定、更保守。提高温度如0.8会让输出更有创造性但也更可能胡言乱语。--num_predict 100限制模型单次回复最多生成100个token。 这些参数也可以在交互模式下通过/set命令动态调整例如输入/set temperature 0.8。4.3 探索更多模型从聊天到编程从多语言到多模态Ollama的强大在于其丰富的模型库。一旦熟悉了基本操作就可以大胆尝试。代码模型如果你对编程感兴趣一定要试试代码专用模型它们在代码生成、补全、解释和调试上表现卓越。deepseek-coder:1.3b/deepseek-coder:6.7bDeepSeek的代码模型对中文代码注释友好能力很强。codellama:7bMeta基于Llama 2训练的代码模型是早期的标杆。qwen2.5-coder:1.5b通义千问的代码模型中文上下文理解好。大参数模型体验如果你的硬件足够强大比如有16GB内存或高性能显卡可以挑战更大的模型体验更强大的推理和创作能力。llama3.2:3b1B的升级版能力有明显提升。llama3.1:8bLlama 3.1的8B版本是一个能力非常全面的“水桶型”模型。qwen2.5:7b通义千问7B版本在中文任务上表现优异。多模态模型需注意Ollama也支持一些多模态模型如llava、bakllava可以理解图像内容。但运行这类模型需要额外的视觉编码器对资源消耗更大且目前体验尚在早期。运行前务必查看官方文档了解具体要求。注意事项在尝试新模型前尤其是大型模型务必先用ollama pull只下载不运行或者先查一下模型的预估大小通常在Ollama官网或HF页面有说明避免一次性运行导致内存不足系统卡死。对于内存紧张的机器养成用ollama ps查看运行中模型并用ollama stop及时释放资源的习惯。5. 超越命令行Ollama的进阶应用与集成仅仅在命令行里聊天只是发挥了Ollama 10%的潜力。它的真正价值在于作为本地AI基础设施与其他工具无缝集成赋能你的日常工作流。5.1 作为本地API服务器使用Ollama Server提供的HTTP API是集成的核心。默认情况下它在http://localhost:11434提供服务。你可以用任何HTTP客户端与之交互。基础聊天API调用示例使用curl# 生成对话 curl http://localhost:11434/api/generate -d { model: llama3.2:1b, prompt: 为什么天空是蓝色的, stream: false } # 更结构化的聊天接口推荐 curl http://localhost:11434/api/chat -d { model: llama3.2:1b, messages: [ { role: user, content: 为什么天空是蓝色的 } ], stream: false }API会返回一个JSON响应包含模型的回答。将stream设为true则可以像在命令行里一样看到流式输出的效果。使用官方Python库对于Python开发者使用官方库更简单。pip install ollamaimport ollama response ollama.chat(modelllama3.2:1b, messages[ { role: user, content: 用Python写一个快速排序函数并加上注释。, }, ]) print(response[message][content]) # 流式响应 stream ollama.chat( modelllama3.2:1b, messages[{role: user, content: 讲一个关于AI的短故事。}], streamTrue ) for chunk in stream: print(chunk[message][content], end, flushTrue)5.2 与开发工具集成以Cursor和IDEA为例这是Ollama最能提升生产力的场景之一让本地大模型成为你的编程副驾。集成到CursorAI原生代码编辑器Cursor内置了对接Ollama的功能。确保Ollama服务正在运行并且有一个代码能力不错的模型已下载如deepseek-coder:6.7b。打开Cursor进入设置Settings。找到AI或Code Completion相关设置。将AI Provider或Model Endpoint选择为Ollama或Local。在模型名称处填写你本地模型的名称如deepseek-coder:6.7b。保存后你就可以在Cursor中使用Cmd/Ctrl K进行AI对话或享受基于本地模型的代码补全了。所有代码和讨论内容都留在本地安全私密。集成到IntelliJ IDEA / PyCharm等JetBrains IDE可以通过安装Genie或Continue等AI插件来实现。在IDE的插件市场搜索Continue并安装。安装后在Continue插件配置中找到Models设置。添加一个模型类型选择Ollama。配置API地址为http://localhost:11434并选择你本地的模型如qwen2.5-coder:1.5b。配置完成后你就可以在IDE中通过快捷键召唤AI助手进行代码解释、生成、重构、写注释等操作。5.3 构建简单的AI应用一个本地知识库问答示例我们可以用Ollama和LangChain这样的框架快速搭建一个应用。下面是一个极简的示例演示如何让模型基于你提供的自定义文档进行回答Retrieval-Augmented Generation, RAG。# 安装必要库pip install langchain langchain-community chromadb pypdf from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma from langchain_community.embeddings import OllamaEmbeddings from langchain_community.llms import Ollama from langchain.chains import RetrievalQA # 1. 加载你的文档例如一个PDF文件 loader PyPDFLoader(./your_document.pdf) documents loader.load() # 2. 将长文档切分成小块 text_splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap50) texts text_splitter.split_documents(documents) # 3. 使用Ollama的嵌入模型将文本块转换为向量需要运行一个嵌入模型如nomic-embed-text embeddings OllamaEmbeddings(modelnomic-embed-text) # 4. 创建向量数据库存储这些向量 vectorstore Chroma.from_documents(documentstexts, embeddingembeddings) # 5. 创建检索器 retriever vectorstore.as_retriever(search_kwargs{k: 3}) # 检索最相关的3个片段 # 6. 初始化Ollama聊天模型 llm Ollama(modelllama3.2:3b) # 7. 创建问答链 qa_chain RetrievalQA.from_chain_type( llmllm, chain_typestuff, retrieverretriever, return_source_documentsTrue ) # 8. 提问 query 根据文档项目的主要目标是什么 result qa_chain.invoke({query: query}) print(回答, result[result]) print(\n参考来源) for doc in result[source_documents]: print(f- {doc.page_content[:200]}...)这个例子展示了Ollama如何作为LangChain生态中的本地模型提供商参与到更复杂的AI应用流程中。你可以替换PDF加载器为Word、TXT或网页加载器轻松构建属于你自己的本地知识库助手。6. 故障排除与性能优化实录在实际使用中你肯定会遇到各种问题。这里记录了我踩过的一些坑和解决方案希望能帮你节省时间。6.1 常见错误与解决方法问题一ollama run下载模型极慢或失败现象进度条不动或提示Error: pull model manifest。原因网络连接至默认镜像源不畅。解决确认镜像源配置执行echo $OLLAMA_MODELS_SOURCELinux/macOS或在系统环境变量中检查是否已正确设置国内镜像源。确保没有拼写错误。尝试其他镜像源如果某个镜像源失效可以搜索“Ollama 国内镜像”寻找其他社区提供的地址。终极方案如前文所述手动下载GGUF文件通过ollama create创建本地模型。问题二Error: 500 Internal Server Error或llama-server相关错误现象运行模型时突然报500错误或提示llama-server崩溃。原因最常见的原因是内存不足。当模型大小加上上下文长度所需内存超过物理内存时系统会尝试使用交换空间极易导致进程崩溃。解决检查可用内存在运行模型前用系统监控工具看看剩余内存。选择更小的模型或量化版本如果你在跑一个7B模型尝试换成3B或1B。或者寻找更低比特量化的版本如Q2_K但质量损失较大。减小上下文长度通过--num_ctx 1024参数降低上下文窗口默认通常是2048或4096可以显著减少内存占用。关闭其他占用内存的程序。问题三GPU未启用推理速度很慢现象运行模型时日志显示GPU layers: 0/0或者完全没有GPU相关日志生成速度只有个位数token/秒。原因Ollama未能检测到GPU或GPU驱动/CUDA环境有问题。解决针对NVIDIA显卡确认Ollama支持GPU运行ollama run llama3.2:1b时观察启动日志。如果看到Using GPU或GPU layers: [数字]说明GPU已启用。更新显卡驱动确保安装了最新的NVIDIA显卡驱动。Linux用户可能需要安装cuda或nvidia-container-toolkit如果通过Docker安装。对于直接二进制安装Ollama应该能自动检测。Windows用户确保安装了CUDA Toolkit版本需与Ollama内置的推理库匹配通常要求CUDA 11。有时需要以管理员权限运行Ollama。强制使用CPU如果排查GPU问题太麻烦或者你的GPU显存太小可以显式指定CPU运行ollama run llama3.2:1b --num_gpu 0。问题四如何彻底卸载OllamamacOS/Linux停止服务ollama serve进程所在终端按CtrlC或pkill -f ollama。删除二进制文件sudo rm $(which ollama)。删除数据目录模型和配置rm -rf ~/.ollama。Windows在“设置”-“应用”中卸载“Ollama”程序。手动删除数据目录C:\Users\你的用户名\.ollama。6.2 性能调优技巧选择合适的量化版本模型名称中的q4_0、q8_0等后缀代表量化精度。数字越小如q2_k模型文件越小运行速度越快但质量损失越大。q4_k_m是目前在精度和速度间较好的平衡点。q8_0或fp16如果有精度更高但更慢、更占内存。根据你的任务在速度和质量间权衡。调整num_thread参数对于CPU推理可以通过--num_thread参数指定使用的CPU线程数。默认会使用所有核心。如果你的电脑同时还要做其他工作可以适当减少线程数以避免系统卡顿。例如ollama run llama3.2:1b --num_thread 4。使用num_gpu分层加载对于有大显存的GPU可以将所有模型层加载到GPU(--num_gpu -1)。如果显存不足可以指定一个层数如--num_gpu 20让前20层在GPU运行剩余层在CPU运行这通常比纯CPU快。监控资源使用在运行模型时打开系统活动监视器macOS、任务管理器Windows或htopLinux观察CPU、内存和GPU的使用情况。这能帮你直观了解模型的资源消耗为选择模型和参数提供依据。7. 安全、隐私与未来展望选择本地运行模型安全和隐私是首要考量。Ollama在这方面做得非常彻底。数据完全本地化这是最核心的优势。你的所有对话、提示词、生成的文本都只在你的电脑内存和磁盘中流转不会发送到任何远程服务器。这对于处理敏感信息、公司内部数据或个人隐私至关重要。模型可控你运行的是哪个版本、哪个量化等级的模型完全由你决定。不存在远程模型突然更新导致行为变化或API收费的问题。离线可用一旦模型下载到本地你可以在完全离线的环境下使用。这在没有稳定网络连接的环境如飞机、实验室或对网络有严格管控的场景下非常有用。当然本地部署也有其局限性主要是能力天花板受硬件限制。你无法在个人电脑上运行千亿参数的GPT-4级别模型。但随着模型小型化和压缩技术的飞速发展如MoE架构、更高效的量化这个差距正在迅速缩小。Llama 3.1 8B模型在许多基准测试上已经达到了早期70B模型的能力。未来我们很可能在消费级硬件上运行今天需要云端大集群才能运行的模型。Ollama的生态也在快速成长。越来越多的开源项目、开发工具将其作为首选的本地模型后端。从简单的聊天机器人到复杂的AI Agent、自动化工作流再到与现有软件如浏览器、办公套件的深度集成可能性正在被不断挖掘。对于初学者而言从Ollama开始探索AI世界是一条成本极低、路径平滑的捷径。它让你绕开了复杂的理论、繁琐的部署直接触摸到AI应用的核心。在这个过程中积累的关于模型选择、提示工程、资源管理的经验将成为你未来深入AI领域宝贵的实践基础。