上下文一致性管理服务

CC-MCP是一个用于管理LLM长对话中上下文一致性的服务,通过智能意图分类和分层上下文架构解决LLM的记忆丢失问题。

  • by Beginnersguide138
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 beginnersguide138/cc-mcp

使用说明

🧠 CC-MCP(上下文一致的MCP服务器)

🌐 Language / 言語 / 语言

⚠️ 重要提示:请查看正确使用指南

🌟 革命性的人工智能上下文管理:解决长对话中的LLM记忆丢失问题

基于LLM的人工智能代理的长期会话一致性管理系统


🚀 我们解决的问题

传统的LLM在长时间对话中会出现“意图遗忘”的问题:

  • ❌ 几圈后失去对原始目标的跟踪
  • ❌ 忘记重要的约束和决定
  • ❌ 在对话环节中提供不一致的回应
  • ❌ 要求用户不断提醒AI上下文

CC-MCP提供智能上下文管理工具,帮助LLM保持一致性。


将此添加到您的MCP客户端设置中(例如,Cline的 cline_mcp_settings.json):

{
  "mcpServers": {
    "cc-mcp": {
      "autoApprove": [
        "process_user_message",
        "start_session",
        "get_debug_info", 
        "list_sessions",
        "get_session_stats",
        "export_context",
        "import_context"
      ],
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/your/cc-mcp",
        "main.py"
      ],
      "env": {
        "CLASSIFIER_API_URL": "https://api.openai.com/v1/chat/completions",
        "CLASSIFIER_API_KEY": "your_openai_api_key_here",
        "CLASSIFIER_MODEL": "gpt-4o-mini"
      }
    }
  }
}
  • 已配置环境(请参阅 快速开始) 替换 /path/to/your/cc-mcp 使用您的实际存储库路径。

