第7章:数据库与持久化存储

作者:芝麻开门-新起点日期:2025/10/8


7.1 为何需要数据库:记忆与状态管理

内容讲解

默认情况下,AI Bot 是**“无状态”的。这意味着除了短暂的当前对话上下文,它不记得任何过去的事情。每次对话都是一次全新的开始。然而,在许多真实场景中,我们需要 Bot 拥有记忆**,能够持久化地存储和检索信息。这就是**数据库(Database)**的作用。

数据库为 Bot 提供了以下关键能力

  • 长期记忆:记住用户的偏好、历史订单、个人信息等。例如,一个订餐 Bot 应该记住你常去的地址和喜欢的口味。
  • 状态跟踪:在复杂的多轮任务中,跟踪当前的进度。例如,一个游戏 Bot 需要记录玩家当前的等级、装备和任务状态。
  • 数据共享:在多个用户或多个 Bot 之间共享信息。例如,一个团队任务管理 Bot 需要让所有成员都能看到最新的任务列表。
  • 数据分析:收集和存储用户交互数据,用于后续的分析和 Bot 优化。

Coze 内置了一个简单易用的 键值(Key-Value)数据库,让开发者无需关心复杂的数据库配置和管理,就能轻松为 Bot 添加持久化存储能力。


7.2 Coze 内置数据库的使用

内容讲解

Coze 的内置数据库可以被看作是一个巨大的“字典”或“表格”。你通过一个唯一的 **“键”(Key)**来存取一个对应的 “值”(Value)。这个“值”可以是文本、数字,或者更复杂的结构化数据。

核心概念

  • Table(表):数据库的基本组织单位。你可以创建多个表来存储不同类型的数据,例如 users 表和 orders 表。
  • Key(键):表中的唯一标识符,用于定位一条记录。通常我们会使用用户的 ID (user_id) 或会话 ID (session_id) 作为主键。
  • Value(值):与键关联的实际数据。它可以是单个值,也可以是一个包含多个字段的对象。

操作步骤:在 Bot 中启用数据库

  1. 进入 Bot 编辑页面:打开你的 Bot。
  2. 添加数据库能力:在左侧的技能编排区,找到“数据库”部分。
  3. 创建数据表:点击“添加”,然后“创建表”。
    • 表名:输入一个有意义的名称,例如 user_preferences
    • 主键:定义表的主键,例如 user_id
    • 字段:添加你想要存储的数据字段,例如 favorite_movie_type (文本类型) 和 viewed_count (数字类型)。
  4. 保存:点击“确认”后,这张表就与你的 Bot 关联起来了。

7.3 数据的增、删、改、查操作

内容讲解

对数据库的操作,通常是通过工作流(Workflow)中的数据库节点来完成的。Coze 提供了直观的节点来执行标准的 CRUD 操作。

  • database_create (创建/插入):向表中添加一条新的记录。
  • database_update (更新):修改表中已有记录的某个或某些字段的值。
  • database_read (读取/查询):根据主键(Key)从表中检索一条记录。
  • database_delete (删除):根据主键从表中删除一条记录。

实战:创建一个记录用户偏好的工作流

让我们创建一个名为 record_preference 的工作流,用于记录用户喜欢的电影类型。

工作流设计

record_preference_workflow

记录不存在

记录已存在

database_read
Table: user_preferences
Key: {{A.user_id}}

Start
input: user_id, movie_type

database_create
Table: user_preferences
Data: {user_id: ..., favorite_movie_type: ...}

database_update
Table: user_preferences
Key: {{A.user_id}}
Data: {favorite_movie_type: ...}

End

实现要点

  1. Start 节点:定义输入为 user_idmovie_type
  2. database_read 节点:首先尝试读取该用户的记录,判断是新用户还是老用户。
  3. 判断逻辑database_read 节点的输出会包含一个 error 字段。如果 error 存在(表示记录未找到),则流程走向“创建”分支;否则走向“更新”分支。
  4. database_create / database_update 节点:根据判断结果,执行相应的写操作。

