mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-13 07:50:00 +08:00
♻️ refactor(llm): 重构 LLM 服务架构,引入中间件与组件化适配器 (#2073)
检查bot是否运行正常 / bot check (push) Has been cancelled
CodeQL Code Security Analysis / Analyze (${{ matrix.language }}) (none, python) (push) Has been cancelled
Sequential Lint and Type Check / ruff-call (push) Has been cancelled
Release Drafter / Update Release Draft (push) Has been cancelled
Force Sync to Aliyun / sync (push) Has been cancelled
Update Version / update-version (push) Has been cancelled
Sequential Lint and Type Check / pyright-call (push) Has been cancelled
检查bot是否运行正常 / bot check (push) Has been cancelled
CodeQL Code Security Analysis / Analyze (${{ matrix.language }}) (none, python) (push) Has been cancelled
Sequential Lint and Type Check / ruff-call (push) Has been cancelled
Release Drafter / Update Release Draft (push) Has been cancelled
Force Sync to Aliyun / sync (push) Has been cancelled
Update Version / update-version (push) Has been cancelled
Sequential Lint and Type Check / pyright-call (push) Has been cancelled
* ♻️ refactor(llm): 重构 LLM 服务架构,引入中间件与组件化适配器 - 【重构】LLM 服务核心架构: - 引入中间件管道,统一处理请求生命周期(重试、密钥选择、日志、网络请求)。 - 适配器重构为组件化设计,分离配置映射、消息转换、响应解析和工具序列化逻辑。 - 移除 `with_smart_retry` 装饰器,其功能由中间件接管。 - 移除 `LLMToolExecutor`,工具执行逻辑集成到 `ToolInvoker`。 - 【功能】增强配置系统: - `LLMGenerationConfig` 采用组件化结构(Core, Reasoning, Visual, Output, Safety, ToolConfig)。 - 新增 `GenConfigBuilder` 提供语义化配置构建方式。 - 新增 `LLMEmbeddingConfig` 用于嵌入专用配置。 - `CommonOverrides` 迁移并更新至新配置结构。 - 【功能】强化工具系统: - 引入 `ToolInvoker` 实现更灵活的工具执行,支持回调与结构化错误。 - `function_tool` 装饰器支持动态 Pydantic 模型创建和依赖注入 (`ToolParam`, `RunContext`)。 - 平台原生工具支持 (`GeminiCodeExecution`, `GeminiGoogleSearch`, `GeminiUrlContext`)。 - 【功能】高级生成与嵌入: - `generate_structured` 方法支持 In-Context Validation and Repair (IVR) 循环和 AutoCoT (思维链) 包装。 - 新增 `embed_query` 和 `embed_documents` 便捷嵌入 API。 - `OpenAIImageAdapter` 支持 OpenAI 兼容的图像生成。 - `SmartAdapter` 实现模型名称智能路由。 - 【重构】消息与类型系统: - `LLMContentPart` 扩展支持更多模态和代码执行相关内容。 - `LLMMessage` 和 `LLMResponse` 结构更新,支持 `content_parts` 和思维链签名。 - 统一 `LLMErrorCode` 和用户友好错误消息,提供更详细的网络/代理错误提示。 - `pyproject.toml` 移除 `bilireq`,新增 `json_repair`。 - 【优化】日志与调试: - 引入 `DebugLogOptions`,提供细粒度日志脱敏控制。 - 增强日志净化器,处理更多敏感数据和长字符串。 - 【清理】删除废弃模块: - `zhenxun/services/llm/memory.py` - `zhenxun/services/llm/executor.py` - `zhenxun/services/llm/config/presets.py` - `zhenxun/services/llm/types/content.py` - `zhenxun/services/llm/types/enums.py` - `zhenxun/services/llm/tools/__init__.py` - `zhenxun/services/llm/tools/manager.py` * 📦️ build(deps): 移除 bilireq 并添加 json_repair 依赖 * 🐛 (llm): 移除图片生成模型能力预检查 * ♻️ refactor(llm.session): 重构记忆系统以分离存储和策略 * 🐛 fix(reload_setting): 重载配置时清除LLM缓存 * ✨ feat(llm): 支持结构化生成函数接收 UniMessage * ✨ feat(search): 为搜索功能默认启用 Gemini Google Search 工具 * 🚨 auto fix by pre-commit hooks --------- Co-authored-by: webjoin111 <455457521@qq.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
webjoin111
pre-commit-ci[bot]
parent
e5b2a872d3
commit
c9f0a8b9d9
@@ -10,8 +10,14 @@ from enum import Enum
|
||||
from pathlib import Path
|
||||
from typing import Any, TypeVar, get_args, get_origin
|
||||
|
||||
from nonebot.compat import PYDANTIC_V2, model_dump
|
||||
from pydantic import VERSION, BaseModel
|
||||
from nonebot.compat import (
|
||||
PYDANTIC_V2,
|
||||
model_dump,
|
||||
model_fields,
|
||||
type_validate_json,
|
||||
type_validate_python,
|
||||
)
|
||||
from pydantic import BaseModel
|
||||
import ujson as json
|
||||
|
||||
T = TypeVar("T", bound=BaseModel)
|
||||
@@ -27,9 +33,13 @@ __all__ = [
|
||||
"model_construct",
|
||||
"model_copy",
|
||||
"model_dump",
|
||||
"model_dump_json",
|
||||
"model_fields",
|
||||
"model_json_schema",
|
||||
"model_validate",
|
||||
"parse_as",
|
||||
"type_validate_json",
|
||||
"type_validate_python",
|
||||
]
|
||||
|
||||
|
||||
@@ -58,12 +68,18 @@ def model_construct(model_class: type[T], **kwargs: Any) -> T:
|
||||
|
||||
def model_validate(model_class: type[T], obj: Any) -> T:
|
||||
"""
|
||||
Pydantic `model_validate` (v2) 与 `parse_obj` (v1) 的兼容函数。
|
||||
Pydantic 模型验证兼容函数。
|
||||
"""
|
||||
return type_validate_python(model_class, obj)
|
||||
|
||||
|
||||
def model_dump_json(model: BaseModel, **kwargs: Any) -> str:
|
||||
"""
|
||||
Pydantic `model.json()` (v1) 和 `model.model_dump_json()` (v2) 的兼容函数。
|
||||
"""
|
||||
if PYDANTIC_V2:
|
||||
return model_class.model_validate(obj)
|
||||
else:
|
||||
return model_class.parse_obj(obj)
|
||||
return model.model_dump_json(**kwargs)
|
||||
return model.json(**kwargs)
|
||||
|
||||
|
||||
if PYDANTIC_V2:
|
||||
@@ -78,8 +94,7 @@ def model_json_schema(model_class: type[BaseModel], **kwargs: Any) -> dict[str,
|
||||
"""
|
||||
if PYDANTIC_V2:
|
||||
return model_class.model_json_schema(**kwargs)
|
||||
else:
|
||||
return model_class.schema(by_alias=kwargs.get("by_alias", True))
|
||||
return model_class.schema(by_alias=kwargs.get("by_alias", True))
|
||||
|
||||
|
||||
def _is_pydantic_type(t: Any) -> bool:
|
||||
@@ -108,18 +123,7 @@ def _dump_pydantic_obj(obj: Any) -> Any:
|
||||
return obj
|
||||
|
||||
|
||||
def parse_as(type_: type[V], obj: Any) -> V:
|
||||
"""
|
||||
一个兼容 Pydantic V1 的 parse_obj_as 和V2的TypeAdapter.validate_python 的辅助函数。
|
||||
"""
|
||||
if VERSION.startswith("1"):
|
||||
from pydantic import parse_obj_as
|
||||
|
||||
return parse_obj_as(type_, obj)
|
||||
else:
|
||||
from pydantic import TypeAdapter # type: ignore
|
||||
|
||||
return TypeAdapter(type_).validate_python(obj)
|
||||
parse_as = type_validate_python
|
||||
|
||||
|
||||
def dump_json_safely(obj: Any, **kwargs) -> str:
|
||||
|
||||
Reference in New Issue
Block a user