feat: 添加线索引擎、NLQ、场景检测、前端界面等核心功能模块

This commit is contained in:
freedakgmail
2026-06-16 08:15:15 +08:00
parent 7b1e2b10a8
commit 48340f6011
62 changed files with 6772 additions and 65 deletions
+3 -1
View File
@@ -4,7 +4,7 @@ from __future__ import annotations
from app.config import EGRESS_PROVIDERS, LLMProviderName, Settings, get_settings
from app.llm.base import LLMProvider
from app.llm.providers import DashScopeProvider, VllmProvider
from app.llm.providers import DashScopeProvider, MockProvider, VllmProvider
class EgressPolicyError(RuntimeError):
@@ -27,5 +27,7 @@ def get_llm_provider(settings: Settings | None = None) -> LLMProvider:
)
if settings.llm_provider == LLMProviderName.vllm:
return VllmProvider(base_url=settings.vllm_base_url, model=settings.vllm_model)
if settings.llm_provider == LLMProviderName.mock:
return MockProvider()
raise ValueError(f"未知的 LLM Provider: {settings.llm_provider}")
+28
View File
@@ -78,3 +78,31 @@ class VllmProvider(LLMProvider):
return resp.status_code == 200
except httpx.HTTPError:
return False
class MockProvider(LLMProvider):
"""本地确定性 Mock Provider:开发/测试用,不出域、不依赖外网。
返回可预测的回显内容,便于在无 API Key / 无 GPU 时打通链路与自动化测试。
"""
name = "mock"
egress = False
def __init__(self, model: str = "mock-llm") -> None:
self._model = model
def chat(self, messages: list[ChatMessage], **kwargs) -> LLMResponse:
last_user = next(
(m.content for m in reversed(messages) if m.role == "user"), ""
)
return LLMResponse(
content=f"[mock] 收到查询:{last_user}",
model=self._model,
provider=self.name,
egress=False,
raw={"echo": last_user},
)
def health(self) -> bool:
return True