Improve agent reliability and token efficiency
This commit is contained in:
@@ -28,6 +28,7 @@ class AgentTool:
|
||||
usage: str
|
||||
description: str
|
||||
execute: ToolExecutor
|
||||
allowed_arguments: frozenset[str] = frozenset()
|
||||
paragraph_before: bool = False
|
||||
|
||||
def prompt_line(self) -> str:
|
||||
@@ -296,43 +297,49 @@ AGENT_TOOLS = (
|
||||
),
|
||||
AgentTool(
|
||||
"remember",
|
||||
'{"text": string}',
|
||||
'{"text":"..."}',
|
||||
"сохранить важный долгосрочный факт о пользователе.",
|
||||
remember,
|
||||
allowed_arguments=frozenset({"text"}),
|
||||
),
|
||||
AgentTool(
|
||||
"list_memory",
|
||||
'{"limit": number}',
|
||||
'{} (необязательно: "limit", по умолчанию 20)',
|
||||
"показать сохраненную память.",
|
||||
list_memory,
|
||||
allowed_arguments=frozenset({"limit"}),
|
||||
),
|
||||
AgentTool(
|
||||
"delete_memory",
|
||||
'{"id": number}',
|
||||
'{"id":1}',
|
||||
"удалить запись памяти.",
|
||||
delete_memory,
|
||||
allowed_arguments=frozenset({"id"}),
|
||||
),
|
||||
AgentTool(
|
||||
"create_note",
|
||||
'{"text": string}',
|
||||
'{"text":"..."}',
|
||||
"сохранить заметку.",
|
||||
create_note,
|
||||
allowed_arguments=frozenset({"text"}),
|
||||
),
|
||||
AgentTool(
|
||||
"list_notes",
|
||||
'{"limit": number}',
|
||||
'{} (необязательно: "limit", по умолчанию 20)',
|
||||
"показать заметки.",
|
||||
list_notes,
|
||||
allowed_arguments=frozenset({"limit"}),
|
||||
),
|
||||
AgentTool(
|
||||
"delete_note",
|
||||
'{"id": number}',
|
||||
'{"id":1}',
|
||||
"удалить заметку.",
|
||||
delete_note,
|
||||
allowed_arguments=frozenset({"id"}),
|
||||
),
|
||||
AgentTool(
|
||||
"create_reminder",
|
||||
'{"when": string, "text": string}',
|
||||
'{"when":"30m","text":"..."}',
|
||||
(
|
||||
"поставить напоминание. when можно указывать как '30m', "
|
||||
"'через 2 часа', '18:30', '2026-07-16 18:30'. Если пользователь "
|
||||
@@ -340,51 +347,59 @@ AGENT_TOOLS = (
|
||||
"текущего локального времени и передай 'YYYY-MM-DD HH:MM'."
|
||||
),
|
||||
create_reminder,
|
||||
allowed_arguments=frozenset({"when", "text"}),
|
||||
),
|
||||
AgentTool(
|
||||
"list_reminders",
|
||||
'{"limit": number}',
|
||||
'{} (необязательно: "limit", по умолчанию 20)',
|
||||
"показать активные напоминания.",
|
||||
list_reminders,
|
||||
allowed_arguments=frozenset({"limit"}),
|
||||
),
|
||||
AgentTool(
|
||||
"cancel_reminder",
|
||||
'{"id": number}',
|
||||
'{"id":1}',
|
||||
"отменить напоминание.",
|
||||
cancel_reminder,
|
||||
allowed_arguments=frozenset({"id"}),
|
||||
),
|
||||
AgentTool(
|
||||
"create_status",
|
||||
'{"title": string, "status": string}',
|
||||
'{"title":"..."} (необязательно: "status", по умолчанию "open")',
|
||||
"начать отслеживать статус.",
|
||||
create_status,
|
||||
allowed_arguments=frozenset({"title", "status"}),
|
||||
),
|
||||
AgentTool(
|
||||
"list_statuses",
|
||||
'{"limit": number}',
|
||||
'{} (необязательно: "limit", по умолчанию 30)',
|
||||
"показать отслеживаемые статусы.",
|
||||
list_statuses,
|
||||
allowed_arguments=frozenset({"limit"}),
|
||||
),
|
||||
AgentTool(
|
||||
"update_status",
|
||||
'{"id": number, "status": string}',
|
||||
'{"id":1,"status":"..."}',
|
||||
"обновить статус.",
|
||||
update_status,
|
||||
allowed_arguments=frozenset({"id", "status"}),
|
||||
),
|
||||
AgentTool(
|
||||
"delete_status",
|
||||
'{"id": number}',
|
||||
'{"id":1}',
|
||||
"удалить отслеживаемый объект.",
|
||||
delete_status,
|
||||
allowed_arguments=frozenset({"id"}),
|
||||
),
|
||||
AgentTool(
|
||||
"search_conversation",
|
||||
'{"query": string, "limit": number}',
|
||||
'{"query":"..."} (необязательно: "limit", по умолчанию 5)',
|
||||
(
|
||||
"найти старое обсуждение во всей сохраненной переписке по "
|
||||
"содержательным ключевым словам."
|
||||
),
|
||||
search_conversation,
|
||||
allowed_arguments=frozenset({"query", "limit"}),
|
||||
paragraph_before=True,
|
||||
),
|
||||
)
|
||||
@@ -406,6 +421,13 @@ def execute_agent_tool(
|
||||
tool = AGENT_TOOL_BY_NAME.get(name.strip().lower())
|
||||
if tool is None:
|
||||
return {"ok": False, "error": f"unknown tool: {name}"}
|
||||
unexpected_arguments = set(arguments) - tool.allowed_arguments
|
||||
if unexpected_arguments:
|
||||
unexpected = ", ".join(sorted(map(str, unexpected_arguments)))
|
||||
return {
|
||||
"ok": False,
|
||||
"error": f"unexpected arguments: {unexpected}",
|
||||
}
|
||||
return tool.execute(
|
||||
arguments,
|
||||
ToolContext(
|
||||
|
||||
Reference in New Issue
Block a user