Context7 MCP 简明教程

直到最近,我的“提示工程工作流”看起来像是一场永无止境的复制粘贴马拉松。每当 Copilot 幻觉出一个不存在的方法或调用已弃用的 API 时,我就会打开官方文档,复制一大段文本,并希望这些额外的上下文能修正建议。有时它有效,但往往无效,而且每次这样的偏离都会打断我的专注。

Context7 从根源上解决了这种疲劳。该服务自动拉取正确的代码片段(按库和版本过滤),而不是我手动向模型灌输文档,并将其提供给助手。这一单一的改变意味着我可以留在编辑器中,Copilot 能够使用与我的依赖项相同的语言,而且它生成的代码通常第一次就能编译通过。

1、MCP 带来了什么

这里的“神奇粘合剂”是模型上下文协议 (MCP)。可以将 MCP 想象成一个标准插座,任何支持 LLM 的工具都可以在生成时向其请求外部服务(如 Context7)以获取额外知识。Upstash 提供了一个现成的 MCP 服务器来封装 Context7,因此 Copilot、Cursor 或 Windsurf 可以在没有定制插件的情况下进行集成。

2、在 GitHub Copilot 中设置

安装过程出奇地简单。以下是我的设置步骤:

  1. 打开 VSCode 设置:导航到您的 VSCode 设置
  2. 搜索 MCP:在搜索栏中输入 "mcp"
  3. 编辑 settings.json:点击第一个结果中的“在 settings.json 中编辑”
  4. 添加配置:包含以下 JSON 代码片段:
{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    }
  }
}

您的最终 settings.json 应如下所示:

{
  "mcp": {
    "servers": {
      "context7": {
        "command": "npx",
        "args": ["-y", "@upstash/context7-mcp"]
      }
    }
  }
}

5. 重启 Copilot:重启 Copilot 后,MCP 即可使用 🙂

3、测试差异

我想展示这个 MCP 为项目带来的切实价值。因此,我使用 OpenAI 的 GPT-4 模型,在有和没有 MCP 的情况下测试了 Copilot 在“代理”模式下的输出。

测试提示:

帮助我使用 OpenAI Agents SDK 在此模块中创建一个包含多个代理的管道:1. WebSearch 代理:使用 OpenAI 的 WebSearch 工具执行互联网搜索
2. 内容生成代理:三个并行代理,生成不同风格的散文草稿变体
3. 评判代理:评估三个草稿并根据定义的标准选择最佳草稿
该管道应编排代理并处理它们之间的数据流。

让我们看看 Copilot 如何处理 OpenAI Agents SDK!

没有 MCP 的结果:

"""
使用 OpenAI Agents SDK 的管道:
1. WebSearch 代理:执行互联网搜索。
2. 三个内容生成代理:并行生成散文草稿。
3. 评判代理:选择最佳草稿。
"""

from openai import agents

# 1. WebSearch 代理
def websearch_agent(query):
    """使用 OpenAI 的 WebSearch 工具收集信息。"""
    # 替换为实际的 OpenAI Agents SDK 调用
    response = agents.WebSearch.run(query=query)
    return response['results']

# 2. 内容生成代理(3 个变体)
def content_generation_agent(info, style=None):
    """从信息生成散文草稿。可选地改变风格。"""
    prompt = f"根据以下信息撰写一篇详细、引人入胜的散文草稿:{info}\n"
    if style:
        prompt += f"使用以下风格:{style}\n"
    # 替换为实际的 OpenAI Agents SDK 调用
    return agents.Completion.run(prompt=prompt)['text']

# 3. 评判代理
def judge_agent(drafts):
    """评估草稿并选择最佳草稿。"""
    prompt = (
        "你是一个评判者。给定这三个草稿,根据清晰度、连贯性、创造力和事实准确性选择最佳草稿。\n"
        f"草稿 1:{drafts[0]}\n"
        f"草稿 2:{drafts[1]}\n"
        f"草稿 3:{drafts[2]}\n"
        "回复最佳草稿的编号(1、2 或 3)以及简短的理由。"
    )
    # 替换为实际的 OpenAI Agents SDK 调用
    return agents.Completion.run(prompt=prompt)['text']