7.4 综合实战:实现一个带记忆的“待办事项助手”

项目目标:创建一个功能完备的 To-Do List Bot。用户可以添加新任务、查看所有任务、以及将任务标记为“已完成”。Bot 必须为每个独立用户维护其专属的待办列表。

第一步:数据库设计

  1. 创建表:在 Bot 的数据库能力中,创建一个名为 todo_lists 的表。
  2. 主键:设置主键为 user_id,这是一个至关重要的步骤,它保证了每个用户的数据是隔离的。
  3. 字段设计:添加一个名为 tasks 的字段,其数据类型选择为 对象数组 (Array)。这允许我们在一个字段里存储一个列表,列表中的每个元素都是一个代表任务的对象。
  4. 任务对象结构:定义 tasks 数组中每个对象的结构,包含两个属性:
    • content (String): 任务的具体内容。
    • status (String): 任务的状态,默认为 pending (待办),可变为 done (已完成)。

第二步:创建三个核心工作流

1. 工作流:add_task_workflow

  • 功能:向指定用户的任务列表中添加一个新任务。
  • 流程图
1graph TD  
2    A[Start<br>input: user_id, task_content] --> B{Code: 构造新任务对象<br>code: `return {"content": task_content, "status": "pending"}`<br>output: new_task};  
3    B --> C{database_update: 追加任务<br>Table: todo_lists<br>Key: {{A.user_id}}<br>Mode: Append to Array<br>Field: tasks<br>Value: {{B.new_task}}};  
4    C --> D[End<br>output: "任务已成功添加!"];  
  • 节点说明:我们使用了 database_update 节点的“追加到数组”(Append to Array)模式,这比“先读再写”更高效。

2. 工作流:view_tasks_workflow

  • 功能:查询并格式化展示用户的所有待办任务。
  • 流程图
1graph TD  
2    A[Start<br>input: user_id] --> B{database_read<br>Table: todo_lists<br>Key: {{A.user_id}}<br>Output: user_data};  
3    B --> C{Code: 格式化输出<br>input: {{B.user_data.tasks}}<br>code: 遍历任务列表,生成带编号和状态的字符串<br>output: formatted_list};  
4    C --> D[End<br>output: {{C.formatted_list}}];  
  • 节点说明:Code 节点用于将从数据库读出的原始数据(对象数组)转换成人类易读的文本格式,例如:`1. [待办] 学习Coze数据库
  1. [已完成] 喝杯咖啡`。

3. 工作流:complete_task_workflow

  • 功能:将用户指定的某个任务状态标记为“已完成”。
  • 流程图
1graph TD  
2    A[Start<br>input: user_id, task_index] --> B{database_read<br>Table: todo_lists<br>Key: {{A.user_id}}<br>Output: user_data};  
3    B --> C{Code: 修改任务状态<br>input: {{B.user_data.tasks}}, {{A.task_index}}<br>code: 将指定索引任务的status改为'done'<br>output: updated_tasks};  
4    C --> D{database_update: 写回整个列表<br>Table: todo_lists<br>Key: {{A.user_id}}<br>Mode: Overwrite<br>Field: tasks<br>Value: {{C.updated_tasks}}};  
5    D --> E[End<br>output: "任务已标记为完成!"];  
  • 节点说明:这里需要先读出整个任务列表,在 Code 节点中修改其中一个元素的状态,然后再用修改后的完整列表覆盖写回数据库。

第三步:配置 Bot 的 Prompt

1# 角色
2你是一个高效的待办事项(To-Do List)助手。
3
4# 技能
51.  **识别意图**:你能理解用户是想“添加任务”、“查看任务”还是“完成任务”。
62.  **提取参数**:
7    -   对于添加任务,你需要提取任务内容。
8    -   对于完成任务,你需要提取任务的编号。
93.  **调用工作流**:根据用户意图,调用相应的工作流来执行操作。
10    -   意图“添加” -> 调用 `add_task_workflow`,传入 `task_content` 和 `{{user_id}}`。
11    -   意图“查看” -> 调用 `view_tasks_workflow`,传入 `{{user_id}}`。
12    -   意图“完成” -> 调用 `complete_task_workflow`,传入 `task_index` 和 `{{user_id}}`。
134.  **回复结果**:将工作流的输出结果清晰地回复给用户。
14
15# 限制
16-   如果用户指令不明确,你需要主动询问以获取必要信息(例如,“您想完成哪个任务?请输入任务编号。”)。
17-   所有操作都必须通过调用工作流完成。
18

