{"slug": "knowledge-graph-integration-with-poro2-for-enriching-medical-text-processing", "title": "Knowledge Graph Integration With Poro2 For Enriching Medical Text Processing", "summary": "A two-stage agentic pipeline combining GLM-4.7-Flash, a 30B tool-calling model, with Poro2, a 70-billion-parameter Finnish-language model, enriches medical terminology via Model Context Protocol tools querying a medical knowledge graph and a hand-curated dictionary to generate patient-friendly Finnish text. Developed with Finnish language technology company Lingsoft and deployable on AMD Instinct MI300X GPUs using vLLM, the pipeline includes Kubernetes manifests and a quantitative evaluation showing improved accuracy and fluency over results without knowledge graph enrichment.", "body_md": "# Knowledge Graph Integration With Poro2 For Enriching Medical Text Processing[#](#knowledge-graph-integration-with-poro2-for-enriching-medical-text-processing)\n\nMedical documentation contains specialized terminology, such as terms like “hepatomegalia” or “bilateraalinen pleuraeffuusio”, that healthcare professionals understand but patients struggle to comprehend. Making these documents accessible to patients improves healthcare outcomes, yet general-purpose LLMs often lack the specialized vocabulary needed for accurate simplifications.\n\nIn this post, we demonstrate a two-stage agentic architecture that addresses this challenge. Using Model Context Protocol (MCP) tools to query a medical knowledge graph and a hand-curated terminology dictionary, [GLM-4.7-Flash](https://arxiv.org/abs/2508.06471), a 30B model selected for its strong tool-calling capabilities, enriches medical terminology. Then [Poro2](https://huggingface.co/LumiOpen/Llama-Poro-2-70B-Instruct), a 70-billion-parameter model with exceptional Finnish language capabilities, uses the enriched context from the previous step to generate patient-friendly Finnish translations that preserve clinical accuracy. To get you rolling on deploying this on AMD, we provide Kubernetes deployment manifests and a ready-to-use pipeline developed for MI300X GPUs.\n\nThis work was developed in collaboration with [Lingsoft](https://www.lingsoft.fi/en/), a Finnish language technology company. Their expertise in Finnish medical terminology and clinical language guided the design of the terminology dictionary and the evaluation methodology.\n\nNote\n\nThroughout this post, we use the word “translate” to describe converting medical terminology into patient-friendly language (both remain in Finnish). This is text simplification rather than language translation (e.g., Finnish to English). However, healthcare professionals often describe this paraphrasing as “translating medical jargon into lay-term language”, reflecting how specialized medical terminology can feel like a foreign language to patients.\n\nIn this post, you’ll learn how to:\n\n- Deploy Poro2 and a tool-calling LLM on AMD Instinct MI300X GPUs using vLLM\n- Set up MCP servers providing medical terminology tools\n- Configure a two-stage inference pipeline for tool-augmented translation\n- Compare results with and without knowledge graph enrichment, including a quantitative evaluation showing improved accuracy and fluency\n\nAll the code for this post, including the pipeline script, the MCP server, and the Kubernetes deployment manifests, is available in the [GitHub folder](https://github.com/ROCm/rocm-blogs/tree/release/blogs/artificial-intelligence/poro2-knowledge-graph/src).\n\n## Why Agentic AI?[#](#why-agentic-ai)\n\nPatient comprehension of medical information directly impacts healthcare outcomes. When patients understand their diagnoses, treatment plans, and test results, they make better decisions about their care. However, medical documents are written for healthcare professionals, not patients.\n\nThis is where agentic AI patterns become valuable. Rather than relying solely on the model’s pre-trained knowledge, we can connect it to external knowledge sources at inference time. The Model Context Protocol (MCP) provides a standardized way to do this. MCP enables LLMs to call external tools, query databases, and access structured knowledge during the generation process.\n\nThis approach differs from Retrieval-Augmented Generation (RAG), which retrieves document chunks based on similarity to the input. With MCP tools, the model actively decides when to query external sources and what specific terms to look up. Rather than receiving a batch of potentially relevant text, the model makes targeted requests for precise information, such as looking up a specific medical term’s definition, resulting in more focused and accurate context enrichment.\n\nMoreover, the entire agentic pipeline, both LLMs and the knowledge graph, can be deployed on-premises, so no patient data needs to leave the institution.\n\n## Architecture Overview[#](#architecture-overview)\n\nThe system uses a two-stage architecture that separates tool-based knowledge extraction from Finnish language generation:\n\n**Flow:**\n\n1. The client sends a medical report to GLM-4.7-Flash (Stage 1)\n2. GLM-4.7-Flash analyzes the text and calls MCP tools to look up medical terminology\n3. Tool results provide term definitions and enriched context\n4. The enriched context is passed to Stage 2 along with the original report\n5. Poro2 generates the final patient-friendly translation.\n\nThis two-stage architecture provides several benefits:\n\n- **Separation of concerns** - Medical knowledge is maintained separately from the model\n- **Updateability** - Knowledge sources can be updated without retraining\n- **Auditability** - Tool calls provide transparency into the translation process. Every tool call is logged in the output JSONL (see[Data Formats](#data-formats) ), so reviewers can trace exactly which terms were looked up and what the knowledge graph returned\n- **Modularity** - Different knowledge sources can be swapped as needed\n\n### Stage 1: Knowledge Graph-Driven Term Resolution[#](#stage-1-knowledge-graph-driven-term-resolution)\n\nIn our implementation, Stage 1 uses [GLM-4.7-Flash](https://arxiv.org/abs/2508.06471), a 30B model selected for its strong function-calling capabilities. It employs a three-tier strategy to resolve medical terminology, with the MeSH knowledge graph at its core. Rather than relying on parametric knowledge, the model grounds term translations in verified, structured sources:\n\n1. **Hand-curated dictionary** : A curated dictionary of domain-specific term pairs is embedded in the system prompt as the first-priority lookup. These cover the most common and critical terms in the target medical domain (e.g., upper-abdomen medical terminology). While the dictionary provides the highest-quality mappings, maintaining hand-picked lists becomes increasingly difficult as the system scales to new specialties or as medical terminology evolves.\n2. **MeSH Knowledge Graph** : For terms not covered by the dictionary, the model autonomously issues MCP tool calls to a Dockerized[FinMeSH](https://finto.fi/mesh/en/) knowledge graph. FinMeSH is the Finnish extension of the Medical Subject Headings (MeSH) vocabulary maintained by the U.S. National Library of Medicine. The knowledge graph exposes two tools:`full_text_search` for term lookup and`sparql_query` for exploring relationships between medical concepts. This tier becomes especially valuable in long-term deployments: as hand-curated lists inevitably grow stale or encounter unfamiliar terms, the knowledge graph provides a broad, actively maintained terminology base that the model can query on demand, without requiring manual updates to the dictionary.\n3. **Rule-based fallback** : When MCP tool calls return empty results, a rule-based fallback scans the text against the MeSH index using Finnish morphology-aware suffix stripping (`-ssa` ,`-llä` ,`-sta` ) and Latin pattern recognition (`-itis` ,`-oma` ,`-osis` ).\n\nThe Stage 1 output is a structured JSON containing key terms, abbreviation expansions, and patient-friendly Finnish translations. The model is explicitly instructed not to invent translations for terms absent from both the dictionary and the knowledge graph, reducing the risk of hallucination.\n\n## Results: With and Without Terminology Help[#](#results-with-and-without-terminology-help)\n\nTo illustrate the value of MCP tool integration, consider a sample medical sentence:\n\n**Original (Finnish medical terminology):**\n\n“Maksassa todetaan lievä hepatomegalia ilman fokaalisia muutoksia.”\n\n*(EN: “Mild hepatomegaly is observed in the liver without focal changes.”)*\n\n**Translation WITHOUT terminology help:**\n\n“Maksassa havaitaan lievä hepatomegalia.”\n\n*(EN: “Mild hepatomegaly is observed in the liver.”)*\n\nThe model preserves the medical term “hepatomegalia” without explanation, assuming the reader understands it. Furthermore, important context is lost at the end of the sentence.\n\n**Translation WITH terminology help (using knowledge graph lookup):**\n\n“Maksa on hieman suurentunut (hepatomegalia), mutta siinä ei näy paikallisia poikkeavuuksia.”\n\n*(EN: “The liver is slightly enlarged (hepatomegaly), but no local abnormalities are seen.”)*\n\nWith access to the knowledge graph of medical terminology, the model:\n\n1. Looked up “hepatomegalia” and found it means “liver enlargement”\n2. Incorporated the plain-language explanation while preserving the medical term\n3. Translated “fokaalisia muutoksia” (focal changes) to “paikallisia poikkeavuuksia” (local abnormalities)\n\nThe enriched translation also keeps the closing clause that the version without terminology help dropped, so the reader still learns that no local abnormalities were found.\n\nThis example demonstrates how tool access enables more informative translations without sacrificing accuracy: jargon is glossed and context survives.\n\n### Evaluation on Finnish Medical Example Findings[#](#evaluation-on-finnish-medical-example-findings)\n\nWe evaluated the system on 117 pseudonymized Finnish-language upper-abdomen medical findings extracted from 6 radiology reports focused on pancreatic cysts, produced in collaboration with radiologists from [Tampere University Hospital](https://www.tays.fi/en-US) and [Lingsoft](https://www.lingsoft.fi/en/). The findings contain dense terminology mixing Finnish, Latin, and abbreviations.\n\nHere is a more complex example where Stage 1 extracts five medical-to-layperson mappings using `full_text_search` and `sparql_query` tools:\n\n**Original (Finnish):**\n\n“**Haimaparenkyymissä** ei ole merkittävää **atrofiaa**, mutta **diffuusia rasvainfiltraatiota** ja **TT**-tutkimuksessa on ollut **parenkyymikalkkeja**.”\n\n*(EN: “In the **pancreatic parenchyma** there is no significant **atrophy**, but **diffuse fat infiltration** and on **CT** there have been **parenchymal calcifications**.”)*\n\n**Patient-friendly output:**\n\n“**Haimakudoksessa** ei ole merkittävää **kutistumista**, mutta on **levinnyttä rasvan kertymistä** ja **tietokonetomografiassa** on havaittu **kudoksen sisäisiä kalkkeutumia**.”\n\n*(EN: “In the **pancreatic tissue** there is no significant **shrinkage**, but **widespread fat accumulation** and on **computed tomography** there have been observed **calcifications within the tissue**.”)*\n\nIn this example, five terms were successfully mapped: *haimaparenkyymi* → *haimakudos* (pancreatic tissue), *atrofia* → *kutistuminen* (shrinkage), *diffuusi rasvainfiltraatio* → *levinnyt rasvan kertyminen* (widespread fat accumulation), *TT-tutkimus* → *tietokonetomografia* (computed tomography), and *parenkyymikalkit* → *kudoksen sisäiset kalkkeutumat* (calcifications within the tissue).\n\n### Quantitative Comparison[#](#quantitative-comparison)\n\nWe compared the system against a previous version developed by Lingsoft that also employed an agentic architecture with LLMs and medical terminologies, but did not use Poro2, MCP, or knowledge graphs. A human reviewer rated each system’s output across the 117 findings:\n\n| Criterion | Previous system wins | New system wins | Tie | Improvement | \n|---|---|---|---|---|\n| Medical accuracy | 10 | 28 | 72 | 22.0% | \n| Layperson fluency | 7 | 58 | 52 | 86.4% | \n\nThe new system shows a modest improvement in medical accuracy and a substantial improvement in layperson fluency. The large gain in fluency reflects Poro2’s strong Finnish language capabilities, while the accuracy improvements come from the combined effect of the hand-curated dictionary, the MeSH knowledge grounding, and Poro2’s ability to incorporate verified terminology into natural Finnish.\n\n## Deployment Guide[#](#deployment-guide)\n\nThis section covers the hardware, software, and configuration needed to deploy the two-stage pipeline.\n\n### Hardware Requirements[#](#hardware-requirements)\n\nRunning Poro2 (70B parameters) requires substantial GPU resources. For this deployment, we use:\n\n| Component | Specification | \n|---|---|\n| GPU | 2x AMD Instinct MI300X | \n| GPU Memory | 384GB HBM3 (192GB per GPU) | \n| Shared Memory | 32GB (for tensor parallel communication) | \n| Storage | 256GB ephemeral storage | \n\nThe 70B model requires tensor parallelism across two GPUs. The MI300X’s 192GB HBM3 memory provides sufficient capacity for the model weights, KV cache, and intermediate activations.\n\nBoth stages use this same two-GPU profile, each deployed as a separate vLLM service in the [Kubernetes Deployment](#kubernetes-deployment) section below.\n\n### Software Stack[#](#software-stack)\n\nThe deployment uses the following components:\n\n**Inference Server:**\n\n- `rocm/vllm:latest` - vLLM with ROCm support for AMD GPUs\n- OpenAI-compatible API endpoint\n\n**MCP Integration:**\n\n- `pydantic-ai` - Agent framework for LLM tool calling\n- `mcp` - Model Context Protocol client library\n- `fastmcp` - MCP server framework\n\n**Additional Dependencies:**\n\n- `httpx` - Async HTTP client\n\nInstall the Python dependencies:\n\n```\npip install -r requirements.txt\n```\n\n### Kubernetes Deployment[#](#kubernetes-deployment)\n\nFor production deployments on Kubernetes, we recommend following the patterns described in [AI Inference Orchestration with Kubernetes on Instinct MI300X](https://rocm.blogs.amd.com/artificial-intelligence/k8s-orchestration-part1/README.html). That series covers cluster setup, GPU operator configuration, and vLLM deployment in detail.\n\nThe pipeline runs two vLLM services: Stage 1 serves GLM-4.7-Flash for tool calling, and Stage 2 serves Poro2 for Finnish generation. Each stage is deployed independently.\n\n**Stage 1: GLM-4.7-Flash (tool calling).** The Stage 1 manifest ([`k8s/deployment-glm-4.7-flash-vllm.yaml`](https://github.com/ROCm/rocm-blogs/tree/release/blogs/artificial-intelligence/poro2-knowledge-graph/src/k8s/deployment-glm-4.7-flash-vllm.yaml)) turns on vLLM’s tool-calling support:\n\n```\n# Copyright © Advanced Micro Devices, Inc., or its affiliates.\n#\n# SPDX-License-Identifier: MIT\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: glm-4-7-flash-vllm-deployment\nspec:\n  replicas: 1\n  template:\n    spec:\n      containers:\n      - name: vllm-server\n        image: rocm/vllm-dev:nightly\n        command:\n        - \"/bin/bash\"\n        - \"-c\"\n        - |\n          pip install git+https://github.com/huggingface/transformers.git && \\\n          python -m vllm.entrypoints.openai.api_server \\\n            --model zai-org/GLM-4.7-Flash \\\n            --host 0.0.0.0 \\\n            --port 8042 \\\n            --tensor-parallel-size 2 \\\n            --enable-auto-tool-choice \\\n            --tool-call-parser glm47 \\\n            --reasoning-parser glm45 \\\n            --max-model-len 200000 \\\n            --gpu-memory-utilization 0.90\n        ports:\n        - containerPort: 8042\n          name: http\n        resources:\n          requests:\n            amd.com/gpu: 2\n          limits:\n            amd.com/gpu: 2\n        volumeMounts:\n        - mountPath: /dev/shm\n          name: shm\n      volumes:\n      - emptyDir:\n          medium: Memory\n          sizeLimit: 16Gi\n        name: shm\n```\n\nThe highlighted lines are what make Stage 1 work: `--enable-auto-tool-choice`, `--tool-call-parser glm47`, and `--reasoning-parser glm45` enable GLM-4.7-Flash’s function calling and reasoning output, and the model needs a recent `transformers` build, installed at container start. Deploy it with:\n\n```\nkubectl apply -f k8s/deployment-glm-4.7-flash-vllm.yaml\n```\n\n**Stage 2: Poro2 (Finnish generation).** The Stage 2 manifest ([`k8s/deployment-poro2-vllm.yaml`](https://github.com/ROCm/rocm-blogs/tree/release/blogs/artificial-intelligence/poro2-knowledge-graph/src/k8s/deployment-poro2-vllm.yaml)) highlights the key configuration:\n\n```\n# Copyright © Advanced Micro Devices, Inc., or its affiliates.\n#\n# SPDX-License-Identifier: MIT\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: poro2-vllm-deployment\nspec:\n  replicas: 1\n  template:\n    spec:\n      containers:\n      - name: vllm-server\n        image: rocm/vllm:latest\n        command:\n        - \"python\"\n        - \"-m\"\n        - \"vllm.entrypoints.openai.api_server\"\n        - \"--model\"\n        - \"LumiOpen/Llama-Poro-2-70B-Instruct\"\n        - \"--tensor-parallel-size\"\n        - \"2\"\n        - \"--max-model-len\"\n        - \"8192\"\n        - \"--gpu-memory-utilization\"\n        - \"0.9\"\n        resources:\n          requests:\n            amd.com/gpu: 2\n          limits:\n            amd.com/gpu: 2\n        volumeMounts:\n        - mountPath: /dev/shm\n          name: shm\n      volumes:\n      - emptyDir:\n          medium: Memory\n          sizeLimit: 32Gi\n        name: shm\n```\n\nKey configuration points:\n\n- **tensor-parallel-size: 2** - Distributes the model across both GPUs\n- **gpu-memory-utilization: 0.9** - Uses 90% of available GPU memory\n- **shared memory volume** - Required for tensor parallel communication between GPUs\n- **max-model-len: 8192** - Matches Poro2’s context window, accommodating system prompts with terminology dictionaries and tool definitions\n\nDeploy the Poro2 model for Stage 2 inference with:\n\n```\nkubectl apply -f k8s/deployment-poro2-vllm.yaml\n```\n\nFor enterprise deployments, see the [AMD Enterprise AI Suite](https://rocm.blogs.amd.com/artificial-intelligence/enterprise-ai-suite/README.html) documentation for production-ready infrastructure patterns.\n\n## Setting Up the MCP Server[#](#setting-up-the-mcp-server)\n\nMCP servers provide tools that the Stage 1 LLM can call during the context enrichment phase. We configure a knowledge graph for medical terminology lookup.\n\n### RDF Knowledge Graph Explorer[#](#rdf-knowledge-graph-explorer)\n\nThe RDF Knowledge Graph Explorer ([mcp-rdf-explorer](https://github.com/emekaokoye/mcp-rdf-explorer)) is a Dockerized service that provides access to [FinMeSH](https://finto.fi/mesh/en/), the Finnish extension of the Medical Subject Headings (MeSH) vocabulary. FinMeSH provides structured, verified medical terminology in Finnish, making it an ideal knowledge source for grounding medical term translations.\n\nThe MCP server exposes two tools:\n\n- **`full_text_search`** : Searches the MeSH index for medical terms and returns their Finnish definitions, synonyms, and broader/narrower concepts\n- **`sparql_query`** : Executes SPARQL queries against the RDF/SKOS (Resource Description Framework / Simple Knowledge Organization System) graph to explore hierarchical term structures and navigate related concepts\n\nWhen the Stage 1 model encounters specialized terminology, it autonomously decides which tool to use: simple lookups use `full_text_search`, while exploring term relationships uses `sparql_query`.\n\n### MCP Configuration[#](#mcp-configuration)\n\nThe [`mcp_config.json`](https://github.com/ROCm/rocm-blogs/tree/release/blogs/artificial-intelligence/poro2-knowledge-graph/src/mcp/rdf-explorer/mcp_config.json) file specifies which MCP servers to connect:\n\n```\n{\n  \"mcpServers\": {\n    \"rdf_knowledge_graph\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"mcp-rdf-explorer:latest\"],\n      \"description\": \"RDF Knowledge Graph for structured medical data queries\"\n    }\n  }\n}\n```\n\nThe server runs as a subprocess and communicates via stdio using the MCP protocol. The RDF Knowledge Graph enables rich queries when the Stage 1 model needs to look up medical terminology or understand relationships between medical concepts.\n\nThe `mcp-rdf-explorer:latest` image referenced above is built from the [Dockerfile](https://github.com/ROCm/rocm-blogs/tree/release/blogs/artificial-intelligence/poro2-knowledge-graph/src/mcp/rdf-explorer/Dockerfile) we provide, which clones [mcp-rdf-explorer](https://github.com/emekaokoye/mcp-rdf-explorer) and bundles the FinMeSH data so the server runs without extra setup.\n\n## Running the Two-Stage Pipeline[#](#running-the-two-stage-pipeline)\n\n### Basic Usage[#](#basic-usage)\n\nWith both deployments running (see [Kubernetes Deployment](#kubernetes-deployment)), forward each vLLM service to a local port:\n\n```\nkubectl port-forward deployment/glm-4-7-flash-vllm-deployment 8042:8042 &\nkubectl port-forward deployment/poro2-vllm-deployment 8000:8000 &\n```\n\nThen run the workflow ([`medical_reports_agentic_workflow.py`](https://github.com/ROCm/rocm-blogs/tree/release/blogs/artificial-intelligence/poro2-knowledge-graph/src/medical_reports_agentic_workflow.py)):\n\n```\npython medical_reports_agentic_workflow.py \\\n  --input medical_reports.json \\\n  --output results.jsonl\n```\n\n### Data Formats[#](#data-formats)\n\nThe client accepts JSON input and produces JSONL output (one record per line) with tool call information:\n\n```\n[\n  {\n    \"case\": \"0\",\n    \"text\": \"Maksassa todetaan hepatomegalia...\"\n  }\n]\n{\n  \"case\": \"0\",\n  \"text\": \"Maksassa todetaan hepatomegalia...\",\n  \"completion\": \"Maksa on suurentunut...\",\n  \"tool_calls\": [\n    {\n      \"tool_name\": \"lookup_term\",\n      \"args\": {\"term\": \"hepatomegalia\"}\n    }\n  ],\n  \"status\": \"ok\"\n}\n```\n\nThe `tool_calls` array in each output record shows which tools the Stage 1 model invoked, providing transparency into the context enrichment process.\n\n### Performance Considerations[#](#performance-considerations)\n\nMCP tools increase the latency of the inference pipeline because each tool call requires:\n\n1. Generating the actual tool call (model inference)\n2. Executing the tool (typically fast for local lookups)\n3. Incorporating results and generating final response (model inference)\n\nIn practice, medical text translation tasks like this are typically not latency-critical. After a medical report is written by a healthcare professional, the patient-friendly version does not need to be available immediately. The natural delay in clinical workflows means reports can be processed in batches, and the additional round-trips for tool calls have minimal impact. The focus is on translation quality rather than speed.\n\nThat said, the AMD MI300X’s high memory bandwidth (5.3 TB/s) keeps inference passes fast. For batch processing, concurrent request handling in the client (`--concurrency 10`) maintains good throughput despite the multi-turn nature of tool-augmented generation.\n\n## Next Steps and Variations[#](#next-steps-and-variations)\n\n### Scaling Considerations[#](#scaling-considerations)\n\nFor production workloads:\n\n- Deploy multiple vLLM replicas behind a load balancer (see [K8s Orchestration Part 2](https://rocm.blogs.amd.com/artificial-intelligence/k8s-orchestration-part2/README.html) for MetalLB setup and scaling)\n- Use persistent storage for model weights (see [K8s Orchestration Part 1](https://rocm.blogs.amd.com/artificial-intelligence/k8s-orchestration-part1/README.html) )\n- Add Prometheus/Grafana monitoring (see [K8s Orchestration Part 3](https://rocm.blogs.amd.com/artificial-intelligence/k8s-orchestration-part3/README.html) )\n\n### Alternative Knowledge Sources[#](#alternative-knowledge-sources)\n\nThe MCP architecture supports various knowledge backends beyond the RDF Knowledge Graph shown here:\n\n- **Medical term dictionaries** - Simple keyword-based lookups for terminology definitions\n- **Vector databases** - Similarity search over medical literature\n- **REST APIs** - Connect to external terminology services\n- **Custom knowledge bases** - Domain-specific data sources for specialized fields\n\n### Known Limitations[#](#known-limitations)\n\nOur evaluation revealed several limitations worth noting:\n\n- **Instruction adherence** : The Stage 1 model does not always follow the instruction to avoid inventing translations. When MCP tool calls return empty results, the model sometimes generates plausible-sounding but unverified mappings from its parametric knowledge.\n- **Knowledge graph coverage** : MeSH coverage of Finnish radiology terminology is limited, causing frequent fallback to parametric generation. While the current coverage is sufficient to illustrate the advantages of integrating knowledge graphs with agentic systems, expanding the terminology base would further improve the system’s accuracy.\n- **Fluency trade-offs** : While individual term mappings are correct, the overall sentence fluency can sometimes suffer when multiple terms are replaced simultaneously.\n\nThese findings underscore that professional human review remains essential for clinical deployment. The tool call logs provide transparency that makes such review efficient: reviewers can quickly verify which terms were looked up and what sources were used.\n\n## Summary[#](#summary)\n\nThis post demonstrated a two-stage approach to medical text processing on AMD Instinct MI300X GPUs. The key components are:\n\n- **GLM-4.7-Flash** - A 30B model with strong tool-calling capabilities for context enrichment\n- **Poro2** - A 70B model with exceptional Finnish language capabilities for final translation\n- **MCP** - Standard protocol for connecting LLMs to external knowledge sources\n- **vLLM** - High-performance inference server with ROCm support\n- **AMD Instinct MI300X** - GPU infrastructure with 192GB HBM3 memory per GPU\n\nBy separating tool-based knowledge extraction from Finnish language generation, we leverage Poro2’s linguistic strengths while enriching the context with structured medical terminology. This results in more accurate and more readable patient-friendly translations. This pattern extends beyond medical text to any domain where combining specialized knowledge with language expertise enhances LLM outputs. We expect this domain-agnostic architecture to transfer to other safety-critical, terminology-dense domains.\n\nTwo design choices equip this architecture for clinical work. First, safety is built into the pipeline: medical terms are looked up in structured sources (the curated dictionary, the MeSH knowledge graph, or the rule-based fallback), and unconstrained generation is the last resort. Second, both models and the knowledge graph run on-premises, so sensitive hospital records stay inside the institution, as patient data protection regulations require.\n\nThis work was partially funded by Business Finland through the Medallion project, with funding awarded to AMD Silo AI and Lingsoft Group. The system was developed in collaboration with Tampere University Hospital and Lingsoft.\n\nFor organizations deploying AI at scale, AMD provides comprehensive infrastructure through the [AMD Enterprise AI Suite](https://rocm.blogs.amd.com/artificial-intelligence/enterprise-ai-suite/README.html), including production-ready inference services and orchestration tools.\n\n## Additional Resources[#](#additional-resources)\n\n### AMD Resources[#](#amd-resources)\n\n- [AI Inference Orchestration with Kubernetes on Instinct MI300X, Part 1](https://rocm.blogs.amd.com/artificial-intelligence/k8s-orchestration-part1/README.html) - Kubernetes cluster setup\n- [AI Inference Orchestration with Kubernetes on Instinct MI300X, Part 2](https://rocm.blogs.amd.com/artificial-intelligence/k8s-orchestration-part2/README.html) - vLLM deployment and scaling\n- [AI Inference Orchestration with Kubernetes on Instinct MI300X, Part 3](https://rocm.blogs.amd.com/artificial-intelligence/k8s-orchestration-part3/README.html) - Monitoring and visualization\n- [AMD Enterprise AI Suite: Open Infrastructure for Production AI](https://rocm.blogs.amd.com/artificial-intelligence/enterprise-ai-suite/README.html) - Enterprise deployment patterns\n- [Inferencing and Serving with vLLM on AMD GPUs](https://rocm.blogs.amd.com/artificial-intelligence/vllm/README.html) - vLLM fundamentals\n\n### External Resources[#](#external-resources)\n\n- [LumiOpen/Llama-Poro-2-70B-Instruct](https://huggingface.co/LumiOpen/Llama-Poro-2-70B-Instruct) - Model on Hugging Face\n- [Model Context Protocol Specification](https://modelcontextprotocol.io/) - MCP documentation\n- [pydantic-ai](https://github.com/pydantic/pydantic-ai) - Agent framework\n- [FastMCP](https://github.com/jlowin/fastmcp) - MCP server framework\n- [vLLM Project](https://github.com/vllm-project/vllm) - Inference engine\n- [mcp-rdf-explorer](https://github.com/emekaokoye/mcp-rdf-explorer) - MCP server for RDF/SKOS knowledge graphs\n- [FinMeSH (Finto)](https://finto.fi/mesh/en/) - Finnish extension of Medical Subject Headings\n- [GLM-4.5 (ARC) Foundation Models](https://arxiv.org/abs/2508.06471) - Agentic, reasoning, and coding models\n\n## Disclaimers[#](#disclaimers)\n\nPerformance results are specific to the test system configuration. Your results may vary based on hardware, software versions, and workload characteristics. Medical AI applications require proper clinical validation before deployment in healthcare settings. This demonstration is for educational purposes and is not a substitute for professional medical advice, diagnosis, or treatment. The example translations shown are illustrative and may not reflect actual clinical translation requirements.\n\nThird-party content is licensed to you directly by the third party that owns the content and is not licensed to you by AMD. ALL LINKED THIRD-PARTY CONTENT IS PROVIDED “AS IS” WITHOUT A WARRANTY OF ANY KIND. USE OF SUCH THIRD-PARTY CONTENT IS DONE AT YOUR SOLE DISCRETION AND UNDER NO CIRCUMSTANCES WILL AMD BE LIABLE TO YOU FOR ANY THIRD-PARTY CONTENT. YOU ASSUME ALL RISK AND ARE SOLELY RESPONSIBLE FOR ANY DAMAGES THAT MAY ARISE FROM YOUR USE OF THIRD-PARTY CONTENT.\n\nAMD, the AMD Arrow logo, Instinct, ROCm, and combinations thereof are trademarks of Advanced Micro Devices, Inc. Docker and the Docker logo are trademarks or registered trademarks of Docker, Inc. Hugging Face is a registered trademark of Hugging Face, Inc. Kubernetes is a registered trademark of The Linux Foundation. Python is a trademark of the Python Software Foundation. Other product names used in this publication are for identification purposes only and may be trademarks of their respective owners.", "url": "https://wpnews.pro/news/knowledge-graph-integration-with-poro2-for-enriching-medical-text-processing", "canonical_source": "https://rocm.blogs.amd.com/artificial-intelligence/poro2-knowledge-graph/README.html", "published_at": "2026-09-15 00:00:00+00:00", "updated_at": "2026-09-15 15:48:54.588184+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-agents", "ai-tools", "ai-infrastructure"], "entities": ["GLM-4.7-Flash", "Poro2", "Lingsoft", "AMD Instinct MI300X", "Model Context Protocol", "vLLM", "AMD"], "alternates": {"html": "https://wpnews.pro/news/knowledge-graph-integration-with-poro2-for-enriching-medical-text-processing", "markdown": "https://wpnews.pro/news/knowledge-graph-integration-with-poro2-for-enriching-medical-text-processing.md", "text": "https://wpnews.pro/news/knowledge-graph-integration-with-poro2-for-enriching-medical-text-processing.txt", "jsonld": "https://wpnews.pro/news/knowledge-graph-integration-with-poro2-for-enriching-medical-text-processing.jsonld"}}