VOOZH about

URL: https://glama.ai/mcp/servers/civilian7/korean-people-persona?locale=zh-CN

⇱ korean-people-persona by civilian7 | Glama


korean-people-persona

用于将 HuggingFace nvidia/Nemotron-Personas-Korea 数据集(约100万行,9个 parquet 文件)转换为 SQLite 并进行搜索的工具集。

概述

  • 来源: NVIDIA, Nemotron-Personas-Koreahttps://huggingface.co/datasets/nvidia/Nemotron-Personas-Korea

  • 许可: 遵循原数据集页面的许可条款

  • DB 文件: database/persona.db

  • 原始 parquet: data/train-*-of-*.parquet

  • : persona (主表) + persona_fts (FTS5 外部内容索引)

  • 目标 SQLite: 3.37+ (使用 FTS5, STRICT 表, JSON1)

  • Python: 3.10 及以上 (推荐 3.11+)

  • 依赖: pyarrow >= 15.0, huggingface_hub >= 0.24 (参考 requirements.txt)

  • 磁盘空间: 约 5 GB (parquet ~2GB + DB ~3GB)

Related MCP server: @nahisaho/katashiro-mcp-server

数据来源

项目

仓库

nvidia/Nemotron-Personas-Korea

文件

train-0000{0..8}-of-00009.parquet (9个)

每文件行数

约 111,112

总行数

1,000,000

缺失值

所有列均为 0 (保证 NOT NULL)

country

全部为 대한민국 (韩国) 单一值

*_list

Python repr 格式字符串 → 规范化为 JSON 数组

文件夹结构

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.md

data/database/ 因容量较大,已通过 .gitignore 排除。

数据集下载

选择以下三种方法之一。结果文件必须以 train-*-of-*.parquet 的形式放置在 data/ 文件夹中。

1) 转换脚本选项 (推荐)

若缺少 src/convert 包,将自动获取:

pip install huggingface_hub pyarrow
PYTHONPATH=src python -m convert --download # 없을 때만 받음
PYTHONPATH=src python -m convert --download --force-download # 항상 재다운로드

2) 直接使用 huggingface-cli

pip install huggingface_hub
huggingface-cli download nvidia/Nemotron-Personas-Korea \
 --repo-type dataset \
 --include "train-*-of-*.parquet" \
 --local-dir ./data

3) git lfs 克隆

git lfs install
git clone https://huggingface.co/datasets/nvidia/Nemotron-Personas-Korea
mv Nemotron-Personas-Korea/train-*.parquet ./data/

认证: 对于私有或受限模型,需要 huggingface-cli loginHF_TOKEN 环境变量。本数据集(截至公开时)无需认证即可下载。

容量: 9个 parquet 文件总计约 1~2 GB。

主表 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;

索引

名称

用途

idx_persona_demo

(sex, age)

性别/年龄分布查询

idx_persona_region

(province, district)

地区筛选

idx_persona_edu_occ

(education_level, occupation)

学历/职业分析

idx_persona_family

(family_type, marital_status)

家庭/婚姻分析

列含义

说明

示例

uuid

32位 hex 字符串 (无连字符)。PK

03b4f36a18e6469386d0286dddd513c8

persona

核心 1~2 句总结

"70多岁男性,在农村地区从事农业工作一辈子..."

*_persona

各领域详细人设 (数句长度)

职业/体育/艺术/旅行/饮食文化/家庭

cultural_background

文化/成长背景描述

skills_and_expertise

技能描述

skills_and_expertise_list

上述项目的关键词列表 (JSON 数组)

["Excel使用","文档编写"]

hobbies_and_interests

爱好/兴趣描述

hobbies_and_interests_list

上述项目的关键词列表 (JSON 数组)

["登山","钓鱼"]

career_goals_and_ambitions

未来目标

sex

남자 (男) / 여자 (女)

age

整数

marital_status

4种

미혼 (未婚) / 기혼 (已婚) / 이혼 (离异) / 사별 (丧偶) 等

military_status

2种

군필 (服役完毕) / 해당없음 (不适用) 等

family_type

39种

배우자와 자녀 (配偶与子女), 1인 가구 (单人家庭) 等

housing_type

6种

아파트 (公寓), 단독주택 (独栋住宅) 等

education_level

7种

초등학교 (小学) ~ 대학원 (研究生)

bachelors_field

学士专业领域

occupation

职业 (自由文本)

district

市郡区