对于Ollama用户: 当使用Ollama而不是OpenAI时,请按如下方式修改环境变量:

  • 改变 CLASSIFIER_API_URL 到您的Ollama服务器URL(例如。, http://localhost:11434/v1/chat/completions)
  • 改变 CLASSIFIER_MODEL 根据您偏好的Ollama模型(例如。, llama3.2)
  • 删除或留空 CLASSIFIER_API_KEY 因为Ollama不需要

Ollama的示例配置:

"env": {
  "CLASSIFIER_API_URL": "http://localhost:11434/v1/chat/completions",
  "CLASSIFIER_MODEL": "llama3.2"
}

先决条件:

  • Python 3.13+
  • uv包管理器
  • LLM API访问(Azure OpenAI、OpenAI等)或本地LLM(如Ollama)。
  • 已配置环境(请参阅 快速开始)

✨ 主要特点

🏗️ 分层上下文架构

Core Context (Long-term)    ──► Problem definitions & core objectives
    ↓
Evolving Context (Mid-term) ──► Constraints, decisions & refinements  
    ↓
Turn Context (Short-term)   ──► Recent conversation flow

🧠 智能意图分类

  • 5意图类别: PROBLEM_DEFINITION, CONSTRAINT_ADDITION, REFINEMENT, QUESTION, UNCLEAR

详细的意图描述(定义见 intent_classifier.py):

分类逻辑基于一个提示,该提示指示LLM分析用户的消息并分配以下一个或多个标签:

  • PROBLEM_DEFINITION:用户正在定义他们想要解决的中心问题。

    • 提示示例:“我想用人工智能自动总结会议纪要,有什么好方法吗?”
  • CONSTRAINT_ADDITION:用户正在添加约束或条件,如预算或时间表。

    • 提示示例:“听起来不错。但是,请将使用的模型限制为开源模型。”
  • REFINEMENT:用户正在使现有需求更加具体或正在对其进行修改。

  • QUESTION:用户正在问一个简单的问题。

  • UNCLEAR:该信息无法明确分为上述任何类别。

🔧 智能上下文管理

  • 上下文感知:自动跨三个层次结构级别组织上下文
  • 目的驱动:保持对核心问题和目标的认识
  • 符合约束:跟踪并应用累积的约束和决策

内存管理是如何实现的:

“智能上下文修剪和优化”是通过在 HierarchicalContextStore (context_store.py):

  1. 分层上下文存储:该系统将信息分为三层,防止上下文降级:

    • 核心背景:掌握主要问题定义,确保主要目标永不丢失。
    • 不断演变的背景:存储约束和改进列表,允许逐步缩小解决方案空间。
    • 转换上下文:一种短期记忆,可以保持最后几次对话的回合,以保持即时的对话流。
  2. 自动翻转上下文修剪:为了防止内存膨胀 turn_context 自动修剪。这 _trim_turn_context() 该方法确保只保留最新消息(默认值:6),丢弃较旧、相关性较低的轮次。

  3. 基于关键字的优化:系统提取并存储加权关键字,而不是依赖全文历史记录 Core 和 Evolving 上下文。这 get_context_summary() 然后,该方法为LLM提供了一个压缩的、关键字驱动的摘要,其处理效率远高于原始会话历史。

这种结构化的、基于规则的方法确保了内存的高效和智能管理,在不压倒LLM的情况下保持最关键信息的可访问性。

📊 统计关键字提取

  • TF-IDF供电:使用TF-IDF算法从对话中识别并提取最重要的关键字。
  • 上下文总结:提供基于关键字的核心问题和不断发展的约束的简明摘要,这对LLM的处理更有效。
  • 动态语料库关键字提取引擎会随着每次新的对话不断更新其文档语料库,从而随着时间的推移提高其IDF计算的准确性。

如何实现关键字提取(如中所定义 keyword_extraction.py):

统计关键字提取使用复杂的TF-IDF实现,并进行了多项优化:

  1. 词频(TF)计算:The _calculate_tf() 该方法计算每个单词在特定消息中相对于该消息中的总字数出现的频率。这标识了在当前上下文中被强调的单词。

  2. 逆文档频率(IDF)计算:The _calculate_idf() 该方法确定一个单词在语料库中所有对话中的罕见程度。使用的公式为 IDF = log(total_documents / documents_containing_term),使稀有词汇更有价值。

  3. TF-IDF评分:The extract_keywords() 该方法结合了TF和IDF得分(TF-IDF = TF × IDF)识别在当前信息中频繁出现但在所有对话中罕见的单词,表明特定主题的重要性。

  4. 多语言标记化:The _tokenize() 该方法使用正则表达式模式提取日语(平假名、片假名、汉字)和英语单词,同时过滤出这两种语言中常见的停用词。

  5. 语料库管理:该系统维护着一个不断增长的文档语料库,随着时间的推移提高了IDF的准确性。每条新消息都会更新 _document_frequency 字典和 _total_documents 计数,使未来的提取更加精确。

这种方法确保提取的关键字代表最具上下文相关性的术语,同时过滤掉常见的、不太有意义的单词。

⚡ 卓越绩效

  • 超快的:适用于功能较弱的型号,如 gpt-3.5-tubo, gpt-4o-mini 或 gemma3:4b
  • 可扩展的:处理多个并发会话
  • 内存效率高:智能上下文修剪和优化

💾 会话保持

  • 状态操作:所有对话会话和关键字统计信息都会自动保存到 persistence/ 目录,确保服务器重启之间没有数据丢失。
  • 鲁棒性:这使服务器具有弹性,即使服务器崩溃或重新启动,也能保持上下文。

🎯 现实世界影响

在CC-MCP之前:

User: "I want to build an AI assistant app"
AI: "Sure! Here are some general approaches..."

[10 messages later]
User: "Remember, budget is 500K yen, 3 months timeline"
AI: "What project are we talking about?" ❌

CC-MCP之后:

User: "I want to build an AI assistant app"
AI: "Great! Let me help you design this system..."

[10 messages later] 
User: "What about deployment options?"
AI: "For your AI assistant app (budget: 500K yen, 3-month timeline, security priority), here are deployment strategies that fit your constraints..." ✅

🛠️ 技术架构

graph TD
    subgraph CC-MCP Server
        direction LR
        C[Intent Classifier]
        D[Context Store]
        E[Keyword Extractor]
    end

    A[MCP Client Application] -- MCP Tools --> B((main.py))
    B -- Manages --> C
    B -- Manages --> D
    B -- Manages --> E
    C -- Calls --> G[External LLM API]

组件说明:

此服务器基于三个核心组件构建,它们协同工作以提供上下文感知响应:

  1. Intent Classifier (intent_classifier.py):

    • 函数:此组件分析用户的消息以确定其潜在目的。
    • 实施:它通过精心设计的提示将用户的消息发送到外部LLM(如GPT或本地Ollama模型),要求LLM将消息分为五个意图之一: PROBLEM_DEFINITION, CONSTRAINT_ADDITION, REFINEMENT, QUESTION,或 UNCLEAR.
  2. Context Store (context_store.py):

    • 函数:这是系统的“记忆”。它以层次结构组织和存储会话上下文。
    • 实施:它使用三层系统:a core_context 对于主要问题,a evolving_context 用于约束和改进,以及 turn_context 查看最新消息。它会自动修剪短期 turn_context 以高效地管理内存。
  3. Keyword Extractor (keyword_extraction.py):

    • 函数:此引擎从存储在中的用户消息中识别最重要的术语 core 和 evolving 上下文。
    • 实施:它使用经典 TF-IDF(词频反转文档频率) 算法。它计算一个单词在消息中出现的频率(TF)以及该单词在所有对话中的罕见程度(IDF)。这些分数的组合使其能够确定对当前主题具有独特重要性的关键字。

可用MCP工具:

  • process_user_message -具有上下文管理的核心消息处理
  • export_context -将对话状态导出为JSON
  • import_context -恢复对话状态
  • clear_context -重置所有上下文数据
  • get_debug_info -详细的调试信息
  • start_session / end_session -会话生命周期管理
  • list_sessions -主动会话监控
  • get_session_stats -性能分析

传输协议:

默认传输协议为 stdio.SSE(服务器发送事件)也支持使用端点进行直接HTTP通信 http://127.0.0.1:8001/sse/.


📦 快速开始

先决条件

  • Python 3.13+
  • uv包管理器
  • LLM API访问(Azure OpenAI、OpenAI等)或本地LLM(如Ollama)。
  • 已配置环境(请参阅 快速开始)

安装

# Clone the repository
git clone https://github.com/Beginnersguide138/cc-mcp.git
cd cc-mcp

# Install dependencies
uv sync

# Configure environment
cp .env.example .env
# Edit .env with your API credentials

更新存储库

要在克隆存储库后接收最新更新,请使用以下Git命令:

# Fetch the latest changes from the remote repository
git fetch origin

# Pull the latest changes from the main branch
git pull origin main

# Update dependencies (if they have changed)
uv sync

建议定期将本地存储库更新为:

  • 获取最新功能
  • 接收错误修复
  • 确保与最新版本的兼容性

环境配置

# .env file example - Only 3 variables needed!
CLASSIFIER_API_URL=https://api.openai.com/v1/chat/completions
CLASSIFIER_API_KEY=sk-your_openai_api_key_here
CLASSIFIER_MODEL=gpt-3.5-turbo

# Alternative providers (see .env.example for full list):
# Azure OpenAI, Anthropic Claude, Google Gemini, Ollama supported

# For Ollama (Local LLM):
# CLASSIFIER_API_URL=http://localhost:11434/v1/chat/completions
# CLASSIFIER_API_KEY=not_required  # Ollama doesn't need auth; leave empty with the latest version
# CLASSIFIER_MODEL=llama3

启动服务器

# Start CC-MCP server with stdio transport (default for clients like Cline)
uv run main.py

🦙 使用Ollama(本地LLM)

CC-MCP现在支持Ollama用于本地LLM,而无需API成本。此功能是在最近的一次提交中添加的。

  1. 安装并运行Ollama:
# Install Ollama from https://ollama.com/
# Download and run a model
ollama run llama3
  1. 在中为Ollama配置CC-MCP .env:
CLASSIFIER_API_URL=http://localhost:11434/v1/chat/completions
CLASSIFIER_API_KEY=not_required  # Ollama doesn't need auth; leave empty
CLASSIFIER_MODEL=llama3  # Or: mistral, gemma, phi, qwen, etc.
  1. 更新您的MCP客户端配置: 只需更改 env 您现有的部分 cc-mcp 配置:
"env": {
  "CLASSIFIER_API_URL": "http://localhost:11434/v1/chat/completions",
  "CLASSIFIER_API_KEY": "not_required",
  "CLASSIFIER_MODEL": "llama3"
}

就是这样!CC-MCP现在将使用您当地的Ollama模型进行意图分类。


💡 使用示例

1.基本消息处理

import asyncio
from cc_mcp import process_user_message

async def demo():
    # Define core problem
    result = await process_user_message(
        "I want to build an AI assistant for customer support"
    )
    print("Intent:", result["metadata"]["intent_classification"]["intent"])
    # Expected: ["PROBLEM_DEFINITION"]
    
    # Add constraints
    result = await process_user_message(
        "Budget is $50,000 and must be completed in 2 months"
    )
    print("Intent:", result["metadata"]["intent_classification"]["intent"])
    # Expected: ["CONSTRAINT_ADDITION"]
    
    # Ask unrelated question - context still preserved!
    result = await process_user_message(
        "What's the weather like today?"
    )
    # AI response will still maintain awareness of the support system project!

asyncio.run(demo())

2.上下文管理

# Export current conversation state
context_data = await export_context(session_id="my-session")
print(f"Core Problem: {context_data['core_problem']}")
print(f"Active Constraints: {len(context_data['constraints'])}")

# Clear context for fresh start
await clear_context(session_id="my-session")

# Import previously saved context
await import_context(json_state=context_data, session_id="my-session")

3.多会话管理

# Start new session
session_info = await start_session()
session_id = session_info["session_id"]

# Process messages in specific session
await process_user_message(
    message="Design a mobile app",
    session_id=session_id
)

# Check session statistics
stats = await get_session_stats(session_id=session_id)
print(f"Messages: {stats['total_messages']}")
print(f"Active Constraints: {stats['active_constraints']}")

🔧 高级配置

自定义意图标签

# Extend intent classification in intent_classifier.py
CUSTOM_INTENTS = {
    "TECHNICAL_SPEC": "User is providing technical specifications",
    "BUDGET_CHANGE": "User is modifying budget constraints",
    "TIMELINE_UPDATE": "User is adjusting project timeline"
}

上下文存储优化

# Configure in context_store.py
CONTEXT_CONFIG = {
    "max_core_contexts": 3,      # Maximum core problems per session
    "max_evolving_items": 10,    # Maximum constraints/refinements
    "turn_history_limit": 5,     # Recent conversation turns to keep
    "auto_cleanup": True         # Automatic memory optimization
}

API参数调整

# Optimize for your use case
CLASSIFIER_PARAMS = {
    "temperature": 0.1,          # Lower for consistency
    "max_tokens": 150,          # Sufficient for classification
    "top_p": 0.9               # Focus on high-probability responses
}

MAIN_LLM_PARAMS = {
    "temperature": 0.7,          # Higher for creativity
    "max_tokens": 2000,         # Generous for detailed responses
    "presence_penalty": 0.1     # Encourage diverse vocabulary
}

🌍 国际支持

CC-MCP的设计考虑了国际化:

  • 日语优化:日本本土意图分类
  • 英语支持:完整的英文文档和示例
  • 可扩展:易于添加对其他语言的支持
  • Unicode安全:正确处理所有字符编码

🤝 贡献

我们欢迎国际社会的贡献!

如何做出贡献:

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

开发设置:

# Clone your fork
git clone https://github.com/YOUR-USERNAME/cc-mcp.git
cd cc-mcp

# Install development dependencies
uv sync --group dev

# Run pre-commit hooks
pre-commit install

# Run the full test suite
uv run pytest

📚 文档

使用指南(必读!)


🛟 支持与社区


🏆 认可

CC-MCP代表了人工智能对话管理的突破:

  • 🥇 首个生产就绪解决方案 LLM意图遗忘
  • ⚡ Sub-300ms性能 具有企业级可靠性
  • 🔬 研究支持 经过验证的有效性架构
  • 🌐 开源 致力于推进人工智能技术

📄 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。


🙏 致谢

  • MCP协议团队 -对于优秀的模型上下文协议
  • OpenAI和Azure OpenAI -用于强大的LLM API
  • FastAPI社区 -对于健壮的web框架
  • UV团队 -适用于闪电般快速的Python包管理器

🌟 准备好彻底改变你的人工智能对话了吗?

开始使用


内置于❤️ CC-MCP团队

在全球范围内实现一致的人工智能对话