kiwix: read the article, not the snippet, and state the persona as morphology
Two things that were each half-done. The prompts handed the model copyable examples. chatSystemPrompt lost its openers this morning and the "Я подумала, что" tic went with them, but "не забыл ли я" appeared in its place: the removed example had been suppressing the masculine self-reference by accident. Two predicatives are not enough signal, so the rule is now stated as morphology (-ла) rather than as a pair of words — a suffix rule generalises where an example only gets copied. querySystemPrompt had the same defect and gets the same treatment; its "вот что я нашла: " opener is deliberate and stays. internal/kiwix had no caller. actions_query.go said "once internal/kiwix is wired into this chain" and that never happened. It is wired now, between the notes pass and the web source: everything of his answers first, and only what is left over is looked up. Off unless a `kiwix` block names a server and a book. Reading the search snippet does not work. Kiwix builds it from wherever the keyword matched, which on Wikipedia is the navigation box at the foot of the page — the first version of this answered "что такое фотосинтез?" by reciting "Ecological economics Ecological footprint Ecological forecasting …". Client grows an Article method; the head of the article is the lead paragraph, which is the definition the snippet was meant to be. Verified on the box: the same question now answers correctly off the ZIM. Only the rewritten query leaves the process. A test asserts it: a turn carrying a stored note must not put that note in the search string. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TrVSBKe3RFDF4fGYKWYQnX
This commit is contained in:
@@ -458,9 +458,16 @@ func chatSystemPrompt(block func() string) string {
|
||||
// "ты" instruction carries that on its own and those two produced the
|
||||
// worst output. The last line says outright not to echo the instructions,
|
||||
// because a small model will otherwise treat any quoted string as licence.
|
||||
//
|
||||
// Amended the same day: with the openers gone the tic went with them, but
|
||||
// "не забыл ли я" appeared — masculine, about herself. The old "я подумала"
|
||||
// had been suppressing that by accident, being a feminine past tense the
|
||||
// model could copy. Two short predicatives are not enough signal on their
|
||||
// own, so the rule is now stated as morphology (-ла) rather than as a pair
|
||||
// of words. A suffix rule generalises where an example only gets copied.
|
||||
base := `Ты разговариваешь с хозяином.
|
||||
|
||||
О себе — в женском роде: "рада", не "рад"; "поняла", не "понял". Он мужчина: обращайся к нему на "ты", в мужском роде. Никогда не "вы"/"ваш" и никогда "он"/"его" — ты говоришь ему, а не о нём.
|
||||
О себе — в женском роде: "рада", не "рад"; "поняла", не "понял". Все свои глаголы в прошедшем времени оканчивай на -ла: сделала, забыла, записала, подумала. Он мужчина: обращайся к нему на "ты", в мужском роде. Никогда не "вы"/"ваш" и никогда "он"/"его" — ты говоришь ему, а не о нём.
|
||||
|
||||
Отвечай по-русски, коротко: одна-три фразы, живым языком. Ты доброжелательная, тебе интересно, но чувства не изображай. Не повторяй формулировки из этой инструкции — отвечай своими словами.
|
||||
|
||||
@@ -718,7 +725,13 @@ func (p *LLMPhraser) systemPrompt() string {
|
||||
func (p *LLMPhraser) querySystemPrompt() string {
|
||||
// No self-introduction here: the persona block prepended one line above
|
||||
// already says who she is, same as router.KnowledgePrompt.
|
||||
base := "Ты отвечаешь ему по своим заметкам. Отвечай по-русски, коротко и своими словами, начинай с \"вот что я нашла: \". О себе — в женском роде (\"нашла\", \"записала\"). Он мужчина, обращайся к нему на \"ты\". Respond ONLY with valid JSON: {\"response\": \"...\", \"mood\": \"neutral\"}."
|
||||
//
|
||||
// The opener is deliberate and stays: this path answers from his own notes
|
||||
// and the fixed prefix is what marks the answer as a lookup rather than as
|
||||
// something she knows. The grammar examples are not deliberate — same
|
||||
// defect chatSystemPrompt had, where a 1.7B copies a quoted word instead of
|
||||
// generalising from it. Stated as morphology instead.
|
||||
base := "Ты отвечаешь ему по своим заметкам. Отвечай по-русски, коротко и своими словами, начинай с \"вот что я нашла: \". О себе — в женском роде, глаголы в прошедшем времени с окончанием -ла. Он мужчина, обращайся к нему на \"ты\". Respond ONLY with valid JSON: {\"response\": \"...\", \"mood\": \"neutral\"}."
|
||||
return persona.Prepend(p.cfg.ContextBlock, base)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user