需完成工具注册、参数约束声明与llm指令对齐三步闭环:注册database_tool.py并配置config.yaml;设置tool_choice为"auto"且启用function calling,并在system prompt中强制json格式输出;用户指令须含动词+宾语结构,初始注入schema摘要,失败时自动recall重试。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

让AI通过OpenClaw框架调用数据库工具,需完成工具注册、参数约束声明与LLM指令对齐三步闭环。这一步漏掉任意一个环节,AI就会把SQL当成普通文本输出,而非触发实际查询。
注册数据库工具到OpenClaw工具集
在tools/目录下新建database_tool.py,定义一个符合OpenClaw Tool Protocol的类:
继承BaseTool,重写schema和__call__方法;schema必须包含type: "function"、name(如"query_database")、description(明确说明“仅用于SELECT查询,禁止UPDATE/DELETE”),以及parameters中每个字段的type和description。
在config.yaml的tools列表中添加该模块路径:- tools.database_tool:QueryDatabaseTool。
【必须确保工具类名与config中冒号后名称完全一致,大小写敏感】
约束LLM生成结构化函数调用
修改llm_config.yaml中的tool_choice为"auto",并启用enable_function_calling: true。
在系统提示词(system prompt)末尾追加硬性指令:“你只能以JSON格式输出function call,格式为{‘name’: ‘xxx’, ‘arguments’: {‘param1’: ‘val1’}};禁止输出任何解释性文字、代码块或自然语言描述。”
这一步不加,LLM大概率会返回“我帮你查了用户表”,而不是真正调用工具。
构造带上下文的用户指令
第一步:用户输入必须含明确动词+宾语结构,例如“查出id为123的用户邮箱”;避免模糊表述如“看看用户信息”。
第二步:在Agent启动时,通过initial_memory注入数据库Schema摘要,包括表名、关键字段、主键和外键关系——这是LLM生成合法SQL的前提。
第三步:运行时,若LLM首次尝试调用失败(如参数缺失),OpenClaw会自动触发RecallAction,将错误日志连同Schema摘要一并喂回LLM重试;无需人工干预。










