mcpField
C
CompactPrompt

CompactPrompt

本地服务
github.com/gtkcyberAI 与智能体01 周前更新

关于 CompactPrompt

CompactPrompt 是用于压缩提示词、文档和 Agent 技能的 Python 库及 MCP 服务,在缩短内容时保留结构与含义。它还支持可逆短语缩写、数值压缩、示例筛选,以及文件审查和压缩。

主要功能

  1. 01删减低价值措辞
  2. 02可逆缩短重复短语
  3. 03降低数值精度以节省空间
  4. 04筛选代表性示例
  5. 05审查并压缩文件和技能

适用场景

  1. 01发送给 AI 模型前缩短提示词
  2. 02压缩 Markdown 文档和 Agent 技能
  3. 03缩短重复短语并保留还原字典

MCP 相关

其可选 MCP 服务允许兼容 MCP 的 AI Agent 审查并压缩提示词、文档和技能。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"gtkcyber-compactprompt": {
"command": "uvx",
"args": [
"compactprompt"
]
}
}
}
启动命令uvx compactprompt

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypicompactprompt0.5.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

CompactPrompt

测试 Pylint 文档状态 PyPI - 版本 gtkcyber/compact_prompt MCP 服务 mcprush 上的 CompactPrompt MCP

CompactPrompt 会缩短你发送给 AI 模型的文本,同时保留其含义。这样可以降低运行成本、加快响应速度,并减少输入超出模型限制的可能性。常见用法只需调用一个函数,无需机器学习背景。

背景

AI 模型会读取输入(即 提示词),并返回响应。服务提供商根据处理的文本量收费,文本量以 token 衡量(每个 token 大约相当于四分之三的单词);每个模型也都有输入长度上限。因此,包含指令、文档、表格和示例的长提示词会增加成本、降低响应速度,甚至可能无法输入。

CompactPrompt 会缩短提示词,同时保留重要信息,让你留住核心内容,去掉冗余。

入门

安装库:

pip install compactprompt

缩短提示词:

from compactprompt import CompactPrompt

result = CompactPrompt.compact(
    "Please could you very kindly go ahead and provide a really concise "
    "summary of the quarterly report."
)

print(result.text)
print(f"{result.ratio:.1f}x smaller "
      f"({result.tokens_before} -> {result.tokens_after} tokens)")

输出:

a really concise summary of the quarterly report.
1.7x smaller (22 -> 13 tokens)

填充语 “Please could you very kindly go ahead and” 会被删除,而含义保持不变。

功能

CompactPrompt 提供多种缩短提示词的方法。可以单独使用,也可以组合使用。下文会先用通俗的语言介绍每种方法,之后提供可选的技术说明。

删除价值较低的措辞

删除几乎不承载含义的词语,例如对话中的填充语,同时保留有意义的词语。这种方法有损:删除的词语无法恢复,但结果可以直接使用。

from compactprompt import CompactPrompt

# Remove approximately 40% of the tokens
result = CompactPrompt.compact(prompt, ratio=0.4)

# Or target a specific size
result = CompactPrompt.compact(prompt, budget=64)
技术详情

每个词语都会获得一个信息分数,该分数结合了词语的普遍稀有程度(静态自信息)和其在上下文中的可预测程度(小型语言模型计算的动态自信息)。分数较低的词语会被删除。使用 spaCy 一并删除完整的语法短语,以确保结果仍然通顺,并保护名称和数字。此方法实现了 CompactPrompt 论文中的融合规则。

可逆地缩短重复短语

短语重复出现时,会被替换为简短的占位符,并通过一个键记录每个占位符所代表的内容。这种方法无损:随时都可以还原出完全一致的原文。

import compactprompt as cp

doc = "operating cash flow rose. operating cash flow fell. operating cash flow held."
abbr = cp.abbreviate(doc, n=3)

print(abbr.text)        # '@0 rose. @0 fell. @0 held.'
print(abbr.dictionary)  # {'@0': 'operating cash flow'}
print(abbr.restore())   # the exact original

保留 abbr.dictionary,以便稍后再次展开占位符。

缩减数值数据的大小

大型数字表格会占用许多 token。此方法通过降低精度来节省空间,同时确保舍入误差不超过已知上限。

import compactprompt as cp

q = cp.quantize([1.0, 2.5, 3.3, 4.8, 9.2, 10.0], bits=8)
q.reconstruct()   # the rounded values
q.max_error       # the guaranteed maximum error
选择有代表性的示例

向模型展示少量示例时,效果会更好。如果你有许多候选示例,此方法会选出数量较少且多样化的子集,同时仍能体现完整范围,让你发送有代表性的少数示例,而不是全部示例。

from compactprompt import select_examples

chosen = select_examples(my_examples)
chosen.examples

选择文本精简方式

文本精简步骤可以由三种可互换的引擎中的任意一种执行。它们都会缩短文本;区别在于如何判断要删除哪些内容,以及运行所需的条件。通过 engine 参数选择引擎——代码的其他部分无需更改。

引擎方式要求
内置(默认)为每个单词评分,并删除最不重要的单词。在本地运行。无
LLMLinguaMicrosoft 推出的成熟工具,使用小型模型判断要删除哪些内容。下载模型
Caveman以简洁的风格改写文本,同时保留代码、链接和标题。可访问语言模型
CompactPrompt.compact(prompt)                       # built-in, no extra install
CompactPrompt.compact(prompt, engine="llmlingua")   # pip install 'compactprompt[llmlingua]'
CompactPrompt.compact(prompt, engine="caveman")     # pip install 'compactprompt[caveman]'

