Architecture Documentation | ็ณป็ตฑๆถๆง่จญ่จ่ชชๆ
- ็ณป็ตฑ็ธฝ่ฆฝ
- DDD ้ ๅ้ฉ ๅ่จญ่จ
- MCP ๅทฅๅ ทๅๅฑค
- Pipeline ๆไน ๅ่ๆ็จ
- HTTPS ้จ็ฝฒๆถๆง
- ่ณๆๆต็จ
- ๅ ง้จๆฉๅถ
PubMed Search MCP ๆฏไธๅๅบๆผ Domain-Driven Design (DDD) ็ MCP ไผบๆๅจ๏ผๅฐ็บ AI Agent ๆไพๆบๆ งๆ็ป็ ็ฉถ่ฝๅใ
| ๅๅ | ่ชชๆ |
|---|---|
| Agent-First | ่ผธๅบๆ ผๅผๅชๅ็บๆฉๅจๆฑบ็ญ๏ผ้ไบบ้ก้ฑ่ฎ |
| Task-Oriented | ๅทฅๅ ทไปฅ็ ็ฉถไปปๅ็บๅฎไฝ๏ผ่้ๅบๅฑค API |
| Domain-Driven | ไปฅๆ็ป็ ็ฉถ้ ๅ็ฅ่ญ็บๆ ธๅฟๅปบๆจก |
| Context-Aware | ้้ Session ็ถญๆ็ ็ฉถ็ๆ |
src/pubmed_search/
โโโ mcp/
โ โโโ tools/ # Application Layer - MCP ๅทฅๅ
ท
โ โ โโโ discovery.py # ๆข็ดขๅๅทฅๅ
ท (search, related, citing)
โ โ โโโ strategy.py # ็ญ็ฅๅๅทฅๅ
ท (generate_queries, expand)
โ โ โโโ pico.py # PICO ่งฃๆ
โ โ โโโ merge.py # ็ตๆๅไฝต
โ โ โโโ export.py # ๅฏๅบๅทฅๅ
ท
โ โ โโโ citation_tree.py # ๅผ็จ็ถฒ็ตก่ฆ่ฆบๅ
โ โ โโโ _common.py # ๅ
ฑ็จๅทฅๅ
ทๅฝๆธ
โ โโโ session_tools.py # Session ็ฎก็ (ๅ
ง้จ)
โ โโโ server.py # MCP Server ๅ
ฅๅฃ
โ
โโโ entrez/ # Infrastructure Layer - NCBI API
โ โโโ searcher.py # ๆ็ปๆๅฐๅจ
โ โโโ fetcher.py # ๆ็ซ ่ฉณๆ
็ฒๅ
โ โโโ mesh.py # MeSH ่ฉๅฝๆฅ่ฉข
โ
โโโ exports/ # Infrastructure Layer - ๅฏๅบๆ ผๅผ
โ โโโ ris.py # RIS ๆ ผๅผ
โ โโโ bibtex.py # BibTeX ๆ ผๅผ
โ โโโ csv_export.py # CSV ๆ ผๅผ
โ โโโ medline.py # MEDLINE ๆ ผๅผ
โ
โโโ domain/ # Domain Layer - ้ ๅๆจกๅ
โ โโโ entities/
โ โ โโโ article.py # ๆ็ซ ๅฏฆ้ซ
โ โ โโโ search_result.py # ๆๅฐ็ตๆ
โ โโโ value_objects/
โ โโโ pmid.py # PMID ๅผ็ฉไปถ
โ โโโ query.py # ๆฅ่ฉขๅผ็ฉไปถ
โ
โโโ session.py # Session ็ฎก็ (ๅ
ง้จๆฉๅถ)
โโโ client.py # Python Client API
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Presentation Layer โ
โ (MCP Protocol / HTTP API) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Application Layer โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ MCP Tools โ โ
โ โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโ โ โ
โ โ โDiscoveryโ โStrategy โ โExportโ โ โ
โ โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Domain Layer โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Domain Services โ โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โ โ
โ โ โ Search โ โ Citation Tree โ โ โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โ โ
โ โ Domain Entities โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโ โ โ
โ โ โArticle โ โ Query โ โSessionโ โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Infrastructure Layer โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ NCBI Entrez โ โ Exports โ โ Cache โ โ
โ โ API โ โ (RIS, Bib) โ โ (Memory) โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MCP Tools (14) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Discovery Tools (8) โ โ
โ โ ๆข็ดขๅๅทฅๅ
ท - ๆๅฐใ็ผ็พใๆข็ดขๆ็ป โ โ
โ โ โ โ
โ โ โข search_literature ๆๅฐ PubMed ๆ็ป โ โ
โ โ โข find_related_articles ๅฐๆพไธป้ก็ธไผผๆ็ซ (PubMed algorithm) โ โ
โ โ โข find_citing_articles ๅฐๆพๅผ็จๆญคๆ็่ซๆ (Forward โก๏ธ) โ โ
โ โ โข get_article_references ๅๅพๆญคๆ็ๅ่ๆ็ป (Backward โฌ
๏ธ) โ โ
โ โ โข fetch_article_details ๅๅพๆ็ซ ๅฎๆด่ณ่จ โ โ
โ โ โข get_citation_metrics ๅๅพๅผ็จๆๆจ (iCite RCR/Percentile) โ โ
โ โ โข build_citation_tree ๅปบๆงๅผ็จ็ถฒ็ตกๆจน (6 ็จฎๆ ผๅผ) โ โ
โ โ โข suggest_citation_tree ่ฉไผฐๆฏๅฆๅผๅพๅปบๆงๅผ็จๆจน โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Strategy Tools (4) โ โ
โ โ ็ญ็ฅๅๅทฅๅ
ท - ๆๅฐ็ญ็ฅ็ๆใๆดๅฑใๅไฝต โ โ
โ โ โ โ
โ โ โข parse_pico ่งฃๆ PICO ่จๅบๅ้ก (ๆๅฐๅ
ฅๅฃ) โ โ
โ โ โข generate_search_queries ็ข็ๅคๅๆๅฐ็ญ็ฅ (ESpell + MeSH) โ โ
โ โ โข merge_search_results ๅไฝตๅป้ๆๅฐ็ตๆ โ โ
โ โ โข expand_search_queries ๆดๅฑๆๅฐ็ญ็ฅ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Export Tools (3) โ โ
โ โ ๅฏๅบๅๅทฅๅ
ท - ๅฏๅบๅผ็จใๅๅพๅ
จๆ้ฃ็ต โ โ
โ โ โ โ
โ โ โข prepare_export ๅฏๅบๅผ็จๆ ผๅผ (RIS/BibTeX/CSV/MEDLINE) โ โ
โ โ โข get_article_fulltext_links ๅๅพๅ
จๆ้ฃ็ต (PMC/DOI) โ โ
โ โ โข analyze_fulltext_access ๅๆ้ๆพๅ็จๅฏ็จๆง โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๆพๅฐ้่ฆ่ซๆ (PMID)
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ
โfind_related_ โ โfind_citing_ โ โget_article_ โ
โarticles โ โarticles โ โreferences โ
โ โ โ โ โ โ
โ ็ธไผผๆงๆๅฐ โ โ Forward โก๏ธ โ โ Backward โฌ
๏ธ โ
โ PubMed ๆผ็ฎๆณ โ โ ่ขซๅผ็จๆ็ซ โ โ ๅ่ๆ็ป โ
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โbuild_citation_ โ
โtree โ
โ โ
โ BFS ้ๆญท็ถฒ็ตก โ
โ 6 ็จฎ่ผธๅบๆ ผๅผ โ
โโโโโโโโโโโโโโโโโโโ
Status: ่จญ่จๅฎๆ๏ผๅฐๆชๅฏฆไฝ ่ฉณ็ดฐ่จญ่จๆไปถ: docs/PIPELINE_PERSISTENCE_DESIGN.md
Pipeline ็ณป็ตฑ๏ผv0.4.0๏ผๆไพ DAG ๅท่กๅผๆๅ 4 ๅๆจกๆฟ๏ผpico, comprehensive, exploration, gene_drug๏ผ๏ผ ไฝ็ฎๅๆฏๅฎๅ จ็ก็ๆ ็ โ ๆฏๆฌก้่ฆ inline ๅณๅ ฅ้ ็ฝฎ๏ผ็กๆณไฟๅญใ้่คไฝฟ็จใๆๅฎๆๅท่กใ
Pipeline ๆไน ๅๆดๅฑๅ็บ 4 ๅ Phase๏ผ
| Phase | ๅ่ฝ | ็ๆ |
|---|---|---|
| 1 | Pipeline CRUD๏ผsave/list/load/delete๏ผ | ๐ฒ ่ฆๅไธญ |
| 2 | ๅค้จ่ผๅ ฅ๏ผURL / ๆชๆก่ทฏๅพ๏ผ | ๐ฒ ่ฆๅไธญ |
| 3 | ๅท่กๆญทๅฒ่ Diff | ๐ฒ ่ฆๅไธญ |
| 4 | ๆ็จๆๅฐ๏ผasyncio tick loop๏ผ | ๐ฒ ่ฆๅไธญ |
ไฝฟ็จ่
ๅ้ก
โ
โโโ ็ฐกๅฎๆฅ่ฉข โโโโโโโ unified_search(query="...")
โ โ ๅณๆๅๅณ็ตๆ
โ
โโโ ่ค้/้่ค้ๆฑ โโโ save_pipeline(name, config)
โ unified_search(pipeline="saved:name")
โ schedule_pipeline(name, cron)
โ load_pipeline / list_pipelines / delete_pipeline
้้ตๅๅ๏ผunified_search ๆฏๅฏไธ็ๆๅฐๅท่กๅ
ฅๅฃใPipeline ๅทฅๅ
ทๅชๅ CRUD + ๆ็จ็ฎก็๏ผไธ็ดๆฅๅท่กๆๅฐใ
| ๅทฅๅ ท | ็จ้ | Phase |
|---|---|---|
save_pipeline |
ไฟๅญ pipeline ้ ็ฝฎ๏ผupsert๏ผๆฏๆด scope ้ธๆ๏ผ | 1 |
list_pipelines |
ๅ่ๅทฒๅญ pipeline๏ผๅไฝต workspace + global๏ผ | 1 |
load_pipeline |
่ผๅ ฅ pipeline๏ผname / URL / path๏ผ | 1 |
delete_pipeline |
ๅช้ค pipeline + ๆญทๅฒ + ๆ็จ | 1 |
get_pipeline_history |
ๆฅ่ฉขๅท่กๆญทๅฒ่ diff | 3 |
schedule_pipeline |
ๆ็จ/่งฃ้คๆ็จ/ๆฅ็ๆ็จ | 4 |
Presentation โโโ tools/pipeline_tools.py (6 MCP tools)
resources.py (pipeline://saved/{name}, pipeline://templates/{name})
โ
Application โโโโ pipeline/store.py (PipelineStore: CRUD + ้ๅฑค scope)
pipeline/scheduler.py (PipelineScheduler: tick loop)
pipeline/executor.py (ๅทฒๆ, ๆฐๅข run_and_store)
โ
Domain โโโโโโโโ entities/pipeline.py (ๆฐๅข PipelineMeta, PipelineRun, ScheduleEntry)
โ
Infrastructure
โ
โโ Workspace scope (ๅชๅ
๏ผๅฏ git ่ฟฝ่นค)๏ผ
โ {workspace}/.pubmed-search/pipelines/{name}.yaml
โ {workspace}/.pubmed-search/pipeline_runs/{name}/*.json
โ
โโ Global scope (fallback๏ผ่ทจๅฐๆก)๏ผ
~/.pubmed-search-mcp/pipelines/{name}.yaml
~/.pubmed-search-mcp/pipeline_runs/{name}/*.json
~/.pubmed-search-mcp/schedules.json
ๆฑบ็ญ D7๏ผๆก็จ workspace + global ้ๅฑคๅฒๅญใ
| Scope | ่ทฏๅพ | ็จ้ | ๅฏ git ่ฟฝ่นค |
|---|---|---|---|
| workspace | {workspace}/.pubmed-search/ |
ๅฐๆก็ดๆๅฐ็ญ็ฅ๏ผๅฏๅไบซ็ตฆๅไฝ่ | โ |
| global | ~/.pubmed-search-mcp/ |
ๅไบบ้็จ็ญ็ฅ๏ผ่ทจๅฐๆกๅฏ็จ | โ |
่งฃๆ้ ๅบ๏ผload(name) โ workspace ๅชๅ
๏ผๆพไธๅฐๅ global fallbackใ
save_pipeline(scope="auto") ้ ่จญๅญ workspace๏ผ่ฅๆ๏ผ๏ผๅฆๅ globalใ
ๆ็จๅ
ๅจ global scope๏ผ้่ทจ workspace ้ไฝ๏ผใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MCP Server Lifespan โ
โ โ
โ startup: โ
โ load schedules.json โ
โ start _tick_loop() โ
โ โ
โ _tick_loop (ๆฏ60็ง): โ
โ for schedule in schedules: โ
โ if should_run(now): โ
โ asyncio.create_task( โ
โ execute_and_store()) โ
โ update next_run โ
โ โ
โ shutdown: โ
โ save schedules.json โ
โ cancel background tasks โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๅฎๅ จ็ดๆ๏ผๆๅฐ้้ 1 ๅฐๆใๅๆๆๅค 5 ๆ็จใๅท่ก่ถ ๆ 5 ๅ้ใURL ็ฝๅๅฎใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTPS Deployment โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโ โ
โ โ Client โ โ
โ โ (AI Agent) โ โ
โ โ โ โ
โ โ โข Claude Desktop โ โ
โ โ โข VS Code Copilot โ โ
โ โ โข Custom Client โ โ
โ โโโโโโโโโโโฌโโโโโโโโโโ โ
โ โ โ
โ โ HTTPS (TLS 1.2/1.3) โ
โ โ Port 443 โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Nginx Reverse Proxy โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Security Features โ โ โ
โ โ โ โ โ โ
โ โ โ โ
TLS Termination (SSL Certificates) โ โ โ
โ โ โ โ
Rate Limiting (30 req/s per IP) โ โ โ
โ โ โ โ
Security Headers โ โ โ
โ โ โ โข X-Frame-Options: SAMEORIGIN โ โ โ
โ โ โ โข X-Content-Type-Options: nosniff โ โ โ
โ โ โ โข X-XSS-Protection: 1; mode=block โ โ โ
โ โ โ โ
SSE Optimization โ โ โ
โ โ โ โข 24h timeout for long-lived connections โ โ โ
โ โ โ โข Buffering disabled โ โ โ
โ โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โ HTTP (internal only) โ
โ โ Port 8765 โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ PubMed Search MCP Server โ โ
โ โ โ โ
โ โ Endpoints: โ โ
โ โ โข / Root โ โ
โ โ โข /sse SSE Connection (MCP) โ โ
โ โ โข /messages POST messages (MCP) โ โ
โ โ โข /exports Export files list โ โ
โ โ โข /download Download export file โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ docker-compose.https.yml โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Network: pubmed-mcp-network โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ nginx โ โ pubmed-mcp โ โ โ
โ โ โ (nginx:alpine) โ โ (custom build) โ โ โ
โ โ โ โ โ โ โ โ
โ โ โ Ports: โ โ Expose: โ โ โ
โ โ โ โข 443:443 (HTTPS) โโโโโโโโ โข 8765 (internal) โ โ โ
โ โ โ โข 80:80 (redirect) โ โ โ โ โ
โ โ โ โ โ Environment: โ โ โ
โ โ โ Volumes: โ โ โข NCBI_EMAIL โ โ โ
โ โ โ โข nginx.conf โ โ โข NCBI_API_KEY โ โ โ
โ โ โ โข ssl/ โ โ โ โ โ
โ โ โ โ โ Healthcheck: โ โ โ
โ โ โ Depends on: โ โ โข curl localhost โ โ โ
โ โ โ โข pubmed-mcp โ โ โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
nginx/
โโโ ssl/
โโโ ca.crt # CA ๆ่ญ (้ๅ ๅ
ฅ็ณป็ตฑไฟกไปป)
โโโ ca.key # CA ็ง้ฐ (ๅฟๅคๆดฉ)
โโโ server.crt # ไผบๆๅจๆ่ญ
โโโ server.key # ไผบๆๅจ็ง้ฐ (ๅฟๅคๆดฉ)
| External (HTTPS) | Internal (HTTP) | Description |
|---|---|---|
https://localhost/ |
http://pubmed-mcp:8765/ |
MCP Server root |
https://localhost/sse |
http://pubmed-mcp:8765/sse |
SSE connection |
https://localhost/messages |
http://pubmed-mcp:8765/messages |
MCP POST |
https://localhost/health |
http://pubmed-mcp:8765/ |
Health check |
https://localhost/exports |
http://pubmed-mcp:8765/exports |
Export list |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Search Data Flow โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ AI Agent โ
โ โ โ
โ โ search_literature(query="remimazolam sedation") โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ MCP Server โ โ
โ โ (discovery.py) โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โ โ โ
โ โ 1. Check cache โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ Cache Hit? โ
โ โ Session Cache โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โ โ
โ โ No โ โ
โ โผ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ LiteratureSearcher โ โ โ
โ โ (entrez/) โ โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โ โ
โ โ โ โ
โ โ 2. Entrez.esearch() โ โ
โ โ 3. Entrez.efetch() โ โ
โ โผ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ NCBI Entrez โ โ โ
โ โ API โ โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โ โ
โ โ โ โ
โ โ XML Response โ โ
โ โผ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ Parse & Format โ โ โ
โ โ SearchResult[] โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โ โ โ
โ โ 4. Cache results โ
โ โ 5. Format output โ
โ โผ โ
โ AI Agent receives formatted results โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Citation Tree Data Flow โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ build_citation_tree(pmid="12345678", depth=2, direction="both") โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ BFS Traversal โ โ
โ โ โ โ
โ โ Level 0: [12345678] (seed article) โ โ
โ โ โ โ โ
โ โ โโโ get_citing_articles() โโโบ [A, B, C] โ โ
โ โ โโโ get_article_references() โโโบ [X, Y, Z] โ โ
โ โ โ โ โ
โ โ Level 1: [A, B, C, X, Y, Z] โ โ
โ โ โ โ โ
โ โ โโโ get_citing_articles() for each โโโบ [...] โ โ
โ โ โโโ get_article_references() for each โโโบ [...] โ โ
โ โ โ โ โ
โ โ Level 2: [...] (depth reached, stop) โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โ Nodes: [{pmid, title, year, ...}, ...] โ
โ โ Edges: [{source, target, type}, ...] โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Format Converter โ โ
โ โ โ โ
โ โ output_format="mermaid" โโโบ _to_mermaid() โ โ
โ โ output_format="cytoscape" โโโบ _to_cytoscape() โ โ
โ โ output_format="graphml" โโโบ _to_graphml() โ โ
โ โ ... โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ Formatted graph data (JSON/XML/Mermaid) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
้ไบๆฉๅถ่ชๅ้ไฝ๏ผAgent ็ก้็ฎก็๏ผ
| ๆฉๅถ | ่ชชๆ | ๅฏฆไฝไฝ็ฝฎ |
|---|---|---|
| Session | ่ชๅๅปบ็ซใ่ชๅๅๆ๏ผ็ถญๆๆๅฐไธไธๆ | session.py |
| Cache | ๆๅฐ็ตๆ่ชๅๅฟซๅ๏ผ้ฟๅ ้่ค API ๅผๅซ | _common.py |
| Rate Limit | ่ชๅ้ตๅฎ NCBI API ้ๅถ (0.34s/0.1s with key) | entrez/ |
| MeSH Lookup | generate_search_queries() ่ชๅๆฅ่ฉข MeSH |
strategy.py |
| ESpell | ่ชๅๆผๅญๆ กๆญฃ (remifentanyl โ remifentanil) |
strategy.py |
| Query Analysis | ๅๆ PubMed ๅฏฆ้่งฃ่ฎๆนๅผ | strategy.py |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ NCBI Rate Limits โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Without API Key: โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข 3 requests per second โ โ
โ โ โข 0.34 second delay between requests โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ With API Key (NCBI_API_KEY): โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โข 10 requests per second โ โ
โ โ โข 0.1 second delay between requests โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Implementation: โ
โ โข time.sleep() between API calls โ
โ โข Automatic retry on rate limit errors โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| ๆไปถ | ่ชชๆ |
|---|---|
| README.md | ๅฟซ้้ๅงใๅ่ฝ็ธฝ่ฆฝ |
| DEPLOYMENT.md | ้จ็ฝฒๆๅใๅฎขๆถ็ซฏ้ ็ฝฎ |
| CHANGELOG.md | ็ๆฌๆดๆฐ่จ้ |
| ROADMAP.md | ้็ผ่ทฏ็ทๅ |
| docs/PIPELINE_PERSISTENCE_DESIGN.md | Pipeline ๆไน ๅ่ๆ็จ่ฉณ็ดฐ่จญ่จ |
Context: ้่ฆไธๅๅฏ็ถญ่ญทใๅฏๆดๅฑ็ๆถๆงไพ่็ๆ็ป็ ็ฉถ้ ๅ้่ผฏใ
Decision: ๆก็จ Domain-Driven Design (DDD) + Onion Architectureใ
Rationale:
- ้ ๅ้่ผฏ๏ผๆ็ปๆๅฐใๅผ็จๅๆ๏ผ่ๅบ็ค่จญๆฝ๏ผNCBI APIใๅฟซๅ๏ผๅ้ข
- ๆๆผๆธฌ่ฉฆ๏ผDomain Layer ไธไพ่ณดๅค้จๆๅ
- ๆๆผๆดๅฑ๏ผๆฐๅขๅทฅๅ ทๅช้ๅจ Application Layer ๆทปๅ
Context: ้่ฆ็บ็็ข็ฐๅขๆไพ TLS ๅ ๅฏๅๅฎๅ จ้ฒ่ญทใ
Decision: ไฝฟ็จ Nginx ไฝ็บๅๅไปฃ็๏ผ่้ๅจ Python ๆ็จไธญ็ดๆฅ่็ HTTPSใ
Rationale:
- Nginx ๅฐ TLS ็ตๆญขๆๆดๅฅฝ็ๆง่ฝ
- SSE ้ท้ฃๆฅ้่ฆ็นๆฎ้ ็ฝฎ๏ผ24h timeout, buffering off๏ผ
- Rate limiting ๅจ Nginx ๅฑค้ขๆด้ซๆ
- ๅฎๅ จๆจ้ ญ็ตฑไธ็ฎก็
Context: ไธๅ็จๆถๆไธๅ็่ฆ่ฆบๅๅทฅๅ ทๅๅฅฝใ
Decision: ๆฏๆด 6 ็จฎ่ผธๅบๆ ผๅผ๏ผmermaid, cytoscape, g6, d3, vis, graphmlใ
Rationale:
- Mermaid: VS Code ๅ งๅปบ้ ่ฆฝ๏ผ้ถ้ ็ฝฎ
- Cytoscape: ๅญธ่ก็ๆจๆบ๏ผ็็ฉ่ณ่จๅธธ็จ
- GraphML: ๆก้ข่ป้ซ๏ผGephi, VOSviewer๏ผ็ธๅฎน
- ไฟๆๆ ผๅผ่ฝๆ้่ผฏ็จ็ซ๏ผไพฟๆผๆฐๅขๆ ผๅผ
Context: Agent ๅคๆทๆ็ซ ็ธ้ๆงๆถ่ๅคง้ token๏ผ้่ฆ่ฎ MCP ้ ๅ ๆๅบใ
Decision: ๆดๅ้ ่จ็ฎ API๏ผCitation IntentใConceptsใSimilarity๏ผๅฏฆ็พ smart_citation_searchใ
Rationale:
- Agent ๆฏ็ถ้ ธ: MCP ๆๅใๆธๆๅฏ้ใๅทฅไฝ๏ผAgent ๅใๅคๆทๅฏ้ใๆฑบ็ญ
- Token ็ฏ็: 100 ็ฏ ร 400 tokens โ 10 ็ฏ ร 200 tokens = 95% ็ฏ็
- ้ ่จ็ฎๅชๅ : ไฝฟ็จ Semantic Scholar Citation IntentใOpenAlex Concepts ็ญ้ ่จ็ฎๆๆจ
่จญ่จๅๅ:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Smart Citation Search ่ท่ฒฌๅ้ข โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ MCP ่ท่ฒฌ (ๆธๆๅฏ้) โ โ
โ โ โข ๅคๆบๆๅฐ (PubMed, S2, OpenAlex) โ โ
โ โ โข ๅผๅซ้ ่จ็ฎ API โ โ
โ โ โข ไพๆๆจๆๅบ โ โ
โ โ โข ่ผธๅบ compact ๆ ผๅผ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Top K ็ตๆ + ๆๅบ็็ฑ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Agent ่ท่ฒฌ (ๅคๆทๅฏ้) โ โ
โ โ โข ้ฑ่ฎ็ฒพ้ธ็ตๆ โ โ
โ โ โข ๆฑบๅฎๆฏๅฆ้่ฆๆดๅค โ โ
โ โ โข ็ถๅๅๆ่ๅ็ญ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Context: unified_search ้่ฆ่ฟๅ็ธไผผๅบฆๅๆธ๏ผไฝไธๅไพๆบๆไพไธๅ็็ธไผผๅบฆ่จ็ฎใ
Decision: ๆก็จๅคไพๆบ็ธไผผๅบฆ่ๅ็ญ็ฅใ
ไพๆบๅชๅ ้ ๅบ:
- Semantic Scholar (ๆ S2 ID) - ๅบๆผ citation graph ็็ธไผผๅบฆ
- Europe PMC (ๆ PMID) - ๅบๆผ PubMed ็ Related Articles ๆผ็ฎๆณ
- OpenAlex (ๆ Works ID) - ๅบๆผ Concepts ้็ๅบฆ
- TF-IDF (ๅ็จ) - ๅบๆผ title + abstract ็ๆๆฌ็ธไผผๅบฆ
Rationale:
- API ๆไพ็็ธไผผๅบฆๆฏๆฌๅฐ่จ็ฎๆดๆบ็ขบ๏ผ่ๆ ฎไบ citation graph ๅ่ช็พฉ๏ผ
- ๅคไพๆบ่ๅๆ้ซ coverage
- TF-IDF ไฝ็บ fallback ็ขบไฟ็ธฝๆฏๆ็ธไผผๅบฆๅๆธ
่ผธๅบๆ ผๅผ:
{
"pmid": "12345678",
"similarity_score": 0.87,
"similarity_source": "semantic_scholar",
"similarity_methods": {
"semantic_scholar": 0.87,
"europe_pmc": 0.82,
"concept_overlap": 0.75
}
}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Pre-computed Intelligence APIs โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โ โ Semantic Scholar โ โ OpenAlex โ โ PubTator โ โ
โ โ Citation Intent โ โ Concepts โ โ Central โ โ
โ โ โ โ โ โ โ โ
โ โ โข background โ โ โข Topic tags โ โ โข Gene โ โ
โ โ โข methodology โ โ โข Level 0-3 โ โ โข Disease โ โ
โ โ โข result โ โ โข Score 0-1 โ โ โข Chemical โ โ
โ โ โข comparison โ โ โ โ โข Mutation โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโ โ
โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Smart Ranker โ โ
โ โ โ โ
โ โ Weights (configurable by research_goal): โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ methodology goal: โ โ โ
โ โ โ โข Citation Intent (methodology): 40% โ โ โ
โ โ โ โข RCR: 25% โ โ โ
โ โ โ โข Concept Overlap: 20% โ โ โ
โ โ โ โข Recency: 15% โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ evidence goal: โ โ โ
โ โ โ โข Citation Intent (result): 35% โ โ โ
โ โ โ โข Study Type (RCT > Cohort): 30% โ โ โ
โ โ โ โข RCR: 20% โ โ โ
โ โ โ โข Recency: 15% โ โ โ
โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Ranked Results โ โ
โ โ (compact format) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ OpenCitations โ โ Europe PMC โ โ
โ โ โ โ Similar Articles โ โ
โ โ โข DOI โ citations โ โ โ โ
โ โ โข Citation timeline โ โ โข Similarity score โ โ
โ โ โข Reference graph โ โ โข Related by contentโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
src/pubmed_search/
โโโ infrastructure/
โ โโโ ncbi/
โ โ โโโ pubtator.py # ๐ PubTator Central ๅฎขๆถ็ซฏ
โ โ โโโ ...
โ โโโ sources/
โ โโโ opencitations.py # ๐ OpenCitations ๅฎขๆถ็ซฏ
โ โโโ semantic_scholar.py # โ๏ธ ๆดๅฑ Citation Intent
โ โโโ openalex.py # โ๏ธ ๆดๅฑ Concepts API
โ โโโ europe_pmc.py # โ๏ธ ๆดๅฑ Similar Articles
โโโ application/
โ โโโ search/
โ โโโ smart_ranker.py # ๐ ๆบ่ฝๆๅบๅจ
โ โโโ result_aggregator.py # โ๏ธ ๆดๅฑ็ธไผผๅบฆ่ๅ
โโโ presentation/
โโโ mcp_server/
โโโ tools/
โโโ smart_citation.py # ๐ smart_citation_search ๅทฅๅ
ท