新闻详情

新闻详情

首页 / 资讯中心 / 详情

零基础学LLM应用开发:LangChain、RAG、Agent与微调路线图

发布时间:2026/9/6 4:07:56来源:尧图网络
零基础学LLM应用开发:LangChain、RAG、Agent与微调路线图
零基础学LLM最容易掉进去的坑不是数学不够好也不是代码底子薄而是搞不清楚整个学习路径上到底有哪些模块每个模块解决什么真实问题以及它们之间的先后关系。很多人一上来就照着教程敲LangChain的代码还没搞懂Prompt怎么写就跑去微调大模型最后跑通了一个Demo换个场景又不知道怎么改。这个主题之所以适合零基础是因为它可以完全抛开复杂的模型训练细节先把“LLM应用开发”这条主线梳理清楚LangChain、RAG、Agent、大模型微调本质上是四个不同层级的问题。想入行LLM应用开发或者想把现有业务接入大模型可以按这条路线往下走。网上关于LLM的教程很多但大部分要么偏理论要么只讲单一工具。这篇内容更接近一份学习路线加实操思路的整理结合了LangChain、RAG、Agent、大模型微调四个方向里最容易出现的疑问和踩坑点也把常见热词背后的概念串了一遍。阅读之前你不需要有深度学习基础只要会Python基础语法能安装依赖就能跟着把流程跑通。真正值得关注的重点不是背下某个API而是理解“模型怎么接进去”“知识库怎么查”“Agent怎么调工具”以及“什么时候根本不需要微调”。1. 先搞清楚零基础入门LLM到底要学什么LLM的应用开发跟传统的软件工程有点不一样。传统开发里逻辑是你写死的函数的输入输出是确定的。LLM应用里逻辑很大程度靠模型即时生成你写的是约束、流程和工具调用。所以零基础入门时最忌讳的是直接钻到某个框架的源码里或者抱着某篇论文啃。你要先建立一张地图。1.1 LLM不是“模型”一个词就能概括的LLMLarge Language Model大语言模型是指参数量非常大的语言模型能够根据输入文本生成后续内容。你听到的ChatGPT、文心一言、通义千问、DeepSeek、Llama都属于LLM产品或LLM的开源权重。但学习LLM应用开发一般不会去从零预训练模型。实际工作里大部分人是这样使用LLM的调用现成的API传一段Prompt拿返回值。部署开源模型权重到本地或服务器再封装成接口。用LangChain这类框架把模型调用、提示词、数据检索、工具调用串起来。用RAG把外部知识库接到模型前面让模型能回答自己没训练过的问题。用Agent让模型能判断是否调用外部工具把多步任务自动化。在基座模型基础上做微调让模型适配特定风格、领域和任务。所以“学LLM”不等于“学某个模型”而是一整套工程方法。这个观念如果不先立起来后面很容易越学越迷茫。1.2 四个核心模块的真实分工LangChain、RAG、Agent、大模型微调这四块经常被放在同一篇文章里但解决的不是同一个问题。LangChain定位是应用开发框架帮你把不同模型、不同组件组装成一条工作流。它解决的是“代码怎么组织、链怎么串、工具怎么接”。RAG定位是“外部知识接入”方案解决的是“模型没学过的内容怎么回答”。它跟LangChain不冲突很多RAG系统就是用LangChain搭的。Agent定位是“多步骤自主决策”解决的是“模型不能只回答一句话而是要自己判断下一步调用什么工具”。大模型微调定位是“修改模型行为”解决的是“通用模型回答风格不匹配、领域知识不够、指令理解能力不足”等问题。用一条项目实战线来理解先有模型再封装API然后用LangChain编排Prompt和模型调用接着为了能让模型回答私有知识加入RAG为了让应用能完成多步任务加入Agent最后发现通用模型效果不理想才考虑微调。这样拆完之后零基础的你应该能看出来最先要突破的是LangChain和RAG因为它们是大部分LLM项目的主体。Agent属于进阶方向微调通常属于另一个岗位方向。2. 环境准备先学会“跑起来”再谈“调优”很多教程一上来就让你克隆仓库、安装依赖、下载模型结果新手刚走到第一步就卡住了。不是命令不会敲而是不知道“哪些环境信息是有用的”“报错到底该看哪里”。这个阶段最容易踩的坑是机器配置不够却硬跑本地大模型导致内存爆掉或者还没搞懂API调用就开始装一堆本地组件。2.1 硬件条件与系统选择如果你的目标是跑通LangChain、RAG、Agent流程大多数步骤不需要太高配置。普通笔记本就能完成。原因在于很多流程使用的是模型的API接口计算发生在服务端本地只负责发请求。但如果你要部署开源模型特别是要微调那配置门槛就会明显上升任务类型建议硬件条件说明学习LangChain基础APICPU即可用现成API或小模型跑通流程跑本地小规模开源模型几十亿参数16G内存以上最好有独立显卡量化版本的7B模型在推理时需要占用较多内存或显存对开源模型做全参数微调需要多卡GPU或大显存单卡消费级显卡只能处理非常小的基座模型或LoRA制作高质量RAG DemoCPU即可没有强求GPU但向量化速度会受影响低配置不是不能学而是要调整学习策略优先选API方案做功能验证本地模型放在后面提升理解。这个顺序能让你把精力集中在流程本身而不是跟环境死磕。2.2 Python环境和依赖管理LLM应用开发几乎离不开Python。我一般建议零基础者直接安装Miniconda或Mambaforge不要手动往系统Python里乱装包。因为LangChain项目依赖的包版本经常变化每个项目独占一个虚拟环境是最稳妥的方式。一个基础环境通常包含这些包python -m venv llm_env source llm_env/bin/activate # Windows上执行 llm_env\Scripts\activate pip install langchain langchain-community langchain-openai pip install chromadb # 向量数据库 pip install beautifulsoup4 requests如果你是调用OpenAI格式的API还需要安装openai库。国内常用的一些模型服务商通常也提供兼容OpenAI的接口这时候只要修改base_url和api_key就能跑通代码不需要大改。2.3 API、本地模型、模型权重之间的选择学习阶段判断标准很简单能调API就先调API。OpenAI、阿里云百炼、智谱、DeepSeek等平台都有免费额度或较低价格的新用户套餐。使用API的好处是不占用本地显存和内存。响应速度快方便调试。模型能力比同参数量的本地小模型更好。不用处理权重下载和量化问题。本地模型的优势是数据不出内网、无按量费用、可离线运行但部署难度和硬件要求更高。我不建议零基础新手一开始就去本地部署一个70B模型那会把你对应用开发的兴趣全部消磨掉。真正需要模型权重时优先看量化版本。比如在内存不足的机器上先用4bit量化权重跑通再慢慢换高精度的。跑之前看一眼模型文件大小和你的内存、显存大小至少留出总内存的20%给系统和其他程序否则大概率直接OOM退出。3. LangChain它解决的根本不是“封装API”这个事LangChain这个关键词在B站、CSDN、知乎上出现的频率极高。很多新手一开始以为它是一个“能连接各种大模型的万能库”想问“LangChain是干嘛的”。实际上它更大的价值是让开发者把提示词、模型、工具、记忆、检索、输出解析这些环节组合成“链”。3.1 LangChain最核心的几个概念不管LangChain版本迭代多快你必须先理解这几个核心概念Model模型封装层把不同来源的LLM统一成同一套接口。PromptTemplate把静态文本和动态变量拼成Prompt。OutputParser把模型输出的字符串解析成结构化内容比如JSON、列表。Chain把多个步骤串起来让前一个步骤的输出成为后一个步骤的输入。Memory给对话增加历史记忆。Retriever从向量数据库中检索相关内容。Tool让模型可以调用外部函数、接口或服务。初学者第一周不要追求把每个组件都弄懂只跑一个最小的LCELLangChain Expression Language链就行。from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI prompt ChatPromptTemplate.from_messages([ (system, 你是一个简洁的技术助手。), (human, {input}) ]) model ChatOpenAI(modelgpt-4o-mini, temperature0) chain prompt | model result chain.invoke({input: 用一句话解释什么是LLM}) print(result.content)这个例子看着简单但已经把“模板”、“模型”、“链”三个核心概念都走了一遍。能输出结果后再去尝试加OutputParser和Memory。3.2 LangChain和LangGraph的区别很多新手会在这里卡很久LangChain和LangGraph到底什么关系LangChain偏重“把提示词、模型、检索、工具串成可运行的链条”主体是Chain。LangGraph则偏重“图状态的可控流程编排”你可以把它理解为“更灵活的状态机”。它允许你定义节点、边、条件和循环适合构建有分支、有循环、有多步协作的Agent应用。举一个实际例子如果要做一个自动测试用例生成器最简单的LangChain方案就是一个Prompt模板接模型输出。但如果需要先生成测试计划再逐条生成用例再对用例做去重和校验遇到不满足条件时回退重新生成这时候普通Chain写起来会很绕用LangGraph更合适。我的建议是先学LangChain把直线流程跑通觉得自己经常需要控制分支和循环再切到LangGraph。不要一上来就同时学两个框架容易把“链”和“图”搞混。3.3 学习LangChain的正确姿势不要背文档。不要追求把所有类都看一遍。LangChain每一两个月就会升级API背源码也没用。更实际的做法是拿三个小项目练手把一段Markdown格式的文档丢给模型让它自动生成测试用例。做一个多轮客服对话带上历史记忆和指定回答格式。用LangChain连接一个简单的检索工具让模型回答前先查询一个本地JSON文件。这三个项目做完你对LangChain的理解绝对超过只看教程的人。因为你会遇到真实问题输出JSON格式不对、历史对话怎么存、同步调用超时等。这些问题才是以后项目里真正要处理的。4. RAG知识库落地是刚需但别把“向量化”当成全部RAGRetrieval-Augmented Generation是目前LLM应用落地中最热门的方向之一。它解决的核心问题是如何让一个没有学过你私有数据的模型回答出基于你私有数据的内容。典型的场景包括企业知识库问答、论文阅读助手、产品说明书问答、合同分析等。4.1 RAG为什么是刚需大模型的训练数据有截止时间也不可能把所有企业文档都学进去。如果要让模型“知道”一份PDF里的内容有两个方案把PDF全文塞到Prompt里让模型基于内容回答。先建立索引检索出相关片段再把片段塞给模型。方案一在文档短、单次问答时能用但文档一旦变长、问题变多就撑不住了。因为Token长度有限成本也会暴涨。方案二就是RAG先把文档切块并向量化存到向量数据库用户提问时先做相似度检索找出和问题最相关的若干文本片段再把这些片段和Prompt一起交给LLM回答。所以RAG想解决问题的本质是外部知识动态接入、控制Token成本、让回答有依据来源。4.2 一个最简RAG流程能跑通到什么程度一个最简RAG系统可以分四步走读取文档。切分文档。向量化存储。检索后生成回答。以处理一个公司内部FAQ为例from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.embeddings import OpenAIEmbeddings from langchain_community.vectorstores import Chroma loader TextLoader(faq.txt) docs loader.load() splitter RecursiveCharacterTextSplitter(chunk_size500, chunk_overlap50) chunks splitter.split_documents(docs) embeddings OpenAIEmbeddings() vectorstore Chroma.from_documents(chunks, embeddings) retriever vectorstore.as_retriever(search_kwargs{k: 4})之后把检索结果和用户问题组装成Prompt。跑通后你会看到模型回答质量直接取决于检索到的片段准不准。这个现象非常重要它告诉你RAG项目的重点不在模型而在数据处理和检索质量。4.3 RAG知识库效果差先看这些指标网上经常有人问RAG测评怎么做RAG知识库指标有哪些如果回答不准确很多人第一反应是换模型其实大多数时候问题出在检索链路。建议用四个指标来评估RAG系统指标关注点排查方向命中率问题能否检索到正确片段看召回结果里有没有包含正确答案的片段引用准确性回答能否正确引用对应来源检查Prompt是否要求附原文或文件位置答案一致性二次询问时答案是否稳定调整参数加入输出校验响应速度检索生成耗时是否可接受检查向量索引大小和模型生成时间如果命中率低优先检查chunk切分大小和重叠率以及检索方式是不是只用稠密向量检索。这也是为什么很多人搜索里会看到“dense vector search”这种词——稠密向量检索是主流但遇到关键词型问题时不一定是最好用的。实际项目里可以考虑混合检索既做稠密向量检索又做关键词检索然后融合排序。也就是你看到的“ontology RAG”和“agentic RAG”这类进阶概念的前置基础先不要被名词吓到。4.4 从普通RAG到Agentic RAG普通RAG是单向流程问题进来固定逻辑检索固定片段拼接模型回答。Agentic RAG则引入了Agent让模型自己决定要不要检索、先检索哪类文档、如果检索结果不好是否重新检索或者换一种查询方式。零基础阶段不要直接上Agentic RAG但要知道它的存在。普通RAG适合问题类型固定、文档结构简单的场景Agentic RAG适合复杂查询、多轮交互、需要动态修正检索策略的场景。学习顺序必须是“先能把普通RAG做稳再考虑用Agent做检索决策”。5. AgentLLM从“问答”走向“行动”的关键Agent这个概念在LLM爆火之前就有但LLM给Agent带来的改变是决策能力不再靠硬编码规则而是让模型根据自然语言指令自己规划步骤。你可以把Agent理解为一个有嘴、有手、有点脑子的程序。嘴是LLM手是工具脑子是推理和任务分解能力。5.1 Agent到底解决什么实际问题纯问答系统只能“说”Agent能“做”。举例来说普通问答用户问“今天天气怎么样”模型回答“我无法获取实时天气”。Agent模型判断需要查天气调用天气API把API返回结果整理成回答。再比如普通问答用户说“帮我查一下服务器日志里最近的报错”模型只能说方法。Agent模型理解需求后调用日志查询命令把文件路径、时间范围和关键词提取出来执行查询并总结结果。所以Agent适合的任务通常是多步骤、需要外部工具、需要模型自主判断的流程。它让LLM不再只是一个文本生成器而是变成了一个任务调度器。5.2 新手做Agent项目前先补足哪些基础不要一上来就学复杂框架。想理解Agent先学会两件事给一个函数写清楚“功能描述”和“输入输出格式”。让模型学会调用它。LangChain里的Agent基本结构是模型 工具列表 提示词 循环执行。from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain_core.tools import tool tool def get_time(): 返回当前时间。 return 2026-01-01 10:00 tools [get_time] # 再配置 llm 和 prompt即可构建 Agent这里最容易踩的坑是工具描述写得不够清楚。模型做工具选择的依据就是工具描述里的文字。如果描述模棱两可模型就会选错工具或拒绝调用。所以Agent开发里工具描述要像写API文档一样精确。5.3 主流Agent框架怎么选LangChain的Agent生态比较成熟跟前面的学习路线一致。LangGraph则更适合复杂状态流。很多搜索关键词里出现“agent框架”“agent 开发”“agent项目”可见大家对这个方向兴趣很高。选型时可以用一张表判断框架适合场景学习成本LangChain Agent快速做单Agent、工具调用Demo低LangGraph多步骤状态流、条件分支、人机协同中高其他平台型Agent产品不想写代码先验证业务可行性更低零基础建议从LangChain Agent开始能跑通一个内置工具的流程后再尝试让它调用自己写的Python函数。最后再考虑LangGraph因为LangGraph的难点不在API而在“如何设计状态流转”。5.4 Agent常见报错和调试思路搜索热词里有一条特别真实agent execution terminated due to error。新手跑Agent时经常遇到这种报错原因往往不是模型不行而是工具执行过程中抛了异常模型不知道该怎么恢复。排查顺序建议这样先看是哪个工具执行出错。手动调用该工具确认工具本身能不能正常返回。查看工具返回的错误Message模型是否能看懂这个信息。检查是否要给工具增加超时和错误兜底。最后才去检查提示词和模型选择。Agent的调试跟普通程序不一样你不能只盯代码还要看“模型理解了什么”。所以日志里一定要把每次工具选择的输入、输出记录下来。没有日志Agent项目很难做稳定。6. 大模型微调学之前先问自己真的需要吗大模型微调这个话题在零基础教程里很容易被过度渲染。看到“微调”两个字很多人会想到训练一个“自己的ChatGPT”听上去很酷。但真实项目里微调不是优先级最高的解决方案。6.1 什么时候才需要微调大模型能力不足可以分成几种情况模型不知道某些知识 → 用RAG而不是微调。模型不擅长某个任务的指令格式 → 可以用更好的Prompt解决。模型回答风格不够像某个岗位需要统一话说方式 → 微调可选。模型在特定专业领域表现不佳且RAG无法兜底 → 微调更合适。希望降低单次调用成本把一个复杂任务精简成固定行为 → 微调有优势。这里有个关键认知微调不是让模型“记住更多知识”而是让模型“学会某种输入输出模式”。如果你需要的是事实性知识微调不但成本高还容易让模型学错或记住不相关的内容。RAG才是更可靠的选择。6.2 GPU微调大模型零基础需要知道什么从热词“GPU微调大模型”可以看出很多人关心硬件门槛。这里给出一个比较现实的判断全参数微调大模型普通消费级显卡基本只能处理极小的模型7B或更大的模型在消费级单卡上全参数微调非常困难通常要几十GB甚至更高显存。零基础更常见的方案是LoRA或QLoRA。核心思路是冻结原来的模型参数只训练一小部分新增参数。显存占用大幅降低效果在很多任务上也足够。不要在一开始就纠结训练精度和性能指标。先用公开数据集跑通一条微调脚本观察Loss下降、回答风格变化再考虑换更大模型。6.3 微调之外的可选方案如果链路已经跑通只是效果差建议按这个顺序排查Prompt是不是写清楚了。Few-shot示例够不够。RAG检索片段是不是准确。后处理逻辑能不能兜底。最后才考虑微调新模型。把微调放在“最后一步”不是因为它不重要而是因为它成本最高、周期最长。真正做项目的同学应该都认同能用RAG、Prompt、后处理解决的事就不要急着微调。7. 零基础项目实战路线从能跑通到能上线看完前面几条主线接下来要解决的是“我到底先做什么项目”。很多人的问题是知识点都看了但轮到写项目时不知道怎么拼起来。这里给一条适合零基础的实战路线。7.1 项目选型顺序建议不要一开始就做“万能知识库”或“全自动Agent”。从最小闭环开始。第一个项目做一个LangChain单链问答工具。输入一段文字模型按照你指定的JSON格式输出抽取结果。用途快速练习Prompt、链式调用、输出解析。第二个项目做一个文档问答RAG系统。支持输入TXT或Markdown文件检索后回答。用途练习文档加载、切分、向量化、检索和生成。第三个项目做一个能查天气、查时间的Agent。用途理解工具调用和Agent循环逻辑。第四个项目做一个多文档知识库支持多个PDF/TXT并评估回答命中率。用途理解真实RAG项目里最难的“数据清洗和切片”问题。这四个项目按顺序做完你已经不是零基础了LangChain、RAG、Agent三个方向都有了实战认知。7.2 常见问题排查思路很多教程把报错原因写得很简单实际上LLM开发的排查链路更长。我自己碰到问题时的顺序是排查层具体检查现象层是报错、卡住、输出为空还是输出不符合格式输入层文本是否完整、编码是否是UTF-8、PDF是否是扫描版环境层依赖版本、Python版本、内存、磁盘、API额度参数层chunk大小、检索k值、温度、超时时间、最大Token数工具层模型是否支持该功能、框架版本是否兼容、向量库是否损坏很多看起来像“模型不会”的问题最后发现是文件路径错了或API Key失效了。排查时要先怀疑环境再怀疑代码最后再怀疑模型能力。7.3 长期学习建议概念归概念项目归项目LLM领域变化太快今天的主流框架明天可能升级新版。所以学习时要区分开底层概念比如什么是LLM、什么是RAG、什么是Agent这些长期有效。框架API比如某个类名、某个参数写法这些看文档比背代码有效。热词里出现的“llm wiki”“llm studio”“obsidian”这类工具本质上是帮助你管理和阅读文档的辅助材料。你可以用Markdown格式做学习笔记也可以把笔记喂给模型做问答但不要被工具本身带偏。如果你想长期在这个方向积累我的看法是至少保持每一个月做一个完整的小项目。做完之后把项目过程中遇到的报错、参数调整、效果变化整理出来。这个动作比看十篇教程都有用。8. 写在最后LLM学习真正该盯住的几个原点聊到这里可以回到最初的问题零基础学LLM最关键的能力是什么不是会背LangChain的类名不是会用某个平台的API而是能判断“一个业务需求应该用哪条技术路线来实现”。是RAG还是微调用Agent还是用普通Prompt先做Demo还是直接设计生产链路这些问题才是每天都要面对的。我用一个简单的例子来说明如果用户问的是“公司内部报销制度”利用RAG从知识库检索即可。如果用户说“根据报销制度帮我审核这份发票是否合规如果不符合就调用邮件接口通知本人”这就不是纯RAG能解决的需要Agent和工具能力。如果同一批任务的预期输出风格必须固定且量大、调用成本敏感才考虑微调。这就是LLM应用开发的日常不是钻研模型内部有多复杂而是把优秀模型当作模块用工程手段组合出稳定业务。如果这篇内容对你有帮助不用记笔记记到吐。我更建议你照着前面说的四个小项目顺序今晚就动手跑第一个装好环境用LangChain写一个最简问答链。遇到报错不要慌读完它按排查顺序一步步来。等你能连续跑通三个小项目再看回头路你会发现自己已经超过了大多数在教程收藏夹里吃灰的初学者。最后留一个我自己的习惯每次打开一个新项目我会先把“输入是什么、输出是什么、失败时怎么办”写在一张纸上。这个习惯看起来土但在LLM工程里特别管用。因为LLM应用的复杂度不在单点技术而在流程连接处。把连接处看住项目基本就稳了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