# 管道编排
def run_pipeline(query):
    # 步骤 1:WebSearch
    info = websearch_agent(query)
    # 步骤 2:内容生成(并行)
    styles = [None, "更具创意", "更简洁"]
    drafts = [content_generation_agent(info, style=s) for s in styles]
    # 步骤 3:评判
    result = judge_agent(drafts)
    return result

if __name__ == "__main__":
    user_query = "喝绿茶对健康有什么好处?"
    best_draft = run_pipeline(user_query)
    print("管道结果:\n", best_draft)

不要费心阅读代码,只需看导入语句。说它“幻觉”都太抬举它了 🤣

import asyncio
from agents import Agent, Runner, WebSearchTool
from dotenv import load_dotenv

load_dotenv()

# 1. WebSearch 代理
def create_websearch_agent():
    return Agent(
        name="WebSearch Agent",
        instructions="你使用 WebSearch 工具为任何查询收集相关信息。",
        tools=[WebSearchTool()],
    )

# 2. 内容生成代理(3 个变体)
def create_content_agent(style: str):
    return Agent(
        name=f"内容生成器 ({style})",
        instructions=f"你是一位创意作家。使用提供的信息,以 {style} 风格撰写散文草稿。要求清晰、引人入胜且准确。",
    )

# 3. 评判代理
def create_judge_agent():
    return Agent(
        name="评判代理",
        instructions=(
            "你是一位专业的评估者。你将收到三份散文草稿。"
            "根据清晰度、连贯性、创造力和事实准确性选择最佳草稿。"
            "只返回最佳草稿,并解释你的推理。"
        ),
    )

async def pipeline(query: str):
    websearch_agent = create_websearch_agent()

    # 步骤 1:网络搜索
    websearch_result = await Runner.run(websearch_agent, query)
    info = websearch_result.final_output

    # 步骤 2:并行生成 3 个草稿
    styles = ["简洁", "叙述性", "分析性"]
    content_agents = [create_content_agent(style) for style in styles]
    tasks = [Runner.run(agent, info) for agent in content_agents]
    drafts = await asyncio.gather(*tasks)
    prose_drafts = [draft.final_output for draft in drafts]

    # 步骤 3:评判代理选择最佳草稿
    judge_agent = create_judge_agent()
    judge_prompt = (
        "以下是基于相同信息的三份散文草稿。\n"
        f"草稿 1:\n{prose_drafts[0]}\n\n草稿 2:\n{prose_drafts[1]}\n\n草稿 3:\n{prose_drafts[2]}\n\n"
        "选择最佳草稿并解释你的推理。"
    )
    judge_result = await Runner.run(judge_agent, judge_prompt)
    return judge_result.final_output

if __name__ == "__main__":
    import sys
    user_query = sys.argv[1] if len(sys.argv) > 1 else "喝绿茶对健康有什么好处?"
    result = asyncio.run(pipeline(user_query))
    print(result)

差异是天壤之别。MCP 增强版本使用了正确的导入、正确的异步模式,并且实际上实现了一个工作的管道结构。

4、结束语

Context7 感觉像是一个提升生活质量的开发者工具,而不仅仅是另一个 AI 创新。集成只需五分钟,就会消失在编辑器的后台,并默默提升每个涉及外部库的 Copilot 建议。

如果您尝试这个工作流,我很乐意听到它如何改变您的编码会话。Upstash 团队正在快速推出功能——对私有包和语言过滤器的支持已经在路线图上。我们越早分享反馈,我们的 AI 助手就会变得越准确。


原文链接:How Context7 MCP by Upstash Transformed My VSCode and Copilot Workflow

汇智网翻译整理,转载请标明出处