文档问答服务

基于本地文档的问答服务,支持文档分块索引并提供带引用的回答。

  • by Carune
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Carune/doc-qa-mcp

使用说明

# 医生qa-mcp

用于基于本地文档的问答的MCP/REST服务器。
收听并索引文档,并提供包含搜索结果作为依据(citation)的答案。

1.主要功能

  • MCP工具
    • health_check
    • index_documents
    • list_sources
    • search_chunks
    • ask_with_citations
  • REST API
    • POST /api/index
    • POST /api/index-text
    • POST /api/index-upload
    • POST /api/index/reset
    • GET /api/index/storage
    • GET /api/sources
    • POST /api/search
    • POST /api/ask
    • POST /api/ask-stream
    • POST /api/summarize
  • 搜索/回答模式
    • 搜索: lexical, hybrid(使用矢量时)
    • 回答: client_llm, ollama

2.快速开始

npm install
npm run dev

默认地址

  • UI: http://localhost:3000/
  • 健康检查: http://localhost:3000/healthz
  • MCP端点: http://localhost:3000/mcp

3.环境变量

.env.example复制 .env请制作。

MCP_TRANSPORT=http
MCP_HOST=0.0.0.0
MCP_PORT=3000

PERSIST_INMEMORY_INDEX=true
INMEMORY_INDEX_PATH=.data/inmemory-index.json
MAX_INMEMORY_INDEX_BYTES=20971520

ENABLE_PGVECTOR=false
DATABASE_URL=postgres://mcp:mcp@localhost:5432/mcp_doc_qa

OPENAI_API_KEY=
OPENAI_EMBEDDING_MODEL=text-embedding-3-small

EMBEDDING_PROVIDER=none
ANSWER_MODE=client_llm
OLLAMA_BASE_URL=http://127.0.0.1:11434
OLLAMA_CHAT_MODEL=qwen2.5:7b-instruct
OLLAMA_EMBEDDING_MODEL=nomic-embed-text

VECTOR_DIMENSION=1536

推荐模式

  • 本地完全RAG
    • EMBEDDING_PROVIDER=ollama
    • ANSWER_MODE=ollama
  • 最低配置(MVP)
    • EMBEDDING_PROVIDER=none
    • ANSWER_MODE=client_llm

4.基于Ollama运行

准备型号

ollama pull qwen2.5:7b-instruct
ollama pull nomic-embed-text

运行服务器

npm run dev

5.使用顺序

  1. 文档索引
  • 路径索引: POST /api/index
  • 文本索引: POST /api/index-text
  • 文件上载索引: POST /api/index-upload
  1. 确认搜索
  • POST /api/search
  1. 问答
  • 一般: POST /api/ask
  • 流: POST /api/ask-stream
  • 完整摘要: POST /api/summarize
  1. 操作验证
  • 源列表: GET /api/sources
  • 存储库信息: GET /api/index/storage
  • 初始化索引: POST /api/index/reset

6.测试/评估/平台

npm run test
npm run eval
BENCH_QUESTION="테이블 목록 알려줘" npm run bench
  • test:单位/集成测试
  • eval:输出简单质量指标
  • bench:API延迟/TTFT基准

7.注意事项

  • lexical 在模式中,文档语言和提问语言不同可能会降低性能。
  • 结构查询(表/菜单/列表)优先使用决定性提取路径。
  • 在生产环境中, /api/index 建议对路径输入应用访问控制/allowlist。

8.连接ChatGPT连接器

  1. 运行服务器(MCP_TRANSPORT=http)
  2. 准备公开URL(ngrok/Cloudflare Tunnel)
  3. 连接器 https://<public-url>/mcp 注册

请参见

  • ChatGPT订阅和OpenAI API收费是分开的。
  • ANSWER_MODE=client_llm反面客户端LLM生成最终语句。 ANSWER_MODE=ollama如果是,服务器将生成最后一句话。

9.投资组合资料

  • 产品组合摘要(体系结构/指标): docs/portfolio/overview.md
  • 3分钟演示脚本: docs/portfolio/demo-script.md
  • 安全和操作说明: docs/portfolio/security-ops.md