korean-people-persona
Eine Sammlung von Werkzeugen zur Konvertierung und Durchsuchung des HuggingFace-Datensatzes nvidia/Nemotron-Personas-Korea (ca. 1 Million Zeilen, 9 Parquet-Dateien) mittels SQLite.
Übersicht
Quelle: NVIDIA, Nemotron-Personas-Korea — https://huggingface.co/datasets/nvidia/Nemotron-Personas-Korea
Lizenz: Gemäß den Lizenzbedingungen der ursprünglichen Datensatzseite
DB-Datei:
database/persona.dbOriginal-Parquet:
data/train-*-of-*.parquetTabellen:
persona(Haupttabelle) +persona_fts(FTS5-Index für externe Inhalte)Ziel-SQLite: 3.37+ (unter Verwendung von FTS5, STRICT-Tabellen, JSON1)
Python: 3.10 oder höher (3.11+ empfohlen)
Abhängigkeiten:
pyarrow >= 15.0,huggingface_hub >= 0.24(sieherequirements.txt)Freier Speicherplatz: ca. 5 GB (Parquet ~2 GB + DB ~3 GB)
Related MCP server: @nahisaho/katashiro-mcp-server
Datenquelle
Element | Wert |
Repository | |
Dateien |
|
Zeilen pro Datei | ca. 111.112 |
Gesamtzahl der Zeilen | 1.000.000 |
Fehlende Werte | 0 in allen Spalten (NOT NULL garantiert) |
| durchgehend |
| Python |
Ordnerstruktur
korean-people-persona/
├── data/ # 원본 parquet (gitignore — 약 2GB)
│ └── train-*-of-*.parquet
├── database/ # 생성된 SQLite (gitignore — 약 3GB)
│ └── persona.db
├── src/
│ ├── convert/ # parquet → SQLite 변환기
│ │ ├── __init__.py
│ │ └── __main__.py
│ └── mcp_server/ # (예정) MCP 서버
├── build.sh / build.bat / build.ps1
├── requirements.txt
└── README.mddata/ und database/ sind aufgrund ihrer Größe per .gitignore ausgeschlossen.
Datensatz herunterladen
Wählen Sie eine der drei Methoden. Die Ergebnisdateien müssen im Ordner data/ als train-*-of-*.parquet vorliegen.
1) Konvertierungsskript-Option (empfohlen)
Das src/convert-Paket lädt fehlende Dateien automatisch nach:
pip install huggingface_hub pyarrow
PYTHONPATH=src python -m convert --download # 없을 때만 받음
PYTHONPATH=src python -m convert --download --force-download # 항상 재다운로드2) Direkte Verwendung von huggingface-cli
pip install huggingface_hub
huggingface-cli download nvidia/Nemotron-Personas-Korea \
--repo-type dataset \
--include "train-*-of-*.parquet" \
--local-dir ./data3) git lfs clone
git lfs install
git clone https://huggingface.co/datasets/nvidia/Nemotron-Personas-Korea
mv Nemotron-Personas-Korea/train-*.parquet ./data/Authentifizierung: Für private oder gated Modelle sind
huggingface-cli loginoder die UmgebungsvariableHF_TOKENerforderlich. Dieser Datensatz (zum Zeitpunkt der Veröffentlichung) kann auch ohne Authentifizierung heruntergeladen werden.
Größe: Die 9 Parquet-Dateien umfassen insgesamt ca. 1–2 GB.
Haupttabelle persona
CREATE TABLE persona (
uuid TEXT PRIMARY KEY, -- 32자 hex 문자열 (대시 없음)
-- 페르소나 서술 (긴 한국어 텍스트) ----------------------------------------------
persona TEXT NOT NULL, -- 핵심 1~2문장 요약
professional_persona TEXT NOT NULL, -- 직업/업무 페르소나
sports_persona TEXT NOT NULL, -- 스포츠/운동 페르소나
arts_persona TEXT NOT NULL, -- 예술/문화 페르소나
travel_persona TEXT NOT NULL, -- 여행 페르소나
culinary_persona TEXT NOT NULL, -- 식문화/요리 페르소나
family_persona TEXT NOT NULL, -- 가족 관계 페르소나
cultural_background TEXT NOT NULL, -- 문화·성장 배경 서술
skills_and_expertise TEXT NOT NULL, -- 보유 기술/전문성 서술
hobbies_and_interests TEXT NOT NULL, -- 취미·관심사 서술
career_goals_and_ambitions TEXT NOT NULL, -- 향후 목표/포부
-- 리스트 (JSON 배열로 저장) -----------------------------------------------------
skills_and_expertise_list TEXT NOT NULL CHECK(json_valid(skills_and_expertise_list)), -- 스킬 키워드 JSON 배열
hobbies_and_interests_list TEXT NOT NULL CHECK(json_valid(hobbies_and_interests_list)), -- 취미 키워드 JSON 배열
-- 인구통계 ---------------------------------------------------------------------
sex TEXT NOT NULL, -- 성별: 남자 / 여자
age INTEGER NOT NULL CHECK(age >= 0), -- 나이 (정수)
marital_status TEXT NOT NULL, -- 결혼상태 (4종: 미혼/기혼/이혼/사별 등)
military_status TEXT NOT NULL, -- 병역상태 (군필/해당없음 등)
family_type TEXT NOT NULL, -- 가구 유형 (39종: 1인 가구, 배우자와 자녀 등)
housing_type TEXT NOT NULL, -- 주거 형태 (6종: 아파트, 단독주택 등)
education_level TEXT NOT NULL, -- 최종 학력 (7종: 초등학교 ~ 대학원)
bachelors_field TEXT NOT NULL, -- 학사 전공 분야
occupation TEXT NOT NULL, -- 직업 (자유 텍스트)
district TEXT NOT NULL, -- 시군구 (예: 강남-서초)
province TEXT NOT NULL, -- 시도 (17종)
country TEXT NOT NULL DEFAULT '대한민국' -- 국가 (단일값: 대한민국)
) STRICT;Indizes
Name | Spalten | Zweck |
|
| Abfrage der Geschlechts-/Altersverteilung |
|
| Regionalfilter |
|
| Analyse von Bildung/Beruf |
|
| Analyse von Haushalt/Familienstand |
Spaltenbedeutung
Spalte | Beschreibung | Beispiel |
| 32-stelliger Hex-String (ohne Bindestriche). PK |
|
| Kernzusammenfassung (1–2 Sätze) |
|
| Detaillierte Persona nach Bereich (mehrere Sätze) | Beruf/Sport/Kunst/Reisen/Ernährung/Familie |
| Kultureller/biografischer Hintergrund | |
| Beschreibung der Fähigkeiten | |
| Keyword-Liste der oben genannten Punkte (JSON-Array) |
|
| Beschreibung der Hobbys/Interessen | |
| Keyword-Liste der oben genannten Punkte (JSON-Array) |
|
| Zukünftige Ziele | |
|
| |
| Ganzzahl | |
| 4 Typen |
|
| 2 Typen |
|
| 39 Typen |
|
| 6 Typen |
|
| 7 Typen |
|
| Studienfach | |
| Beruf (Freitext) | |
| Stadt/Bezirk |
|
| Provinz/Stadt |
|
| Land |
|
Volltextsuche — persona_fts (FTS5)
Indizierung von 10 langen koreanischen Textspalten mittels externer Inhaltsmethode.
CREATE VIRTUAL TABLE persona_fts USING fts5(
professional_persona,
sports_persona,
arts_persona,
travel_persona,
culinary_persona,
family_persona,
cultural_background,
skills_and_expertise,
hobbies_and_interests,
career_goals_and_ambitions,
content='persona',
content_rowid='rowid',
tokenize='unicode61 remove_diacritics 2',
prefix='2 3 4'
);Tokenizer: unicode61 + 2/3/4-Zeichen-Präfix-Index. Für die koreanische Partikelverarbeitung wird bei der Suche ein Präfix-Matching der Form 등산* (Wandern*) empfohlen. Falls eine morphologische Analyse erforderlich ist, kann ein benutzerdefinierter Tokenizer auf Basis von mecab-ko / kiwi verwendet werden.
FTS-Synchronisation: Da der Datensatz statisch ist, erfolgt der Aufbau einmalig per INSERT INTO persona_fts(rowid, ...) SELECT .... Bei Änderungen sollten Trigger hinzugefügt werden.
Nutzung durch KI-Agenten (MCP-Server)
Dieses Repository stellt einen MCP (Model Context Protocol) Server bereit, sodass MCP-kompatible Agenten wie Claude Desktop, Cursor oder Cline Daten direkt abfragen und sampeln können.
Ausführung
PYTHONPATH=src python -m mcp_server # stdio 서버 시작Registrierung pro Agent
Alle Beispiele müssen den absoluten Pfad zum Repository
/abs/path/to/korean-people-personaan Ihre Umgebung anpassen. Wenn eine virtuelle Umgebung (.venv) erstellt wurde, sollte dercommandauf den Python-Interpreter innerhalb der venv zeigen, um Abhängigkeitskonflikte zu vermeiden. (z. B. macOS/Linux/abs/path/.venv/bin/python, WindowsC:/abs/path/.venv/Scripts/python.exe)
Claude Desktop
Speicherort der Konfigurationsdatei:
OS | Pfad |
macOS |
|
Windows |
|
Linux |
|
Oder über das Menü Settings → Developer → Edit Config in der App.
{
"mcpServers": {
"korean-persona": {
"command": "python",
"args": ["-m", "mcp_server"],
"env": {
"PYTHONPATH": "/abs/path/to/korean-people-persona/src",
"PYTHONIOENCODING": "utf-8"
}
}
}
}Nach dem Speichern Claude Desktop neu starten → Überprüfen Sie, ob die 5 Werkzeuge über das Hammer-Symbol (🔨) unten rechts im Chat verfügbar sind.
Claude Code (CLI)
Registrierung per CLI-Befehl in einer Zeile:
claude mcp add korean-persona python -m mcp_server \
-e PYTHONPATH=/abs/path/to/korean-people-persona/src \
-e PYTHONIOENCODING=utf-8Oder direkt in .mcp.json im Projektstammverzeichnis / Benutzereinstellungen ~/.claude/settings.json eintragen:
{
"mcpServers": {
"korean-persona": {
"command": "python",
"args": ["-m", "mcp_server"],
"env": { "PYTHONPATH": "/abs/path/to/korean-people-persona/src" }
}
}
}Überprüfung: claude mcp list → Nach Aktivierung können Werkzeuge über den /mcp-Slash-Befehl aufgerufen werden.
Cursor
.cursor/mcp.json pro Projekt oder global unter ~/.cursor/mcp.json:
{
"mcpServers": {
"korean-persona": {
"command": "python",
"args": ["-m", "mcp_server"],
"env": { "PYTHONPATH": "/abs/path/to/korean-people-persona/src" }
}
}
}Oder über die UI: Settings → MCP → Add new MCP Server. Nach dem Neustart von Cursor über @korean-persona aufrufbar.
ChatGPT (Developer Mode / Connectors)
Die MCP-Integration von ChatGPT basiert auf dem HTTP/SSE-Transport (Remote-Connector). Da dieser Server ein stdio-Server ist, kann er nicht direkt registriert werden, sondern muss über einen HTTP-Adapter bereitgestellt werden.
Server mit dem HTTP-Transport des
mcp-SDK ausführen:PYTHONPATH=src python -m mcp_server --transport sse --port 8765(Derzeit unterstützt
server.pynur stdio. Für den HTTP/SSE-Modus ist eine Verzweigung mitmcp.run(transport="sse", port=8765)erforderlich.)Exponierung über ngrok / Cloudflare Tunnel etc.:
ngrok http 8765ChatGPT → Settings → Connectors → Developer mode → Add custom connector
URL:
https://<ngrok>/sseAuthentifizierung: Bei Bedarf Bearer-Token-Header hinzufügen (
MCP_AUTH_TOKEN)
In einem neuen Chat können die Werkzeuge über das Tools-Menü aktiviert werden.
Sicherheitshinweis: Da ChatGPT-Connectoren Werkzeuge außerhalb des Modells exponieren, schützen Sie die öffentliche URL unbedingt mit einer Authentifizierung. Für lokale Nutzung wird die stdio-basierte Variante (Claude Desktop / Cursor) empfohlen.
Gemini CLI
Benutzereinstellungen für Google gemini-cli unter ~/.gemini/settings.json:
{
"mcpServers": {
"korean-persona": {
"command": "python",
"args": ["-m", "mcp_server"],
"env": { "PYTHONPATH": "/abs/path/to/korean-people-persona/src" },
"cwd": "/abs/path/to/korean-people-persona"
}
}
}Überprüfung: gemini mcp list (oder /mcp-Befehl in der CLI) → Werkzeuge werden automatisch geladen.
Allgemeine Fehlerbehebung
Symptom | Ursache / Lösung |
Werkzeuge nicht sichtbar | App-Neustart vergessen. Claude Desktop muss vollständig beendet werden (auch Tray-Icon) |
| Prüfen, ob |
Koreanische Zeichen fehlerhaft |
|
|
|
Berechtigungsfehler | Pfade mit Leerzeichen unter Windows → in Anführungszeichen setzen oder Pfad ändern |
Verfügbare Werkzeuge
Werkzeug | Beschreibung |
| FTS5-Freitextsuche + demografische Filter (BM25-Sortierung) |
| Vollständige Abfrage einer einzelnen Persona per UUID |
| Bedingte Zufallsstichprobe |
| Demografische GROUP BY COUNT-Analyse |
| Statistiken zum gesamten Datensatz und verfügbare Spalten |
Anwendungsbeispiele für Agenten
1) Marketing-Interview-Simulation
"Wähle 10 Frauen über 60 aus, die gerne wandern, und simuliere ihre Reaktion auf den Werbetext für eine neue Kniebandage."
Der Agent arbeitet in folgenden Schritten:
search_persona(query="등산*", filters={"sex":"여자","age_min":60}, limit=10, full=True)Jede Persona als System-Prompt injizieren → Bewertung des Werbetextes pro Person generieren
Clustering der Antworten und Zusammenfassung der Erkenntnisse
2) Regionales Charakter-Casting
"Finde eine Persona eines 50-jährigen Selbstständigen aus Yeongdo-gu, Busan, und bereite sie als Protagonisten für einen Kurzroman auf."
search_persona(
filters={"province":"부산", "district_like":"%영도%",
"age_min":50, "age_max":59,
"occupation_like":"%자영%"},
limit=5, full=True
)3) Analyse von politischen Auswirkungen
"Analysiere, in welcher Provinz Einpersonenhaushalte über 70 mit Grundschulabschluss am häufigsten vorkommen."
aggregate(
group_by=["province"],
filters={"education_level":"초등학교", "age_min":70,
"family_type_like":"%혼자%"},
limit=20
)4) Semantische Suche + Zitat
"Finde eine Persona, die auf dem Land aufgewachsen ist und Enkelkinder hat, und gib sie zusammen mit einem Zitat aus cultural_background aus."
search_persona(
query='"농촌" AND 손주*',
fields=["cultural_background", "family_persona"],
limit=5, full=True
)5) Synthetische Umfrage
"Erstelle eine geschichtete Stichprobe von 100 Personen proportional zur nationalen Bevölkerungsverteilung und frage jeden nach seiner Meinung zur Einführung der 4-Tage-Woche."
aggregate(group_by=["province","sex","age"])→ Verteilungsquoten berechnensample_personagemäß den Quoten für Provinz × Geschlecht × Altersgruppe aufrufenLLM um 1:1-Antwort für jede Persona bitten
Ergebnisse aggregieren → gewichtete Verteilung der Zustimmung/Ablehnung berechnen
Direkte Verwendung (Code)
Aufruf direkt aus Python ohne MCP:
import sys; sys.path.insert(0, "src")
from mcp_server import tools
tools.stats()
tools.search_persona(query="용접*", filters={"sex":"남자"}, limit=5)
tools.sample_persona(filters={"province":"제주"}, n=3, full=True)SQL-Direktabfrage
-- 1) 등산을 좋아하고 트로트 관련 언급이 있는 60대 여성
SELECT p.uuid, p.age, p.province, p.occupation
FROM persona_fts f
JOIN persona p ON p.rowid = f.rowid
WHERE persona_fts MATCH '등산* AND 트로트*'
AND p.sex = '여자' AND p.age BETWEEN 60 AND 79
ORDER BY bm25(persona_fts) LIMIT 20;
-- 2) 특정 컬럼 검색 + 스니펫
SELECT p.uuid, snippet(persona_fts, 7, '<b>', '</b>', '...', 10) AS hit
FROM persona_fts f JOIN persona p ON p.rowid = f.rowid
WHERE f.skills_and_expertise MATCH '용접*' LIMIT 10;
-- 3) JSON 리스트 펼치기
SELECT p.uuid, j.value AS hobby
FROM persona p, json_each(p.hobbies_and_interests_list) j
WHERE j.value LIKE '%낚시%' LIMIT 10;
-- 4) 인구통계 분포
SELECT province, sex, COUNT(*) cnt
FROM persona GROUP BY province, sex ORDER BY cnt DESC;PRAGMA-Einstellungen (Laden/Betrieb)
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA temp_store = MEMORY;
PRAGMA cache_size = -262144; -- 256MBBuild-Prozess
Ein-Zeilen-Build (empfohlen)
OS-spezifische Wrapper-Skripte erstellen automatisch die virtuelle Umgebung, installieren Abhängigkeiten, laden Daten herunter und konvertieren sie.
Plattform | Befehl |
Linux / macOS |
|
Windows (cmd) |
|
Windows (PowerShell) |
|
Optionen für erneuten Download werden einheitlich übergeben:
./build.sh --force-download
build.bat --force-download
.\build.ps1 --force-downloadFalls unter PowerShell ein Fehler zur Ausführungsrichtlinie auftritt:
PowerShell -ExecutionPolicy Bypass -File .\build.ps1
Manuelle Ausführung
python -m venv .venv
# Linux/macOS: source .venv/bin/activate
# Windows: .venv\Scripts\activate
pip install -r requirements.txt
PYTHONPATH=src python -m convert [--download] [--force-download]Interne Verarbeitung:
(Optional) Bei
--downloadwerden fehlende Parquet-Dateien von HuggingFace geladenpersona.dbneu erstellen (vorhandene Datei löschen)PRAGMA-Einstellungen + Schema/Indizes erstellen
9 Parquet-Dateien sequenziell lesen, zeilenweise normalisieren und per
executemanyladen (Transaktionseinheit: 1 Datei)*_list-Spalten werden vonast.literal_eval→json.dumps(ensure_ascii=False)konvertiertFTS5-virtuelle Tabelle erstellen + einmaliger
INSERT ... SELECT-BuildINSERT INTO persona_fts(persona_fts) VALUES('optimize')gefolgt vonANALYZEWAL-Checkpoint und Beenden
Speicherplatzschätzung
Haupttabelle + Indizes: ca. 1,5 ~ 2,5 GB
FTS5 inklusive Präfixe: zusätzlich 1 ~ 3 GB
Gesamt ca. 3 ~ 5 GB erwartet (Aktualisierung nach tatsächlichem Laden).
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/civilian7/korean-people-persona'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
