一、MessageWindowChatMemory 上下文逻辑

运行

MessageWindowChatMemory windowChatMemory = MessageWindowChatMemory.builder()
        .chatMemoryRepository(redisChatMemoryRepository)
        .maxMessages(10)  // 核心:只保留最近10条会话消息
        .build();

这个上下文的顺序(会话维度)

  1. 存储顺序:新消息追加到末尾,超过 10 条时删除最旧的第一条;
  2. 使用顺序:调用 LLM 时,会把这 10 条消息(按「旧→新」)作为上下文传给 LLM;
  3. 角色顺序:在这 10 条消息里,是「sys(系统提示)→ usr(用户提问)→ assistant(助手回复)」循环,sys 通常是第一条(固定),后面是 usr/assistant 交替。

二、 sys→usr→Advisor→MCP 调用链路逻辑顺序

这是功能执行的层级顺序,完整流程如下(一步都不跳):

预览

sys(系统提示)

usr(用户输入)

ChatMemory(上下文拼接)

Advisor(核心智能体:RetrievalAugmentationAdvisor)

Advisor内部:调用DocumentRetriever(词库检索)

ToolCalling(LLM决策:要调用哪个Skill)

MCP(标准化协议)

Skills(具体业务能力执行)

返回结果给Advisor

Advisor整合结果→回复用户

ChatMemory记录新消息

flowchart TD
    A[sys(系统提示)] --> B[usr(用户输入)]
    B --> C[ChatMemory(上下文拼接)]
    C --> D[Advisor(核心智能体:RetrievalAugmentationAdvisor)]
    D --> E[Advisor内部:调用DocumentRetriever(词库检索)]
    E --> F[ToolCalling(LLM决策:要调用哪个Skill)]
    F --> G[MCP(标准化协议)]
    G --> H[Skills(具体业务能力执行)]
    H --> I[返回结果给Advisor]
    I --> J[Advisor整合结果→回复用户]
    J --> K[ChatMemory记录新消息]

用大白话拆解顺序(核心)

  1. 第一步:sys(系统提示)先定规则(比如「你是电商客服,用检索结果回答」);
  2. 第二步:usr(用户)发问题(比如「我的订单在哪」);
  3. 第三步:ChatMemory 把「sys + 历史 10 条消息 + 当前 usr 提问」拼好;
  4. 第四步:Advisor(你的 RetrievalAugmentationAdvisor)拿到拼接后的上下文,先调用 DocumentRetriever 从词库检索相关内容;
  5. 第五步:Advisor 里的 LLM 做 ToolCalling,决定要调用哪个 Skill(比如「查询订单 Skill」);
  6. 第六步:通过 MCP 协议,标准化调用这个 Skill;
  7. 第七步:Skill 执行具体操作(比如查订单数据库),返回结果;
  8. 第八步:Advisor 整合「检索结果 + Skill 返回结果」,生成最终回复给用户,同时把这条回复存到 ChatMemory。

总结

  1. 上下文顺序MessageWindowChatMemory 是「旧→新」保留最近 10 条,角色上 sys 最优先,usr/assistant 交替;
  2. 调用链路顺序sys → usr → ChatMemory → Advisor(含词库检索) → ToolCalling → MCP → Skills,是严格的从上到下执行;
  3. 「sys→usr→Advisor→MCP」基本正确,「ChatMemory」和「ToolCalling」两个关键中间步骤。
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