Skip to main content
Glama
kartikeya788

pharma-rag-mcp

by kartikeya788

pharma-rag-mcp

Полностью локальная, сквозная система Retrieval-Augmented Generation (RAG) для фармацевтической аналитики продаж — построена на LangChain, ChromaDB, Ollama и Model Context Protocol (MCP).

Система загружает инструкции к препаратам, документы клинических испытаний и заметки с переговоров в локальную векторную базу данных, предоставляет их в виде MCP-инструментов и отвечает на вопросы на естественном языке через агента LangGraph ReAct, работающего на локально запущенной LLM.


Архитектура

data/sources/          ← raw .txt files (drug labels, trials, call notes)
      │
      ▼
data/ingest.py         ← loads, splits into chunks, embeds with all-MiniLM-L6-v2
      │
      ▼
chroma_db/             ← persisted ChromaDB collections (384-dim vectors)
  ├── drug_info/
  ├── competitor_intel/
  └── pitch_content/
      │
      ▼
mcp_server/server.py   ← MCP server over stdio — exposes 4 retrieval tools
      │   (MCP JSON-RPC)
      ▼
agent/agent.py         ← LangGraph ReAct agent (ChatOllama + MCP tools)
      │
      ▼
ui/app.py              ← Gradio chat interface (browser)

Вспомогательные модули

Модуль

Назначение

rag/embeddings.py

Обёртка модели эмбеддингов HuggingFace (all-MiniLM-L6-v2)

rag/vectorstore.py

Сборщик / загрузчик коллекций ChromaDB

eval/evaluate.py

Оценка качества поиска (Hit Rate, MRR, Context Precision)


Related MCP server: DocAgent-MCP

База знаний

11 препаратов × 3 типа документов = 33 исходных файла:

Коллекция

Исходная папка

Содержимое

drug_info

data/sources/drug_labels/

Сводки инструкций к препаратам в стиле FDA

competitor_intel

data/sources/clinical_trials/

Результаты клинических испытаний

pitch_content

data/sources/call_notes/

Транскрипты звонков торговых представителей

Препараты: Dupixent, Eliquis, Entresto, Farxiga, Fasenra, Jardiance, Rinvoq, Skyrizi, Trelegy Ellipta, Trulicity, Xarelto


Предварительные требования

  • Python 3.13+

  • Ollama запущен локально с загруженной моделью:

ollama pull llama3.2
  • Виртуальное окружение Python с установленными зависимостями (см. Setup).


Установка

# 1. Clone and enter the project
git clone <repo-url>
cd pharma-rag-mcp

# 2. Create and activate a virtual environment
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS / Linux:
source .venv/bin/activate

# 3. Install dependencies
pip install -r requirements.txt

# 4. Configure environment (optional — defaults work out of the box)
cp .env.example .env
# Edit .env to set OLLAMA_MODEL and OLLAMA_BASE_URL if needed

# 5. Build the vector database (only needed once)
python -m data.run_ingest

Запуск системы

Каждый слой можно использовать независимо. Запустите Ollama перед использованием агента или интерфейса.

Агент (CLI)

python -m agent.agent

Интерактивный чат в командной строке с двухуровневой памятью:

  • Память сессии — запрос, использованные инструменты, режим источника и ответ каждого хода хранятся в оперативной памяти во время текущего запуска.

  • Долговременная память — при выходе сессия добавляется (с временными метками) в memory/long_term.json на диске.

Введите любое из bye, close, end, exit, goodbye, quit для выхода — агент выведет сводку сессии и сбросит память перед завершением.

Режимы источника ответа

Агент определяет и помечает, как был получен каждый ответ:

Значок

Значение

[Source: Knowledge Base]

Ответ полностью основан на извлечённых фрагментах

[Source: Knowledge Base + General Knowledge]

Извлечённые факты объединены с общими знаниями; пункты вне базы помечены [GK] в тексте

[Source: General Knowledge only]

Инструменты не вернули ничего релевантного; ответ дан на основе общих фармацевтических/продажных знаний

Многоходовой контекст

Агент передаёт последние N ходов истории разговора в LLM на каждый вопрос, поэтому уточняющие вопросы, например "он меня проигнорировал, как мне снова вовлечь его?", получают ответ с учётом контекста. N задаётся в config.yaml:

