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

@@ -59,9 +59,18 @@ def _probe_openai_compatible(payload: ModelConnectivityTestRequest) -> int:
normalized_endpoint = _normalize_endpoint(payload.endpoint)
headers = _build_headers(api_key=payload.api_key, use_bearer=True)
if payload.capability == "embedding":
if payload.capability == "reranker" and payload.provider == "Ali":
url, body = _build_ali_reranker_request(payload.model, normalized_endpoint)
elif payload.capability == "embedding":
url = _ensure_path(normalized_endpoint, "embeddings")
body = {"model": payload.model, "input": "connectivity test"}
elif payload.capability == "reranker":
url = _ensure_path(normalized_endpoint, "rerank")
body = {
"model": payload.model,
"query": "connectivity test",
"documents": ["sample document"],
}
else:
url = _ensure_path(normalized_endpoint, "chat/completions")
body = {
@@ -74,6 +83,35 @@ def _probe_openai_compatible(payload: ModelConnectivityTestRequest) -> int:
return status_code
def _build_ali_reranker_request(model: str, endpoint: str) -> tuple[str, dict[str, Any]]:
normalized_model = str(model or "").strip()
if normalized_model == "qwen3-rerank":
return (
"https://dashscope.aliyuncs.com/compatible-api/v1/reranks",
{
"model": normalized_model,
"query": "connectivity test",
"documents": ["sample document"],
"top_n": 1,
},
)
return (
"https://dashscope.aliyuncs.com/api/v1/services/rerank/text-rerank/text-rerank",
{
"model": normalized_model,
"input": {
"query": "connectivity test",
"documents": ["sample document"],
},
"parameters": {
"return_documents": False,
"top_n": 1,
},
},
)
def _probe_ollama(payload: ModelConnectivityTestRequest) -> int:
normalized_endpoint = _normalize_endpoint(payload.endpoint)
headers = _build_headers(api_key=payload.api_key, use_bearer=False)
@@ -81,6 +119,8 @@ def _probe_ollama(payload: ModelConnectivityTestRequest) -> int:
if payload.capability == "embedding":
url = _ensure_path(normalized_endpoint, "api/embed")
body = {"model": payload.model, "input": "connectivity test"}
elif payload.capability == "reranker":
raise ConnectivityCheckError("Ollama 暂不支持 reranker 连通性探测。", status_code=HTTPStatus.BAD_REQUEST)
else:
url = _ensure_path(normalized_endpoint, "api/chat")
body = {
@@ -100,6 +140,12 @@ def _probe_azure_openai(payload: ModelConnectivityTestRequest) -> int:
if payload.capability == "embedding":
url = f"{deployment_base}/embeddings?api-version={AZURE_API_VERSION}"
body = {"input": "connectivity test"}
elif payload.capability == "reranker":
url = f"{deployment_base}/rerank?api-version={AZURE_API_VERSION}"
body = {
"query": "connectivity test",
"documents": ["sample document"],
}
else:
url = f"{deployment_base}/chat/completions?api-version={AZURE_API_VERSION}"
body = {
@@ -168,12 +214,13 @@ def _send_json_request(
*,
headers: dict[str, str],
payload: dict[str, Any],
timeout_seconds: int = DEFAULT_TIMEOUT_SECONDS,
) -> tuple[int, Any]:
data = json.dumps(payload).encode("utf-8")
request = Request(url=url, data=data, headers=headers, method=method)
try:
with urlopen(request, timeout=DEFAULT_TIMEOUT_SECONDS) as response:
with urlopen(request, timeout=timeout_seconds) as response:
body = response.read().decode("utf-8") if response.length != 0 else ""
return response.status, _parse_json_body(body)
except HTTPError as exc: