feat: 向量记忆 RAG、工具市场、SSE 流式响应、前端集成与测试覆盖
- 新增 embedding_service(语义检索)、knowledge_service(RAG)、text_chunker、document_parser - 新增 tool_registry(自定义工具注册表)并完善工具市场 API(CRUD + code/http 执行) - 新增 agent_vector_memory / knowledge_base 模型及对应数据库表 - 实现 SSE 流式响应与 Agent 预算控制 - AgentChat.vue 集成 MainLayout 导航布局 - 完善测试体系:7 个新测试文件共 110 个测试覆盖 - 修复 conftest.py SQLite 内存数据库连接隔离问题 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,9 +3,8 @@ Agent 工具管理器:包装已有 ToolRegistry,提供 Agent 需要的工具
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import logging
|
||||
from typing import Any, Callable, Dict, List, Optional
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from app.services.tool_registry import tool_registry
|
||||
|
||||
@@ -58,6 +57,8 @@ class AgentToolManager:
|
||||
"""
|
||||
执行工具调用。
|
||||
|
||||
优先查找内置工具,其次查找数据库自定义工具(HTTP / Code)。
|
||||
|
||||
Args:
|
||||
name: 工具名称
|
||||
args: 工具参数字典
|
||||
@@ -65,27 +66,8 @@ class AgentToolManager:
|
||||
Returns:
|
||||
工具执行结果的字符串表示
|
||||
"""
|
||||
func: Optional[Callable] = tool_registry.get_tool_function(name)
|
||||
if not func:
|
||||
err = f"工具 '{name}' 不存在"
|
||||
logger.error(err)
|
||||
return json.dumps({"error": err}, ensure_ascii=False)
|
||||
|
||||
logger.info("Agent 执行工具: %s, 参数: %s", name, args)
|
||||
try:
|
||||
import asyncio
|
||||
if asyncio.iscoroutinefunction(func):
|
||||
result = await func(**args)
|
||||
else:
|
||||
result = func(**args)
|
||||
|
||||
if isinstance(result, (dict, list)):
|
||||
return json.dumps(result, ensure_ascii=False)
|
||||
return str(result)
|
||||
except Exception as e:
|
||||
err_msg = f"工具 '{name}' 执行失败: {e}"
|
||||
logger.error(err_msg, exc_info=True)
|
||||
return json.dumps({"error": err_msg}, ensure_ascii=False)
|
||||
logger.info("Agent 执行工具: %s", name)
|
||||
return await tool_registry.execute_tool(name, args)
|
||||
|
||||
@staticmethod
|
||||
def _extract_tool_name(schema: Dict[str, Any]) -> Optional[str]:
|
||||
|
||||
Reference in New Issue
Block a user