feat: add agent response depth control

This commit is contained in:
2026-07-20 11:36:18 +08:00
parent 537978082a
commit c2655361b5
12 changed files with 192 additions and 5 deletions

View File

@@ -20,7 +20,7 @@ from app.services.model_stream_service import (
_stream_configured_model_async,
)
from app.services.model_service import ModelClientService, _copy_model_with_overrides, _max_output_tokens
from app.services.rag_service import RagResult
from app.services.rag_service import PromptService, RagResult
def _database() -> Session:
@@ -73,6 +73,7 @@ def test_runtime_config_defaults_to_long_answer_safe_max_tokens():
assert result["maxToken"] == 8192
assert result["streamEnabled"] == 1
assert result["reasoningVisible"] == 0
assert result["responseDepth"] == 35
assert _max_output_tokens(model) == 8192
@@ -97,6 +98,7 @@ def test_saved_runtime_config_is_persisted_on_enabled_model():
maxToken=12000,
streamEnabled=0,
reasoningVisible=1,
responseDepth=20,
),
db=db,
current_admin=admin,
@@ -113,7 +115,9 @@ def test_saved_runtime_config_is_persisted_on_enabled_model():
assert model.stream_enabled == 0
assert result["streamEnabled"] == 0
assert result["reasoningVisible"] == 1
assert result["responseDepth"] == 20
assert db.query(SystemConfig).filter_by(config_key="show_model_reasoning").one().config_value == "true"
assert db.query(SystemConfig).filter_by(config_key="agent_response_depth").one().config_value == "20"
payload = _openai_stream_payload(
model,
@@ -191,10 +195,24 @@ def test_debug_preview_passes_conversation_history_and_replaces_saved_prompt():
kwargs = build_result.await_args.kwargs
assert [item.content for item in kwargs["history"]] == ["最开始的问题", "第一次回答"]
assert kwargs["prompt_override"] == "调试主提示词"
assert kwargs["response_depth"] == 35
assert result.messages == rag_result.messages
assert result.prompt == "调试提示词渲染结果"
def test_prompt_includes_response_depth_instruction():
with _database() as db:
db.add(SystemConfig(config_key="agent_response_depth", config_value="20"))
db.commit()
messages = PromptService.build_messages(db, "做功课没反应怎么办?", [])
system = messages[0]["content"]
assert "回答深度20/100精简" in system
assert "不展开心理分析" in system
assert "回到当下、身体感受和情绪觉察" in system
@pytest.mark.parametrize("reasoning_visible", [True, False])
def test_agent_debug_stream_respects_reasoning_visibility(reasoning_visible):
async def chunks():