1. 项目概述一份关于Claude Code的深度实践指南如果你是一名开发者最近肯定没少听说“AI编程助手”这个词。从GitHub Copilot到Cursor再到各种基于大模型的IDE插件工具层出不穷。但说实话很多工具要么是黑盒你搞不清它到底是怎么工作的要么就是配置复杂文档零散想从“能用”到“用好”得踩一堆坑。我花了半年多时间几乎每天都在和Claude Code打交道——从写简单的脚本到重构整个微服务架构从个人项目到团队协作部署。在这个过程中我逐渐意识到仅仅知道“怎么配置”是远远不够的。你需要理解它背后的运作逻辑、不同功能模块之间的权衡以及如何安全、高效地将它融入你的开发生命周期。市面上不缺“速成教程”和“模板合集”但缺一份能让你真正建立心智模型、知其然更知其所以然的系统性指南。这就是我整理这份《Claude Code终极指南》的初衷。它不是一个简单的命令列表或配置模板的堆砌而是一套完整的、从原理到实践的知识体系。核心目标很明确让你从“复制粘贴配置”的跟随者转变为能够自主设计、优化并安全部署AI辅助工作流的决策者。无论你是刚接触Claude Code的新手还是已经用它写过不少代码的老手这份指南都能帮你填补知识盲区建立起一套稳固的、可迭代的AI协作方法论。2. 核心设计理念为什么这份指南与众不同市面上关于Claude Code的资料不少但大多停留在“How-to”层面。这份指南的独特之处在于它构建了一个由深度理解、视觉化学习、安全优先和知识验证四大支柱支撑的立体学习框架。2.1 深度理解优先于配置复制很多教程一上来就让你改~/.claude.json加一堆MCP服务器但很少解释“为什么”。这份指南反其道而行之它首先帮你建立Claude Code的心智模型。Claude Code本质上是一个智能体Agent执行环境。它不是一个简单的代码补全工具而是一个能够理解你的意图、调用工具如终端、文件系统、MCP服务器、并在一个受控的“沙箱”中执行复杂任务的系统。它的核心是“Master Loop”主循环接收你的指令 - 分析上下文文件、对话历史、记忆- 规划步骤 - 调用工具执行 - 整合结果 - 呈现给你。理解了这个循环你就能明白为什么有时Claude Code会“卡住”可能在规划为什么上下文管理如此重要循环的输入以及如何通过配置如Agents、Hooks来影响这个循环的行为。指南中花了大量篇幅拆解这个架构包括上下文是如何分层管理的工作区文件、对话历史、CLAUDE.md记忆文件、系统提示词工具是如何被编排调用的以及不同配置项如max_tokens,temperature是如何在底层影响模型推理的。这让你在遇到问题时能像调试自己的程序一样有根据地排查和优化而不是盲目地尝试各种“玄学”配置。2.2 视觉化学习41张架构与流程图对于复杂的系统概念一张好的图胜过千言万语。这份指南包含了41张精心绘制的Mermaid图表覆盖了从基础概念到高级安全威胁模型的方方面面。例如在理解“多智能体协作”时文字描述“一个主智能体协调多个子智能体”可能很抽象。但指南中的图表清晰地展示了三种主流拓扑结构星型拓扑一个主控智能体分发任务、链式拓扑智能体依次处理流水线、以及混合拓扑。每种拓扑旁边都标注了适用场景如代码审查适合星型CI/CD流水线适合链式和潜在的瓶颈点。这种视觉化呈现能让你在几分钟内建立起对复杂模式的结构性认知这是纯文本阅读难以达到的效果。另一个例子是安全威胁模型图。它形象地描绘了一次典型的“MCP供应链攻击”链条从攻击者发布一个看似有用的MCP服务器开始到该服务器如何在被信任后利用权限窃取敏感信息或植入后门。这张图让抽象的安全风险变得具体可感能极大地提升你在引入第三方扩展时的警惕性。2.3 安全第一的实践哲学AI编码助手在带来效率提升的同时也引入了新的攻击面。这份指南可能是目前唯一系统化梳理Claude Code生态安全威胁的资源。它不仅仅告诉你“要小心”而是提供了一个可操作的安全框架。威胁情报数据库指南维护了一个包含24个CVE通用漏洞披露映射漏洞和655个恶意技能Skill模式的数据信。例如它详细分析了“Unicode注入攻击”——攻击者利用视觉上不可见的Unicode字符在CLAUDE.md或系统提示词中隐藏恶意指令。指南不仅给出了攻击样例还提供了正则表达式检测模式和预防性代码审查的Hook脚本示例。MCP服务器五步审计清单对于任何你想引入的MCP服务器指南建议执行一个标准化的检查流程1) 审查源码仓库的活跃度和维护者2) 检查依赖项是否有已知漏洞3) 在隔离环境如Docker容器中运行并监控其网络和文件操作4) 使用strace或类似工具分析其系统调用5) 在团队的“安全沙箱”项目中试用一周。这份清单将模糊的“安全担忧”转化为了具体的、可执行的动作。生产环境加固工作流对于团队部署指南建议建立“安全门Security Gate”机制。例如可以配置一个Git pre-commit hook自动扫描本次提交中所有由Claude Code生成或修改的代码使用静态分析工具如Semgrep检查是否存在已知的不安全模式如eval()调用、硬编码密钥等。这确保了AI生成的代码在进入代码库前必须通过与传统代码相同甚至更严格的安全检查。2.4 通过测验验证学习效果知道和掌握是两回事。指南内置了一个包含271道题目的测验系统覆盖9个知识类别设置与配置、智能体、MCP服务器、信任与验证、高级模式等。这不仅仅是简单的选择题很多题目是基于真实场景的案例分析。例如有一道题描述了一个场景“你的Claude Code会话在处理一个大型重构时响应速度变慢且开始出现不符合逻辑的代码建议。你的上下文窗口显示已使用85%。以下哪项是最优先的解决措施” 选项包括A) 重启Claude Code客户端B) 使用/compact命令压缩上下文C) 切换到更强大的模型如Claude 3.5 SonnetD) 清除所有上下文重新开始。正确答案是B因为上下文占用超过70%就会导致精度下降/compact可以无损地压缩历史对话是首选方案。这道题同时考察了你对“上下文管理”这个核心概念的理解以及在不同压力下的决策能力。测验还提供了四个技能画像初级开发者、高级开发者、高级用户、产品经理你可以针对性地测试自己在特定角色所需知识上的掌握程度。每次答题后系统会给出详细解析并链接到指南中的相关章节实现“测-学-补”的闭环。3. 核心模块深度解析与实操要点理解了指南的设计理念我们深入看看它的几个核心内容模块以及在实际操作中需要特别注意的地方。3.1 智能体Agents超越简单角色扮演很多用户把Claude Code的Agents功能理解为“给AI起个名字和角色”比如“你是一个资深Python后端专家”。这没错但太浅层了。指南将Agents提升到了工作流设计工具的高度。一个精心设计的Agent应该是一个封装了特定目标、知识边界和操作权限的自治单元。例如你可以创建一个“数据库重构专家”Agent它的系统提示词不仅定义了角色还应该包括目标“安全地将MySQL数据库表从MyISAM引擎迁移到InnoDB引擎并优化相关索引。”知识边界“你熟悉MySQL 8.0的语法和InnoDB特性。对于不熟悉的存储引擎或版本差异应主动询问。”操作权限“你只能运行以--dry-run或--check开头的ALTER TABLE命令。任何实际执行数据变更的命令必须生成脚本由我审核后手动执行。”输出规范“每次分析后必须提供一份包含风险评估如锁表时间预估、回滚方案和验证步骤的报告。”这样设计出来的Agent就不再是一个泛泛的“助手”而是一个可以放心委派特定复杂任务的“专家”。指南提供了9个这样的生产级Agent模板每个都附带了详细的配置注释解释每一条指令的设计意图和可能产生的副作用。实操心得创建新Agent时我习惯先在一个独立的、临时的项目目录中测试。用/agent test_agent命令激活它然后给它一系列边界测试任务观察其行为是否符合预期。特别要测试它在知识盲区比如问一个它不熟悉的领域问题和权限边界比如尝试执行被禁止的操作时的反应。这个过程就像给一个新同事做上岗培训。3.2 技能Skills与命令Commands厘清使用边界Skills和Commands是Claude Code中两个容易混淆的概念。指南通过一个清晰的决策框架来区分它们何时使用Skills当你需要为Claude Code增加全新的、复杂的能力时。Skills通过MCPModel Context Protocol服务器实现可以连接外部API、数据库或专业工具如Figma、Jira。例如一个“容器日志分析”Skill可以调用Kubernetes API获取Pod日志并进行智能聚合与异常检测。Skills扩展了Claude Code的“手”和“眼”。何时使用Commands当你需要优化或自动化现有交互流程时。Commands是内置的快捷操作比如/compact压缩上下文、/test运行测试套件。你也可以创建自定义Commands来封装常用操作序列比如一个/deploy-staging命令自动执行构建、运行测试、部署到预发环境这一系列操作。关键权衡Skills功能强大但引入风险需要信任第三方代码。Commands更安全通常只是Shell脚本的封装但能力受限。指南的建议是优先用Commands解决问题只有当现有工具链无法满足且收益远大于风险时才考虑引入新的Skill。对于必要的Skill必须严格执行前述的“五步审计清单”。3.3 钩子Hooks事件驱动的自动化Hooks是Claude Code中最被低估的自动化利器。它们允许你在特定事件如会话开始、文件保存、命令执行前/后触发自定义脚本。指南提供了31个Hook示例覆盖了从代码质量保障到安全防护的方方面面。一个强大的Hook应用是**“智能上下文预热”**。假设你每天早上的第一件事是处理一个大型Monorepo中的某个服务。你可以设置一个session_startHook当Claude Code检测到你进入了该服务的目录时自动执行以下操作读取该服务的README.md和CLAUDE.md将其作为背景知识加载。运行git log --oneline -5获取最近五次提交的摘要了解项目近期动态。检查package.json或go.mod识别主要依赖。将所有信息整理成一份简洁的摘要作为会话的初始上下文。这样当你开始提问时Claude Code已经对这个代码库的现状有了基本了解无需你再手动提供大量背景信息极大地提升了开箱即用的体验。另一个关键Hook是pre_command_execution。它可以作为最后一道安全防线。例如你可以配置一个Hook在Claude Code即将执行任何以rm -rf或chmod 777开头的命令时强制中断执行并弹出警告确认。这防止了因提示词误解或模型“幻觉”而导致的灾难性操作。注意事项Hook脚本的执行权限和错误处理至关重要。务必确保Hook脚本本身是安全的没有命令注入漏洞并且要有完善的错误处理和日志记录。一个崩溃的Hook可能会导致整个Claude Code会话变得不稳定。指南建议为所有Hook脚本配备try-catch块并将错误信息重定向到独立的日志文件中便于排查。4. 从零到一构建你的第一个生产级工作流理论说得再多不如动手实践。我们以一个常见的场景——为现有Node.js API服务添加用户认证功能——来演示如何运用指南中的方法论构建一个安全、高效的AI辅助工作流。4.1 阶段一基础设置与上下文奠基首先绝不一开始就引入复杂配置。遵循“Start Simple”黄金法则。初始化项目记忆在项目根目录创建CLAUDE.md文件。这不仅是给AI看的“项目说明书”更是你梳理项目思路的过程。内容至少包括# 项目用户服务API **技术栈**: Node.js (Express), PostgreSQL, JWT for auth. **当前状态**: 基础CRUD API已完成缺少用户注册、登录、鉴权中间件。 **代码风格**: ES6使用async/await错误处理使用中心化中间件。 **认证目标**: 实现基于JWT的stateless认证支持角色user/admin。 **不涉及**: OAuth第三方登录、密码重置邮件本期不做。 **重要文件**: - src/app.js: 主应用入口 - src/routes/users.js: 现有用户CRUD路由 - src/models/User.js: Sequelize用户模型已有 - .env.example: 环境变量示例这个文件为Claude Code提供了精准的上下文边界能有效减少它提出无关建议或误解需求的情况。配置核心命令在~/.claude.json中不要急于添加大量MCP服务器。先定义几个对本项目最有用的自定义命令。例如添加一个运行特定测试集的命令{ commands: { test-auth: { description: 运行认证相关的单元和集成测试, command: npm test -- --grep \auth\ } } }现在在Claude Code会话中你可以直接输入/test-auth来快速运行所有包含“auth”关键词的测试而不需要每次都输入完整的npm命令。4.2 阶段二应用TDD测试驱动开发工作流AI擅长在明确约束下生成代码。TDD“红-绿-重构”的循环为此提供了完美框架。编写失败测试Red首先让Claude Code帮你为authMiddleware编写测试。提示词要具体“在__tests__/middleware/目录下创建一个authMiddleware.test.js文件。我们需要测试一个JWT鉴权中间件。请先编写测试用例覆盖以下场景1) 请求头中无token应返回4012) token格式无效应返回4033) token过期应返回4034) token有效但用户不存在于数据库应返回4035) token有效且用户存在应在req对象上添加user属性并调用next()。使用Jest和supertest。先不用实现中间件本身。”Claude Code会生成结构清晰的测试文件。这时运行npm test所有新测试必然失败红。这明确了我们的开发目标。实现功能通过测试Green接着让Claude Code实现中间件“根据刚才编写的测试在src/middleware/目录下创建authMiddleware.js。使用jsonwebtoken库验证JWT从Authorization: Bearer token头中提取token。需要连接数据库验证用户是否存在。参考项目现有的src/models/User.js模型和.env.example中的JWT_SECRET变量。”Claude Code会生成中间件代码。运行测试如果全部通过绿则进入下一步。如果失败将错误信息反馈给它让它迭代修正。重构与优化Refactor测试通过后你可以要求Claude Code审查代码并提出优化建议“审查刚生成的authMiddleware.js。检查是否有安全漏洞如密钥硬编码、性能瓶颈如每次请求都查用户、代码重复或可读性问题。请给出具体的重构建议。”根据它的建议例如“将用户查询结果缓存5分钟”、“将密钥错误处理提取为独立函数”指导它进行重构。由于有测试套件保护你可以放心地进行重构确保功能不被破坏。4.3 阶段三引入智能体处理复杂子任务当主要功能模块完成后可能有一些相对独立但复杂的子任务比如配置Redis用于token黑名单。这时可以创建一个专用的Agent。设计Agent在~/.claude.json的agents部分新增{ agents: { redis-setup-expert: { description: 专注于Redis集成、配置优化和故障排查的专家, system: 你是一个Redis专家。当前项目是Node.js API需要集成Redis以实现JWT令牌黑名单和缓存。你的知识边界熟悉ioredis客户端、Redis Docker部署、内存优化。你的安全边界绝不建议使用FLUSHALL等危险命令所有涉及数据清除的操作必须提供确认提示。你的输出必须包含1) 分步操作指南2) 相关配置代码片段3) 潜在风险与缓解措施。如果遇到不确定的版本兼容性问题请明确指出来。 } } }使用Agent在会话中通过/agent redis-setup-expert激活该Agent。然后提问“我们需要在Docker Compose环境中添加一个Redis服务用于存储失效的JWT令牌。请1) 提供docker-compose.yml中Redis服务的配置片段2) 提供连接Redis并实现addToBlacklist(token, expiry)和isBlacklisted(token)函数的Node.js代码示例3) 说明如何设置合理的内存淘汰策略maxmemory-policy。”这个Agent会基于其专门的系统提示词给出更聚焦、更专业的回答避免了在通用会话中需要反复强调背景和约束的麻烦。4.4 阶段四通过Hook实现质量门禁功能开发完成准备提交代码前通过Hook自动执行代码质量检查。创建pre-commit Hook在项目根目录创建.claude/hooks/pre_commit.sh确保可执行chmod x#!/bin/bash # .claude/hooks/pre_commit.sh echo [Claude Code] Running pre-commit checks... # 1. 运行ESLint检查代码风格 if npx eslint . --ext .js,.jsx; then echo ✓ ESLint passed. else echo ✗ ESLint failed. Commit aborted. exit 1 fi # 2. 运行所有测试 if npm test; then echo ✓ All tests passed. else echo ✗ Tests failed. Commit aborted. exit 1 fi # 3. 安全扫描检查是否有硬编码的密钥被意外提交 if grep -r JWT_SECRET\|password\|privateKey --include*.js --include*.json src/ | grep -v .env.example; then echo ⚠️ Warning: Possible hard-coded secret found. Please review. # 这里不直接退出仅警告但生产环境可改为exit 1 fi echo ✅ Pre-commit checks completed successfully.配置Claude Code启用Hook在项目的CLAUDE.md末尾或全局配置中关联这个Hook。现在每次你通过Claude Code执行git commit相关的操作时这个脚本都会自动运行。如果ESLint或测试失败提交会被阻止从而保证进入版本库的代码质量。通过这四个阶段的渐进式实践你不仅完成了功能开发更建立了一个可重复、可验证、且具备安全防护的AI辅助开发流程。这个流程的核心在于人始终掌控决策权AI作为高效的执行者和协作者在清晰的规则和边界内发挥作用。5. 高级模式与生产环境考量当你熟练掌握了基础工作流后可以探索指南中提供的一些高级模式为团队协作和生产环境部署做准备。5.1 多智能体协调模式对于大型、复杂的任务如重构一个包含数十个文件的模块可以运用“多智能体”模式。这不是指同时运行多个Claude Code实例那会消耗大量成本而是指在思维上将一个任务分解由同一个AI实例扮演不同角色、分阶段处理。“三明治”审查模式架构师Agent首先让Claude Code以“系统架构师”的角色分析待重构模块的现状输出一份重构方案包括模块拆分图、接口设计、数据流变化和风险评估。工程师Agent然后让它切换为“实现工程师”角色根据上述方案逐个文件进行代码重构。每完成一个文件生成一份简短的变更说明。审查员Agent最后让它以“资深审查员”的角色审查所有被修改的文件重点检查接口一致性、边界条件处理、以及是否引入了新的技术债。你可以通过手动切换系统提示词或利用Hook在完成特定阶段后自动触发提示词变更来模拟这一流程。这比让AI一次性完成所有工作通常能产生更系统、错误更少的结果。5.2 成本优化与模型选择策略Claude Code默认使用Anthropic的API按Token计费。对于重度用户成本可能快速上升。指南详细介绍了cc-copilot-bridge这个工具它允许你将Claude Code的请求路由到GitHub Copilot从而享受Copilot Pro的固定月费约10美元这对于高频使用场景可以节省99%以上的成本。模型选择决策树日常编码与调试优先使用Claude 3 Haiku。它速度最快成本最低对于代码补全、语法修正、简单重构等任务完全够用。复杂逻辑设计与系统分析切换到Claude 3.5 Sonnet。它在逻辑推理和长上下文理解上更强适合设计新功能、审查复杂代码、编写技术文档。研究性、探索性任务在必要时使用Claude 3.5 Sonnet或Opus。例如当你需要AI阅读一篇新的技术论文并解释如何应用到当前项目时。关键在于建立习惯在开始一项任务前花一秒思考“这个任务需要多强的推理能力”从而选择最具性价比的模型。你可以通过配置不同的Agent来绑定不同的默认模型实现快速切换。5.3 团队部署与知识管理将Claude Code推广到团队不仅仅是分发配置文件那么简单。指南为技术负责人提供了完整的部署路线图。标准化配置模板创建一个团队共享的.claude-template.json包含公司内网MCP服务器地址、统一的代码风格约定、必需的安全Hook如禁止访问特定目录。新成员入职时一键即可获得符合规范的配置。建立团队知识库维护一个团队级的CLAUDE-TEAM.md文件存放在内部Wiki或共享目录。内容应包括团队常用的技术栈规范、内部API的调用示例、常见业务逻辑的说明、以及过去使用AI辅助开发时总结的最佳实践和踩坑记录。这份文档能极大降低AI误解业务需求的风险。设立“AI代码审查”环节在团队的Code Review流程中增加一条规则所有由AI生成或辅助生成的核心逻辑代码必须由另一位人类开发者进行重点审查。审查重点不是语法而是业务逻辑的正确性、安全性和可维护性。这利用了“多人智慧”来抵消AI可能产生的隐蔽错误。定期举办“AI工作流分享会”鼓励团队成员分享自己用Claude Code解决复杂问题的Prompt技巧、高效的Agent配置或自研的实用Hook。这能加速团队整体的AI应用水平提升并形成积极的学习文化。6. 常见问题与实战排坑记录即使有了完善的指南在实际操作中依然会遇到各种问题。以下是我和社区成员在实践中总结的一些高频问题及其解决方案。6.1 问题Claude Code响应缓慢或“卡住”可能原因及排查上下文窗口过载这是最常见的原因。检查会话窗口右下角的上下文使用率。如果超过70%模型处理速度会明显下降超过90%可能导致响应异常。解决立即使用/compact命令。它会智能地压缩之前的对话历史保留核心信息从而释放上下文空间。如果问题依旧使用/clear清除更早的历史。网络或API延迟可能是Anthropic API端点暂时性延迟或你的网络不稳定。解决运行claude --ping测试到API服务器的连通性和延迟。如果延迟过高可以考虑使用cc-copilot-bridge切换到GitHub Copilot的通道或者稍后再试。复杂任务处于“规划”阶段对于需要多步骤推理的任务Claude Code可能在内部进行长时间规划此时界面看似无响应。解决观察终端是否有“Thinking...”或“Planning steps...”之类的输出。耐心等待30-60秒。如果长时间无反应可以尝试用/stop中断然后将任务拆分成更小的子任务重新提问。6.2 问题生成的代码有逻辑错误或不符合需求可能原因及排查上下文信息不足或噪音太多AI是根据你提供的上下文生成代码的。如果CLAUDE.md过于简略或者会话历史中包含了大量无关的讨论AI就容易“跑偏”。解决首先优化你的CLAUDE.md确保项目目标、技术栈、关键文件路径、代码风格等核心信息清晰无误。其次在开启一个新任务前考虑使用/new开启一个干净的会话避免历史干扰。提示词不够精确模糊的指令得到模糊的结果。解决使用“结构化提示词”。例如不要只说“写一个登录函数”而要说“在src/auth.js中创建一个名为loginUser的异步函数。它接收email和password两个参数。函数需要1) 验证邮箱格式2) 在User模型中查找用户3) 使用bcrypt比对密码哈希4) 如果成功用jsonwebtoken生成一个24小时过期的JWT返回。请包含必要的错误处理并遵循项目现有的try-catch模式。”未遵循TDD流程直接让AI生成一大段功能代码错误率自然高。解决始终坚持测试驱动。即使再小的功能也先让AI写测试。失败的测试定义了明确的需求边界能极大地约束AI的输出提高代码的准确率。6.3 问题引入MCP服务器后出现意外行为可能原因及排查服务器存在Bug或恶意代码这是最需要警惕的情况。解决立即禁用可疑的MCP服务器。检查该服务器的日志通常位于~/.claude/logs/或服务器自身的输出。回顾你引入该服务器时是否跳过了审计步骤。使用指南中提供的威胁检测模式如检查是否有可疑的网络连接、文件读写进行复查。权限冲突某个MCP服务器尝试执行的操作被系统或其他Hook阻止。解决检查Claude Code的权限设置~/.claude.json中的permissions部分。确保你授予了该服务器执行其功能所必需的权限如read_file,write_file,execute但又不至于过度授权。依赖问题或版本不兼容MCP服务器可能依赖特定的系统库或软件版本。解决按照服务器README的说明检查依赖是否满足。尝试在隔离的Docker容器中运行该服务器以排除环境问题。6.4 问题团队中不同成员体验差异巨大可能原因及排查配置不统一每个人的CLAUDE.md、自定义命令、Hook差异很大。解决推行团队配置标准化。建立共享的配置模板和CLAUDE.md基线。鼓励分享高效的Prompt和Agent配置但核心的安全和质量Hook必须统一。使用方法和习惯不同有人把它当高级搜索引擎有人用它做深度结对编程。解决组织内部培训。分享指南中的“黄金法则”和“学习路径”。让经验丰富的成员展示他们的高效工作流例如如何用AI快速阅读技术债务、如何合作进行重构。统一团队对AI助手能力的期望和定位。项目上下文管理混乱有的项目有详细CLAUDE.md有的则没有。解决将“维护项目CLAUDE.md”纳入团队开发规范作为项目初始化或重大架构变更后的必需步骤。可以创建一个CLAUDE.md模板确保所有关键信息都被涵盖。最后我想分享一个最深切的体会Claude Code这类工具其价值上限完全取决于使用者的思维框架和专业素养。它是一面镜子也是一个放大器。一个清晰的头脑能借助它完成卓越的工作而混乱的指令只会得到更混乱的结果。这份指南提供的所有模板、策略和警告最终都是为了帮助你构建那个清晰、严谨、安全的思维框架。真正的“终极指南”其实是你自己在实践中不断积累、反思和迭代的那套方法论。现在就从创建你的第一个项目CLAUDE.md开始吧。