fix(rag): recall complete course homework lists
This commit is contained in:
@@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
import asyncio
|
||||
import json
|
||||
from datetime import datetime
|
||||
from types import SimpleNamespace
|
||||
|
||||
from sqlalchemy import create_engine, select
|
||||
from sqlalchemy.orm import Session
|
||||
@@ -19,7 +20,7 @@ from app.models.knowledge import (
|
||||
KnowledgeVersion,
|
||||
)
|
||||
from app.models.chat import ChatMessage
|
||||
from app.services.knowledge_agent_service import KnowledgeAgentService
|
||||
from app.services.knowledge_agent_service import Candidate, KnowledgeAgentService
|
||||
|
||||
|
||||
def _database() -> Session:
|
||||
@@ -187,13 +188,45 @@ def test_homework_overview_expands_practice_terms_and_section_limit():
|
||||
|
||||
assert "功课" in terms
|
||||
assert "练习" in terms
|
||||
assert KnowledgeAgentService._selection_limit("合一的作业是什么?") == 8
|
||||
assert KnowledgeAgentService._candidate_limit("合一的作业是什么?") == 48
|
||||
assert KnowledgeAgentService._selection_limit("合一的作业是什么?") == 24
|
||||
assert KnowledgeAgentService._candidate_limit("这个练习怎么做?") == 12
|
||||
assert KnowledgeAgentService._selection_limit("这个练习怎么做?") == 4
|
||||
assert KnowledgeAgentService._title_intent_boost("十七、练习一:风铃式静心", terms) == 20.0
|
||||
assert KnowledgeAgentService._title_intent_boost("完整练习的方向", terms) == 3.0
|
||||
assert KnowledgeAgentService._title_intent_boost("课程定位", terms) == 0.0
|
||||
|
||||
|
||||
def test_homework_overview_keeps_all_numbered_practices_before_selection():
|
||||
candidates = [
|
||||
Candidate(
|
||||
chunk=SimpleNamespace(title=f"练习{index}:课程作业", id=index),
|
||||
section=SimpleNamespace(id=index),
|
||||
knowledge=SimpleNamespace(id=1),
|
||||
version=SimpleNamespace(id=1),
|
||||
lexical_score=float(30 - index),
|
||||
)
|
||||
for index in range(1, 15)
|
||||
]
|
||||
|
||||
unrelated = Candidate(
|
||||
chunk=SimpleNamespace(title="课程介绍", id=99),
|
||||
section=SimpleNamespace(id=99),
|
||||
knowledge=SimpleNamespace(id=1),
|
||||
version=SimpleNamespace(id=1),
|
||||
lexical_score=100.0,
|
||||
)
|
||||
|
||||
selected = KnowledgeAgentService._select_sections(
|
||||
[unrelated, *candidates],
|
||||
limit=KnowledgeAgentService._selection_limit("原生里的作业内容都有什么"),
|
||||
prefer_numbered_practice=True,
|
||||
)
|
||||
|
||||
assert len(selected) == 14
|
||||
assert all(item.chunk.title.startswith("练习") for item in selected)
|
||||
|
||||
|
||||
def test_complete_section_includes_child_headings_but_stops_at_next_peer():
|
||||
with _database() as db:
|
||||
knowledge = _add_published_knowledge(db, knowledge_id=1, name="合一课程")
|
||||
|
||||
Reference in New Issue
Block a user