mirror of https://github.com/Mai-with-u/MaiBot.git
|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| __init__.py | ||
| query_chat_history.py | ||
| query_jargon.py | ||
| tool_registry.py | ||
| tool_utils.py | ||
README.md
记忆检索工具模块
这个模块提供了统一的工具注册和管理系统,用于记忆检索功能。
目录结构
retrieval_tools/
├── __init__.py # 模块导出
├── tool_registry.py # 工具注册系统
├── tool_utils.py # 工具函数库(共用函数)
├── query_jargon.py # 查询jargon工具
├── query_chat_history.py # 查询聊天历史工具
└── README.md # 本文件
模块说明
tool_registry.py
包含工具注册系统的核心类:
MemoryRetrievalTool: 工具基类MemoryRetrievalToolRegistry: 工具注册器register_memory_retrieval_tool(): 便捷注册函数get_tool_registry(): 获取注册器实例
tool_utils.py
包含所有工具共用的工具函数:
parse_datetime_to_timestamp(): 解析时间字符串为时间戳parse_time_range(): 解析时间范围字符串
工具文件
每个工具都有独立的文件:
query_jargon.py: 根据关键词在jargon库中查询query_chat_history.py: 根据时间或关键词在chat_history中查询(支持查询时间点事件、时间范围事件、关键词搜索)
如何添加新工具
- 创建新的工具文件,例如
query_new_tool.py:
"""
新工具 - 工具实现
"""
from src.common.logger import get_logger
from .tool_registry import register_memory_retrieval_tool
from .tool_utils import parse_datetime_to_timestamp # 如果需要使用工具函数
logger = get_logger("memory_retrieval_tools")
async def query_new_tool(param1: str, param2: str, chat_id: str) -> str:
"""新工具的实现
Args:
param1: 参数1
param2: 参数2
chat_id: 聊天ID
Returns:
str: 查询结果
"""
try:
# 实现逻辑
return "结果"
except Exception as e:
logger.error(f"新工具执行失败: {e}")
return f"查询失败: {str(e)}"
def register_tool():
"""注册工具"""
register_memory_retrieval_tool(
name="query_new_tool",
description="新工具的描述",
parameters=[
{
"name": "param1",
"type": "string",
"description": "参数1的描述",
"required": True
},
{
"name": "param2",
"type": "string",
"description": "参数2的描述",
"required": True
}
],
execute_func=query_new_tool
)
- 在
__init__.py中导入并注册新工具:
from .query_new_tool import register_tool as register_query_new_tool
def init_all_tools():
"""初始化并注册所有记忆检索工具"""
register_query_jargon()
register_query_chat_history()
register_query_new_tool() # 添加新工具
- 工具会自动:
- 出现在 ReAct Agent 的 prompt 中
- 在动作类型列表中可用
- 被 ReAct Agent 自动调用
使用示例
from src.memory_system.retrieval_tools import init_all_tools, get_tool_registry
# 初始化所有工具
init_all_tools()
# 获取工具注册器
registry = get_tool_registry()
# 获取特定工具
tool = registry.get_tool("query_chat_history")
# 执行工具(查询时间点事件)
result = await tool.execute(time_point="2025-01-15 14:30:00", chat_id="chat123")
# 或者查询关键词
result = await tool.execute(keyword="小丑AI", chat_id="chat123")
# 或者查询时间范围
result = await tool.execute(time_range="2025-01-15 10:00:00 - 2025-01-15 20:00:00", chat_id="chat123")
现有工具说明
query_jargon
根据关键词在jargon库中查询黑话/俚语/缩写的含义
- 参数:
keyword(必填) - 关键词
query_chat_history
根据时间或关键词在chat_history中查询相关聊天记录。可以查询某个时间点发生了什么、某个时间范围内的事件,或根据关键词搜索消息
- 参数:
keyword(可选) - 关键词,用于搜索消息内容time_point(可选) - 时间点,格式:YYYY-MM-DD HH:MM:SS,用于查询某个时间点附近发生了什么(与time_range二选一)time_range(可选) - 时间范围,格式:'YYYY-MM-DD HH:MM:SS - YYYY-MM-DD HH:MM:SS'(与time_point二选一)
注意事项
- 所有工具函数必须是异步函数(
async def) - 如果工具函数签名需要
chat_id参数,系统会自动添加(通过函数签名检测) - 工具参数定义中的
required字段用于生成 prompt 描述 - 工具执行失败时应返回错误信息字符串,而不是抛出异常
- 共用函数放在
tool_utils.py中,避免代码重复