feat: 重构知识库系统,移除Hermes集成,增强RAG和同步功能

主要变更:
- 移除Hermes智能体及相关回调服务
- 新增知识库RAG、同步、调度、规范化和索引任务服务
- 重构orchestrator服务,增强运行时聊天功能
- 更新前端聊天、政策制度、设置等页面样式和逻辑
- 更新expense_claims和document_intelligence服务
- 删除llm_wiki相关服务和测试文件
- 更新docker-compose配置和启动脚本
This commit is contained in:
caoxiaozhu
2026-05-17 08:38:41 +00:00
parent 212c935308
commit 68f663f2f4
308 changed files with 83729 additions and 13588 deletions

View File

@@ -10,8 +10,9 @@ import yaml
from sqlalchemy import create_engine
from sqlalchemy.orm import Session, sessionmaker
from app.core import admin_secret
from app.core import secret_box
from app.core import admin_secret
from app.core import secret_box
from app.core.secret_box import encrypt_secret
from app.db.base import Base
from app.models.system_model_setting import SystemModelSetting
from app.models.system_setting import SystemSetting
@@ -245,3 +246,55 @@ def test_blank_secret_input_keeps_synced_hermes_api_key(monkeypatch) -> None:
hermes_config = yaml.safe_load(get_hermes_config_path().read_text(encoding="utf-8"))
assert hermes_config["model"]["default"] == "gpt-5.4-mini"
assert hermes_config["model"]["api_key"] == "persisted-main-key"
def test_settings_service_migrates_legacy_vlm_slot_to_reranker(monkeypatch) -> None:
temp_dir = build_temp_secret_dir()
monkeypatch.setattr(secret_box, "SECRET_KEY_FILE", temp_dir / "settings.key")
monkeypatch.setattr(Base.metadata, "create_all", lambda *args, **kwargs: None)
monkeypatch.setenv("HERMES_HOME", str(temp_dir / ".hermes"))
with build_session(temp_dir / "settings.db") as db:
service = SettingsService(db)
service.get_settings_snapshot()
settings_row = db.get(SystemSetting, "default")
secrets_row = db.get(SystemSettingSecret, "default")
reranker_row = db.get(SystemModelSetting, "reranker")
assert settings_row is not None
assert secrets_row is not None
assert reranker_row is not None
db.delete(reranker_row)
settings_row.reranker_provider = ""
settings_row.reranker_model = ""
settings_row.reranker_endpoint = ""
settings_row.vlm_provider = "Gemini"
settings_row.vlm_model = "legacy-reranker"
settings_row.vlm_endpoint = "https://legacy.example.com/v1"
secrets_row.reranker_api_key_encrypted = ""
secrets_row.vlm_api_key_encrypted = encrypt_secret("legacy-reranker-key")
db.add(
SystemModelSetting(
slot="vlm",
provider="Gemini",
model_name="legacy-reranker",
endpoint="https://legacy.example.com/v1",
capability="chat",
priority=30,
enabled=True,
api_key_encrypted=encrypt_secret("legacy-reranker-key"),
)
)
db.commit()
snapshot = service.get_settings_snapshot()
assert snapshot.llmForm.rerankerProvider == "Gemini"
assert snapshot.llmForm.rerankerModel == "legacy-reranker"
assert snapshot.llmForm.rerankerEndpoint == "https://legacy.example.com/v1"
assert snapshot.llmForm.rerankerApiKeyConfigured is True
assert db.get(SystemModelSetting, "vlm") is None
assert db.get(SystemModelSetting, "reranker") is not None
assert service.load_saved_model_api_key("reranker") == "legacy-reranker-key"