강남-서초 (江南-瑞草)

province

市道

서울 (首尔), 경기 (京畿) 等 17种

country

国家

대한민국 (韩国) (单一值)

全文搜索 — persona_fts (FTS5)

以外部内容方式索引 10 个长韩语描述列。

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'
);

分词器: unicode61 + 2/3/4 字符前缀索引。为处理韩语助词,建议搜索时使用 등산* 形式的前缀匹配。若需要形态分析,可更换为基于 mecab-ko / kiwi 的自定义分词器。

FTS 同步: 由于数据集是静态的,通过一次 INSERT INTO persona_fts(rowid, ...) SELECT ... 构建。如有变更,需添加触发器。

AI 智能体应用 (MCP 服务器)

本仓库提供 MCP (Model Context Protocol) 服务器,使 Claude Desktop、Cursor、Cline 等兼容 MCP 的智能体能够直接搜索和采样数据。

运行

PYTHONPATH=src python -m mcp_server # stdio 서버 시작

各智能体注册方法

所有示例中的 仓库绝对路径 /abs/path/to/korean-people-persona 均需根据您的环境进行修改。 若创建了虚拟环境 (.venv),将 command 指定为 venv 内的 Python 可避免依赖冲突。 (例如: macOS/Linux /abs/path/.venv/bin/python, Windows C:/abs/path/.venv/Scripts/python.exe)

Claude Desktop

配置文件位置:

OS

路径

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

或通过应用内 Settings → Developer → Edit Config 菜单。

{
 "mcpServers": {
 "korean-persona": {
 "command": "python",
 "args": ["-m", "mcp_server"],
 "env": {
 "PYTHONPATH": "/abs/path/to/korean-people-persona/src",
 "PYTHONIOENCODING": "utf-8"
 }
 }
 }
}

保存后 重启 Claude Desktop → 在聊天窗口右下角的锤子 (🔨) 图标中确认 5 个工具已显示。

Claude Code (CLI)

通过 CLI 命令一行注册:

claude mcp add korean-persona python -m mcp_server \
 -e PYTHONPATH=/abs/path/to/korean-people-persona/src \
 -e PYTHONIOENCODING=utf-8

或直接写入项目根目录的 .mcp.json / 用户设置 ~/.claude/settings.json:

{
 "mcpServers": {
 "korean-persona": {
 "command": "python",
 "args": ["-m", "mcp_server"],
 "env": { "PYTHONPATH": "/abs/path/to/korean-people-persona/src" }
 }
 }
}

确认: claude mcp list → 激活后可通过 /mcp 斜杠命令调用工具。

Cursor

项目级 .cursor/mcp.json 或用户全局 ~/.cursor/mcp.json:

{
 "mcpServers": {
 "korean-persona": {
 "command": "python",
 "args": ["-m", "mcp_server"],
 "env": { "PYTHONPATH": "/abs/path/to/korean-people-persona/src" }
 }
 }
}

或使用 Settings → MCP → Add new MCP Server UI。重启 Cursor 后通过 @korean-persona 调用。

ChatGPT (Developer Mode / Connectors)

ChatGPT 的 MCP 集成基于 HTTP/SSE 传输 (远程连接器)。由于本服务器是 stdio 服务器,无法直接注册,需通过 HTTP 适配器封装 后暴露。

  1. 使用 mcp SDK 的 HTTP 传输运行服务器:

    PYTHONPATH=src python -m mcp_server --transport sse --port 8765

    (目前本仓库 server.py 仅调用 stdio。若要使用 HTTP/SSE 模式,需添加 mcp.run(transport="sse", port=8765) 分支。)

  2. 通过 ngrok / Cloudflare Tunnel 等暴露到外部:

    ngrok http 8765
  3. ChatGPT → Settings → Connectors → Developer mode → Add custom connector

    • URL: https://<ngrok>/sse

    • 认证: 如有需要,添加 Bearer 令牌头 (MCP_AUTH_TOKEN)

  4. 在新聊天中通过 Tools 菜单激活连接器即可调用工具。

安全提示: ChatGPT 连接器将工具暴露在模型外部,因此 公开 URL 必须通过认证保护。若仅限本地使用,建议使用基于 stdio 的 Claude Desktop / Cursor。

Gemini CLI

Google gemini-cli 用户设置 ~/.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"
 }
 }
}

确认: gemini mcp list (或 CLI 内 /mcp 命令) → 工具自动显示。

通用故障排除

