fix: align agent no-hit handling
This commit is contained in:
@@ -23,12 +23,14 @@ class AgentDebugService:
|
||||
SimpleNamespace(id=index + 1, role=item.role, content=item.content)
|
||||
for index, item in enumerate(payload.history)
|
||||
]
|
||||
preview_knowledge_ids = payload.knowledgeIds or None
|
||||
version_overrides = payload.knowledgeVersions or None
|
||||
rag_result = await KnowledgeAgentService.build_result(
|
||||
db,
|
||||
question=payload.question,
|
||||
history=history,
|
||||
version_overrides=payload.knowledgeVersions,
|
||||
preview_knowledge_ids=payload.knowledgeIds,
|
||||
version_overrides=version_overrides,
|
||||
preview_knowledge_ids=preview_knowledge_ids,
|
||||
prompt_override=payload.promptContent,
|
||||
response_depth=payload.responseDepth,
|
||||
)
|
||||
|
||||
@@ -38,7 +38,7 @@ class ModelClientService:
|
||||
if model is None:
|
||||
raise ExternalServiceError("未启用可用模型,请先在模型管理中启用一个模型。", provider="model")
|
||||
model_name = model.model_name
|
||||
answer = _call_configured_model(model, rag_result, allow_no_hit=rag_result.allow_general_knowledge)
|
||||
answer = _call_configured_model(model, rag_result, allow_no_hit=True)
|
||||
return ModelCompletion(
|
||||
answer=answer,
|
||||
model_id=model.id if model is not None else None,
|
||||
|
||||
@@ -30,7 +30,7 @@ from app.services.model_service import (
|
||||
_system_and_turn_messages,
|
||||
_system_config_bool,
|
||||
)
|
||||
from app.services.rag_service import NO_HIT_ANSWER, RagResult
|
||||
from app.services.rag_service import RagResult
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@@ -64,14 +64,6 @@ class ModelStreamService:
|
||||
chunks=_display_chunks(model, _mock_answer(rag_result)),
|
||||
)
|
||||
|
||||
if not rag_result.is_hit and not rag_result.allow_general_knowledge:
|
||||
return StreamingModelResponse(
|
||||
model_id=model.id if model is not None else None,
|
||||
model_name=model.model_name if model is not None else "no-hit",
|
||||
input_token=_rough_token_count(rag_result.prompt),
|
||||
chunks=_display_chunks(model, NO_HIT_ANSWER),
|
||||
)
|
||||
|
||||
if model is None:
|
||||
raise ExternalServiceError("未启用可用模型,请先在模型管理中启用一个模型。", provider="model")
|
||||
if not (model.api_url or model.base_url) or not model.api_key:
|
||||
@@ -98,14 +90,6 @@ class ModelStreamService:
|
||||
chunks=_async_display_chunks(model, _mock_answer(rag_result)),
|
||||
)
|
||||
|
||||
if not rag_result.is_hit and not rag_result.allow_general_knowledge:
|
||||
return AsyncStreamingModelResponse(
|
||||
model_id=model.id if model is not None else None,
|
||||
model_name=model.model_name if model is not None else "no-hit",
|
||||
input_token=_rough_token_count(rag_result.prompt),
|
||||
chunks=_async_display_chunks(model, NO_HIT_ANSWER),
|
||||
)
|
||||
|
||||
if model is None:
|
||||
raise ExternalServiceError("未启用可用模型,请先在模型管理中启用一个模型。", provider="model")
|
||||
if not (model.api_url or model.base_url) or not model.api_key:
|
||||
@@ -147,19 +131,19 @@ def _get_enabled_model(db: Session) -> ModelConfig | None:
|
||||
def _stream_configured_model(model: ModelConfig, rag_result: RagResult) -> Iterator[str]:
|
||||
api_type = model.api_type or "openai_compatible"
|
||||
if model.stream_enabled != 1:
|
||||
return iter((_call_configured_model(model, rag_result, allow_no_hit=rag_result.allow_general_knowledge),))
|
||||
return iter((_call_configured_model(model, rag_result, allow_no_hit=True),))
|
||||
if api_type == "anthropic_messages":
|
||||
return _stream_anthropic_messages(model, rag_result)
|
||||
if api_type == "openai_compatible":
|
||||
return _stream_openai_compatible_model(model, rag_result)
|
||||
return iter((_call_configured_model(model, rag_result, allow_no_hit=rag_result.allow_general_knowledge),))
|
||||
return iter((_call_configured_model(model, rag_result, allow_no_hit=True),))
|
||||
|
||||
|
||||
async def _stream_configured_model_async(model: ModelConfig, rag_result: RagResult) -> AsyncIterator[str]:
|
||||
api_type = model.api_type or "openai_compatible"
|
||||
if model.stream_enabled != 1:
|
||||
answer = await asyncio.to_thread(
|
||||
_call_configured_model, model, rag_result, allow_no_hit=rag_result.allow_general_knowledge
|
||||
_call_configured_model, model, rag_result, allow_no_hit=True
|
||||
)
|
||||
yield answer
|
||||
return
|
||||
@@ -175,7 +159,7 @@ async def _stream_configured_model_async(model: ModelConfig, rag_result: RagResu
|
||||
return
|
||||
|
||||
answer = await asyncio.to_thread(
|
||||
_call_configured_model, model, rag_result, allow_no_hit=rag_result.allow_general_knowledge
|
||||
_call_configured_model, model, rag_result, allow_no_hit=True
|
||||
)
|
||||
yield answer
|
||||
|
||||
|
||||
Reference in New Issue
Block a user