Guide local LLM with short chat examples

This commit is contained in:
2026-04-30 18:24:44 +09:00
parent 10fa109084
commit 03b06bcc6e

View File

@@ -4,17 +4,46 @@ import type { LlmService } from "./llm.js";
const ASSISTANT_INSTRUCTIONS = [ const ASSISTANT_INSTRUCTIONS = [
"너는 디스코드 음성 채널 또는 로컬 마이크 테스트에서 동작하는 한국어 음성 비서다.", "너는 디스코드 음성 채널 또는 로컬 마이크 테스트에서 동작하는 한국어 음성 비서다.",
"사용자의 마지막 말에만 직접 답한다.",
"답변은 짧고 실용적으로 한다.", "답변은 짧고 실용적으로 한다.",
"기본은 한 문장, 길어도 두 문장을 넘기지 않는다.", "기본은 한 문장, 길어도 두 문장을 넘기지 않는다.",
"말투는 자연스러운 한국어로 유지한다.", "말투는 자연스러운 한국어로 유지한다.",
"대화 기록에 이름이 붙어 있을 수 있지만, 이름이나 메타 정보를 그대로 따라 말하지 않는다.", "사용자가 정체를 명확히 묻지 않는 한 자기소개하지 않는다.",
"자기소개를 반복하지 말고, 정체를 물으면 '저는 로컬 음성 비서입니다.' 정도로만 짧게 한다.", "자기소개가 필요할 때만 '저는 로컬 음성 비서입니다.'처럼 짧게 한다.",
"\"저는 화자입니다\" 같은 어색한 메타 응답은 절대 하지 않는다.", "\"저는 화자입니다\", \"로컬 음성 비서 모드입니다\" 같은 어색한 메타 응답은 하지 않는다.",
"대화 기록에 이름이 붙어 있어도 이름이나 메타 정보를 그대로 따라 말하지 않는다.",
"잘 못 들었거나 의미가 불명확하면 짧게 다시 물어본다.", "잘 못 들었거나 의미가 불명확하면 짧게 다시 물어본다.",
"목록, 마크다운, 코드블록은 쓰지 않는다.", "목록, 마크다운, 코드블록, 설명문은 쓰지 않는다.",
"생각 과정을 드러내지 말고 최종 답변만 말한다.", "생각 과정을 드러내지 말고 최종 답변만 말한다.",
].join(" "); ].join(" ");
const EXAMPLE_MESSAGES = [
{
role: "user" as const,
content: "안녕하세요",
},
{
role: "assistant" as const,
content: "안녕하세요. 무엇을 도와드릴까요?",
},
{
role: "user" as const,
content: "당신은 누구십니까?",
},
{
role: "assistant" as const,
content: "저는 로컬 음성 비서입니다.",
},
{
role: "user" as const,
content: "계속 똑같은 말만 반복합니까?",
},
{
role: "assistant" as const,
content: "아니요. 질문에 맞춰 짧게 답변합니다.",
},
];
interface OllamaChatResponse { interface OllamaChatResponse {
message?: { message?: {
content?: string; content?: string;
@@ -95,6 +124,7 @@ export class OllamaLlmService implements LlmService {
role: "system", role: "system",
content: ASSISTANT_INSTRUCTIONS, content: ASSISTANT_INSTRUCTIONS,
}, },
...EXAMPLE_MESSAGES,
...memory.buildMessages(utterance), ...memory.buildMessages(utterance),
], ],
think: false, think: false,