症状

原因 / 解决方法

工具未显示

未重启应用。Claude Desktop 需要完全退出 (包括托盘图标)

ModuleNotFoundError: mcp_server

确认 PYTHONPATH 指向 src (建议绝对路径)

韩语乱码

添加 env.PYTHONIOENCODING=utf-8 (特别是 Windows)

找不到 python 命令

command 改为绝对路径 (例如: /usr/bin/python3, C:/Python311/python.exe, venv 的 python)

权限错误

Windows 路径包含空格 → 使用引号或更改路径

暴露的工具

工具

说明

search_persona(query, fields, filters, limit, full)

FTS5 自由文本搜索 + 人口统计筛选结合 (BM25 排序)

get_persona(uuid)

通过 uuid 查询单个完整人设

sample_persona(filters, n, full)

条件随机采样

aggregate(group_by, filters, limit)

人口统计 GROUP BY COUNT

stats()

数据集整体统计及可用列指南

智能体应用示例

1) 营销访谈模拟

"从 60 岁以上喜欢登山的女性中采样 10 人,模拟她们对新推出的护膝广告文案的反应。"

智能体按以下流程工作:

  1. search_persona(query="登山*", filters={"sex":"여자","age_min":60}, limit=10, full=True)

  2. 将每个人设注入系统提示词 → 每人生成一份广告文案评价响应

  3. 响应聚类后总结洞察

2) 基于地区的角色选角

"寻找住在釜山影岛区的 50 多岁个体户人设,整理成可用于短篇小说主角的资料。"

search_persona(
 filters={"province":"부산", "district_like":"%영도%",
 "age_min":50, "age_max":59,
 "occupation_like":"%자영%"},
 limit=5, full=True
)

3) 政策影响分析

"分析最终学历为小学毕业的 70 岁以上单人家庭主要分布在哪些市道。"

aggregate(
 group_by=["province"],
 filters={"education_level":"초등학교", "age_min":70,
 "family_type_like":"%혼자%"},
 limit=20
)

4) 语义搜索 + 引用

"寻找在农村长大且有孙辈的人设,并提供 cultural_background 的引用。"

search_persona(
 query='"농촌" AND 손주*',
 fields=["cultural_background", "family_persona"],
 limit=5, full=True
)

5) 合成问卷调查

"按全国人口分布比例分层采样 100 人,并询问每人是否赞成引入每周 4 天工作制。"

  1. aggregate(group_by=["province","sex","age"]) → 计算分布比例

  2. 按比例调用 sample_persona (市道×性别×年龄段)

  3. 对每个人设向 LLM 请求 1:1 响应

  4. 结果汇总 → 计算加权后的赞成/反对分布

直接使用 (代码)

无需 MCP,直接在 Python 中调用:

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 直接查询

-- 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 设置 (加载/运行)

PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA temp_store = MEMORY;
PRAGMA cache_size = -262144; -- 256MB

构建流程

一键构建 (推荐)

各 OS 的包装脚本自动执行创建虚拟环境 → 安装依赖 → 下载 → 转换。

平台

命令

Linux / macOS

chmod +x build.sh && ./build.sh

Windows (cmd)

build.bat

Windows (PowerShell)

.\build.ps1

重新下载选项统一传递:

./build.sh --force-download
build.bat --force-download
.\build.ps1 --force-download

若 PowerShell 出现执行策略错误: PowerShell -ExecutionPolicy Bypass -File .\build.ps1

手动执行

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]

内部处理:

  1. (可选) --download 时从 HuggingFace 获取缺失的 parquet

  2. 新建 persona.db (删除旧文件)

  3. 设置 PRAGMA + 创建模式/索引

  4. 依次读取 9 个 parquet,按行规范化后执行 executemany 加载 (事务单位: 1 个文件)

  5. *_list 列转换为 ast.literal_evaljson.dumps(ensure_ascii=False)

  6. 创建 FTS5 虚拟表 + 执行一次 INSERT ... SELECT 构建

  7. INSERT INTO persona_fts(persona_fts) VALUES('optimize') 后执行 ANALYZE

  8. WAL 检查点后退出

磁盘空间估算

  • 主表 + 索引: 约 1.5 ~ 2.5 GB

  • FTS5 前缀包含: 额外 1 ~ 3 GB

  • 总计约 3 ~ 5 GB (实际加载后更新)。

F
license - not found
-
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.

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/civilian7/korean-people-persona'

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