Express 指数
   [![LLM Backend]()](https://lmstudio.ai)
隐私优先的网络研究,具有分层检索/报告模式、源引用输出、MCP工具和简单的面向用户的终端体验。
特征标签
peek:纯链接发现原语返回排名sourcesskim:引用第一蒸馏返回final_answer,claims,key_evidenceanalyze:对明确备选方案进行比较裁决,并自动回退到research当比较输入不足时research:迭代计划器审阅者DAG返回final_synthesis,evidence_graph,以及覆盖状态- 引文合同:证据链接
source_id/evidence_id - 输出:报告的可选标记导出
层级矩阵
| 级别 | 最适合 | 检索 | LLM | 输出 |
|---|---|---|---|---|
peek | 快速证据前沿 | 多意图检索+校准 | 否 | sources 带有排名元数据 |
skim | 快速接地回答 | 平行证据收集 | 索赔/证据提炼 | final_answer, claims, key_evidence |
analyze | 比较备选方案并推荐一个 | 对抗性证据通过 | 决策裁定 | 比较器有效载荷或路由 research 带有路由元数据的有效载荷 |
research | 详尽的调查 | 迭代规划/审查循环 | 图合成 | evidence_graph, coverage_report, trace_log |
建筑
Client (MCP or TUI)
|
v
MCP Server (server.py)
|- peek -> PeekAgent (consensus-calibrated retrieval primitive)
|- skim -> SkimAgent (citation-first distillation pack)
|- analyze -> AnalyzeOrchestrator (adversarial claim adjudication)
|- research -> DeepSearchOrchestrator (iterative planner-reviewer DAG)
|
+-- SearXNGClient (retrieval)
+-- LLMClient (OpenAI-compatible)
+-- workflow_primitives.py (ranking/evidence/claims primitives)快速开始
- 复制env模板并设置模型:
cp .env.example .env- 集
LLM_MODEL_ID在.env到您加载的LM Studio型号ID。
建议最小值 .env 对于大多数用户:
LLM_API_URL=http://localhost:1234/v1
LLM_MODEL_ID=
LLM_MAX_PARALLEL=4
SEARXNG_URL=http://localhost:8888其他一切 .env.example 是可选的调整。
- 构建并启动后端服务:
docker compose up -d --build- 健康检查:
curl http://localhost:8000/health
curl http://localhost:8000/ready
curl http://localhost:8000/metrics
curl http://localhost:8888/healthz/ready 是部署检查的更严格的准备门,以及 /metrics 返回具有延迟聚合的请求/工具计数器。
MCP工具
主要工具:
peekskimanalyzeresearchfetch_url(用于URL检查的原始页面获取助手)
向后兼容的别名:
quicksearch->skimdeepresearch->research
示例调用:
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"skim","arguments":{"query":"fun facts about slugs","max_results":15}}}终端UI(面向用户)
安装本地CLI:
pip install -e .启动TUI:
expressindex --tui运行直接命令模式:
expressindex peek "what is searxng"
expressindex skim "fun facts about slugs" --save-md report.md
expressindex analyze "best python web framework" --save-md compare.md
expressindex analyze "python vs node.js for backend" --options "python,node.js"
expressindex research "vacation plan to aruba" --num-sub-queries 6 --save-md aruba.md
expressindex status
expressindex metrics --json所有终端激活(所有搜索模式+URL获取助手):
# Search modes (CLI)
expressindex peek "slug facts"
expressindex skim "slug facts"
expressindex analyze "python vs node.js for backend" --options "python,node.js"
expressindex research "slug facts" --num-sub-queries 6
# URL fetch helper (MCP tool)
curl -sS http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "fetch_url",
"arguments": {
"url": "https://en.wikipedia.org/wiki/Slug",
"max_chars": 4000
}
}
}'直接模式输出格式:
expressindex skim "fun facts" --output text
expressindex skim "fun facts" --output json
expressindex skim "fun facts" --output markdownUI目标:
- 明确的进度提示
- 友好的错误消息
- 正常输出中无MCP协议噪声
- 用于多报告模式的简单命令循环用户体验,带有模拟MCP消费者摘要
报告合同
所有查询工具现在都返回具有共享原语的严格MCP优先JSON:
sources[]:{source_id, url, title, domain, relevance_score, domain_trust_score, freshness_timestamp, intent_category}key_evidence[]:{evidence_id, source_id, exact_quote, relevance_score}claims[]:{claim_id, statement, support_evidence_ids, refute_evidence_ids, confidence_tier}_meta:{token_estimate, compute_ms, schema_version}
特定模式输出:
peek:query,sources,_metaskim:final_answer,claims,uncertaintiesanalyze:requested_mode,executed_mode,route_reason,options_compared,recommended_option,confidence,why_not,recommended_position,decision_matrixresearch:final_synthesis,evidence_graph,coverage_report,open_questions,trace_log
环境变量
如果整个表感觉太可配置,请使用上面的4变量最小配置,其余部分保持默认值。
| 变量 | 目的 | 默认值 |
|---|---|---|
LLM_API_URL | OpenAI兼容的基本URL | http://localhost:1234/v1 |
LLM_API_KEY | 可选API密钥 | 空 |
LLM_MODEL_ID | 活动模型ID | local-model |
LLM_MODEL | 模型ID的旧别名(用于 LLM_MODEL_ID 为空) | 为空 |
LLM_TIMEOUT | LLM超时(0 =无超时) | 0 |
LLM_MAX_PARALLEL | 最大并发LLM调用数 | 4 |
LLM_RETRIES | 尝试重试瞬时LLM故障 | 2 |
SEARXNG_URL | SearXNG终点 | http://searxng:8080 |
SEARXNG_TIMEOUT | 搜索超时(0 =无超时) | 0 |
SEARXNG_RETRIES | 暂时搜索失败后重试 | 2 |
PEEK_MAX_URLS | 的默认最大URL peek | 5 |
SKIM_MAX_URLS | 的默认最大URL skim | 15 |
SKIM_AGENT_COUNT | 并行脱脂检索代理 | 1 |
ANALYZE_SOURCES_PER_AGENT | 每个分析代理的来源 | 12 |
ANALYZE_AGENT_COUNT | 分析检索变量的数量 | 2 |
ANALYZE_CONTRADICTION_AGENTS | 用于传统分析路径的兼容性旋钮 | 0 |
RESEARCH_MAX_SUB_QUERIES | 研究子查询(空白=继承 MAX_CONCURRENT_AGENTS) | 继承 |
RESEARCH_SOURCES_PER_SUB_QUERY | 每个研究子查询的来源 | 8 |
MAX_CONCURRENT_AGENTS | 平行研究人员 | 7 |
QUERY_MAX_LENGTH | 最大可接受查询长度 | 600 |
READINESS_REQUIRE_LLM | 需要LLM健康状况 /ready | true |
TOOL_TIMEOUT_PEEK | 最长秒数 peek 工具执行(0 禁用超时) | 30 |
TOOL_TIMEOUT_SKIM | 最长秒数 skim 工具执行(0 禁用超时) | 120 |
TOOL_TIMEOUT_ANALYZE | 最长秒数 analyze 工具执行(0 禁用超时) | 300 |
TOOL_TIMEOUT_RESEARCH | 最长秒数 research 工具执行(0 禁用超时) | 900 |
HTTP_RETRY_BASE_MS | 指数重试回退的基本延迟 | 250 |
LOG_LEVEL | 日志记录级别 | INFO |
LOG_FORMAT | text 或结构化 json 日志 | text |
仍支持旧别名:
LLM_MODEL->LLM_MODEL_ID
LM Studio并行性注释
- 增加模型侧
Max Concurrent Predictions在LM工作室。 - 保持
Unified KV Cache启用。 - 调谐
LLM_MAX_PARALLEL以匹配VRAM和模型吞吐量。
故障排除
- LLM不可用:
- 验证LM Studio服务器是否已启动 LLM_API_URL - 验证 LLM_MODEL_ID 匹配当前加载的模型
- 响应缓慢:
- 降低 LLM_MAX_PARALLEL - 降低 RESEARCH_MAX_SUB_QUERIES 和 MAX_CONCURRENT_AGENTS
- 引文质量问题:
- 报告生成器自动执行引文修复过程
全部
- 手动模式:在以Markdown格式检索整个页面时获取提供者文档,并添加明确的手动工作流程。
项目地图
- MCP服务器:
mcp-server/server.py - 层级代理:
mcp-server/agents/quicksearch.py,mcp-server/agents/deepresearch.py - 报告引擎:
mcp-server/reporting.py - 搜索/LLM客户:
mcp-server/search/searxng_client.py,mcp-server/search/llm_client.py - ExpressIndex命令行界面/TUI:
expressindex_cli/main.py - 旧助手脚本:
mcp-server/tui.py - 技能简介:
.agents/skills/searxng-mcp-research/SKILL.md