内置引擎和其他核心功能实现了 CompactPrompt 研究论文 中的方法。LLMLingua 和 Caveman 是本库集成的独立开源工具;请参阅致谢。

精简文件和技能

CompactPrompt 也可以精简完整的 Markdown 文件——文档、CLAUDE.md、笔记和 Claude Code 技能(SKILL.md)——而不仅仅是字符串。它还可以先检查文件或文件夹,报告可节省的内容。

此功能在设计上是安全的:YAML frontmatter 会原样保留,围栏代码块和链接绝不会被修改;如果结果会更改标题、代码块或 URL,则会被拒绝;除非指定 --apply,否则不会写入任何内容(指定后会先保存 .bak 备份)。看起来像代码、配置或机密的文件会自动跳过。

从命令行使用:

# See where the savings are (read-only)
compactprompt review ./skills

# Preview the compaction of one skill (writes nothing)
compactprompt compact ./skills/my-skill/SKILL.md --engine builtin

# Apply it (saves SKILL.md.bak, then rewrites the file)
compactprompt compact ./skills/my-skill/SKILL.md --engine caveman --apply

必须指定 --engine——每次都要选择 builtin、llmlingua 或 caveman(会改写正文的 caveman 通常最适合人类可读的文件)。

从 Python 使用:

from compactprompt import review_file, compact_file

report = review_file("SKILL.md")
print(report.tokens, report.issues)

result = compact_file("SKILL.md", engine="caveman", apply=True)
print(result.tokens_before, "->", result.tokens_after)

Streamlit 应用的 Files & Skills 选项卡也可以交互式地执行相同操作。

可选功能

基本安装无需设置。其他功能依赖额外组件,只需按需安装:

pip install compactprompt                  # core: trimming and reversible shortening
pip install 'compactprompt[ml]'            # numeric reduction and example selection
pip install 'compactprompt[llmlingua]'     # the LLMLingua engine
pip install 'compactprompt[caveman]'       # the Caveman engine
pip install 'compactprompt[mcp]'           # the MCP server for AI agents
pip install 'compactprompt[app]'           # the interactive application
pip install 'compactprompt[all]'           # everything

如果某项功能需要的组件尚未安装,CompactPrompt 会准确告知需要安装什么。

交互式应用

一个小型 Web 应用可让你粘贴提示词并查看精简后的内容,同时显示节省的篇幅:

pip install 'compactprompt[app]'
streamlit run compactprompt_app.py

应用会在浏览器中打开。使用侧边栏选择引擎并设置精简量。

在 AI Agent 中使用

CompactPrompt 随附一个 MCP 服务,让 AI 编码工具(Claude Code、Codex、Cursor、Gemini,以及任何支持 MCP 的 Agent)可以直接检查并精简提示词、文档和技能:

pip install 'compactprompt[mcp]'      # provides the `compactprompt-mcp` command
claude mcp add compactprompt -- compactprompt-mcp   # e.g. for Claude Code

agent-skills/ 目录中也提供了适用于相同工具的轻量级技能/规则文件,以及 install.sh。有关各工具的配置,请参阅其 README。

确认含义得以保留

要检查精简后的提示词是否仍表达相同含义,可以测量原文与结果之间的相似度,其中 1.0 表示含义完全相同:

from compactprompt import cosine_fidelity   # pip install 'compactprompt[embeddings]'

score = cosine_fidelity(original_text, result.text)
print(score.mean)

参考

CompactPrompt.compact(...) 会返回一个包含以下字段的结果对象:

字段含义
.text精简后的提示词。
.original输入内容。
.tokens_before / .tokens_after精简前后的大小。
.ratio缩小的倍数(例如,2.3)。
.savings节省的 token 占比(例如,0.4)。
.dictionary用于还原精简后短语的键(如有使用)。
.restore()撤销可逆的精简步骤。

主要选项:

CompactPrompt.compact(
    prompt,
    ratio=0.5,          # how much to remove: 0.5 targets about half the tokens
    budget=None,        # alternatively, a specific target token count
    prune=True,         # trim the wording (default)
    abbreviate=False,   # also shorten repeated phrases (reversible)
    engine="builtin",   # "builtin", "llmlingua", or "caveman"
)

包含高级选项的完整参考文档,请参阅文档。

开发

运行测试:

pip install pytest
pytest

测试套件会针对无依赖核心运行;缺少可选功能所需组件时,相关测试会自动跳过。

在本地构建文档:

pip install 'compactprompt[docs]'
mkdocs serve

引用

此库实现了以下方法论:

@article{choi2025compactprompt,
  title={CompactPrompt: A Unified Pipeline for Prompt and Data Compression in LLM Workflows},
  author={Choi, Joong Ho and Zhao, Jiayang and Shah, Jeel and Sonawane, Ritvika and
          Singh, Vedant and Appalla, Avani and Flanagan, Will and Condessa, Filipe},
  journal={arXiv preprint arXiv:2510.18043},
  year={2025}
}

这是一个独立实现,与论文作者无关。

归属

Caveman 引擎(compactprompt/caveman.py)改编自 Julius Brussee 的 Caveman(MIT)。LLMLingua 引擎使用 Microsoft 的 LLMLingua(MIT)。完整的第三方归属信息和许可声明请参阅 THIRD_PARTY_NOTICES.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。