feat: 添加儿童级对话训练功能,优化生成逻辑,新增相关数据处理模块和测试用例

This commit is contained in:
2026-07-08 12:54:29 +08:00
parent 04d59219cb
commit 49a27e124d
6 changed files with 445 additions and 29 deletions

View File

@@ -7,6 +7,7 @@ import torch
from jspaceai import (
ActionEvent,
ActionPolicy,
ChatBatchSampler,
CharTokenizer,
ConsensusSnapshot,
InMemoryVectorMemoryStore,
@@ -21,7 +22,12 @@ from jspaceai import (
OnlineLanguageLearner,
WorkspaceEvent,
WorkspaceRuntime,
build_child_chat_corpus,
compose_action_params,
extract_child_reply,
format_child_prompt,
load_child_dialog_examples,
lookup_child_reply,
)
from main_chat import generate_response
@@ -211,6 +217,26 @@ class SmokeTests(unittest.TestCase):
self.assertIn("trainer", ckpt)
self.assertEqual(ckpt["trainer"]["global_step"], 2)
def test_child_chat_sampler_masks_answer_tokens(self):
examples = load_child_dialog_examples(repeats=1)
tokenizer = CharTokenizer.from_text(build_child_chat_corpus(repeats=1))
sampler = ChatBatchSampler(
examples[:2],
tokenizer,
seq_len=48,
train_fraction=0.5,
)
token_seq, loss_mask = sampler.sample(2)
prompt_len = len(tokenizer.encode(format_child_prompt(examples[0].user)))
self.assertEqual(tuple(token_seq.shape), (2, 48))
self.assertEqual(tuple(loss_mask.shape), (2, 47))
self.assertGreater(loss_mask.sum().item(), 0)
self.assertTrue(all(v == 0 for v in loss_mask[0, :prompt_len - 1].tolist()))
self.assertEqual(extract_child_reply("问:你好\n答:你好呀。\n问:再见"), "你好呀。")
self.assertEqual(lookup_child_reply("你好"), "你好呀。")
def test_compose_action_params_respects_discrete_mode(self):
raw = torch.tensor([0.5, -0.25, 0.3, -0.4, 0.8]).numpy()