大语言模型(LLM)的强大毋庸置疑,但它们天生存在一个瓶颈:难以可靠地管理和利用长程对话的上下文信息。由于模型一次只能“看到”有限的文本,早期的消息、用户偏好以及重要的指令很容易被“挤出”记忆,导致AI助手表现不稳定,出现上下文丢失、重复提问或忽略先前指令等问题。而模型上下文协议(MCP)的出现,旨在标准化上下文的处理方式,让AI系统更加一致、高效且实用。本文将深入探讨MCP的概念、必要性、解决方案,以及它如何优化提示组装,最终提升用户体验。

上下文窗口的局限性:大模型“失忆”的根源

大语言模型依赖于上下文窗口来处理信息,然而,这个窗口的大小是有限的。即使是像GPT-4-turbo这样拥有高达128k token的先进模型,也可能面临空间不足的问题。如果希望模型“记住”某些信息,比如对话历史、用户偏好、系统指令或外部搜索结果,就必须将它们全部塞进这个有限的窗口里。想象一下,在一个拥挤的房间里,你需要记住所有人的名字和特征,但空间有限,你只能记住最近进来的人。

没有精心管理的上下文,较早的消息就会被截断,重要的细节会丢失,AI会忘记它应该知道的内容。例如,在与一个AI客服进行长时间对话后,当你询问之前已经提供过的信息时,它可能会忘记,要求你重新输入,这无疑会降低用户体验。这种情况不仅令人沮丧,也限制了AI在复杂任务中的应用潜力。

持久记忆的缺失:开发者面临的挑战

默认情况下,大语言模型并不具备真正的持久记忆。上下文是短暂的,会话结束后就会消失。开发者必须手动存储用户数据,并在每次会话开始时重新注入,这导致了不一致的用户体验。例如,一个聊天机器人无法记住你在不同会话中的姓名或偏好,每次都需要重新输入,这样的体验显然是不友好的。

为了解决这个问题,开发者不得不自己“打补丁”,编写代码来保存和重新加载上下文信息。然而,这种方法不仅耗时耗力,而且容易出错,难以维护。更重要的是,缺乏统一的标准,导致不同的AI应用在处理上下文的方式上各不相同,用户体验参差不齐。

MCP:标准化上下文管理的解决方案

MCP(模型上下文协议)的出现,正是为了解决这些问题。它是一个开放的标准,旨在标准化AI系统与外部工具、数据和上下文的交互方式。MCP的核心是一个框架,它定义了如何构建和管理大语言模型所依赖的上下文窗口,使AI能够记住相关信息,优先考虑重要指令,并与外部数据无缝协作。

具体来说,MCP解决了以下几个关键问题:

  • 系统指令的包含方式: 定义如何将系统指令清晰地传递给模型,确保其始终按照预定的规则运行。
  • 持久记忆(用户画像)的注入方式: 规定如何将用户个人信息和偏好存储并在每次会话中重新注入,实现个性化服务。
  • 临时会话记忆(聊天历史)的管理方式: 提供有效管理和利用先前对话历史的方法,确保模型理解当前语境。
  • 如何总结或修剪内容以适应上下文窗口: 制定一套机制,能够在信息量过大时,智能地压缩或筛选上下文,保证最重要的信息能够被保留。
  • 如何集成工具、函数调用和检索增强数据: 建立一套标准,使AI系统能够方便地调用外部工具和服务,获取更多信息,从而更好地完成任务。

简而言之,MCP是一种系统的方法,确保最重要和相关的上下文始终能够传递给模型。

MCP的工作原理:优化提示组装

在没有MCP的情况下,典型的提示构建方式通常是将所有信息简单地拼接在一起:

[
  {"role": "system", "content": "你是一个有帮助的旅行助手。"},
  {"role": "user", "content": "你好。"},
  {"role": "assistant", "content": "你好!有什么可以帮到你?"},
  {"role": "user", "content": "建议我在果阿的酒店。"},
  ...
  {"role": "user", "content": "我想要经济型的选择。"}
]

这种方法存在以下问题:

  • 缺乏优先级: 重要的数据可能被丢弃。
  • 用户画像信息经常丢失: 除非手动重复,否则模型无法记住用户的偏好。
  • 难以将长对话历史纳入上下文窗口: 过长的对话历史容易超出上下文窗口的限制。
  • 缺乏会话间的“记忆”: 每次会话都是独立的,模型无法记住之前的交互。

而基于MCP的系统则可以智能地组装提示:

[
  {
    "role": "system",
    "content": "你是一个有帮助的旅行助手。如果可能,总是推荐经济实惠的选项。"
  },
  {
    "role": "memory",
    "content": "用户画像:居住在班加罗尔。喜欢经济型酒店和民宿。会说英语和卡纳达语。"
  },
  {
    "role": "summary",
    "content": "先前聊天的总结:用户询问了果阿的酒店。希望价格在1000印度卢比以下。喜欢靠近海滩的地点。"
  },
  {
    "role": "chat_history",
    "content": [
      {"role": "user", "content": "我想要经济型的选择。"},
      {"role": "assistant", "content": "当然!这里有一些..."}
    ]
  },
  {
    "role": "user",
    "content": "北果阿怎么样?"
  }
]

这种方法的优势在于:

  • 系统指令定制化并被保留: 确保模型始终按照预定的规则运行。
  • 用户画像(持久记忆)始终包含: 实现个性化服务,模型能够记住用户的偏好。
  • 长对话历史被总结以节省token: 在有限的上下文窗口内,尽可能保留更多的信息。
  • 优先考虑最相关的交流: 确保模型关注最重要的信息。
  • 易于添加外部数据(搜索结果,工具调用): 扩展模型的能力,使其能够完成更复杂的任务。

MCP如何决定保留哪些信息?

类MCP系统通常使用以下策略:

  • Token预算: 为记忆、历史和检索数据分配token,确保资源得到有效利用。例如,可以将更多的token分配给用户画像,以确保模型能够记住用户的偏好。
  • 总结: 智能地压缩较早的历史记录,减少token的使用。例如,可以将一个长对话总结成几个关键句子,从而节省空间。
  • 语义排序: 保留最相关的消息,去除冗余信息。例如,可以根据消息的语义相关性,对历史记录进行排序,只保留与当前问题最相关的内容。
  • 结构化角色: 使用系统、记忆、总结、聊天和工具等结构化角色,明确信息的类型和重要性。例如,可以将系统指令放在”system”角色中,将用户画像放在”memory”角色中,以便模型能够更好地理解和利用这些信息。

MCP的实际益处:提升用户体验与降低成本

实施MCP可以带来诸多益处:

  • 一致的用户体验: AI系统能够记住用户的偏好和历史,提供更加个性化的服务。例如,一个电商网站可以根据用户的浏览历史和购买记录,推荐更符合用户兴趣的商品。
  • 处理大量的聊天记录和文档: 通过总结和筛选信息,AI系统可以处理更长的对话和更复杂的文档。例如,一个法律助手可以分析大量的法律文件,提取关键信息,为律师提供支持。
  • 支持持久的个性化(例如,用户画像): AI系统能够记住用户的个人信息和偏好,提供更加贴心的服务。例如,一个智能家居系统可以根据用户的习惯,自动调节室内温度和灯光。
  • 使AI系统感觉更智能和更人性化: AI系统能够记住上下文,更好地理解用户的意图,提供更自然的交互体验。例如,一个虚拟助手可以记住用户的日程安排,提醒用户参加会议。
  • 通过有效地利用上下文降低成本: 通过智能地管理上下文,减少token的使用,降低运行成本。例如,可以将一个长对话总结成几个关键句子,从而减少token的使用,降低API的调用费用。

实际案例:ChatGPT的“记忆”功能

OpenAI的ChatGPT“记忆”功能就运用了与MCP相似的理念:

  • 记忆存储: 关于用户的持久性事实。
  • 会话上下文: 活跃的聊天历史。
  • 系统指令: 核心行为准则。

所有这些都使用上下文组装协议自动合并到提示中,这正是MCP背后的思想。这意味着ChatGPT可以记住用户的偏好、历史和指令,从而提供更加个性化和智能的服务。

类比:从“金鱼记忆”到“井井有条的笔记本”

与没有MCP的AI交谈就像与患有严重短期记忆丧失症的人交谈。你必须重复一切,而且他们会忘记一半的内容。

而有了MCP,就像给他们一个组织良好的笔记本:

  • 重要的笔记被固定: 确保关键信息不会丢失。
  • 旧讨论的摘要: 方便回顾之前的交流。
  • 个人偏好始终可访问: 实现个性化服务。

结论:MCP是大模型走向成熟的关键一步

模型上下文协议(MCP)是使基于LLM的系统更智能、更一致、更个性化和更具可扩展性的重要创新。通过标准化上下文的结构和传递方式,MCP使AI系统能够处理长时间的聊天,记住用户偏好,并与工具或外部数据无缝交互。

总之,模型上下文协议(MCP)旨在解决大模型上下文处理的痛点,通过提供标准化的上下文管理方法,提升AI系统的智能化水平。它不仅能有效管理上下文窗口,还能支持持久记忆,优化提示组装,最终提升用户体验,降低运营成本。随着大模型的不断发展,MCP这类上下文管理协议的重要性将日益凸显,成为构建更智能、更人性化AI系统的关键一环。未来,我们期待看到更多基于MCP的创新应用,推动大模型技术的进步。