mirror of https://github.com/Mai-with-u/MaiBot.git
81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
"""
|
||
查询黑话/概念含义 - 工具实现
|
||
用于在记忆检索过程中主动查询未知词语或黑话的含义
|
||
"""
|
||
|
||
from typing import List, Optional
|
||
from src.common.logger import get_logger
|
||
from src.bw_learner.jargon_explainer import retrieve_concepts_with_jargon
|
||
from .tool_registry import register_memory_retrieval_tool
|
||
|
||
logger = get_logger("memory_retrieval_tools")
|
||
|
||
|
||
async def query_words(chat_id: str, words: str) -> str:
|
||
"""查询词语或黑话的含义
|
||
|
||
Args:
|
||
chat_id: 聊天ID
|
||
words: 要查询的词语,可以是单个词语或多个词语(用逗号、空格等分隔)
|
||
|
||
Returns:
|
||
str: 查询结果,包含词语的含义解释
|
||
"""
|
||
try:
|
||
if not words or not words.strip():
|
||
return "未提供要查询的词语"
|
||
|
||
# 解析词语列表(支持逗号、空格等分隔符)
|
||
words_list = []
|
||
for separator in [",", ",", " ", "\n", "\t"]:
|
||
if separator in words:
|
||
words_list = [w.strip() for w in words.split(separator) if w.strip()]
|
||
break
|
||
|
||
# 如果没有找到分隔符,整个字符串作为一个词语
|
||
if not words_list:
|
||
words_list = [words.strip()]
|
||
|
||
# 去重
|
||
unique_words = []
|
||
seen = set()
|
||
for word in words_list:
|
||
if word and word not in seen:
|
||
unique_words.append(word)
|
||
seen.add(word)
|
||
|
||
if not unique_words:
|
||
return "未提供有效的词语"
|
||
|
||
logger.info(f"查询词语含义: {unique_words}")
|
||
|
||
# 调用检索函数
|
||
result = await retrieve_concepts_with_jargon(unique_words, chat_id)
|
||
|
||
if result:
|
||
return result
|
||
else:
|
||
return f"未找到词语 '{', '.join(unique_words)}' 的含义或黑话解释"
|
||
|
||
except Exception as e:
|
||
logger.error(f"查询词语含义失败: {e}")
|
||
return f"查询失败: {str(e)}"
|
||
|
||
|
||
def register_tool():
|
||
"""注册工具"""
|
||
register_memory_retrieval_tool(
|
||
name="query_words",
|
||
description="查询词语或黑话的含义。当遇到不熟悉的词语、缩写、黑话或网络用语时,可以使用此工具查询其含义。支持查询单个或多个词语(用逗号、空格等分隔)。",
|
||
parameters=[
|
||
{
|
||
"name": "words",
|
||
"type": "string",
|
||
"description": "要查询的词语,可以是单个词语或多个词语(用逗号、空格等分隔,如:'YYDS' 或 'YYDS,内卷,996')",
|
||
"required": True,
|
||
},
|
||
],
|
||
execute_func=query_words,
|
||
)
|
||
|