From afddc466e036d5f01415640ceb792b4d02e3db29 Mon Sep 17 00:00:00 2001 From: bridge Date: Tue, 9 Sep 2025 22:16:52 +0800 Subject: [PATCH] add game configs --- src/classes/item.py | 0 src/classes/persona.py | 40 +++++++++++++++++---------------- src/utils/df.py | 27 ++++++++++++++++++++++ static/config.yml | 4 +++- static/game_configs/persona.csv | 6 +++++ 5 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 src/classes/item.py create mode 100644 src/utils/df.py create mode 100644 static/game_configs/persona.csv diff --git a/src/classes/item.py b/src/classes/item.py new file mode 100644 index 0000000..e69de29 diff --git a/src/classes/persona.py b/src/classes/persona.py index 9dea1a6..bb40f0c 100644 --- a/src/classes/persona.py +++ b/src/classes/persona.py @@ -1,6 +1,7 @@ -from dataclasses import dataclass, field +from dataclasses import dataclass + +from src.utils.df import game_configs -# TODO: 配表化 @dataclass class Persona: """ @@ -10,24 +11,25 @@ class Persona: name: str prompt: str -personas_by_id: dict[int, Persona] = {} -personas_by_name: dict[str, Persona] = {} -p1 = Persona(id=1, name="理性", prompt="你是一个理性的人,你总是会用逻辑来思考问题,做事会谋定而后动。") -p2 = Persona(id=2, name="无常", prompt="你是一个无常的人,目标飘忽不定,不会长期坚持一个目标。") -p3 = Persona(id=3, name="怠惰", prompt="你是一个怠惰的人,你总是会拖延,不想努力,更热衷于享受人生。") -p4 = Persona(id=4, name="冒险", prompt="你是一个冒险的人,你总是会冒险,喜欢刺激,总想放手一搏。") -p5 = Persona(id=5, name="随性", prompt="你是一个随性的人,你总是会随机应变,性子到哪里了就是哪里,没有一定痣规。") +def _load_personas() -> tuple[dict[int, Persona], dict[str, Persona]]: + """从配表加载persona数据""" + personas_by_id: dict[int, Persona] = {} + personas_by_name: dict[str, Persona] = {} + + persona_df = game_configs["persona"] + for _, row in persona_df.iterrows(): + persona = Persona( + id=int(row["id"]), + name=str(row["name"]), + prompt=str(row["prompt"]) + ) + personas_by_id[persona.id] = persona + personas_by_name[persona.name] = persona + + return personas_by_id, personas_by_name -personas_by_id[p1.id] = p1 -personas_by_id[p2.id] = p2 -personas_by_id[p3.id] = p3 -personas_by_id[p4.id] = p4 -personas_by_id[p5.id] = p5 -personas_by_name[p1.name] = p1 -personas_by_name[p2.name] = p2 -personas_by_name[p3.name] = p3 -personas_by_name[p4.name] = p4 -personas_by_name[p5.name] = p5 +# 从配表加载persona数据 +personas_by_id, personas_by_name = _load_personas() diff --git a/src/utils/df.py b/src/utils/df.py new file mode 100644 index 0000000..c240b48 --- /dev/null +++ b/src/utils/df.py @@ -0,0 +1,27 @@ +import pandas as pd +from pathlib import Path + +from src.utils.config import CONFIG + + +def load_csv(path: Path) -> pd.DataFrame: + df = pd.read_csv(path) + row_types = { + "id": int, + "name": str, + "description": str, + "prompt": str, + } + for column, dtype in row_types.items(): + if column in df.columns: + df[column] = df[column].astype(dtype) + return df + +def load_game_configs() -> dict[str, pd.DataFrame]: + game_configs = {} + for path in CONFIG.paths.game_configs.glob("*.csv"): + df = load_csv(path) + game_configs[path.stem] = df + return game_configs + +game_configs = load_game_configs() \ No newline at end of file diff --git a/static/config.yml b/static/config.yml index ef5073a..bcd3f57 100644 --- a/static/config.yml +++ b/static/config.yml @@ -5,6 +5,7 @@ llm: paths: templates: static/templates/ + game_configs: static/game_configs/ ai: mode: "llm" # "rule" or "llm" @@ -12,4 +13,5 @@ ai: game: init_npc_num: 3 - npc_birth_rate_per_month: 0.001 \ No newline at end of file + npc_birth_rate_per_month: 0.001 + diff --git a/static/game_configs/persona.csv b/static/game_configs/persona.csv new file mode 100644 index 0000000..fa40259 --- /dev/null +++ b/static/game_configs/persona.csv @@ -0,0 +1,6 @@ +id,name,prompt +1,理性,你是一个理性的人,你总是会用逻辑来思考问题,做事会谋定而后动。 +2,无常,你是一个无常的人,目标飘忽不定,不会长期坚持一个目标。 +3,怠惰,你是一个怠惰的人,你总是会拖延,不想努力,更热衷于享受人生。 +4,冒险,你是一个冒险的人,你总是会冒险,喜欢刺激,总想放手一搏。 +5,随性,你是一个随性的人,你总是会随机应变,性子到哪里了就是哪里,没有一定痣规。