31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import type { EmotionTag } from "@kokorone/shared";
|
||
import { pickTemplates } from "./template-library.js";
|
||
|
||
export interface FewShotExample {
|
||
emotionTag: EmotionTag;
|
||
tier: "low" | "high";
|
||
userInput: string;
|
||
response: string;
|
||
}
|
||
|
||
const SAMPLE_USER_INPUT: Record<"low" | "high", string> = {
|
||
low: "今天天氣真好呢。",
|
||
high: "謝謝你,我今天好開心!",
|
||
};
|
||
|
||
const SAMPLE_EMOTIONS: EmotionTag[] = ["CALM", "JOY", "SAD", "ALERT", "SHY", "GRUMPY"];
|
||
|
||
// R-3:F-7 的 Mock 模板庫在真實 Provider 這邊轉為 few-shot 範例——同一份模板資料,
|
||
// 從「隨機挑一句直接當回應」變成「示範這個性格原型在各種情緒下該有的語氣」。
|
||
export function buildFewShotExamples(personalityArchetype: string): FewShotExample[] {
|
||
const examples: FewShotExample[] = [];
|
||
for (const tier of ["low", "high"] as const) {
|
||
for (const emotionTag of SAMPLE_EMOTIONS) {
|
||
const candidates = pickTemplates(personalityArchetype, emotionTag, tier);
|
||
if (candidates.length === 0) continue;
|
||
examples.push({ emotionTag, tier, userInput: SAMPLE_USER_INPUT[tier], response: candidates[0] });
|
||
}
|
||
}
|
||
return examples;
|
||
}
|