PromptLoop 的

  
为您的AI代理提供贝叶斯快速观察者和质量循环。
PromptLoop作为MCP服务器位于您和IDE代理之间。每个提示都会被评分、路由、细化(如果需要),然后进行验证——所有这些都是在使用MCP采样的单个工具调用中完成的。系统 学习 随着时间的推移:每次您对回复进行评分时,它都会对评分维度权重进行在线梯度下降,并通过Beta先验的Thompson Sampling选择澄清问题。
底层CLI和工具API作为 loopllm (原名)。PromptLoop是该项目的品牌。______________________________________________________________________
VS代码扩展
直接在侧边栏中安装实时质量草稿栏和提示历史仪表板的配套扩展。
快速实验室 --实时质量草稿
每次击键得分(350毫秒去抖动)。成绩徽章、5个维度栏、问题+建议标签、复制并发送到聊天室。
历史 --学习曲线+指标
学习曲线火花线、等级分布、每个维度的SGD学习权重。每次更新后 loopllm_feedback 电话。
扩展名VSIX位于 vscode-loopllm/loopllm-prompt-gauge-0.1.0.vsix --安装方式 code --install-extension.
______________________________________________________________________
主要工具: loopllm_run_pipeline
这是PromptLoop的预期入口点。一个调用运行完整的观察→ 引出→ 精炼→ 验证循环:
loopllm_run_pipeline("add retry logic to the download function")里面发生了什么:
- 得分 跨5个维度的提示(\0.5,则将其分为子任务
- 执行 每个子任务:
ctx.sample(prompt)→ 评估→ 如果低于阈值,请重试 - 验证 通过第二次测试,根据质量标准组装输出
ctx.sample()呼叫 - 日志 结果+SQLite的质量分数;通过在线SGD更新评分权重
一切都通过MCP采样在线运行——没有额外的聊天回合,也没有轮询。
______________________________________________________________________
快速入门
git clone https://github.com/azank1/loop-llm # GitHub repo still named loop-llm
cd loop-llm
pip install -e ".[mcp]"
code ..vscode/mcp.json 已提交——VS Code会自动获取服务器。\ 首次加载时,使用以下方式进行验证:
use loopllm_intercept with prompt: add retry logic to the download function然后:
use loopllm_run_pipeline with prompt: add retry logic to the download function______________________________________________________________________
作为软件包安装
pip install loopllm[mcp]添加 .vscode/mcp.json 对于您的项目:
{
"servers": {
"loopllm": {
"type": "stdio",
"command": "loopllm",
"args": ["mcp-server", "--provider", "agent"]
}
}
}用于光标使用 .cursor/mcp.json 随着 "mcpServers" 作为顶级密钥。
______________________________________________________________________
运作原理
You type a prompt
↓
loopllm_intercept ← scores it across 5 dimensions (~0ms, deterministic)
↓
route decision
< 0.4 → elicitation ← Thompson Sampling picks the highest-gain question
0.4–0.6 → elicit + refine
≥ 0.6 → refine directly
↓
loopllm_refine (if needed)
→ ctx.sample(prompt) ← MCP Sampling: calls host LLM mid-execution
→ evaluate output ← deterministic evaluators (length, regex, JSON schema)
→ if score < threshold: ctx.sample(improved prompt) ← retry inline
→ return best result
↓
result logged to ~/.loopllm/store.db
↓
loopllm_feedback (optional rating 1–5)
→ one SGD step updates scoring dimension weights评分维度 (每个0-1,根据所学权重合成为A-F级):
| 维度 | 它捕捉到了什么 |
|---|---|
| 特定性 | 模糊、通用的请求 |
| 约束清晰度 | 缺少格式、长度或规则要求 |
| 上下文完整性 | 未说明背景或目标 |
| 歧义 | 不明确的引用,没有先行词的代词 |
| 格式规范 | 未指定输出格式 |
MCP采样 --生成工具调用 ctx.sample() 内联调用host agent的LLM。全部得分→生成→评估→重试循环是一个单一的工具调用。回落到 agent_execute 如果客户端没有声明采样能力,则传递。
______________________________________________________________________
系统如何学习
在线评分权重梯度下降
默认权重为 {specificity: 0.25, constraint_clarity: 0.20, context_completeness: 0.20, ambiguity: 0.20, format_spec: 0.15}每次你打电话 loopllm_feedback(rating) 一个SGD步骤调整它们:
$$\\hat{y}=\\sum_i w_i\\cdot d_i\\quad\\text{(预测质量,歧义反转)}$$
$$\\mathcal{L}=(\\hat{y}-t)^2\\quad t=\\frac{\\text{rating}-1}{4}$$
$$w_i \\左箭头w_i-0.02\\cdot 2(\\hat{y}-t)\\cdot d_i$$
每一步后,权重被裁剪为$\[0.05,0.50\]$,并重新归一化为总和1(单纯形投影)。在大约50个评分后,权重会收敛,以反映提示中真正重要的内容。坚持 learned_weights 表(模式v4)。
Thompson问题排序抽样
每种问题类型(scope, format, constraints等)保持一个$\\text{Beta}(\\alpha,\\Beta)$优先级,其中$\\alpha$=历史正面影响计数+1,$\\Beta$=负面影响计数+1。当管道需要提出澄清问题时,它会为每种候选类型抽取一个样本:
$$s_i\\sim\\text{Beta}(\\alpha_i,\\Beta_i)$$
并选择$\\arg\\max_is_i$。这是一个多武装强盗:历史上提高输出质量的问题经常被问到(利用),而新的/未经测试的类型仍然偶尔出现(探索)。
贝塔二项式贝叶斯先验
每次调用观察都会更新每(task_type,model)收敛概率的共轭$\\text{Beta}(\\alpha,\\Beta)$先验。细化循环的自适应退出标准为:
$$P(\\text{收敛到下一次迭代})=\\frac{\\alpha}{\\alpha+\\beta}$$
当按预期改进下降加权的概率降至成本阈值以下时,循环会提前停止。实施于 adaptive_exit.py 使用 BetaPrior.prob_above(threshold) (正常近似通过 math.erf).
Welford的在线方差算法
NormalPrior 使用Welford的在线算法,使用$O(1)$内存跟踪输出质量分数的运行均值和方差,该算法具有可选的指数衰减($\\lambda=0.95$),以降低过时观测值的权重:
$$\\mu_n=\\mu{n-1}+\\frac{x_n-\\mu{n-1}}{n},\\quad\\sigma^2_n=\\frac{(n-1)\\sigma^ 2\_{n-1}+(x_n-\\mu\_{n-1})(x_n-\\mu_n)}{n\]$$
滚动计划信心
$$C\_{\\text{rolling}=\\frac{\\sum_i C_i\\cdot 0.85^{n-i}}{\\sum_i 0.85^{n-1}}$$
其中,$c_i$是第i个已完成任务的置信度。指数衰减使最近的任务权重更大。计划开门 confidence ≥ threshold 在进入下一个任务之前。
______________________________________________________________________
工具(24)
| 工具 | 它做什么 |
|---|---|
loopllm_run_pipeline | 主要的,重要的 引出→ 分解→ 执行→ 在一次通话中验证 |
loopllm_intercept | 分数+路线提示;记录历史 |
loopllm_gauge | 即时质量条,无需DB写入 |
loopllm_refine | 得分→ 样品→ 通过MCP采样重试循环 |
loopllm_plan_tasks | 通过MCP采样将目标分解为有序的子任务 |
loopllm_verify_output | 关键字预检+根据质量标准进行深度抽样 |
loopllm_elicitation_start/answer/finish | 多轮澄清问题环节 |
loopllm_plan_register | 创建一个保存到SQLite的信心门控计划 |
loopllm_plan_next | 前进到下一个任务;回报 needs_replan 如果质量下降 |
loopllm_plan_update | 记录任务得分;重新计算滚动置信度 |
loopllm_plan_list | 仪表板:所有带有仪表和任务计数的计划 |
loopllm_plan_delete | 删除已完成或放弃的计划 |
loopllm_context_history | 使用火花线浏览提示历史记录 |
loopllm_context_clear | 擦除提示历史记录(范围或全部) |
loopllm_prompt_stats | 提示质量趋势和学习曲线 |
loopllm_feedback | 对回答进行评分(1-5);触发SGD权重更新 |
loopllm_suggest_config | 任务类型的贝叶斯最优循环配置 |
loopllm_classify_task | 标记提示的任务类型 |
loopllm_analyze_prompt | 生成按汤普森采样增益排序的澄清问题 |
loopllm_list_tasks | 列出持久存储中的任务 |
loopllm_show_task | 单个任务的详细视图 |
loopllm_report | 学习权重、贝叶斯先验、问题有效性统计 |
计划和学习的重量坚持到 ~/.loopllm/store.db 并在服务器重启后存活(模式v4)。
______________________________________________________________________
本地型号(无MCP)
pip install loopllm[serve]
loopllm serve --port 8765 # REST scoring middlewarefrom loopllm.local_loop import LocalModelLoop
loop = LocalModelLoop(
base_url="http://localhost:11434",
model="llama3.2",
score_url="http://localhost:8765/score",
quality_threshold=0.80,
max_retries=3,
)
result = loop.run("Write a Python function to parse JSON safely.")
print(result.output, result.best_score, result.converged)______________________________________________________________________
贡献
git clone https://github.com/azank1/loop-llm # GitHub repo still named loop-llm
cd loop-llm
pip install -e ".[dev]"
python -m pytest tests/ -q # 186 tests, ~2s分行策略:
main--稳定、发布的代码testing-production--积极发展;PR首先针对此分支
关键文件:
src/loopllm/mcp_server.py--所有24个MCP工具+SGD权重更新+MCP采样助手src/loopllm/store.py--SQLite持久性(模式v4:先验、历史、计划、学习权重)src/loopllm/priors.py--Beta二项式和正态先验,Welford算法src/loopllm/adaptive_exit.py--贝叶斯早期停止src/loopllm/evaluators.py--确定性输出评估器
PR欢迎。在中添加新工具的测试 tests/.
______________________________________________________________________
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
LOOPLLM_PROVIDER | agent | agent, ollama,或 openrouter |
LOOPLLM_MODEL | agent | 模型标识符(在代理模式下忽略) |
LOOPLLM_DB | ~/.loopllm/store.db | SQLite存储路径 |
OLLAMA_HOST | http://localhost:11434 基础 URL | |
OPENROUTER_API_KEY | - | OpenRouter API密钥 |
______________________________________________________________________
许可证
麻省理工学院

为您的AI代理提供贝叶斯快速观察者和质量循环。
PromptLoop作为MCP服务器位于您和IDE代理之间。你写的每个提示都会被拦截,在五个质量维度上评分,并被发送到正确的工具——澄清、细化或任务分解。它跟踪您的提示历史记录,允许您使用置信度门控管理多任务计划,并通过MCP采样使用主机代理自己的LLM运行迭代改进循环,而不需要单独的模型。
把它看作是 迅速观察者:它观察你的问题,测量它的形成程度,告诉你它薄弱的地方,并在代理采取行动之前自动改进它。
堆栈: Python 3.11+、FastMCP(stdio)、SQLite(贝叶斯先验+提示历史+计划)、确定性启发式评分、用于中期执行LLM调用的MCP采样。
______________________________________________________________________
快速入门
git clone https://github.com/azank1/loop-llm # GitHub repo still named loop-llm
cd loop-llm
pip install -e ".[mcp]"
code ..vscode/mcp.json 已提交——VS Code会自动获取服务器。如果工具未出现: MCP:重新启动服务器→ loopllm 在命令选项板中。
在Copilot聊天中验证:
use loopllm_gauge to score this prompt: write me some code______________________________________________________________________
作为软件包安装
pip install loopllm[mcp]添加 .vscode/mcp.json 对于您的项目:
{
"servers": {
"loopllm": {
"type": "stdio",
"command": "loopllm",
"args": ["mcp-server", "--provider", "agent"]
}
}
}用于光标使用 .cursor/mcp.json 随着 "mcpServers" 作为顶级密钥。
______________________________________________________________________
运作原理
You type a prompt
↓
loopllm_intercept ← scores it across 5 dimensions (~0ms, deterministic)
↓
route decision
< 0.4 → elicitation ← agent asks the 1-2 highest-gain clarifying questions
0.4–0.6 → elicit + refine
≥ 0.6 → refine directly
↓
loopllm_refine (if needed)
→ ctx.sample(prompt) ← MCP Sampling: calls host LLM mid-execution
→ evaluate output ← deterministic evaluators (length, regex, JSON schema)
→ if score < threshold: ctx.sample(improved prompt) ← retry inline
→ return best result
↓
result logged to ~/.loopllm/store.db评分维度 (每个0-1,合成为a-F级):
| 维度 | 它捕捉到了什么 |
|---|---|
| 特定性 | 模糊、通用的请求 |
| 约束清晰度 | 缺少格式、长度或规则要求 |
| 上下文完整性 | 未说明背景或目标 |
| 歧义 | 不明确的引用,没有先行词的代词 |
| 格式规范 | 未指定输出格式 |
MCP采样 指生成工具(loopllm_refine, loopllm_run_pipeline, loopllm_plan_tasks, loopllm_verify_output)呼叫 ctx.sample() 内联调用host agent的LLM——整个分数→生成→评估→重试循环发生在单个工具调用中,而不是在多个聊天回合中。回落到 agent_execute 如果客户端没有声明采样能力,则传递。
提示历史记录 在SQLite中存储了每个提示的分数、成绩、任务类型和会话标签。使用 loopllm_context_history 为了浏览它, loopllm_prompt_stats 为你的潮流火花线,或 loopllm_context_clear 重置。
______________________________________________________________________
工具(24)
| 工具 | 它做什么 |
|---|---|
loopllm_intercept | 评分+路由提示——在每次请求时先调用此提示 |
loopllm_gauge | 即时质量条,无需DB写入 |
loopllm_refine | 得分→ 样品→ 通过MCP采样重试循环 |
loopllm_run_pipeline | 精英→ 分解→ 执行→ 在一次工具调用中验证 |
loopllm_plan_tasks | 通过MCP采样将目标分解为有序的子任务 |
loopllm_verify_output | 关键字预检+根据质量标准进行深度抽样 |
loopllm_elicitation_start/answer/finish | 多轮澄清问题环节 |
loopllm_plan_register | 创建一个保存到SQLite的信心门控计划 |
loopllm_plan_next | 前进到下一个任务;回报 needs_replan 如果质量下降 |
loopllm_plan_update | 记录任务得分;重新计算滚动置信度 |
loopllm_plan_list | 仪表板:所有带有仪表和任务计数的计划 |
loopllm_plan_delete | 删除已完成或放弃的计划 |
loopllm_context_history | 使用火花线浏览提示历史记录 |
loopllm_context_clear | 擦除提示历史记录(范围或全部) |
loopllm_prompt_stats | 提示质量趋势和学习曲线 |
loopllm_feedback | 对回答进行评分(1-5),以提高未来的评分 |
loopllm_suggest_config | 任务类型的贝叶斯最优循环配置 |
loopllm_classify_task | 标记提示的任务类型 |
loopllm_analyze_prompt | 生成按信息增益排序的澄清问题 |
loopllm_list_tasks | 列出持久存储中的任务 |
loopllm_show_task | 单个任务的详细视图 |
loopllm_report | 学习贝叶斯先验和问题有效性 |
计划坚持到 ~/.loopllm/store.db 并在服务器重启后幸存下来。
滚动信心:
confidence(task) = prompt_score × 0.35 + output_score × 0.65
rolling = Σ(confidence_i × 0.85^(n-i)) / Σ(0.85^(n-i))______________________________________________________________________
本地型号(无MCP)
pip install loopllm[serve]
loopllm serve --port 8765 # REST scoring middlewarefrom loopllm.local_loop import LocalModelLoop
loop = LocalModelLoop(
base_url="http://localhost:11434",
model="llama3.2",
score_url="http://localhost:8765/score",
quality_threshold=0.80,
max_retries=3,
)
result = loop.run("Write a Python function to parse JSON safely.")
print(result.output, result.best_score, result.converged)______________________________________________________________________
贡献
git clone https://github.com/azank1/loop-llm # GitHub repo still named loop-llm
cd loop-llm
pip install -e ".[dev]"
python -m pytest tests/ -q # 186 tests, ~0.5s分行策略:
main--稳定、发布的代码testing-production--积极发展;PR首先针对此分支
关键文件:
src/loopllm/mcp_server.py--所有24个MCP工具+MCP采样助手src/loopllm/plan_registry.py--信心门控计划跟踪src/loopllm/store.py--SQLite持久性(模式v3)src/loopllm/evaluators.py--确定性输出评估器src/loopllm/serve.py--用于本地模型的REST服务器src/loopllm/local_loop.py--Ollama包装带得分→重试循环
PR欢迎。在中添加新工具的测试 tests/.
______________________________________________________________________
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
LOOPLLM_PROVIDER | agent | agent, ollama,或 openrouter |
LOOPLLM_MODEL | agent | 模型标识符(在代理模式下忽略) |
LOOPLLM_DB | ~/.loopllm/store.db | SQLite存储路径 |
OLLAMA_HOST | http://localhost:11434 基础 URL | |
OPENROUTER_API_KEY | - | OpenRouter API密钥 |
______________________________________________________________________
许可证
麻省理工学院
