dify可通过接入sqlite本地数据库实现ai记账助手,无需后端服务;需创建accounting.db文件并建records表,编写含query_records和add_record函数的自定义工具,正确配置路径、参数及启用开关。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify中接入SQLite本地数据库,让AI应用直接读写用户记账数据,无需部署后端服务,适合个人开发者快速搭建记账助手类Agent。
准备SQLite数据库文件
新建一个名为accounting.db的SQLite数据库文件,放在Dify项目根目录下的data/子目录中(若目录不存在请手动创建)。
执行以下SQL建表语句,确保表结构兼容后续Python代码调用:CREATE TABLE IF NOT EXISTS records (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id TEXT NOT NULL, amount REAL NOT NULL, category TEXT, note TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
【user_id字段必须存在且非空】,Dify通过会话ID或用户标识传入该值,缺失将导致插入失败且无报错提示。
编写自定义工具函数
进入Dify「知识库→工具→自定义工具」页面,点击「+ 新建工具」,填写名称为「记账查询与录入」,描述写“支持按用户查账单、添加新支出/收入记录”。
在「函数定义」区域粘贴以下Python代码:
import sqlite3<br>import os<br><br>def query_records(user_id: str, limit: int = 10) -> list:<br> db_path = os.path.join(os.path.dirname(__file__), "..", "data", "accounting.db")<br> conn = sqlite3.connect(db_path)<br> cursor = conn.cursor()<br> cursor.execute("SELECT id, amount, category, note, created_at FROM records WHERE user_id = ? ORDER BY created_at DESC LIMIT ?", (user_id, limit))<br> rows = cursor.fetchall()<br> conn.close()<br> return [{"id": r[0], "amount": r[1], "category": r[2], "note": r[3], "created_at": r[4]} for r in rows]<br><br>def add_record(user_id: str, amount: float, category: str = None, note: str = None) -> str:<br> db_path = os.path.join(os.path.dirname(__file__), "..", "data", "accounting.db")<br> conn = sqlite3.connect(db_path)<br> cursor = conn.cursor()<br> cursor.execute("INSERT INTO records (user_id, amount, category, note) VALUES (?, ?, ?, ?)", (user_id, amount, category, note))<br> conn.commit()<br> record_id = cursor.lastrowid<br> conn.close()<br> return f"记账成功,ID为{record_id}"
注意:Dify沙箱环境默认工作路径为app/,所以os.path.dirname(__file__)指向工具代码所在目录,向上两级再进data/才可定位到数据库文件——路径写错会导致OperationalError: no such table。
配置工具参数并启用
在「参数定义」区域,为query_records方法添加两个参数:
Agents 正在你的整个代码库中处理越来越复杂、运行时间更长的任务。本次版本引入了新的 agent 框架改进,以实现更好的上下文管理,并在编辑器和 CLI 中带来了许多提升使用体验的修复。
① user_id:类型 string,必填,描述“用户的唯一标识,如会话ID或登录用户名”;
② limit:类型 integer,选填,默认值 5,描述“最多返回几条记录”。
为add_record方法添加四个参数:
第一步:user_id(string,必填);
第二步:amount(number,必填),描述“金额,正数为收入,负数为支出”;
第三步:category(string,选填),描述“分类,例如餐饮、交通、工资”;
第四步:note(string,选填),描述“备注说明”。
勾选「启用此工具」,点击「保存」。保存后工具状态变为「已启用」,即可在编排工作流时拖入使用。
这一步操作不可跳过:Dify不会自动检测工具是否生效,必须手动点击启用开关,否则LLM调用时始终返回“工具不可用”。










