为什么文档至关重要
文档提供最新、准确的上下文。没有文档,模型只能依赖过时或不完整的训练数据。文档能帮助模型理解以下关键信息:
- 当前 API 及其参数
- 最佳实践方案
- 组织规范约定
- 领域专业术语
以及更多重要内容。继续阅读了解如何直接在 Cursor 中使用文档功能,无需切换上下文环境。
模型的知识截止日期
大型语言模型的训练数据存在时间上限,这个时间点被称为"知识截止日期"。这意味着:
- 可能无法反映最新的库更新
- 新框架或工具可能未被识别
- 截止日期后的 API 变更无法获知
- 训练后的最佳实践可能已经演 进
例如,若某模型的知识截止日期是 2024 年初,即使对于流行框架,它也无法知晓 2024 年末发布的新功能。
如何选择合适工具?
通过以下决策树快速确定最适合您文档需求的解决方案:
思维模式
工具 | 思维模式 |
---|---|
@Docs | 就像浏览和阅读官方文档 |
@Web | 像在互联网上搜索解决方案 |
MCP | 像访问你的内部文档 |
公共文档
外部文档涵盖公开可用的信息,模型可能对此只有有限或过时的了解。Cursor 提供了两种主要方式来访问这些信息。
使用 @Docs
@Docs
将 Cursor 连接到流行工具和框架的官方文档。当你需要当前、权威的信息时使用它:
- API 参考:函数签名、参数、返回类型
- 入门指南:设置、配置、基本用法
- 最佳实践:来自源代码的推荐模式
- 框架特定调试:官方故障排除指南
使用 @Web
@Web
能够实时搜索互联网获取最新信息、技术博客 和社区讨论。在以下场景中使用它:
- 最新教程:社区生成的技术内容和示例
- 方案对比:不同技术方案的比较文章
- 近期更新:获取最新发布的功能或公告
- 多视角分析:问题解决的不同思路
内部文档
内部文档包含 AI 模型在训练过程中从未接触过的组织专属信息,可能包括:
- 内部 API:定制服务与微服务
- 公司标准:编码规范、架构模式
- 专有系统:定制工具、数据库、工作流
- 领域知识:业务逻辑、合规要求
通过 MCP 访问内部文档
模型上下文协议(Model Context Protocol,MCP)为将私有文档和系统接入 Cursor 提供了标准化方式。MCP 在 Cursor 与内部资源之间充当轻量级中间层。
MCP 的核心价值:
- 模型无法推测内部规范
- 定制服务的 API 文档未公开
- 业务逻辑与领域知识具有组织独特性
- 合规与安全要求因企业而异
实现原理: MCP 通过以下方式建立上下文关联:
- 将内部文档转换为结构化知识图谱
- 实时匹配开发者的编码上下文
- 动态注入相关文档片段至 AI 推理过程
典型应用场景:
# 当调用内部支付网关 API 时
# MCP 自动注入最新接口文档(中文注释需翻译)
def process_payment(order):
# 调用支付网关 v2 版本(2023 年更新)
response = PaymentGatewayV2.create_charge(
amount=order.total,
currency="CNY",
# 强制使用 TLS 1.3 加密(安全规范第 5.2 条)
security_config=SEC_PROFILE_A
)
return response.status == "SUCCESS"
常见 MCP 集成方案
集成方案 | 访问权限 | 示例 |
---|---|---|
Confluence | 公司 Confluence 空间 | 架构文档、内部服务 API 规范、编码标准与指南、流程文档 |
Google Drive | 共享文档和文件夹 | 需求规格说明书、会议纪要与决策记录、设计文档与需求文档、团队知识库 |
Notion | 工作区数据库和页面 | 项目文档、团队维基、知识库、产品需求文档、技术规范文档 |
自定义 | 内部系统和数据 库 | 专有 API、遗留文档系统、定制化知识库、专用工具与工作流 |
自定义解决方案
针对独特需求,您可以构建自定义的 MCP 服务器来实现以下功能:
- 抓取内部网站或门户数据
- 连接专有数据库系统
- 访问自定义文档系统
- 从内部维基或知识库提取信息
提示
构建自定义 MCP 服务器时,还可以向 Cursor 提交用于更新文档的工具
以下是抓取内部文档的自定义 MCP 服务器示例:
- TypeScript
- Python
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import TurndownService from "turndown";
// 创建用于抓取内部文档的 MCP 服务器
const server = new McpServer({
name: "internal-docs",
version: "1.0.0"
});
const turndownService = new TurndownService();
// 添加工具以抓取内部文档
server.tool("get_doc",
{ url: z.string() },
async ({ url }) => {
try {
const response = await fetch(url);
const html = await response.text();
// 将 HTML 转换为 markdown
const markdown = turndownService.turndown(html);
return {
content: [{ type: "text", text: markdown }]
};
} catch (error) {
return {
content: [{ type: "text", text: `Error scraping ${url}: ${error.message}` }]
};
}
}
);
// 开始接收消息并发送消息
const transport = new StdioServerTransport();
await server.connect(transport);
# server.py
import os
import asyncio
from mcp.server.fastmcp import FastMCP
import aiohttp
from markdownify import markdownify as md
# 创建用于抓取内部文档的 MCP 服务器
mcp = FastMCP("internal-docs")
@mcp.tool()
async def get_doc(url: str) -> dict:
"""Scrape internal documentation from a URL"""
try:
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
html = await response.text()
# 将 HTML 转换为 markdown
markdown = md(html)
return {
"content": [{"type": "text", "text": markdown}]
}
except Exception as error:
return {
"content": [{"type": "text", "text": f"Error scraping {url}: {str(error)}"}]
}
保持文档更新
文档内容很容易过时。Cursor 能够根据您的实际代码和开发对话生成并更新文档,帮助您维护最新且实用的技术文档。
基于现有代码生成文档
使用 Cursor 直接从您的代码库创建专业文档:
- API 文档
- JSDoc 注释
- README 创建
为这个 Express 路由生成 API 文档,包含所有端点、参数和响应格式
为这个类添加完整的 JSDoc 注释,记录所有方法及其参数
为这个项目创建一个 README 文件,包含设置说明、使用示例和 API 概述
基于聊天会话生成文档
您与 Cursor 的对话包含有价值的意图,可以转化为文档。
- 问题解决
- 架构
- 调试
解决复杂问题后:
总结我们关于设置认证的对话,为团队维基编写一份逐步操作指南
在架构决策之后:
创建文档,解释我们为何选择此数据库设计,包括我们讨论过的权衡
调试会话后:
根据我们刚刚修复的这个 bug,编写一份故障排除指南,包括症状和解决步骤
核心要点
- 将文档作为上下文 可使 Cursor 更加准确且与时俱进
- 使用
@Docs
调用官方文档,@Web
获取社区知识 - MCP 架构弥合 Cursor 与内部系统之间的鸿沟
- 通过代码和对话生成文档以保持知识更新
- 结合外部文档与内部知识库实现全面理解