数据库设计文档
本章节将详细介绍如何使用 tio-boot 系统和 Perplexity 开发一个面向校园领域的搜索问答系统。该系统旨在为用户提供高效、智能的问答服务,涵盖以下主要功能:
功能概述
- 推荐问题:根据用户输入智能推荐相关问题,提升用户体验。
- 会话管理:有效管理用户与系统之间的对话会话,确保对话的连贯性。
- 历史记录管理:记录并管理用户的历史查询,便于后续参考和分析。
- 意图识别:通过自然语言处理技术识别用户的查询意图,提供精准回答。
- 提示词生成:自动生成提示词,辅助用户更好地表达查询需求。
- 智能问答 调用大模型进行推理,生成答案。
数据库设计
为了实现上述功能,系统设计了多个数据表以存储和管理相关数据。以下将详细介绍各个数据表的结构及其用途。
1. llm_question_recommend(推荐问题)
用于存储系统推荐的问题,帮助用户快速找到相关信息。
CREATE TABLE "llm_question_recommend" (
"id" BIGINT PRIMARY KEY,
"orders" INT4,
"avatar" VARCHAR,
"title" VARCHAR,
"content" VARCHAR,
"env" VARCHAR,
"remark" VARCHAR,
"creator" VARCHAR DEFAULT ''::VARCHAR,
"create_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" VARCHAR DEFAULT ''::VARCHAR,
"update_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted" INT2 NOT NULL DEFAULT 0,
"tenant_id" INT8 NOT NULL DEFAULT 0
);
表字段说明
id
: 主键,唯一标识一条推荐问题记录。orders
: 排序字段,用于控制推荐问题的展示顺序。avatar
: 问题的图标 URL,增强视觉效果。title
: 问题的标题,简要描述问题主题。content
: 问题的具体内容,提供详细的信息。env
: 环境字段,标识问题所属的环境或模块。remark
: 备注信息,用于记录附加说明。creator
: 创建者信息,记录谁创建了该记录。create_time
: 创建时间,记录记录的创建时间。updater
: 更新者信息,记录谁更新了该记录。update_time
: 更新时间,记录记录的最后更新时间。deleted
: 删除标志,0
表示未删除,1
表示已删除。tenant_id
: 租户 ID,支持多租户环境。
示例数据插入:
INSERT INTO "public"."llm_question_recommend" VALUES
(1, 1, 'https://firebasestorage.googleapis.com/v0/b/rumi-bdb43.appspot.com/o/public%2Ftmp%2Fimg_v3_02cd_bd6fe904-94f1-4986-9d65-0175e22746eh.png?alt=media', '课程与教授', '我们有没有推荐的适合R区域的简单课程?', 2, NULL, '', '2024-07-16 12:34:36.651846', '', '2024-07-16 12:34:36.651846', 0, 0),
(2, 2, 'https://firebasestorage.googleapis.com/v0/b/rumi-bdb43.appspot.com/o/public%2Ftmp%2Fimg_v3_02cd_7b40632d-d0f6-4328-99ce-2e36d966709h.png?alt=media', '作业帮助', 'SJSU主校区附近有哪些最好的或有名的餐厅?', 2, NULL, '', '2024-07-16 12:34:36.651846', '', '2024-07-16 12:34:36.651846', 0, 0),
(3, 3, 'https://firebasestorage.googleapis.com/v0/b/rumi-bdb43.appspot.com/o/public%2Ftmp%2Fimg_v3_02cd_32d2f8af-a364-4a10-a9b0-4a5d6686b27h.png?alt=media', '校园导览', '如何注册课程,以及注册的截止日期和程序是什么?', 2, NULL, '', '2024-07-16 12:34:36.651846', '', '2024-07-16 12:34:36.651846', 0, 0),
(4, 4, 'https://firebasestorage.googleapis.com/v0/b/rumi-bdb43.appspot.com/o/public%2Ftmp%2Fimg_v3_02cd_e638ecb7-73d6-45d4-805d-001f2065142h.png?alt=media', '校园生活', '学生可以免费进入橄榄球比赛吗?', 2, NULL, '', '2024-07-16 12:34:36.651846', '', '2024-07-16 12:34:36.651846', 0, 0);
2. llm_chat_session(会话管理)
用于管理用户与系统之间的对话会话,确保对话的连续性和一致性。
CREATE TABLE "llm_chat_session" (
"id" BIGINT PRIMARY KEY,
"user_id" VARCHAR,
"name" VARCHAR,
"school_id" INT8,
"app_id" INT8,
"type" VARCHAR,
"chat_type" INT4,
"remark" VARCHAR(256),
"creator" VARCHAR(64) DEFAULT '',
"create_time" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" VARCHAR(64) DEFAULT '',
"update_time" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted" SMALLINT DEFAULT 0,
"tenant_id" BIGINT NOT NULL DEFAULT 0
);
id
: 主键,唯一标识一个会话。user_id
: 用户 ID,标识会话所属的用户。name
: 会话名称,用户自定义。school_id
: 学校 ID,标识会话所属的学校。app_id
: 应用 ID,标识会话所属的应用。type
: 会话类型描述,进一步描述会话的用途或类别。chat_type
: 会话类型,数值表示不同的会话类型。remark
: 备注信息,用于记录附加说明。creator
: 创建者信息,记录谁创建了该会话。create_time
: 创建时间,记录会话的创建时间。updater
: 更新者信息,记录谁更新了该会话。update_time
: 更新时间,记录会话的最后更新时间。deleted
: 删除标志,0
表示未删除,1
表示已删除。tenant_id
: 租户 ID,支持多租户环境。
索引创建:
为了优化查询性能,特别是按user_id
进行查询,创建了如下索引:
CREATE INDEX "ix_llm_chat_session_user_id" ON "llm_chat_session" USING btree (
"user_id" TEXT ASC NULLS LAST
);
3. llm_chat_history(聊天历史)
记录用户与系统的对话历史,便于回溯和分析。
DROP TABLE IF EXISTS llm_chat_history;
CREATE TABLE "llm_chat_history" (
"id" BIGINT PRIMARY KEY,
"session_id" BIGINT,
"role" VARCHAR NOT NULL,
"content" VARCHAR NOT NULL,
"citions" varchar,
"type" varchar default 'text',
"metadata" JSONB,
"hidden" BOOLEAN DEFAULT FALSE,
"liked" BOOLEAN,
"remark" VARCHAR(256),
"creator" VARCHAR(64) DEFAULT '',
"create_time" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" VARCHAR(64) DEFAULT '',
"update_time" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted" SMALLINT DEFAULT 0,
"tenant_id" BIGINT NOT NULL DEFAULT 0
);
id
: 主键,唯一标识一条对话记录。session_id
: 会话 ID,关联到llm_chat_session
表,标识该对话记录所属的会话。role
: 角色,标识对话的发起者,如user
或assistant
。content
: 对话内容,存储具体的提问或回答。metadata
: 元数据,存储与对话相关的额外信息,格式为 JSON。hidden
: 隐藏标志,false
表示可见,true
表示隐藏。liked
: 点赞标志,true
表示已点赞,false
表示未点赞。remark
: 备注信息,用于记录附加说明。creator
: 创建者信息,记录谁创建了该记录。create_time
: 创建时间,记录记录的创建时间。updater
: 更新者信息,记录谁更新了该记录。update_time
: 更新时间,记录记录的最后更新时间。deleted
: 删除标志,0
表示未删除,1
表示已删除。tenant_id
: 租户 ID,支持多租户环境。
4. rumi_school_dict(学校字典)
存储学校相关信息,支持系统的多学校环境配置。
CREATE TABLE "public"."rumi_school_dict" (
"id" BIGINT NOT NULL PRIMARY KEY,
"rmp_school_id" INT4,
"full_name" VARCHAR,
"abbr_name" VARCHAR,
"bot_name" VARCHAR,
"remark" VARCHAR,
"creator" VARCHAR DEFAULT ''::VARCHAR,
"create_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" VARCHAR DEFAULT ''::VARCHAR,
"update_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted" INT2 NOT NULL DEFAULT 0,
"tenant_id" INT8 NOT NULL DEFAULT 0
);
5. user_asked_questions(用户提问记录)
记录用户提出的问题,支持问题分析和推荐功能。
CREATE TABLE "user_asked_questions" (
"id" BIGINT PRIMARY KEY,
"content" VARCHAR,
"remark" VARCHAR(256),
"creator" VARCHAR(64) DEFAULT '',
"create_time" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" VARCHAR(64) DEFAULT '',
"update_time" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted" SMALLINT DEFAULT 0,
"tenant_id" BIGINT NOT NULL DEFAULT 0
);
6. llm_vector_embedding(向量嵌入)
存储文本的向量表示,用于高效的相似性搜索和意图识别。
CREATE TABLE "llm_vector_embedding" (
"id" BIGINT PRIMARY KEY,
"t" VARCHAR,
"v" VECTOR,
"m" VARCHAR,
"md5" VARCHAR
);
CREATE INDEX "idx_llm_vector_embedding_md5" ON "llm_vector_embedding" USING btree (
"md5" TEXT ASC NULLS LAST
);
CREATE INDEX "idx_llm_vector_embedding_md5_m" ON "llm_vector_embedding" USING btree (
"md5" TEXT ASC NULLS LAST,
"m" TEXT ASC NULLS LAST
);
7. llm_intent_question(意图问题)
存储与特定意图相关的问题,辅助系统进行意图识别和分类。
CREATE TABLE "llm_intent_question" (
"id" INT8 PRIMARY KEY,
"question" VARCHAR,
"category_id" INT8,
"remark" VARCHAR,
"creator" VARCHAR DEFAULT ''::VARCHAR,
"create_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" VARCHAR DEFAULT ''::VARCHAR,
"update_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted" INT2 NOT NULL DEFAULT 0,
"tenant_id" INT8 NOT NULL DEFAULT 0,
"question_vector" VECTOR
);
8. llm_intent_classification(意图分类)
定义系统支持的意图类别,帮助系统进行精准的意图识别和响应。
CREATE TABLE "public"."llm_intent_classification" (
"id" INT8 PRIMARY KEY,
"name" VARCHAR,
"description" VARCHAR,
"action" VARCHAR,
"prompt" VARCHAR,
"additional_info" VARCHAR,
"include_general" INT2 NOT NULL DEFAULT 1,
"remark" VARCHAR,
"creator" VARCHAR DEFAULT ''::VARCHAR,
"create_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updater" VARCHAR DEFAULT ''::VARCHAR,
"update_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"deleted" INT2 NOT NULL DEFAULT 0,
"tenant_id" INT8 NOT NULL DEFAULT 0,
"env" VARCHAR
);
结论
通过上述数据库设计,系统能够有效地管理和处理用户的查询、对话会话、历史记录以及意图识别等核心功能。合理的表结构和索引设计确保了系统的高效性和可扩展性,为校园搜索问答系统的稳定运行提供了坚实的基础。