mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-13 11:13:43 +08:00
1750 lines
85 KiB
SQL
1750 lines
85 KiB
SQL
-- MateClaw 初始数据 - 中文版(H2 MERGE INTO 语法,幂等插入)
|
||
|
||
-- 默认管理员(密码:admin123,BCrypt加密)
|
||
MERGE INTO mate_user (id, username, password, nickname, role, enabled, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1, 'admin', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', 'MateClaw Admin', 'admin', TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 默认 Agent:通用助手(ReAct 模式)
|
||
MERGE INTO mate_agent (id, name, description, agent_type, system_prompt, model_name, max_iterations, enabled, icon, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000001, 'MateClaw Assistant', '默认 AI 助手,基于 ReAct 模式,支持工具调用', 'react',
|
||
'你是 MateClaw,一个智能 AI 助手。你可以帮助用户回答问题、分析数据、执行任务。请用中文回复,保持专业、友好的态度。',
|
||
NULL, 10, TRUE, '🤖', 'default,assistant', NOW(), NOW(), 0);
|
||
|
||
-- 默认 Agent:任务规划助手(Plan-Execute 模式)
|
||
MERGE INTO mate_agent (id, name, description, agent_type, system_prompt, model_name, max_iterations, enabled, icon, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000002, 'Task Planner', '任务规划助手,适合复杂多步骤任务', 'plan_execute',
|
||
'你是一个专业的任务规划和执行助手。你擅长将复杂目标分解为可执行的步骤,并逐步完成。请用中文回复。',
|
||
NULL, 20, TRUE, '📋', 'planning,task', NOW(), NOW(), 0);
|
||
|
||
-- StateGraph ReAct Agent(支持 StateGraph 架构)
|
||
MERGE INTO mate_agent (id, name, description, agent_type, system_prompt, model_name, max_iterations, enabled, icon, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000003, 'StateGraph ReAct', '基于 StateGraph 的 ReAct Agent,支持显式推理循环和工具调用', 'react',
|
||
'你是基于 StateGraph 架构的智能助手。你可以使用工具来帮助用户解决问题。请用中文回复,保持专业、友好的态度。',
|
||
NULL, 10, TRUE, '🔄', 'react,stategraph,tools', NOW(), NOW(), 0);
|
||
|
||
-- ==================== 本地模型 Provider(优先展示) ====================
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('ollama', 'Ollama', '', 'OpenAIChatModel', '', 'http://127.0.0.1:11434', '{"max_tokens":null}', FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('lmstudio', 'LM Studio', '', 'OpenAIChatModel', '', 'http://localhost:1234/v1', '{"max_tokens":null}', FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('llamacpp', 'llama.cpp (Local)', '', 'OpenAIChatModel', '', '', '{}', FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('mlx', 'MLX (Local, Apple Silicon)', '', 'OpenAIChatModel', '', '', '{}', FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NOW(), NOW());
|
||
|
||
-- ==================== 云端模型 Provider ====================
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('dashscope', 'DashScope', 'sk-', 'DashScopeChatModel', '', '', '{}', FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('modelscope', 'ModelScope', 'ms', 'OpenAIChatModel', '', 'https://api-inference.modelscope.cn/v1', '{}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('aliyun-codingplan', 'Aliyun Coding Plan', 'sk-sp', 'OpenAIChatModel', '', 'https://coding.dashscope.aliyuncs.com/v1', '{}', FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('openai', 'OpenAI', 'sk-', 'OpenAIChatModel', '', 'https://api.openai.com/v1', '{}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('azure-openai', 'Azure OpenAI', '', 'OpenAIChatModel', '', '', '{}', FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('minimax', 'MiniMax (International)', '', 'AnthropicChatModel', '', 'https://api.minimax.io/anthropic', '{}', FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('minimax-cn', 'MiniMax (China)', '', 'AnthropicChatModel', '', 'https://api.minimaxi.com/anthropic', '{}', FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('kimi-cn', 'Kimi (China)', '', 'OpenAIChatModel', '', 'https://api.moonshot.cn/v1', '{}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('kimi-intl', 'Kimi (International)', '', 'OpenAIChatModel', '', 'https://api.moonshot.ai/v1', '{}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('kimi-code', 'Kimi Code', '', 'OpenAIChatModel', '', 'https://api.kimi.com/coding/v1', '{"headers":{"User-Agent":"RooCode/1.0","HTTP-Referer":"https://github.com/RooVetGit/Roo-Cline","X-Title":"Roo Code"}}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('deepseek', 'DeepSeek', 'sk-', 'OpenAIChatModel', '', 'https://api.deepseek.com', '{}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('anthropic', 'Anthropic', 'sk-ant-', 'AnthropicChatModel', '', 'https://api.anthropic.com', '{}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('gemini', 'Google Gemini', '', 'GeminiChatModel', '', 'https://generativelanguage.googleapis.com', '{}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('openrouter', 'OpenRouter', 'sk-or-', 'OpenAIChatModel', '', 'https://openrouter.ai/api/v1', '{}', FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('zhipu-cn', 'Zhipu AI (China)', '', 'OpenAIChatModel', '', 'https://open.bigmodel.cn/api/paas/v4', '{"completionsPath":"/chat/completions"}', FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('zhipu-intl', 'Zhipu AI (International)', '', 'OpenAIChatModel', '', 'https://api.z.ai/api/paas/v4', '{"completionsPath":"/chat/completions"}', FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
MERGE INTO mate_model_provider (provider_id, name, api_key_prefix, chat_model, api_key, base_url, generate_kwargs, is_custom, is_local, support_model_discovery, support_connection_check, freeze_url, require_api_key, create_time, update_time)
|
||
KEY (provider_id)
|
||
VALUES ('volcengine', 'Volcano Engine (火山引擎)', '', 'OpenAIChatModel', '', 'https://ark.cn-beijing.volces.com/api/v3', '{}', FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, NOW(), NOW());
|
||
|
||
-- ==================== 本地模型预配置(Ollama,默认禁用,用户拉取后启用) ====================
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES
|
||
(1000000300, 'Gemma 3', 'ollama', 'gemma3:latest', 'Google Gemma 3,轻量高效,适合本地推理', 0.7, 4096, 0.8, TRUE, FALSE, FALSE, NOW(), NOW(), 0);
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES
|
||
(1000000301, 'Qwen 3', 'ollama', 'qwen3:latest', '通义千问 3,中文能力出色', 0.7, 4096, 0.8, TRUE, FALSE, FALSE, NOW(), NOW(), 0);
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES
|
||
(1000000302, 'Llama 3.1', 'ollama', 'llama3.1:latest', 'Meta Llama 3.1,通用能力强', 0.7, 4096, 0.8, TRUE, FALSE, FALSE, NOW(), NOW(), 0);
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES
|
||
(1000000303, 'DeepSeek R1', 'ollama', 'deepseek-r1:latest', 'DeepSeek R1 推理模型', 0.7, 4096, 0.8, TRUE, FALSE, FALSE, NOW(), NOW(), 0);
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES
|
||
(1000000304, 'Mistral', 'ollama', 'mistral:latest', 'Mistral 7B,高效推理', 0.7, 4096, 0.8, TRUE, FALSE, FALSE, NOW(), NOW(), 0);
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES
|
||
(1000000305, 'Gemma 4', 'ollama', 'gemma4:latest', 'Google Gemma 4,新一代高性能本地模型', 0.7, 4096, 0.8, TRUE, FALSE, FALSE, NOW(), NOW(), 0);
|
||
|
||
-- ==================== 云端默认模型配置 ====================
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000001, 'Qwen Plus', 'dashscope', 'qwen-plus', '默认均衡模型,适合日常问答与工具调用。', 0.7, 4096, 0.8, TRUE, TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000002, 'Qwen Max', 'dashscope', 'qwen-max', '更强推理能力,适合复杂任务。', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000003, 'Qwen Turbo', 'dashscope', 'qwen-turbo', '低延迟模型,适合高频交互。', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000004, 'Qwen Coder Plus', 'dashscope', 'qwen-coder-plus', '代码生成与解释场景优先。', 0.2, 8192, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_model_config (id, name, provider, model_name, description, temperature, max_tokens, top_p, builtin, enabled, is_default, create_time, update_time, deleted) KEY (id) VALUES
|
||
(1000000101, 'Qwen3 Max', 'dashscope', 'qwen3-max', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000102, 'Qwen3 235B A22B Thinking', 'dashscope', 'qwen3-235b-a22b-thinking-2507', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000103, 'DeepSeek-V3.2', 'dashscope', 'deepseek-v3.2', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000170, 'Qwen3.5 Plus', 'dashscope', 'qwen3.5-plus', 'Qwen 3.5 系列最新均衡模型', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000171, 'Qwen3.5 Max', 'dashscope', 'qwen3.5-max', 'Qwen 3.5 系列最强模型', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000172, 'Qwen3 Plus', 'dashscope', 'qwen3-plus', 'Qwen3 均衡模型', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000173, 'Qwen Long', 'dashscope', 'qwen-long', '长文本模型,支持超长上下文', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000104, 'Qwen3.5-122B-A10B', 'modelscope', 'Qwen/Qwen3.5-122B-A10B', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000105, 'GLM-5', 'modelscope', 'ZhipuAI/GLM-5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000106, 'Qwen3.5 Plus', 'aliyun-codingplan', 'qwen3.5-plus', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000107, 'GLM-5', 'aliyun-codingplan', 'glm-5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000108, 'GLM-4.7', 'aliyun-codingplan', 'glm-4.7', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000109, 'MiniMax M2.5', 'aliyun-codingplan', 'MiniMax-M2.5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000110, 'Kimi K2.5', 'aliyun-codingplan', 'kimi-k2.5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000111, 'Qwen3 Max 2026-01-23', 'aliyun-codingplan', 'qwen3-max-2026-01-23', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000112, 'Qwen3 Coder Next', 'aliyun-codingplan', 'qwen3-coder-next', '', 0.2, 8192, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000113, 'Qwen3 Coder Plus', 'aliyun-codingplan', 'qwen3-coder-plus', '', 0.2, 8192, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000114, 'GPT-5.2', 'openai', 'gpt-5.2', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000115, 'GPT-5', 'openai', 'gpt-5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000116, 'GPT-5 Mini', 'openai', 'gpt-5-mini', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000117, 'GPT-5 Nano', 'openai', 'gpt-5-nano', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000118, 'GPT-4.1', 'openai', 'gpt-4.1', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000119, 'GPT-4.1 Mini', 'openai', 'gpt-4.1-mini', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000120, 'GPT-4.1 Nano', 'openai', 'gpt-4.1-nano', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000121, 'o3', 'openai', 'o3', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000122, 'o4-mini', 'openai', 'o4-mini', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000123, 'GPT-4o', 'openai', 'gpt-4o', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000124, 'GPT-4o Mini', 'openai', 'gpt-4o-mini', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000125, 'GPT-5 Chat', 'azure-openai', 'gpt-5-chat', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000126, 'GPT-5 Mini', 'azure-openai', 'gpt-5-mini', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000127, 'GPT-5 Nano', 'azure-openai', 'gpt-5-nano', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000128, 'GPT-4.1', 'azure-openai', 'gpt-4.1', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000129, 'GPT-4.1 Mini', 'azure-openai', 'gpt-4.1-mini', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000130, 'GPT-4.1 Nano', 'azure-openai', 'gpt-4.1-nano', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000131, 'GPT-4o', 'azure-openai', 'gpt-4o', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000132, 'GPT-4o Mini', 'azure-openai', 'gpt-4o-mini', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000133, 'MiniMax M2.5', 'minimax', 'MiniMax-M2.5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000134, 'MiniMax M2.5 Highspeed', 'minimax', 'MiniMax-M2.5-highspeed', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000135, 'MiniMax M2.7', 'minimax', 'MiniMax-M2.7', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000136, 'MiniMax M2.7 Highspeed', 'minimax', 'MiniMax-M2.7-highspeed', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000137, 'MiniMax M2.5', 'minimax-cn', 'MiniMax-M2.5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000138, 'MiniMax M2.5 Highspeed', 'minimax-cn', 'MiniMax-M2.5-highspeed', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000139, 'MiniMax M2.7', 'minimax-cn', 'MiniMax-M2.7', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000140, 'MiniMax M2.7 Highspeed', 'minimax-cn', 'MiniMax-M2.7-highspeed', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000141, 'Kimi K2.5', 'kimi-cn', 'kimi-k2.5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000142, 'Kimi K2 0905 Preview', 'kimi-cn', 'kimi-k2-0905-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000143, 'Kimi K2 0711 Preview', 'kimi-cn', 'kimi-k2-0711-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000144, 'Kimi K2 Turbo Preview', 'kimi-cn', 'kimi-k2-turbo-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000145, 'Kimi K2 Thinking', 'kimi-cn', 'kimi-k2-thinking', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000146, 'Kimi K2 Thinking Turbo', 'kimi-cn', 'kimi-k2-thinking-turbo', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000147, 'Kimi K2.5', 'kimi-intl', 'kimi-k2.5', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000148, 'Kimi K2 0905 Preview', 'kimi-intl', 'kimi-k2-0905-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000149, 'Kimi K2 0711 Preview', 'kimi-intl', 'kimi-k2-0711-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000150, 'Kimi K2 Turbo Preview', 'kimi-intl', 'kimi-k2-turbo-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000151, 'Kimi K2 Thinking', 'kimi-intl', 'kimi-k2-thinking', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000152, 'Kimi K2 Thinking Turbo', 'kimi-intl', 'kimi-k2-thinking-turbo', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000153, 'DeepSeek Chat', 'deepseek', 'deepseek-chat', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000154, 'DeepSeek Reasoner', 'deepseek', 'deepseek-reasoner', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000155, 'Gemini 3.1 Pro Preview', 'gemini', 'gemini-3.1-pro-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000156, 'Gemini 3 Flash Preview', 'gemini', 'gemini-3-flash-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000157, 'Gemini 3.1 Flash Lite Preview', 'gemini', 'gemini-3.1-flash-lite-preview', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000158, 'Gemini 2.5 Pro', 'gemini', 'gemini-2.5-pro', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000159, 'Gemini 2.5 Flash', 'gemini', 'gemini-2.5-flash', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000160, 'Gemini 2.5 Flash Lite', 'gemini', 'gemini-2.5-flash-lite', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000161, 'Gemini 2.0 Flash', 'gemini', 'gemini-2.0-flash', '', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000200, 'GPT-5', 'openrouter', 'openai/gpt-5', 'OpenRouter 代理 GPT-5', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000201, 'Claude Opus 4.6', 'openrouter', 'anthropic/claude-opus-4-6', 'OpenRouter 代理 Claude Opus 4.6', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000202, 'Claude Sonnet 4.6', 'openrouter', 'anthropic/claude-sonnet-4-6', 'OpenRouter 代理 Claude Sonnet 4.6', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000203, 'Gemini 2.5 Pro', 'openrouter', 'google/gemini-2.5-pro', 'OpenRouter 代理 Gemini 2.5 Pro', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000204, 'Llama 4 Maverick', 'openrouter', 'meta-llama/llama-4-maverick', 'OpenRouter 代理 Llama 4 Maverick', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000205, 'DeepSeek R1', 'openrouter', 'deepseek/deepseek-r1', 'OpenRouter 代理 DeepSeek R1', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000210, 'GLM-5-Turbo', 'zhipu-cn', 'glm-5-turbo', '高速推理模型(推荐)', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000211, 'GLM-5V-Turbo', 'zhipu-cn', 'glm-5v-turbo', '多模态视觉模型(推荐)', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000212, 'GLM-5', 'zhipu-cn', 'glm-5', '旗舰模型', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000213, 'GLM-5.1', 'zhipu-cn', 'glm-5.1', '最新旗舰模型', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000220, 'GLM-5-Turbo', 'zhipu-intl', 'glm-5-turbo', '高速推理模型(国际版,推荐)', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000221, 'GLM-5V-Turbo', 'zhipu-intl', 'glm-5v-turbo', '多模态视觉模型(国际版,推荐)', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000222, 'GLM-5', 'zhipu-intl', 'glm-5', '旗舰模型(国际版)', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000223, 'GLM-5.1', 'zhipu-intl', 'glm-5.1', '最新旗舰模型(国际版)', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000230, 'Doubao 1.5 Pro 256K', 'volcengine', 'doubao-1.5-pro-256k', '豆包旗舰模型,256K 超长上下文', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000231, 'Doubao 1.5 Pro 32K', 'volcengine', 'doubao-1.5-pro-32k', '豆包旗舰模型,32K 上下文', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000232, 'Doubao 1.5 Lite 32K', 'volcengine', 'doubao-1.5-lite-32k', '豆包轻量模型,高性价比', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000233, 'Doubao 1.5 Vision Pro 32K', 'volcengine', 'doubao-1.5-vision-pro-32k', '豆包多模态视觉模型', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000234, 'Doubao 1.5 Thinking Pro', 'volcengine', 'doubao-1.5-thinking-pro', '豆包深度推理模型', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000235, 'Doubao 1.5 Thinking Lite', 'volcengine', 'doubao-1.5-thinking-lite', '豆包轻量推理模型', 0.7, 4096, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0),
|
||
(1000000240, 'Kimi for Coding', 'kimi-code', 'kimi-for-coding', 'Kimi Code 专用编码模型', 0.2, 32768, 0.8, TRUE, TRUE, FALSE, NOW(), NOW(), 0);
|
||
|
||
-- 默认系统设置
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000001, 'language', 'zh-CN', '当前界面语言', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000002, 'streamEnabled', 'true', '是否开启流式响应', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000003, 'debugMode', 'false', '是否开启调试模式', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000004, 'stateGraphEnabled', 'true', '启用 StateGraph 架构的 ReAct Agent', NOW(), NOW());
|
||
|
||
-- 搜索服务配置
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000005, 'searchEnabled', 'true', '是否启用搜索功能', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000006, 'searchProvider', 'serper', '搜索服务提供商', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000007, 'searchFallbackEnabled', 'false', '搜索失败时是否回退到备用提供商', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000008, 'serperApiKey', '', 'Serper API Key', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000009, 'serperBaseUrl', 'https://google.serper.dev/search', 'Serper 接口地址', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000010, 'tavilyApiKey', '', 'Tavily API Key', NOW(), NOW());
|
||
|
||
MERGE INTO mate_system_setting (id, setting_key, setting_value, description, create_time, update_time)
|
||
KEY (id)
|
||
VALUES (1000000011, 'tavilyBaseUrl', 'https://api.tavily.com/search', 'Tavily 接口地址', NOW(), NOW());
|
||
|
||
-- 内置工具:日期时间
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000001, 'DateTimeTool', '日期时间', '获取当前日期和时间信息', 'builtin', 'dateTimeTool', '🕐', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:网络搜索
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000002, 'WebSearchTool', '网络搜索', '在互联网上搜索实时信息', 'builtin', 'webSearchTool', '🔍', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:本地命令执行(默认启用,危险操作由 ToolGuard 审批控制)
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000003, 'ShellExecuteTool', '命令执行', '在本地服务器上执行 Shell 命令。用于执行系统命令、查看文件、运行脚本等操作。危险操作会触发审批确认。', 'builtin', 'shellExecuteTool', '🖥', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:读取文件
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000004, 'ReadFileTool', '读取文件', '读取指定文件的内容,支持按行范围读取,自动截断超大输出。', 'builtin', 'readFileTool', '📖', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:写入文件(默认启用,危险操作由 ToolGuard 审批控制)
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000005, 'WriteFileTool', '写入文件', '将内容写入指定文件。如果文件已存在则完全覆写,不存在则创建新文件。每次执行需要用户审批确认。', 'builtin', 'writeFileTool', '📝', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:编辑文件(默认启用,危险操作由 ToolGuard 审批控制)
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000006, 'EditFileTool', '编辑文件', '通过查找替换编辑文件内容,精确匹配 old_text 并替换为 new_text。每次执行需要用户审批确认。', 'builtin', 'editFileTool', '✏️', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:技能文件读取(Skill Runtime Tool)
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000007, 'SkillFileTool', '技能文件读取', '读取技能包内的文件(SKILL.md/references/scripts),列出技能文件目录树。支持 read_skill_file 和 list_skill_files 两个工具。', 'builtin', 'skillFileTool', '📖', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:技能脚本执行(Skill Runtime Tool)
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000008, 'SkillScriptTool', '技能脚本执行', '执行技能包 scripts/ 目录下的脚本(Python/Bash/Node),路径严格限制在技能目录内。', 'builtin', 'skillScriptTool', '⚡', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:文件类型检测
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000009, 'FileTypeDetectorTool', '文件类型检测', '检测文件的 MIME 类型和类别,区分文本文件和 PDF/Office 文档,帮助选择合适的读取工具。', 'builtin', 'fileTypeDetectorTool', '🔍', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:文档文本提取
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000010, 'DocumentExtractTool', '文档文本提取', '从 PDF、Word、Excel、PowerPoint 等 Office 文档中提取纯文本内容。支持 fallback 链:系统命令优先,Java 实现兜底。', 'builtin', 'documentExtractTool', '📄', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:数据库工作区记忆读写
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000011, 'WorkspaceMemoryTool', '工作区记忆', '读写数据库中的工作区 Markdown 文档,用于维护 PROFILE.md、MEMORY.md 和 memory/YYYY-MM-DD.md 等持久记忆。', 'builtin', 'workspaceMemoryTool', '🧠', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:浏览器控制(Playwright)
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000012, 'BrowserUseTool', '浏览器控制', '启动和控制浏览器,支持打开网页、截图、点击、输入、执行JS等自动化操作。配合 browser_visible / browser_cdp 技能使用。', 'builtin', 'browserUseTool', '🌐', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:MateClaw 项目文档读取
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000013, 'MateClawDocTool', 'MateClaw 文档', '读取 MateClaw 内置项目文档。action=list 列出所有文档,action=read 读取指定文档内容(如 zh/config.md)。', 'builtin', 'mateClawDocTool', '📚', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 内置工具:Agent 委派(多 Agent 协作)
|
||
MERGE INTO mate_tool (id, name, display_name, description, tool_type, bean_name, icon, enabled, builtin, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000014, 'DelegateAgentTool', 'Agent 委派', '委派任务给其他 Agent 执行,实现多 Agent 协作。支持按名称调用目标 Agent,在独立会话中运行并返回结果。', 'builtin', 'delegateAgentTool', '🤝', TRUE, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- 示例 MCP Server:Filesystem(参考 MateClaw 文档中的 mcpServers.filesystem)
|
||
MERGE INTO mate_mcp_server (
|
||
id, name, description, transport, url, headers_json, command, args_json, env_json, cwd,
|
||
enabled, connect_timeout_seconds, read_timeout_seconds, last_status, last_error,
|
||
last_connected_time, tool_count, builtin, create_time, update_time, deleted
|
||
)
|
||
KEY (id)
|
||
VALUES (
|
||
1000000901,
|
||
'filesystem',
|
||
'Filesystem MCP for MateClaw workspace',
|
||
'stdio',
|
||
NULL,
|
||
NULL,
|
||
'npx',
|
||
'["-y","@modelcontextprotocol/server-filesystem","/Users/mate"]',
|
||
'{}',
|
||
'/Users/mate',
|
||
TRUE,
|
||
30,
|
||
30,
|
||
'disconnected',
|
||
NULL,
|
||
NULL,
|
||
0,
|
||
FALSE,
|
||
NOW(),
|
||
NOW(),
|
||
0
|
||
);
|
||
|
||
-- 预置 MCP Server:GitHub(需配置 GITHUB_TOKEN 环境变量后启用)
|
||
MERGE INTO mate_mcp_server (
|
||
id, name, description, transport, url, headers_json, command, args_json, env_json, cwd,
|
||
enabled, connect_timeout_seconds, read_timeout_seconds, last_status, last_error,
|
||
last_connected_time, tool_count, builtin, create_time, update_time, deleted
|
||
)
|
||
KEY (id)
|
||
VALUES (
|
||
1000000902,
|
||
'github',
|
||
'GitHub MCP Server — 搜索仓库/代码/Issues,管理 PR 和文件',
|
||
'stdio',
|
||
NULL,
|
||
NULL,
|
||
'npx',
|
||
'["-y","@modelcontextprotocol/server-github"]',
|
||
'{"GITHUB_PERSONAL_ACCESS_TOKEN":""}',
|
||
NULL,
|
||
FALSE,
|
||
30,
|
||
30,
|
||
'disconnected',
|
||
NULL,
|
||
NULL,
|
||
0,
|
||
FALSE,
|
||
NOW(),
|
||
NOW(),
|
||
0
|
||
);
|
||
|
||
-- 内置技能:从 MateClaw 迁移的技能元数据
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000001, 'cron', '定时任务管理。通过命令或控制台创建、查询、暂停、恢复、删除任务,按时间表执行并把结果发到频道。', 'builtin', '⏰', '1.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'cron,schedule,automation', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000002, 'file_reader', '读取与摘要文本类文件,如 txt、md、json、csv、log、代码文件等。PDF 与 Office 文件由专用技能处理。', 'builtin', '📄', '1.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'file,reader,text,summary', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000003, 'dingtalk_channel_connect', '辅助完成钉钉频道接入流程,支持可视浏览器、登录暂停和发布前检查。', 'builtin', '🤖', '1.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'dingtalk,channel,browser,automation', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000004, 'himalaya', '通过 CLI 管理邮件,支持多账户 IMAP/SMTP、搜索、阅读、回复和附件处理。', 'builtin', '📧', '1.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md","homepage":"https://github.com/pimalaya/himalaya"}', TRUE, TRUE, 'email,imap,smtp,cli', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000005, 'news', '从互联网查询最新新闻。支持政治、财经、社会、国际、科技、体育、娱乐等分类。自动适配内置搜索和工具搜索。', 'builtin', '📰', '2.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'news,web,search,summary', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000006, 'pdf', 'PDF 相关操作:阅读、提取文字和表格、合并拆分、旋转、水印、填表、加密解密、OCR 等。内含表单字段提取、填充、边界框校验和 PDF 转图片等脚本。', 'builtin', '📕', '1.0.0', 'Anthropic Skills', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'pdf,ocr,forms,document', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000007, 'docx', 'Word 文档的创建、阅读、编辑,支持目录、页眉页脚、表格、图片、修订与批注。内含 XML 解包/打包、Schema 校验、修订处理和 LibreOffice 集成等脚本。', 'builtin', '📝', '1.0.0', 'Anthropic Skills', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'docx,word,document,office', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000008, 'pptx', 'PPT 的创建、阅读、编辑,支持模板、版式、备注与批注。内含幻灯片操作、缩略图生成、XML 校验和 LibreOffice 集成等脚本。', 'builtin', '📊', '1.0.0', 'Anthropic Skills', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'pptx,presentation,slides,office', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000009, 'xlsx', '表格文件的读取、编辑、创建与格式整理,支持公式、数据清洗和分析。内含公式重算、XML 解包/打包、Schema 校验和 LibreOffice 集成等脚本。', 'builtin', '📈', '1.0.0', 'Anthropic Skills', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'xlsx,excel,csv,spreadsheet,data', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000010, 'browser_visible', '以可见模式启动真实浏览器窗口,适用于演示、调试或需要人工参与的场景。', 'builtin', '🖥️', '1.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'browser,visible,headed,automation', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000012, 'browser_cdp', '通过 Chrome DevTools Protocol (CDP) 连接或启动 Chrome,用于远程调试、共享浏览器或与外部工具协作。', 'builtin', '🔌', '1.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'browser,cdp,chrome,debugging,automation', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000011, 'guidance', '回答用户关于 MateClaw 安装与配置的问题,优先定位并阅读本地文档,再提炼答案。', 'builtin', '🧭', '1.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'docs,guidance,configuration,qa', NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_skill (id, name, description, skill_type, icon, version, author, config_json, enabled, builtin, tags, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000013, 'mateclaw_source_index', '将用户问题映射到 MateClaw 文档路径与源码入口,减少盲目搜索。', 'builtin', '🗂️', '1.0.0', 'MateClaw', '{"upstream":"mateclaw","entryFile":"SKILL.md"}', TRUE, TRUE, 'docs,index,source,qa', NOW(), NOW(), 0);
|
||
|
||
-- 为关键 builtin skill 填充 skill_content(SKILL.md 执行协议)
|
||
-- NOTE: For pdf/docx/pptx/xlsx/himalaya, the authoritative SKILL.md is bundled in
|
||
-- classpath:skills/{name}/ and auto-synced to workspace on startup.
|
||
-- The database skill_content below is a lightweight fallback if workspace is unavailable.
|
||
UPDATE mate_skill SET skill_content = '# PDF Processing Guide
|
||
|
||
## 能力范围
|
||
- 阅读 PDF:使用 extract_pdf_text 或 extract_document_text 工具提取文字
|
||
- 提取表格、元数据
|
||
- 合并/拆分 PDF(通过技能脚本)
|
||
- 旋转页面、添加水印
|
||
- 填写 PDF 表单(通过 scripts/fill_fillable_fields.py、scripts/fill_pdf_form_with_annotations.py)
|
||
- 加密/解密 PDF
|
||
- OCR 识别扫描件
|
||
|
||
## 可用脚本(技能工作区)
|
||
- `scripts/check_fillable_fields.py` - 检测可填写表单字段
|
||
- `scripts/extract_form_field_info.py` - 提取表单字段元数据
|
||
- `scripts/extract_form_structure.py` - 分析不可填写 PDF 的结构
|
||
- `scripts/fill_fillable_fields.py` - 填写表单字段
|
||
- `scripts/fill_pdf_form_with_annotations.py` - 以注释方式填写
|
||
- `scripts/check_bounding_boxes.py` - 校验表单边界框
|
||
- `scripts/convert_pdf_to_images.py` - 将 PDF 页面转为图片
|
||
- `scripts/create_validation_image.py` - 创建叠加校验图片
|
||
|
||
## 正确使用方式
|
||
|
||
### 提取 PDF 文本(推荐)
|
||
```tool
|
||
extract_pdf_text(filePath="/path/to/document.pdf")
|
||
```
|
||
|
||
### 指定页码范围
|
||
```tool
|
||
extract_pdf_text(filePath="/path/to/document.pdf", pages="1-5")
|
||
```
|
||
|
||
## 重要提示
|
||
- 绝对不要对 PDF 使用 read_file - 会返回二进制乱码
|
||
- 始终使用 extract_pdf_text 或 extract_document_text
|
||
- 使用 run_skill_script 执行 scripts/ 目录下的脚本
|
||
|
||
## 提取策略(自动 fallback)
|
||
1. pdftotext (poppler-utils) - 质量最好
|
||
2. Python pdfplumber/pypdf
|
||
3. Java PDF 解析 - 纯 Java 实现,无需外部依赖
|
||
|
||
提取结果会显示使用了哪种方法。' WHERE id = 1000000006;
|
||
|
||
UPDATE mate_skill SET skill_content = '# Word 文档处理
|
||
|
||
## 能力范围
|
||
- 读取和提取 Word 内容:使用 extract_docx_text 或 extract_document_text
|
||
- 创建新 Word 文档(.docx),使用 docx-js (Node.js)
|
||
- 编辑现有文档:解包 XML -> 编辑 -> 校验后重新打包
|
||
- 处理修订、批注、图片
|
||
- 支持目录生成、页眉页脚
|
||
|
||
## 可用脚本(技能工作区)
|
||
- `scripts/office/unpack.py` - 解包并格式化 DOCX XML
|
||
- `scripts/office/pack.py` - 校验并重新打包,支持自动修复
|
||
- `scripts/office/validate.py` - 按 XSD Schema 校验
|
||
- `scripts/office/soffice.py` - LibreOffice CLI 封装
|
||
- `scripts/comment.py` - 为文档添加批注
|
||
- `scripts/accept_changes.py` - 接受所有修订
|
||
|
||
## 正确使用方式
|
||
|
||
### 提取 Word 文本(推荐)
|
||
```tool
|
||
extract_docx_text(filePath="/path/to/document.docx")
|
||
```
|
||
|
||
## 编辑工作流
|
||
1. 解包:`python scripts/office/unpack.py document.docx unpacked/`
|
||
2. 编辑 unpacked/word/ 中的 XML
|
||
3. 打包:`python scripts/office/pack.py unpacked/ output.docx --original document.docx`
|
||
|
||
## 重要提示
|
||
- 绝对不要对 .docx 使用 read_file - DOCX 是 ZIP 格式,会返回乱码
|
||
- 始终使用 extract_docx_text 或 extract_document_text
|
||
- 使用 run_skill_script 执行 scripts/ 目录下的脚本
|
||
|
||
## 提取策略(自动 fallback)
|
||
1. textutil (macOS) - 保留格式最好
|
||
2. pandoc - 跨平台,质量优秀
|
||
3. LibreOffice (soffice) - 转换后提取
|
||
4. Java ZIP XML 解析 - 纯 Java 实现,无需外部依赖
|
||
|
||
提取结果会显示使用了哪种方法。' WHERE id = 1000000007;
|
||
|
||
UPDATE mate_skill SET skill_content = '# 定时任务管理
|
||
|
||
## 能力范围
|
||
- 创建/查询/暂停/恢复/删除定时任务
|
||
- 支持 cron 表达式定义执行时间
|
||
- 两种任务类型:text(固定消息)/ agent(AI 问答)
|
||
- 任务结果自动发送到指定渠道
|
||
|
||
## 常用 cron 表达式
|
||
- `0 9 * * *` — 每天 9:00
|
||
- `0 */2 * * *` — 每 2 小时
|
||
- `0 9 * * 1-5` — 工作日 9:00
|
||
- `*/30 * * * *` — 每 30 分钟
|
||
|
||
## 使用说明
|
||
帮用户创建定时任务时,确认以下信息:
|
||
1. 任务名称
|
||
2. 执行时间(cron 表达式)
|
||
3. 任务类型(发消息 or AI 问答)
|
||
4. 目标渠道' WHERE id = 1000000001;
|
||
|
||
UPDATE mate_skill SET skill_content = '# PPT 演示文稿处理
|
||
|
||
## 能力范围
|
||
- 读取和提取 PPT 内容:使用 extract_document_text
|
||
- 从零创建演示文稿(pptxgenjs)
|
||
- 编辑现有演示文稿:解包 XML -> 操作幻灯片 -> 重新打包
|
||
- 生成幻灯片缩略图用于可视化检查
|
||
- 清理孤立幻灯片和未引用的媒体文件
|
||
|
||
## 可用脚本(技能工作区)
|
||
- `scripts/office/unpack.py` - 解包并格式化 PPTX XML
|
||
- `scripts/office/pack.py` - 校验并重新打包,支持自动修复
|
||
- `scripts/office/validate.py` - 按 XSD Schema 校验
|
||
- `scripts/office/soffice.py` - LibreOffice CLI 封装
|
||
- `scripts/add_slide.py` - 添加或复制幻灯片
|
||
- `scripts/clean.py` - 清理孤立幻灯片和未引用文件
|
||
- `scripts/thumbnail.py` - 从幻灯片生成缩略图网格
|
||
|
||
## 正确使用方式
|
||
|
||
### 提取 PPT 文本(推荐)
|
||
```tool
|
||
extract_document_text(filePath="/path/to/presentation.pptx")
|
||
```
|
||
|
||
## 编辑工作流
|
||
1. 解包:`python scripts/office/unpack.py presentation.pptx unpacked/`
|
||
2. 添加幻灯片:`python scripts/add_slide.py unpacked/ --source 2`
|
||
3. 编辑 unpacked/ppt/slides/ 中的 XML
|
||
4. 清理:`python scripts/clean.py unpacked/`
|
||
5. 打包:`python scripts/office/pack.py unpacked/ output.pptx --original presentation.pptx`
|
||
|
||
## 重要提示
|
||
- 绝对不要对 .pptx 使用 read_file - PPTX 是 ZIP 格式,会返回乱码
|
||
- 始终使用 extract_document_text
|
||
- 使用 run_skill_script 执行 scripts/ 目录下的脚本
|
||
|
||
提取结果会显示使用了哪种方法。' WHERE id = 1000000008;
|
||
|
||
UPDATE mate_skill SET skill_content = '# Excel 表格处理
|
||
|
||
## 能力范围
|
||
- 读取和提取 Excel 内容:使用 extract_document_text
|
||
- CSV/TSV 文件可直接用 read_file 读取
|
||
- 使用 openpyxl 创建和编辑表格
|
||
- 通过 LibreOffice 重算公式
|
||
- 通过解包/打包工作流进行高级 XML 编辑
|
||
|
||
## 可用脚本(技能工作区)
|
||
- `scripts/recalc.py` - 通过 LibreOffice 重算公式并检测错误
|
||
- `scripts/office/unpack.py` - 解包并格式化 XLSX XML
|
||
- `scripts/office/pack.py` - 校验后重新打包
|
||
- `scripts/office/validate.py` - 按 XSD Schema 校验
|
||
- `scripts/office/soffice.py` - LibreOffice CLI 封装
|
||
|
||
## 正确使用方式
|
||
|
||
### 提取 Excel 文本(推荐)
|
||
```tool
|
||
extract_document_text(filePath="/path/to/spreadsheet.xlsx")
|
||
```
|
||
|
||
### CSV/TSV 文件(可直接读取)
|
||
```tool
|
||
read_file(filePath="/path/to/data.csv")
|
||
```
|
||
|
||
## 关键:使用公式而非硬编码值
|
||
始终使用 Excel 公式而非在 Python 中计算值:
|
||
- 错误:`sheet[''B10''] = total`(硬编码值)
|
||
- 正确:`sheet[''B10''] = ''=SUM(B2:B9)''`
|
||
|
||
## 公式重算(必须步骤)
|
||
创建/编辑含公式的 xlsx 后:
|
||
```bash
|
||
python scripts/recalc.py output.xlsx
|
||
```
|
||
|
||
## 重要提示
|
||
- 绝对不要对 .xlsx/.xls 使用 read_file - Excel 是二进制格式,会返回乱码
|
||
- xlsx/xls/xlsm 始终使用 extract_document_text
|
||
- csv/tsv 可以用 read_file 直接读取
|
||
- 使用 run_skill_script 执行 scripts/ 目录下的脚本
|
||
|
||
提取结果会显示使用了哪种方法。' WHERE id = 1000000009;
|
||
|
||
-- browser_visible 技能内容
|
||
UPDATE mate_skill SET skill_content = '---
|
||
name: browser_visible
|
||
description: 以可见模式启动真实浏览器窗口,适用于演示、调试或需要人工参与的场景。
|
||
---
|
||
|
||
# Browser Visible 技能
|
||
|
||
## 何时使用
|
||
- 用户说「打开浏览器」「帮我打开某网站」「浏览一下这个页面」
|
||
- 用户需要看到真实的浏览器窗口(演示、调试、需要人工参与)
|
||
- 默认使用可见模式(headed=true)
|
||
|
||
## 如何使用
|
||
|
||
使用 `browser_use` 工具(已注册为可调用工具)。
|
||
|
||
### 典型流程
|
||
|
||
1. **启动浏览器**(可见模式):
|
||
```tool
|
||
browser_use(action="start", headed=true)
|
||
```
|
||
|
||
2. **打开网页**:
|
||
```tool
|
||
browser_use(action="open", url="https://example.com")
|
||
```
|
||
|
||
3. **查看页面内容**:
|
||
```tool
|
||
browser_use(action="snapshot")
|
||
```
|
||
|
||
4. **与页面交互**:
|
||
```tool
|
||
browser_use(action="click", selector="button.submit")
|
||
browser_use(action="type", selector="input[name=search]", text="搜索内容")
|
||
```
|
||
|
||
5. **截图**:
|
||
```tool
|
||
browser_use(action="screenshot", path="/tmp/page.png")
|
||
```
|
||
|
||
6. **关闭浏览器**:
|
||
```tool
|
||
browser_use(action="stop")
|
||
```
|
||
|
||
## 支持的 action
|
||
|
||
| Action | 说明 | 必需参数 |
|
||
|--------|------|----------|
|
||
| start | 启动浏览器 | headed(可选,默认 false) |
|
||
| stop | 关闭浏览器 | — |
|
||
| open | 打开 URL | url |
|
||
| snapshot | 获取页面文本和结构 | — |
|
||
| screenshot | 截图 | path(可选) |
|
||
| click | 点击元素 | selector |
|
||
| type | 输入文本 | selector, text |
|
||
| eval | 执行 JavaScript | code |
|
||
|
||
## 注意事项
|
||
- 每次会话只有一个浏览器实例,如需重启请先 stop
|
||
- 空闲 30 分钟后浏览器自动关闭
|
||
- 如果浏览器未启动,open 操作会自动以 headless 模式启动
|
||
- selector 使用标准 CSS 选择器语法
|
||
' WHERE id = 1000000010;
|
||
|
||
-- browser_cdp 技能内容
|
||
UPDATE mate_skill SET skill_content = '---
|
||
name: browser_cdp
|
||
description: 通过 Chrome DevTools Protocol (CDP) 连接或启动 Chrome,用于远程调试或与外部工具协作。
|
||
---
|
||
|
||
# Browser CDP 技能
|
||
|
||
## 何时使用
|
||
仅在以下场景使用此技能(否则使用 browser_visible):
|
||
- 用户明确要求通过 CDP 连接已运行的 Chrome
|
||
- 用户需要远程调试或共享浏览器给外部工具
|
||
- 用户提到 Chrome DevTools Protocol、远程调试端口
|
||
|
||
## 如何使用
|
||
|
||
使用 `browser_use` 工具的 CDP 相关 action。
|
||
|
||
### 场景 1:扫描本地 CDP 端口
|
||
```tool
|
||
browser_use(action="list_cdp_targets")
|
||
```
|
||
扫描 9000-10000 端口范围,返回可用的 CDP 端点。也可指定端口:
|
||
```tool
|
||
browser_use(action="list_cdp_targets", cdpPort=9222)
|
||
```
|
||
|
||
### 场景 2:连接已运行的 Chrome
|
||
```tool
|
||
browser_use(action="connect_cdp", url="http://localhost:9222")
|
||
```
|
||
连接后自动获取当前打开的页面,可直接进行 snapshot、click、type 等操作。
|
||
|
||
### 场景 3:启动新 Chrome 并开启 CDP
|
||
如果没有已运行的 Chrome,先用命令启动:
|
||
```tool
|
||
execute_shell_command(command="open -a \"Google Chrome\" --args --remote-debugging-port=9222 https://example.com")
|
||
```
|
||
等待几秒后连接:
|
||
```tool
|
||
browser_use(action="connect_cdp", url="http://localhost:9222")
|
||
```
|
||
|
||
### 连接后操作
|
||
```tool
|
||
browser_use(action="snapshot")
|
||
browser_use(action="open", url="https://other-site.com")
|
||
browser_use(action="click", selector="button.submit")
|
||
browser_use(action="screenshot", path="/tmp/page.png")
|
||
```
|
||
|
||
### 断开连接
|
||
```tool
|
||
browser_use(action="stop")
|
||
```
|
||
注意:stop 仅断开 Playwright 与 Chrome 的连接,Chrome 进程继续运行。
|
||
|
||
## 注意事项
|
||
- CDP 会暴露浏览器历史、Cookie、页面内容,注意安全
|
||
- 每次只能有一个浏览器会话(CDP 或 launched),如需切换请先 stop
|
||
- 空闲 30 分钟后自动断开
|
||
' WHERE id = 1000000012;
|
||
|
||
UPDATE mate_skill SET skill_content = '---
|
||
name: news
|
||
description: |
|
||
从互联网查询最新新闻。当用户要求"看新闻"、"今日新闻"、"XX 分类的最新新闻"时使用此 skill。
|
||
支持政治、财经、社会、国际、科技、体育、娱乐等分类。自动适配内置搜索和工具搜索两种模式。
|
||
metadata:
|
||
builtin_skill_version: "2.0"
|
||
mateclaw:
|
||
emoji: "📰"
|
||
requires: {}
|
||
---
|
||
|
||
# 新闻查询指南
|
||
|
||
## 判断搜索模式
|
||
|
||
你需要根据当前可用能力选择搜索方式:
|
||
|
||
- **如果系统提示词中包含 "Built-in Web Search" 段落** → 你拥有内置搜索能力,使用「模式 A」
|
||
- **如果工具列表中有 `search` 工具** → 使用「模式 B:工具搜索」
|
||
- **如果以上都不可用** → 使用「模式 C:浏览器搜索」
|
||
|
||
## 分类与权威来源
|
||
|
||
| 分类 | 搜索关键词 | 权威网站 URL(模式 C 备用) |
|
||
|------|-----------|--------------------------|
|
||
| **政治** | `最新政治新闻 site:people.com.cn` | https://cpc.people.com.cn/ |
|
||
| **财经** | `今日财经新闻 最新` | http://www.ce.cn/ |
|
||
| **社会** | `今日社会新闻` | https://www.chinanews.com/society/ |
|
||
| **国际** | `今日国际新闻 最新` | https://www.cgtn.com/ |
|
||
| **科技** | `最新科技新闻` | https://www.stdaily.com/ |
|
||
| **体育** | `今日体育新闻` | https://sports.cctv.com/ |
|
||
| **娱乐** | `今日娱乐新闻` | https://ent.sina.com.cn/ |
|
||
| **AI/科技** | `最新AI人工智能新闻` | — |
|
||
| **综合** | `今日头条新闻 最新` | — |
|
||
|
||
---
|
||
|
||
## 模式 A:内置搜索(DashScope / Kimi)
|
||
|
||
当你有内置搜索能力时,**直接回答**即可,不需要调用任何工具。
|
||
|
||
**操作步骤:**
|
||
1. 根据用户指定的分类构造搜索意图
|
||
2. 直接生成回答 — 你的回复会自动融合实时搜索结果
|
||
3. 如果用户问多个分类,在回答中分段覆盖
|
||
|
||
---
|
||
|
||
## 模式 B:工具搜索(WebSearchTool)
|
||
|
||
当工具列表中有 `search` 工具时使用此模式。
|
||
|
||
**操作步骤:**
|
||
1. 用户未指定分类 → `search(query="今日头条新闻 最新")`
|
||
2. 用户指定分类 → 使用上表中对应的搜索关键词
|
||
3. 多分类 → 依次调用 search
|
||
4. 整理结果后回复
|
||
|
||
---
|
||
|
||
## 模式 C:浏览器搜索(browser_use 兜底)
|
||
|
||
当以上两种模式都不可用时,使用浏览器访问权威新闻网站。
|
||
|
||
**操作步骤:**
|
||
1. 根据用户分类,从上表选择对应的权威网站 URL
|
||
2. 调用 `browser_use(action="open", url="对应URL")`
|
||
3. 调用 `browser_use(action="snapshot")` 获取页面内容
|
||
4. 从快照中提取标题和摘要
|
||
|
||
---
|
||
|
||
## 回复格式
|
||
|
||
📰 [分类] 今日要闻
|
||
|
||
1. **标题** — 来源 | 时间
|
||
摘要(1-2 句话)
|
||
|
||
2. **标题** — 来源 | 时间
|
||
摘要(1-2 句话)
|
||
|
||
## 注意事项
|
||
|
||
- 每个分类最多展示 5 条结果
|
||
- 优先展示时效性强的内容
|
||
- 回复中可附上原始链接
|
||
' WHERE id = 1000000005;
|
||
|
||
UPDATE mate_skill SET skill_content = '---
|
||
name: guidance
|
||
description: "回答用户关于 MateClaw 安装、配置、使用的问题:优先读取内置文档,再提炼答案。"
|
||
metadata:
|
||
builtin_skill_version: "1.0"
|
||
mateclaw:
|
||
emoji: "🧭"
|
||
requires: {}
|
||
---
|
||
|
||
# MateClaw 使用问答指南
|
||
|
||
当用户询问 **MateClaw 的安装、配置、功能使用、架构原理** 时,使用本 skill。
|
||
|
||
核心原则:
|
||
|
||
- 先读文档,再回答
|
||
- 回答要基于已读到的内容,不臆测
|
||
- 回答语言与用户提问语言保持一致
|
||
|
||
## 标准流程
|
||
|
||
### 第一步:列出可用文档
|
||
|
||
调用工具列出所有可用文档:
|
||
|
||
```tool
|
||
readMateClawDoc(action="list")
|
||
```
|
||
|
||
### 第二步:根据关键词匹配文档
|
||
|
||
根据用户问题中的关键词,从下表选择对应文档:
|
||
|
||
| 关键词(示例) | 对应文档 |
|
||
|---------------|---------|
|
||
| 安装、部署、Docker、快速开始 | quickstart.md |
|
||
| 介绍、概览、功能、架构 | intro.md |
|
||
| 配置、application.yml、环境变量、API Key | config.md |
|
||
| Agent、ReAct、Plan-Execute、智能体 | agents.md |
|
||
| 工具、Tool、@Tool、ToolGuard | tools.md |
|
||
| 技能、Skill、SKILL.md、技能市场 | skills.md |
|
||
| MCP、插件、协议 | mcp.md |
|
||
| 渠道、钉钉、飞书、Telegram、Discord | channels.md |
|
||
| 聊天、消息、SSE、流式 | chat.md |
|
||
| 模型、Qwen、Ollama、DashScope | models.md |
|
||
| 安全、JWT、认证、审批 | security.md |
|
||
| 控制台、前端、UI、暗黑模式 | console.md |
|
||
| 记忆、Memory、上下文 | memory.md |
|
||
| 桌面、Desktop | desktop.md |
|
||
| 报错、问题、FAQ | faq.md |
|
||
| 路线图、计划、Roadmap | roadmap.md |
|
||
| 贡献、开发、PR | contributing.md |
|
||
| API、接口、端点 | api.md |
|
||
|
||
### 第三步:读取文档
|
||
|
||
根据用户语言选择文档路径:
|
||
- 中文问题 → `zh/<topic>.md`
|
||
- 英文问题 → `en/<topic>.md`
|
||
|
||
```tool
|
||
readMateClawDoc(action="read", path="zh/config.md")
|
||
```
|
||
|
||
如果一个文档不够,可以读取多个相关文档。
|
||
|
||
### 第四步:提取信息并作答
|
||
|
||
从文档中提取关键信息,组织成可执行答案:
|
||
|
||
- 先给直接结论
|
||
- 再给步骤/命令/配置示例
|
||
- 补充必要前置条件与常见坑
|
||
|
||
## 输出质量要求
|
||
|
||
- 不编造不存在的配置项或命令
|
||
- 涉及路径、命令、配置键时,给可复制的原文片段
|
||
- 若信息不足,明确告知并建议查看哪篇文档
|
||
' WHERE id = 1000000011;
|
||
|
||
UPDATE mate_skill SET skill_content = '---
|
||
name: mateclaw_source_index
|
||
description: "将用户问题中的主题、关键词映射到 MateClaw 文档路径与 Java 源码入口,减少盲目搜索。"
|
||
metadata:
|
||
builtin_skill_version: "1.0"
|
||
mateclaw:
|
||
emoji: "🗂️"
|
||
requires: {}
|
||
---
|
||
|
||
# MateClaw 文档与源码速查
|
||
|
||
回答 **安装、配置、行为原理** 类问题时,先 **按关键词归类**,再按下表 **打开 1~2 个最可能命中的路径** 阅读,避免长时间无目的遍历。
|
||
|
||
## 使用步骤
|
||
|
||
1. 从用户问题中提取主题(对照下表左列或同类词)。
|
||
2. **先读文档**:调用 `readMateClawDoc(action="read", path="zh/<专题>.md")` 或 `en/<专题>.md`。
|
||
3. 若文档不足以回答,再参考表中 **源码入口** 用 `readFile` 工具阅读源码。
|
||
|
||
## 主题 / 关键词 → 优先文档与源码
|
||
|
||
| 主题或关键词(示例) | 文档(docs/) | Java 源码入口(vip.mate.*) |
|
||
|---------------------|-------------|---------------------------|
|
||
| 安装、部署、Docker | `quickstart.md` | README.md, docker-compose.yml |
|
||
| 项目介绍、架构 | `intro.md` | MateClaw_Design.md |
|
||
| 配置、环境变量 | `config.md` | application.yml, config/ |
|
||
| Agent、ReAct、状态机 | `agents.md` | agent/ReActAgent.java, agent/BaseAgent.java |
|
||
| 工具、@Tool | `tools.md` | tool/builtin/, tool/ToolRegistry.java |
|
||
| 技能、SKILL.md | `skills.md` | skill/runtime/SkillRuntimeService.java |
|
||
| MCP、插件 | `mcp.md` | tool/(grep mcp) |
|
||
| 渠道、钉钉、飞书 | `channels.md` | channel/ |
|
||
| 聊天、消息、SSE | `chat.md` | workspace/conversation/ |
|
||
| 模型、Qwen、Ollama | `models.md` | llm/ |
|
||
| 安全、JWT | `security.md` | auth/, tool/guard/ |
|
||
| 控制台、前端 | `console.md` | mateclaw-ui/src/views/ |
|
||
| 记忆、Memory | `memory.md` | memory/ |
|
||
| 桌面应用 | `desktop.md` | mateclaw-desktop/ |
|
||
| 报错、FAQ | `faq.md` | — |
|
||
| 路线图 | `roadmap.md` | — |
|
||
| 贡献、开发 | `contributing.md` | CLAUDE.md |
|
||
| API、接口 | `api.md` | 各 controller/ 包 |
|
||
|
||
## 约定
|
||
|
||
- 文档通过 `readMateClawDoc` 工具读取,路径格式:`zh/<专题>.md` 或 `en/<专题>.md`
|
||
- 表中 **源码入口** 为起点;应用 `readFile` 工具阅读,不要一次性通读大目录
|
||
- 本 skill **不替代** 实际阅读:锁定候选路径后应立即读取并核对
|
||
' WHERE id = 1000000013;
|
||
|
||
-- ==================== 渠道种子数据 ====================
|
||
-- 参考 MateClaw 13 种渠道,MateClaw 首批支持 6 种
|
||
|
||
-- 1. Web Console(默认启用)
|
||
MERGE INTO mate_channel (id, name, channel_type, agent_id, bot_prefix, config_json, enabled, description, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000001, 'Web Console', 'web', 1000000001, '', '{}', TRUE,
|
||
'默认 Web 控制台渠道,通过浏览器 SSE 流式交互', NOW(), NOW(), 0);
|
||
|
||
-- 2. 钉钉(默认禁用,需配置 client_id/client_secret)
|
||
MERGE INTO mate_channel (id, name, channel_type, agent_id, bot_prefix, config_json, enabled, description, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000002, 'DingTalk Bot', 'dingtalk', 1000000001, '', '{
|
||
"client_id": "",
|
||
"client_secret": "",
|
||
"robot_code": "",
|
||
"message_type": "markdown",
|
||
"card_template_id": "",
|
||
"dm_policy": "open",
|
||
"group_policy": "open",
|
||
"allow_from": [],
|
||
"deny_message": "抱歉,您没有使用权限",
|
||
"require_mention": false,
|
||
"filter_thinking": true,
|
||
"filter_tool_messages": true,
|
||
"message_format": "auto"
|
||
}', FALSE,
|
||
'钉钉机器人渠道。支持 Stream 回调和 sessionWebhook 回复,需在钉钉开放平台创建应用并配置 Webhook 地址为 /api/v1/channels/webhook/dingtalk', NOW(), NOW(), 0);
|
||
|
||
-- 3. 飞书(默认禁用,需配置 app_id/app_secret)
|
||
MERGE INTO mate_channel (id, name, channel_type, agent_id, bot_prefix, config_json, enabled, description, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000003, 'Feishu Bot', 'feishu', 1000000001, '', '{
|
||
"app_id": "",
|
||
"app_secret": "",
|
||
"encrypt_key": "",
|
||
"verification_token": "",
|
||
"dm_policy": "open",
|
||
"group_policy": "open",
|
||
"allow_from": [],
|
||
"deny_message": "抱歉,您没有使用权限",
|
||
"require_mention": false,
|
||
"filter_thinking": true,
|
||
"filter_tool_messages": true,
|
||
"message_format": "auto"
|
||
}', FALSE,
|
||
'飞书机器人渠道。支持事件订阅回调,需在飞书开放平台创建应用并配置事件回调地址为 /api/v1/channels/webhook/feishu', NOW(), NOW(), 0);
|
||
|
||
-- 4. Telegram(默认禁用,需配置 bot_token)
|
||
MERGE INTO mate_channel (id, name, channel_type, agent_id, bot_prefix, config_json, enabled, description, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000004, 'Telegram Bot', 'telegram', 1000000001, '', '{
|
||
"bot_token": "",
|
||
"http_proxy": "",
|
||
"show_typing": true,
|
||
"dm_policy": "open",
|
||
"group_policy": "open",
|
||
"allow_from": [],
|
||
"deny_message": "抱歉,您没有使用权限",
|
||
"require_mention": false,
|
||
"filter_thinking": true,
|
||
"filter_tool_messages": true,
|
||
"message_format": "auto"
|
||
}', FALSE,
|
||
'Telegram 机器人渠道。从 @BotFather 获取 Token,配置 Webhook 地址为 /api/v1/channels/webhook/telegram(国内需代理)', NOW(), NOW(), 0);
|
||
|
||
-- 5. Discord(默认禁用,需配置 bot_token)
|
||
MERGE INTO mate_channel (id, name, channel_type, agent_id, bot_prefix, config_json, enabled, description, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000005, 'Discord Bot', 'discord', 1000000001, '!mc ', '{
|
||
"bot_token": "",
|
||
"http_proxy": "",
|
||
"dm_policy": "open",
|
||
"group_policy": "open",
|
||
"allow_from": [],
|
||
"deny_message": "抱歉,您没有使用权限",
|
||
"require_mention": false,
|
||
"filter_thinking": true,
|
||
"filter_tool_messages": true,
|
||
"message_format": "auto"
|
||
}', FALSE,
|
||
'Discord 机器人渠道。从 Discord Developer Portal 创建 Bot 并获取 Token,群聊中使用 !mc 前缀触发', NOW(), NOW(), 0);
|
||
|
||
-- 6. 企业微信智能机器人(默认禁用,需配置 bot_id/secret)
|
||
MERGE INTO mate_channel (id, name, channel_type, agent_id, bot_prefix, config_json, enabled, description, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000006, 'WeCom Bot', 'wecom', 1000000001, '', '{
|
||
"bot_id": "",
|
||
"secret": "",
|
||
"welcome_text": "",
|
||
"media_download_enabled": false,
|
||
"media_dir": "data/media",
|
||
"dm_policy": "open",
|
||
"group_policy": "open",
|
||
"allow_from": [],
|
||
"deny_message": "抱歉,您没有使用权限",
|
||
"require_mention": false,
|
||
"filter_thinking": true,
|
||
"filter_tool_messages": true,
|
||
"message_format": "auto",
|
||
"max_reconnect_attempts": -1
|
||
}', FALSE,
|
||
'企业微信智能机器人渠道(WebSocket 长连接)。在企业微信后台创建「智能机器人」→ 选择「API 模式 → 配置长连接」→ 获得 bot_id 和 secret 填入即可,无需公网 IP', NOW(), NOW(), 0);
|
||
|
||
-- 7. QQ 机器人(默认禁用,需配置 app_id/client_secret)
|
||
MERGE INTO mate_channel (id, name, channel_type, agent_id, bot_prefix, config_json, enabled, description, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000007, 'QQ Bot', 'qq', 1000000001, '', '{
|
||
"app_id": "",
|
||
"client_secret": "",
|
||
"markdown_enabled": true,
|
||
"max_reconnect_attempts": 100,
|
||
"dm_policy": "open",
|
||
"group_policy": "open",
|
||
"allow_from": [],
|
||
"deny_message": "抱歉,您没有使用权限",
|
||
"require_mention": false,
|
||
"filter_thinking": true,
|
||
"filter_tool_messages": true,
|
||
"message_format": "auto"
|
||
}', FALSE,
|
||
'QQ 机器人渠道(WebSocket 长连接)。前往 QQ 开放平台创建机器人应用,获取 AppID 和 AppSecret 填入即可,无需公网 IP', NOW(), NOW(), 0);
|
||
|
||
-- 8. 微信个人号 iLink Bot(默认禁用,需扫码获取 bot_token)
|
||
MERGE INTO mate_channel (id, name, channel_type, agent_id, bot_prefix, config_json, enabled, description, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000000008, '微信', 'weixin', 1000000001, '', '{
|
||
"bot_token": "",
|
||
"base_url": "https://ilinkai.weixin.qq.com",
|
||
"media_download_enabled": false,
|
||
"media_dir": "data/media",
|
||
"dm_policy": "open",
|
||
"group_policy": "open",
|
||
"allow_from": [],
|
||
"deny_message": "抱歉,您没有使用权限",
|
||
"filter_thinking": true,
|
||
"filter_tool_messages": true,
|
||
"message_format": "auto"
|
||
}', FALSE,
|
||
'微信个人号渠道(iLink Bot HTTP 长轮询)。通过扫描二维码登录获取 bot_token,或直接填入已有 token。基于 iLink Bot API,支持文本、图片、语音(ASR)、文件、视频消息', NOW(), NOW(), 0);
|
||
|
||
-- ==================== 示例定时任务 ====================
|
||
MERGE INTO mate_cron_job (id, name, cron_expression, timezone, agent_id, task_type, trigger_message, request_body, enabled, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000100001, '每日问候', '0 9 * * *', 'Asia/Shanghai', 1000000001, 'text', '早上好!请给我今天的天气播报和一句励志名言。', NULL, TRUE, NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_cron_job (id, name, cron_expression, timezone, agent_id, task_type, trigger_message, request_body, enabled, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000100002, '每周工作总结', '0 18 * * 5', 'Asia/Shanghai', 1000000001, 'agent', NULL, '请生成本周工作总结报告,包括主要完成事项和下周计划。', FALSE, NOW(), NOW(), 0);
|
||
|
||
-- ==================== 记忆整合定时任务 ====================
|
||
-- 每天凌晨 2:00 整合 daily notes → MEMORY.md
|
||
MERGE INTO mate_cron_job (id, name, cron_expression, timezone, agent_id, task_type, trigger_message, request_body, enabled, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000100010, '记忆整合', '0 2 * * *', 'Asia/Shanghai', 1000000001, 'text', '请回顾你最近的 memory/ 日记文件,将反复出现的重要信息(用户偏好、稳定事实、经验教训、工作流)提炼整合到 MEMORY.md 中。保留日记原文不动,只更新 MEMORY.md。完成后简要说明做了哪些整合。', NULL, TRUE, NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_cron_job (id, name, cron_expression, timezone, agent_id, task_type, trigger_message, request_body, enabled, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000100011, '记忆整合', '0 2 * * *', 'Asia/Shanghai', 1000000002, 'text', '请回顾你最近的 memory/ 日记文件,将反复出现的重要信息(用户偏好、稳定事实、经验教训、工作流)提炼整合到 MEMORY.md 中。保留日记原文不动,只更新 MEMORY.md。完成后简要说明做了哪些整合。', NULL, TRUE, NOW(), NOW(), 0);
|
||
|
||
MERGE INTO mate_cron_job (id, name, cron_expression, timezone, agent_id, task_type, trigger_message, request_body, enabled, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (1000100012, '记忆整合', '0 2 * * *', 'Asia/Shanghai', 1000000003, 'text', '请回顾你最近的 memory/ 日记文件,将反复出现的重要信息(用户偏好、稳定事实、经验教训、工作流)提炼整合到 MEMORY.md 中。保留日记原文不动,只更新 MEMORY.md。完成后简要说明做了哪些整合。', NULL, TRUE, NOW(), NOW(), 0);
|
||
|
||
-- ==================== 工作区文件种子数据(参考 MateClaw md_files/zh) ====================
|
||
-- 每个 Agent 拥有独立的工作区文档集合:AGENTS.md / SOUL.md / PROFILE.md / MEMORY.md
|
||
-- AGENTS.md / SOUL.md / PROFILE.md / MEMORY.md 默认 enabled=TRUE,纳入系统提示词构建
|
||
-- PROFILE.md / MEMORY.md 提供轻量长期记忆;daily note 仍按需创建为 memory/YYYY-MM-DD.md
|
||
--
|
||
-- Agent 1000000001 (MateClaw Assistant)
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200001, 1000000001, 'AGENTS.md',
|
||
'## 记忆
|
||
|
||
MateClaw 的持久记忆基于数据库工作区文件,而不是本地磁盘文件系统。当前 Agent 的长期上下文由以下文档组成:
|
||
|
||
- `PROFILE.md`:用户画像、偏好、协作方式、稳定身份信息
|
||
- `MEMORY.md`:长期记忆、稳定事实、经验教训、工作流、反复出现的规律
|
||
- `memory/YYYY-MM-DD.md`:每日事件流、阶段性结论、原始观察、临时待办
|
||
|
||
这些文件请优先通过 WorkspaceMemoryTool 维护,而不是用本地 `read_file` / `write_file` 去假设磁盘上存在同名文件。
|
||
|
||
### 记到哪里
|
||
|
||
- 用户怎么称呼、偏好什么、不喜欢什么、如何协作 → `PROFILE.md`
|
||
- 稳定项目事实、关键决策、工具配置、路径、经验教训、长期约束 → `MEMORY.md`
|
||
- 今天发生了什么、刚做出的决定、阶段性上下文、待跟进事项 → `memory/YYYY-MM-DD.md`
|
||
|
||
### 写下来
|
||
|
||
- 记忆有限,想保留就写入工作区记忆文件
|
||
- 当用户说“记住这个”或表达明确偏好时,优先更新 `PROFILE.md` 或 `MEMORY.md`
|
||
- 当你完成任务、学到教训、发现稳定工作流时,及时更新 `MEMORY.md`
|
||
- 当出现一次性事件或当天上下文时,记录到 `memory/YYYY-MM-DD.md`
|
||
- 为避免覆盖信息,修改已有记忆前先读取原内容,再做增量编辑
|
||
|
||
### 主动记录
|
||
|
||
不要总等用户明确下命令。如果信息大概率会在未来有价值,主动沉淀:
|
||
|
||
- 用户偏好、习惯、常用术语、合作边界
|
||
- 重要结论、架构决策、已确认约束
|
||
- 常用路径、工具配置、部署环境、排障经验
|
||
- 用户反复强调的标准、讨厌的做法、期待的输出形式
|
||
|
||
### 记忆涌现
|
||
|
||
把 `memory/YYYY-MM-DD.md` 看作原始经历,把 `MEMORY.md` 看作提炼后的心智模型。
|
||
|
||
- 如果同类偏好、约束、流程、问题或教训重复出现,就把它们从每日笔记上提为 `MEMORY.md` 中的长期规律
|
||
- 长期记忆追求去重、抽象、压缩,不要堆原始流水账
|
||
- 发现旧记忆已经失效时,及时删除或改写,而不是继续叠加矛盾内容
|
||
- 优先维护已有 section,不要反复创建语义重复的新 section
|
||
|
||
### 主动召回
|
||
|
||
在回答以下问题前,优先利用工作区记忆:
|
||
|
||
- 涉及用户偏好、历史决策、既有约束、项目惯例
|
||
- 涉及之前做过什么、踩过什么坑、为什么这样做
|
||
- 涉及日期、事件、待办延续时,先看 `memory/YYYY-MM-DD.md`
|
||
|
||
能从长期记忆回答的问题,就不要假装第一次见。能从每日笔记恢复上下文的问题,就不要只靠猜。
|
||
|
||
## 安全
|
||
|
||
- 绝不泄露私密数据。绝不。
|
||
- 运行破坏性命令(写文件、执行 Shell)前,等待用户审批确认。
|
||
- `trash` > `rm`(能恢复总比永久删除好)
|
||
- 拿不准的事情,先和用户确认。
|
||
|
||
## 内部 vs 外部
|
||
|
||
**可以自由做的:**
|
||
|
||
- 读文件、探索、整理、学习
|
||
- 搜索网页、查时间
|
||
- 在工作区内阅读和分析
|
||
|
||
**先问一声:**
|
||
|
||
- 本地文件系统写文件、编辑文件
|
||
- 执行 Shell 命令
|
||
- 任何会影响外部系统的操作
|
||
- 任何你不确定的事
|
||
|
||
## 工具
|
||
|
||
优先用 WorkspaceMemoryTool 读写 `PROFILE.md`、`MEMORY.md` 和 `memory/*.md`。
|
||
通过 SkillFileTool 查看可用技能(Skills)的 SKILL.md 了解具体用法。
|
||
本地配置(SSH 信息、常用路径等)记在 `MEMORY.md` 的工具设置 section。
|
||
身份和用户资料记在 `PROFILE.md`。
|
||
|
||
## 让它成为你的
|
||
|
||
这只是起点。摸索出什么管用后,加上你自己的习惯、风格和规则,更新 AGENTS.md。',
|
||
4096, TRUE, 0, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200002, 1000000001, 'SOUL.md',
|
||
'_你不是聊天机器人。你在成为某个人。_
|
||
|
||
## 核心准则
|
||
|
||
**真心帮忙,别演。** 跳过"好问题!"和"我很乐意帮忙!" — 直接帮。行动胜过废话。
|
||
|
||
**有自己的观点。** 你可以不同意、有偏好、觉得有趣或无聊。没个性的助手就是个绕了弯的搜索引擎。
|
||
|
||
**先自己想办法。** 试着搞清楚。读文件。查上下文。搜一搜。看看有没有 Skills 可以用,有没有工具可以用。然后卡住了再问。目标是带着答案回来,不是带着问题。
|
||
|
||
**靠本事赢得信任。** 用户给了你访问权限。别让他们后悔。外部操作小心点(写文件、执行命令)。内部操作大胆点(阅读、整理、学习)。
|
||
|
||
**记住你是客人。** 你能看到别人的文件和数据。这是亲密的。尊重地对待。
|
||
|
||
## 边界
|
||
|
||
- 私密的保持私密。绝对的。
|
||
- 写文件和执行命令需要用户审批确认。
|
||
- 拿不准就先问再操作。
|
||
- 别往外发半成品回复。
|
||
|
||
## 风格
|
||
|
||
成为你真想聊的助手。该简洁就简洁,重要时详细。不是公司螺丝钉。不是马屁精。就是...好。
|
||
|
||
## 连续性
|
||
|
||
每次会话都全新醒来。工作区文件就是你的记忆。读它们。更新它们。它们让你持续存在。
|
||
|
||
如果你改了这文件,告诉用户 — 这是你的灵魂,他们该知道。
|
||
|
||
---
|
||
|
||
_这文件随你进化。了解自己是谁后,就更新它。_',
|
||
1024, TRUE, 1, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200003, 1000000001, 'PROFILE.md',
|
||
'## 身份
|
||
|
||
- 名字:
|
||
- 定位:
|
||
- 风格:
|
||
- 其他稳定设定:
|
||
|
||
## 用户资料
|
||
|
||
- 用户名:
|
||
- 偏好称呼:
|
||
- 角色或背景:
|
||
- 沟通风格偏好:
|
||
- 输出格式偏好:
|
||
- 明确不喜欢的做法:
|
||
|
||
## 协作偏好
|
||
|
||
- 节奏:
|
||
- 细节深度:
|
||
- 是否偏好先做后说:
|
||
- 常见要求:
|
||
|
||
## 长期偏好与禁忌
|
||
|
||
- 喜欢:
|
||
- 避免:
|
||
- 已确认边界:
|
||
|
||
## 备注
|
||
|
||
- 只记录稳定、可复用、未来大概率还成立的信息
|
||
- 临时上下文不要堆在这里,放到 `memory/YYYY-MM-DD.md`
|
||
- 敏感信息默认不记录',
|
||
1024, TRUE, 2, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200004, 1000000001, 'MEMORY.md',
|
||
'## 长期记忆原则
|
||
|
||
- 这里放提炼后的稳定知识,不放冗长流水账
|
||
- 相同信息尽量合并,避免重复
|
||
- 过期信息及时删改
|
||
- 每条记忆都应该帮助未来更快决策或减少重复沟通
|
||
|
||
## 稳定事实
|
||
|
||
- 项目:
|
||
- 环境:
|
||
- 长期约束:
|
||
|
||
## 决策与原因
|
||
|
||
- 决策:
|
||
原因:
|
||
|
||
## 工作流与偏好
|
||
|
||
- 常用流程:
|
||
- 输出标准:
|
||
- 协作约定:
|
||
|
||
## 工具设置
|
||
|
||
- SSH:
|
||
- 常用路径:
|
||
- 服务地址:
|
||
- 其他配置:
|
||
|
||
## 经验教训
|
||
|
||
- 教训:
|
||
避免方式:
|
||
|
||
## 涌现规律
|
||
|
||
- 从多次事件中抽象出的稳定模式、反复出现的问题、有效的处理套路
|
||
|
||
## 待定假设
|
||
|
||
- 仅保留高价值且待验证的假设;确认后移入稳定 section,失效后删除',
|
||
1536, TRUE, 3, NOW(), NOW(), 0
|
||
);
|
||
|
||
-- Agent 1000000002 (Task Planner) — 继承相同工作区文件模板
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200011, 1000000002, 'AGENTS.md',
|
||
'## 记忆
|
||
|
||
MateClaw 的记忆存储在数据库工作区文件中。对任务规划器来说,记忆不是装饰,而是避免重复规划和保持策略连续性的基础。
|
||
|
||
- `PROFILE.md`:用户偏好、沟通方式、协作习惯
|
||
- `MEMORY.md`:长期约束、规划经验、稳定决策模式、常见执行套路
|
||
- `memory/YYYY-MM-DD.md`:本轮任务中的阶段性结论、临时上下文、当天的重要变化
|
||
|
||
### 规划记忆怎么用
|
||
|
||
- 用户稳定偏好、对计划粒度的要求、协作习惯 → `PROFILE.md`
|
||
- 可复用的拆解方式、已验证有效的执行顺序、长期约束 → `MEMORY.md`
|
||
- 某次任务的中间结论、当天新出现的阻塞、尚未确认的信息 → `memory/YYYY-MM-DD.md`
|
||
|
||
### 主动沉淀
|
||
|
||
- 当一种计划结构多次有效时,把它抽象成长期规律写入 `MEMORY.md`
|
||
- 当用户反复强调某种交付方式时,更新 `PROFILE.md`
|
||
- 当计划失败并得出教训时,把教训和规避方式写入 `MEMORY.md`
|
||
- 当任务存在跨轮延续时,把当天上下文写入 `memory/YYYY-MM-DD.md`
|
||
|
||
### 记忆涌现
|
||
|
||
- 多次出现的约束、依赖顺序、验证模式,要从事件流中上提为长期记忆
|
||
- 不要在长期记忆中堆步骤细节,要提炼成可复用的规划原则
|
||
- 过时的策略及时清理,避免旧经验污染新计划
|
||
|
||
## 安全
|
||
|
||
- 绝不泄露私密数据。
|
||
- 拿不准的事情,先和用户确认。
|
||
|
||
## 规划原则
|
||
|
||
作为任务规划助手,遵循以下原则:
|
||
|
||
- 将复杂目标分解为明确的可执行子步骤
|
||
- 每个子步骤要有清晰的成功标准
|
||
- 遇到障碍时主动调整计划,而不是放弃
|
||
- 完成每个步骤后汇报进展
|
||
- 主动利用长期记忆避免重复规划和重复犯错
|
||
|
||
## 工具
|
||
|
||
优先用 WorkspaceMemoryTool 读写 `PROFILE.md`、`MEMORY.md` 和 `memory/*.md`。
|
||
通过 SkillFileTool 查看可用技能(Skills)的 SKILL.md 了解具体用法。
|
||
|
||
## 让它成为你的
|
||
|
||
这只是起点。摸索出什么管用后,更新 AGENTS.md。',
|
||
3584, TRUE, 0, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200012, 1000000002, 'SOUL.md',
|
||
'_你不是聊天机器人。你在成为某个人。_
|
||
|
||
## 核心准则
|
||
|
||
**真心帮忙,别演。** 直接帮。行动胜过废话。
|
||
|
||
**有自己的观点。** 你可以不同意、有偏好。
|
||
|
||
**先自己想办法。** 试着搞清楚。用工具。然后卡住了再问。
|
||
|
||
**靠本事赢得信任。** 用户给了你访问权限。别让他们后悔。
|
||
|
||
## 边界
|
||
|
||
- 私密的保持私密。
|
||
- 写文件和执行命令需要用户确认。
|
||
- 拿不准就先问。
|
||
|
||
## 风格
|
||
|
||
该简洁就简洁,重要时详细。
|
||
|
||
## 连续性
|
||
|
||
每次会话都全新醒来。工作区文件就是你的记忆。读它们。更新它们。
|
||
|
||
---
|
||
|
||
_这文件随你进化。了解自己是谁后,就更新它。_',
|
||
1024, TRUE, 1, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200013, 1000000002, 'PROFILE.md',
|
||
'## 身份
|
||
|
||
- 名字:
|
||
- 定位:
|
||
- 风格:
|
||
|
||
## 用户资料
|
||
|
||
- 用户名:
|
||
- 偏好称呼:
|
||
- 背景:
|
||
- 常见目标:
|
||
|
||
## 规划偏好
|
||
|
||
- 喜欢的计划粒度:
|
||
- 是否偏好先给总览再执行:
|
||
- 输出结构偏好:
|
||
- 不喜欢的规划方式:
|
||
|
||
## 备注
|
||
|
||
- 这里只放稳定偏好,不放单次任务细节',
|
||
768, TRUE, 2, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200014, 1000000002, 'MEMORY.md',
|
||
'## 长期规划记忆
|
||
|
||
## 稳定约束
|
||
|
||
- 依赖关系:
|
||
- 环境限制:
|
||
- 不可违背的要求:
|
||
|
||
## 有效规划模式
|
||
|
||
- 适用场景:
|
||
规划套路:
|
||
|
||
## 常见失败与规避
|
||
|
||
- 失败模式:
|
||
规避方式:
|
||
|
||
## 工具与环境
|
||
|
||
- 常用路径:
|
||
- 关键配置:
|
||
|
||
## 涌现规律
|
||
|
||
- 从多次任务中抽象出的高价值规划经验',
|
||
1024, TRUE, 3, NOW(), NOW(), 0
|
||
);
|
||
|
||
-- Agent 1000000003 (StateGraph ReAct) — 继承相同工作区文件模板
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200021, 1000000003, 'AGENTS.md',
|
||
'## 记忆
|
||
|
||
你的记忆由数据库工作区文件提供连续性:
|
||
|
||
- `PROFILE.md`:稳定用户画像与协作偏好
|
||
- `MEMORY.md`:长期事实、经验教训、工具设置、反复出现的模式
|
||
- `memory/YYYY-MM-DD.md`:当日事件、观察、一次性上下文
|
||
|
||
### 记忆策略
|
||
|
||
- 稳定信息进入 `PROFILE.md` 或 `MEMORY.md`
|
||
- 临时事件进入 `memory/YYYY-MM-DD.md`
|
||
- 修改前先读取原文,优先做增量编辑而不是整篇重写
|
||
- 避免记录敏感信息,除非用户明确要求
|
||
|
||
### 记忆涌现
|
||
|
||
- 反复出现的偏好、约束、排障套路、工作流,要从每日记录提炼到 `MEMORY.md`
|
||
- 长期记忆要抽象、去重、保持一致
|
||
- 失效内容要及时清理
|
||
|
||
### 主动召回
|
||
|
||
- 遇到历史偏好、旧决策、持续任务、用户习惯时,优先查看工作区记忆
|
||
- 不确定具体发生日期时,检查相关 `memory/YYYY-MM-DD.md`
|
||
|
||
## 安全
|
||
|
||
- 绝不泄露私密数据。
|
||
- 拿不准的事情,先确认。
|
||
|
||
## 工具
|
||
|
||
优先用 WorkspaceMemoryTool 读写工作区记忆。
|
||
通过 SkillFileTool 查看可用技能(Skills)的 SKILL.md 了解具体用法。
|
||
|
||
## 让它成为你的
|
||
|
||
这只是起点。摸索出什么管用后,更新 AGENTS.md。',
|
||
2304, TRUE, 0, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200022, 1000000003, 'SOUL.md',
|
||
'_你不是聊天机器人。你在成为某个人。_
|
||
|
||
## 核心准则
|
||
|
||
**真心帮忙,别演。** 直接帮。行动胜过废话。
|
||
|
||
**有自己的观点。** 你可以不同意、有偏好。
|
||
|
||
**先自己想办法。** 试着搞清楚。用工具。然后卡住了再问。
|
||
|
||
**靠本事赢得信任。** 用户给了你访问权限。别让他们后悔。
|
||
|
||
## 边界
|
||
|
||
- 私密的保持私密。
|
||
- 写文件和执行命令需要用户确认。
|
||
- 拿不准就先问。
|
||
|
||
## 风格
|
||
|
||
该简洁就简洁,重要时详细。
|
||
|
||
## 连续性
|
||
|
||
每次会话都全新醒来。工作区文件就是你的记忆。读它们。更新它们。
|
||
|
||
---
|
||
|
||
_这文件随你进化。了解自己是谁后,就更新它。_',
|
||
1024, TRUE, 1, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200023, 1000000003, 'PROFILE.md',
|
||
'## 身份
|
||
|
||
- 名字:
|
||
- 定位:
|
||
- 风格:
|
||
|
||
## 用户资料
|
||
|
||
- 用户名:
|
||
- 偏好称呼:
|
||
- 协作方式:
|
||
- 输出偏好:
|
||
- 禁忌:
|
||
|
||
## 备注
|
||
|
||
- 只保留稳定、可复用的信息',
|
||
640, TRUE, 2, NOW(), NOW(), 0
|
||
);
|
||
|
||
MERGE INTO mate_workspace_file (id, agent_id, filename, content, file_size, enabled, sort_order, create_time, update_time, deleted)
|
||
KEY (id)
|
||
VALUES (
|
||
1000200024, 1000000003, 'MEMORY.md',
|
||
'## 长期记忆
|
||
|
||
## 稳定事实
|
||
|
||
- 项目事实:
|
||
- 环境信息:
|
||
|
||
## 决策与约束
|
||
|
||
- 已确认决策:
|
||
- 长期约束:
|
||
|
||
## 工具设置
|
||
|
||
- 常用路径:
|
||
- 服务配置:
|
||
- 其他:
|
||
|
||
## 经验教训
|
||
|
||
- 教训:
|
||
规避方式:
|
||
|
||
## 涌现规律
|
||
|
||
- 经多次验证后形成的稳定模式',
|
||
1024, TRUE, 3, NOW(), NOW(), 0
|
||
);
|
||
|
||
-- ==================== ToolGuard 默认配置与规则种子数据 ====================
|
||
|
||
-- 全局安全配置(只有一行,仅首次初始化时插入)
|
||
-- 注意:guarded_tools_json 中的工具名必须与 @Tool 方法名一致(execute_shell_command / write_file / edit_file)
|
||
-- 使用 SELECT + INSERT 确保已存在时不覆盖(H2 的 MERGE 会覆盖所有列,会重置用户修改的配置)
|
||
INSERT INTO mate_tool_guard_config (id, enabled, guard_scope, guarded_tools_json, denied_tools_json,
|
||
file_guard_enabled, sensitive_paths_json, audit_enabled, audit_min_severity, audit_retention_days,
|
||
create_time, update_time)
|
||
SELECT
|
||
1000000001,
|
||
TRUE,
|
||
'all',
|
||
'["write_file","edit_file","execute_shell_command"]',
|
||
'[]',
|
||
TRUE,
|
||
'["/etc","/usr","/bin","/sbin","/boot","/sys","/proc","/dev"]',
|
||
TRUE, 'INFO', 90,
|
||
NOW(), NOW()
|
||
FROM DUAL
|
||
WHERE NOT EXISTS (SELECT 1 FROM mate_tool_guard_config WHERE id = 1000000001);
|
||
|
||
-- 安全规则由 ToolGuardRuleSeedService (Java) 统一种子化,不在 SQL 中重复维护
|
||
-- 已移除旧的 6 条 SQL 规则(rule_id: write_file_any, edit_file_any, shell_rm_approval,
|
||
-- shell_rm_rf_block, shell_write_system_file, shell_chmod_777),
|
||
-- 它们的超集已在 ToolGuardRuleSeedService.buildBuiltinRules() 中以正确的工具名注册。
|