本章总结

本章我们为 Bot 赋予了最重要的能力之一——记忆。通过学习,你不仅理解了数据库在 Bot 开发中的核心价值,还掌握了如何在 Coze 中设计数据表、配置字段,并通过工作流节点执行增、删、改、查 (CRUD) 操作。最后,通过从零到一构建一个功能完备的“待办事项助手”,我们将所有知识点融会贯通,实现了一个真正有用的、能提供个性化服务的持久化应用。

拥有了数据库能力,你的 Bot 不再是一个健忘的对话伙伴,而是一个能够长期服务、持续学习的智能助理。


第7章:数据库与持久化存储》 是转载文章,点击查看原文


相关推荐


Python 的 TCP 编程
hubenchang05152025/10/6

#Python 的 TCP 编程 传输控制协议(Transmission Control Protocol) 是一种 面向连接、可靠传输 的网络通信协议,是现代互联网最核心的协议之一。 #客户端程序 TCP 客户端程序通常只需要连接到服务器然后收发数据即可。下面是一个示例,它向 tcpbin.com 的 4242 端口发送 hello\n,对方会原样返回。 import socket # 创建 TCP socket sock = socket.socket(socket.AF_INET, so


【深度相机术语与概念】
是刘彦宏吖2025/10/5

获取相机输出的 深度图、灰度图、彩色图 和 点云图,用于导航、避障、三维建模、手势识别等应用。 【深度相机术语与概念】 相机类型 3D 相机 3D 相机是一种能够捕捉三维图像的相机。它通过各种技术手段(如立体视觉、飞行时间、结构光等)获取物体的三维形状和深度信息。3D 相机可以生成具有 3D 空间坐标信息的点云数据,使得计算机能够理解和处理三维空间中的物体。 主动双目立体相机 主动双目立体相机是一种结合了双目立体视觉和主动光源(如结构光)的相机系统。它通过投射已知的光图案到场景中,并使用双目相


HTTP为什么不安全?
你的人类朋友2025/10/4

🌐 前言 你好呀,我是你的人类朋友! 本文主要讲讲 HTTP 为什么不安全,以及 HTTPS 如何解决这些问题。 ❗❗ 核心问题速览 HTTP(超文本传输协议):互联网上应用最广泛的网络协议,但数据以明文形式传输。注意,是明文,谁都能看!! HTTPS(安全超文本传输协议):HTTP 的安全版本,= HTTP + SSL/TLS 加密,就像把明信片放进防拆信封里寄送,别人无法看到信息的内容。 补充知识 1:SSL/TLS在【传输层】对 HTTP 数据进行加密,确保隐私和完整性。 补充知识 2


SIMD编程入门:让性能飞起来的实践指南
oioihoii2025/10/3

在现代计算中,单指令多数据流(SIMD)技术就像是一把性能优化的瑞士军刀,能让你的程序速度提升数倍甚至数十倍。本文将带你从零开始,掌握这把利器的使用之道。 什么是SIMD?从汽车生产线说起 想象一下汽车生产线:传统方式是一个工人依次安装每个轮胎,而SIMD就像是培训了一个专门团队,能够同时安装四个轮胎。这就是单指令多数据流的核心思想——一条指令,多个数据。 // 传统标量计算 - 依次处理每个元素 for (int i = 0; i < 4; i++) { result[i] = a[


释放模型潜能:ONNX Runtime 如何进行优化与加速?
Cosolar2025/10/2