agent:
  history_window: 3   # number of prior turns to include

Gradio UI (браузер)

python -m ui.app

Открывает чат-интерфейс по адресу http://localhost:7860.

Только MCP-сервер (транспорт stdio)

python -m mcp_server.server

Загружает три коллекции ChromaDB и ожидает MCP JSON-RPC сообщения на stdin.

Зарегистрированные инструменты:

Инструмент

Описание

search_drug_info

Поиск по документам инструкций к препаратам

search_competitor_intel

Поиск по данным клинических испытаний

search_pitch_content

Поиск по заметкам с переговоров

search_all

Поиск по всем трём коллекциям, объединённый

Оценка поиска

# Evaluate all three collections
python -m eval.evaluate

# Evaluate one collection with k=5
python -m eval.evaluate --collection drug_info --k 5

Выводит Hit Rate, MRR и Context Precision по каждой коллекции и в целом.


Конфигурация

Файл

Назначение

.env

Модель Ollama и базовый URL (скопируйте из .env.example)

config.yaml

Поведение агента (окно истории разговора)

.env

Переменная

По умолчанию

Описание

OLLAMA_MODEL

llama3.2

Имя модели Ollama (должна быть загружена)

OLLAMA_BASE_URL

http://localhost:11434

URL HTTP-демона Ollama

config.yaml

agent:
  history_window: 3   # prior turns passed to LLM for multi-turn context

Структура проекта

pharma-rag-mcp/
├── config.yaml             # Agent configuration
├── data/
│   ├── ingest.py           # IngestionPipeline class
│   ├── run_ingest.py       # CLI: build + spot-check all collections
│   └── sources/
│       ├── drug_labels/    # 11 × drug label .txt files
│       ├── clinical_trials/# 11 × clinical trial .txt files
│       └── call_notes/     # 11 × sales call note .txt files
├── rag/
│   ├── embeddings.py       # EmbeddingModel (all-MiniLM-L6-v2)
│   └── vectorstore.py      # VectorStoreManager (ChromaDB)
├── mcp_server/
│   ├── server.py           # MCP server entrypoint (stdio)
│   └── tools.py            # 4 retrieval tool definitions
├── agent/
│   └── agent.py            # PharmaAgent + CLI loop with memory
├── ui/
│   └── app.py              # Gradio chat UI
├── eval/
│   └── evaluate.py         # Hit Rate / MRR / Context Precision
├── memory/
│   └── long_term.json      # Persisted session history (auto-created)
├── chroma_db/              # Persisted vector collections (git-ignored)
├── .env.example
├── pyproject.toml
└── requirements.txt

Ключевые проектные решения

Локальность прежде всего — никаких облачных API, никаких ключей API. Эмбеддинги через HuggingFace, векторное хранилище через ChromaDB, генерация через Ollama.

MCP как уровень поиска — MCP-сервер чётко разделяет поиск и генерацию. Любой MCP-совместимый клиент может вызывать инструменты поиска.

Адаптивные режимы ответа — агент автоматически определяет, можно ли ответить на вопрос только из базы знаний, требуется ли объединение с общими знаниями, или вопрос полностью вне базы. Каждый ответ чётко помечен, чтобы пользователь всегда знал источник.

Скользящее окно истории — в LLM отправляются только последние N ходов, что ограничивает использование контекстного окна, сохраняя при этом поддержку естественных многоходовых разговоров.

Двухуровневая память — память сессии (в оперативной памяти) сбрасывается в постоянный JSON-журнал при выходе, что даёт полный аудит-след каждого запроса, использованного инструмента, режима источника и ответа во всех запусках.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language queries on technical specifications and automated code compliance checks using local RAG with vector search, integrated via MCP.
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables local document question-answering and retrieval via MCP, supporting multi-turn conversation, intent recognition, and tools for document search, Q&A, and summarization.
    5
  • A
    license
    Not graded
    quality
    C
    maintenance
    A privacy-preserving local RAG system integrated with MCP, enabling natural language queries over ingested documents and a SQLite database through vector search and local database tools.
    MIT

View all related MCP servers

Related MCP Connectors

  • Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.

  • Certified SEC EDGAR fact memory for AI agents with zero hallucination and filing provenance.

  • Hosted MCP server exposing US hospital procedure cost data to AI assistants

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kartikeya788/pharma-rag-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server