框架结构抗震课程设计全流程详解:从参数取值到配筋要点 2026/9/6 4:47:01

框架结构抗震课程设计全流程详解:从参数取值到配筋要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
用大数据经验做 RAG,上线第一天权限和日志把我打回原形 2026/9/6 4:47:01

用大数据经验做 RAG,上线第一天权限和日志把我打回原形

聊《我用大数据经验做了次 AI 项目,最先失效的是旧方法》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要接了一个医疗知识库问答的 Agent 项目,Demo 跑得很顺,业务方看着满意…

阅读更多 →
dyad:Shell下的轻量级并发任务编排工具,让批处理与流水线更简单 2026/9/6 4:47:01

dyad:Shell下的轻量级并发任务编排工具,让批处理与流水线更简单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
大厂 Java 面试实录:谢飞机大战严肃面试官 2026/9/6 4:47:01

大厂 Java 面试实录:谢飞机大战严肃面试官

大厂 Java 面试实录:谢飞机大战严肃面试官场景:互联网大厂终面。会议室里空气很冷,面试官表情更冷。谢飞机抱着简历坐下,努力把自己伪装成“懂点 Java 的人”。第一轮:Java 核心与集合 面试官:先来个简单的…

阅读更多 →
实时进度查询系统架构演进:从直接查询到预聚合的实战方案 2026/9/6 4:47:01

实时进度查询系统架构演进:从直接查询到预聚合的实战方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
GPT-5.6 Sol传闻背后:开发者如何理性应对大模型与Agent开发范式转变 2026/9/6 4:44:00

GPT-5.6 Sol传闻背后:开发者如何理性应对大模型与Agent开发范式转变

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