在机器学习从实验室走向真实世界的过程中,模型的部署与运行效率往往是决定项目成败的“最后一公里”。一个在离线环境中表现优异的模型,如果无法满足生产环境对低延迟、高吞吐和低资源消耗的要求,其商业价值将大打折扣。 ONNX Runtime (ORT) 作为由微软主导的开源跨平台推理引擎,凭借其出色的性能、广泛的硬件支持和活跃的社区,已成为业界部署模型的事实标准之一。然而,仅仅将模型转换为 ONNX 格式并使用 ORT 运行,只是拿到了“入场券”。要真正释放其潜能,我们需要从模型优化、推理引擎配置、硬


AR/VR赋能工业巡检:开启智能化运维新时代
Teamhelper_AR2025/10/2

在工业 4.0 时代浪潮的推动下,增强现实(AR www.teamhelper.cn )与虚拟现实(VR)技术加速从理论概念迈向工业应用前沿,尤其在工业设备巡检这一关键领域,正展现出前所未有的变革潜力,有望彻底颠覆传统依赖人工经验、效率低下、风险高且数据不连贯的巡检模式。 AR技术:重塑工业巡检核心优势 AR技术通过巧妙地将虚拟信息与真实环境相融合,为工业巡检人员带来了革新性的工作体验。借助AR智能眼镜,巡检人员能够实时获取设备参数、操作指南以及历史数据等关键信息,无需再频繁翻阅纸质


《WebAssembly指南》第六章:读懂 WebAssembly 文本格式
锋通科技10/2/2025

本文介绍了WebAssembly文本格式的基本概念和使用方法。主要内容包括:1. WebAssembly文本格式采用S表达式表示模块结构,比二进制格式更易读易修改。2. 详细讲解了函数定义、参数传递、栈机器运行机制等核心概念,并通过加法函数示例演示了模块的创建和调用过程。3. 介绍了内存管理机制,包括内存共享、字符串处理和多内存使用场景。4. 深入讲解了表格(Table)的概念及其在动态链接中的应用,展示了如何通过表格实现函数指针功能。5. 概述了WebAssembly支持的各种类型和特性,包括数值类型、引


【SpringAI中Chat-Client用法】
明志学编程-9/30/2025

这篇文章介绍了如何使用SpringAI框架中的ChatClient进行大模型交互开发。主要内容包括:1. 对比ChatClient与底层ChatModel的区别,建议优先使用更易用的ChatClient;2. 详细展示如何创建子工程、添加依赖(以阿里云百炼平台为例)和配置;3. 提供同步和流式两种调用方式的代码示例;4. 解决多模型依赖冲突问题,通过直接注入具体ChatModel实现动态选择;5. 最后提到多平台多模型动态配置的实战应用。文章配有CSDN博客链接和示例图片,适合开发者学习SpringAI框架


数电基础--电平规范_TTL与CMOS
逐步前行9/30/2025

高电平输出大于2.4V,如果落在2.4V至3.5V之间,CMOS电路不能检测到高电平,需要进行电平输换。(3)、3.3V的TTL驱动5V的CMOS,考虑可以存在电压钳位,比如单片机的GPIO,不适合上拉电阻。(1)、3.3V的TTL驱动3.3V的CMOS,可以通过简单的上拉电阻实现电平匹配。(2)、5V的TTL驱动5V的CMOS,可以通过简单的上拉电阻实现电平匹配。高电平输出3.3V,CMOS电路不能检测到高电平,需要进行电平转换。Tx输出5V,Q2截止,Rx端为3.3V;


【SCI一区】【电动车】基于ADMM双层凸优化的燃料电池混合动力汽车研究(Matlab代码实现)
荔枝科研社2025/10/9

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 💥1 概述 基于ADMM双层凸优化的燃料电池混合动力汽车研究 随着车辆互联性的出现,互联汽车 (CVs) 在增强道路安全、改善乘坐舒适性、提高交通效率和提高能源效率方面提供了巨大的潜力。通过从车对车 (V2V) 和车对基础设施 (V2I) 通信中获取交通信息,CV 能够更准确、更广泛地感知

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0