当前位置: 首页 > wzjs >正文

wordpress去掉cat广州seo黑帽培训

wordpress去掉cat,广州seo黑帽培训,广州哪家做网站最好,常州网络公司鼎豪网络网站建设📚 使用 Python SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础 🧠 一、前言 随着大模型技术的发展,越来越多的项目需要构建本地知识库系统来支持 RAG(Retrieval-Augmented Generat…

📚 使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础

🧠 一、前言

随着大模型技术的发展,越来越多的项目需要构建本地知识库系统来支持 RAG(Retrieval-Augmented Generation)、Agent 记忆管理、文档检索等功能。

本文将介绍如何使用 Python + SQLAlchemy 搭建一个结构清晰、可扩展性强的知识库数据库,适用于 AI 助手、智能问答系统等场景。


🗂️ 二、项目目标

我们希望创建一个 SQLite 数据库,包含以下四张核心表:

表名描述
knowledge_base存储知识库基本信息(名称、简介、向量库类型、嵌入模型等)
knowledge_file存储每个知识库中的文件信息(文件名、大小、修改时间、切分情况等)
file_doc存储文件切片后的文档片段 ID 及其元数据
summary_chunk存储文档摘要与对应的文档 ID 列表

这些表构成了一个完整的知识库管理系统的基础架构,可用于后续的文档加载、向量化、检索和更新操作。


🔧 三、环境依赖

  • Python 3.12+
  • SQLAlchemy
  • sqlite3(Python 自带)

安装命令如下:

pip install sqlalchemy

🗃️ 四、数据库配置与初始化

我们使用 SQLite 作为本地存储方式,路径如下:

DB_PATH = "/Volumes/PSSD/未命名文件夹/donwload/创建知识库数据库/knowledge_base/info.db"
SQLALCHEMY_DATABASE_URI = f"sqlite:///{DB_PATH}"

通过 SQLAlchemy 的 create_enginesessionmaker 初始化数据库连接池。

engine = create_engine(SQLALCHEMY_DATABASE_URI,json_serializer=lambda obj: json.dumps(obj, ensure_ascii=False),
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base: DeclarativeMeta = declarative_base()

📐 五、ORM 模型定义详解

1. KnowledgeBaseModel —— 知识库基础信息表

字段类型默认值描述
idInteger-主键
kb_nameString(50)-知识库名称
kb_infoString(200)-知识库简介
vs_typeString(50)-向量库类型(如 FAISS、Chroma)
embed_modelString(50)-嵌入模型名称
file_countInteger0文件数量
create_timeDateTimefunc.now()创建时间

2. KnowledgeFileModel —— 知识库文件信息表

字段类型默认值描述
idInteger-主键
file_nameString(255)-文件名
file_extString(10)-扩展名
kb_nameString(50)-所属知识库
document_loader_nameString(50)-文档加载器名称
text_splitter_nameString(50)-文本分割器名称
file_versionInteger1文件版本
file_mtimeFloat0.0最后修改时间
file_sizeInteger0文件大小
custom_docsBooleanFalse是否自定义 docs
docs_countInteger0切分文档数
create_timeDateTimefunc.now()创建时间

3. FileDocModel —— 文件切片文档表

字段类型默认值描述
idInteger-主键
kb_nameString(50)-知识库名称
file_nameString(255)-文件名
doc_idString(50)-向量库文档 ID
meta_dataJSON{}元数据(如来源、页码等)

该表用于记录每个文件被切分后的每一个 chunk 对应的向量 ID。

4. SummaryChunkModel —— 文档摘要与关联表

字段类型默认值描述
idInteger-主键
kb_nameString(50)-知识库名称
summary_contextString(255)-总结文本
summary_idString(255)-总结内容在向量库中的 ID
doc_idsString(1024)-关联的 doc_id 列表
meta_dataJSON{}元数据信息

用于存储文档的总结信息,并与原始 chunk 进行关联。


🧱 六、表操作函数

我们提供了两个主要函数用于管理数据库表:

✅ 1. 创建所有表

def create_tables():print("📌 正在创建所有表...")Base.metadata.create_all(bind=engine)print("✅ 表创建完毕")

⚠️ 2. 清空并重建所有表

def reset_tables():Base.metadata.drop_all(bind=engine)Base.metadata.create_all(bind=engine)print("⚠️ 数据库表已清空并重新创建")

这两个函数非常适合在初始化或调试阶段使用。


📝 七、命令行执行方式

你可以通过命令行参数控制数据库行为:

# 创建数据库表
python 创建表.py --create-tables# 清空并重建数据库表
python 创建表.py --clear-tables

输出示例:

📦 执行参数:create_tables: Trueclear_tables: False
📌 正在创建所有表...
✅ 表创建完毕
✅ 执行完毕,耗时: 0:00:00.123456

💡 八、详细的完整代码

#!/usr/bin/env python
# coding=utf-8""""""import os
import json
import sys
import argparse
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Float, Boolean, JSON, func, create_engine
from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta
from sqlalchemy.orm import sessionmaker# ======== 数据库路径配置 ========SQLALCHEMY_DATABASE_URI = f"sqlite:///{DB_PATH}"# ======== SQLAlchemy 初始化 ========
engine = create_engine(SQLALCHEMY_DATABASE_URI,json_serializer=lambda obj: json.dumps(obj, ensure_ascii=False),
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base: DeclarativeMeta = declarative_base()# ======== ORM 模型定义 ========class KnowledgeBaseModel(Base):__tablename__ = 'knowledge_base'id = Column(Integer, primary_key=True, autoincrement=True, comment='知识库ID')kb_name = Column(String(50), comment='知识库名称')kb_info = Column(String(200), comment='知识库简介(用于Agent)')vs_type = Column(String(50), comment='向量库类型')embed_model = Column(String(50), comment='嵌入模型名称')file_count = Column(Integer, default=0, comment='文件数量')create_time = Column(DateTime, default=func.now(), comment='创建时间')class KnowledgeFileModel(Base):__tablename__ = 'knowledge_file'id = Column(Integer, primary_key=True, autoincrement=True, comment='知识文件ID')file_name = Column(String(255), comment='文件名')file_ext = Column(String(10), comment='文件扩展名')kb_name = Column(String(50), comment='所属知识库名称')document_loader_name = Column(String(50), comment='文档加载器名称')text_splitter_name = Column(String(50), comment='文本分割器名称')file_version = Column(Integer, default=1, comment='文件版本')file_mtime = Column(Float, default=0.0, comment="文件修改时间")file_size = Column(Integer, default=0, comment="文件大小")custom_docs = Column(Boolean, default=False, comment="是否自定义docs")docs_count = Column(Integer, default=0, comment="切分文档数量")create_time = Column(DateTime, default=func.now(), comment='创建时间')class FileDocModel(Base):__tablename__ = 'file_doc'id = Column(Integer, primary_key=True, autoincrement=True, comment='ID')kb_name = Column(String(50), comment='知识库名称')file_name = Column(String(255), comment='文件名称')doc_id = Column(String(50), comment="向量库文档ID")meta_data = Column(JSON, default={})class SummaryChunkModel(Base):__tablename__ = 'summary_chunk'id = Column(Integer, primary_key=True, autoincrement=True, comment='ID')kb_name = Column(String(50), comment='知识库名称')summary_context = Column(String(255), comment='总结文本')summary_id = Column(String(255), comment='总结矢量id')doc_ids = Column(String(1024), comment="向量库id关联列表")meta_data = Column(JSON, default={})# ======== 表操作函数 ========
def create_tables():print("📌 正在创建所有表...")Base.metadata.create_all(bind=engine)print("✅ 表创建完毕")def reset_tables():Base.metadata.drop_all(bind=engine)Base.metadata.create_all(bind=engine)print("⚠️ 数据库表已清空并重新创建")# ======== 命令行入口 ========
if __name__ == "__main__":parser = argparse.ArgumentParser(description="初始化知识库数据库")parser.add_argument("--create-tables",action="store_true",help="创建数据库表")parser.add_argument("--clear-tables",action="store_true",help="清空并重建数据库表")args = parser.parse_args()start_time = datetime.now()print("📦 执行参数:")for arg, value in vars(args).items():print(f"  {arg}: {value}")if args.create_tables:create_tables()if args.clear_tables:reset_tables()print(f"✅ 执行完毕,耗时: {datetime.now() - start_time}")
#python 创建表.py --create-tables
#python 创建表.py --clear-tables

文章转载自:

http://aSlhksP4.tgyzk.cn
http://IOrTV0VA.tgyzk.cn
http://DCsO9EI0.tgyzk.cn
http://mXRrRXDk.tgyzk.cn
http://gMOIuxaE.tgyzk.cn
http://9v1dE3Ep.tgyzk.cn
http://Iaod0yAz.tgyzk.cn
http://P7mZ4kdn.tgyzk.cn
http://MqBbe23K.tgyzk.cn
http://aeKZ2Ofh.tgyzk.cn
http://fANk2PSW.tgyzk.cn
http://KELB1Rr7.tgyzk.cn
http://rkURZyMK.tgyzk.cn
http://p0GlMSEN.tgyzk.cn
http://6QKeSDEV.tgyzk.cn
http://BLxqf4KZ.tgyzk.cn
http://75dTc7Bl.tgyzk.cn
http://32XjAI5C.tgyzk.cn
http://kcGAxDED.tgyzk.cn
http://y6Qha0Vy.tgyzk.cn
http://yqlB3SOz.tgyzk.cn
http://0dWJpZnt.tgyzk.cn
http://pE5dX3mg.tgyzk.cn
http://iG0fdXLZ.tgyzk.cn
http://PFIIPYt6.tgyzk.cn
http://rKxthi0S.tgyzk.cn
http://bTzWYcjK.tgyzk.cn
http://jW3IFP2r.tgyzk.cn
http://mmwVr5KO.tgyzk.cn
http://v66mIFuL.tgyzk.cn
http://www.dtcms.com/wzjs/654081.html

相关文章:

  • 如何创建设计个人网站网站开发是做什么
  • 宁波建网站选哪家好点跳转网站
  • 建立了公司网站化工原料东莞网站建设
  • cn后缀做网站网站开发终止协议书
  • 如何用ps做网站平面图建网站哪家好行业现状
  • 专业微网站手机网站免费
  • 成都网站怎么推广南京建设交易中心网站
  • 包头土右旗建设局网站广州市品牌网站建设公司
  • dedecms 网站地图插件济南集团网站建设流程
  • 企业网站优化包括哪三个层面wordpress中调用分类目录文章列表
  • 最火的传奇手游网站长沙门户网站
  • 湖南餐饮网站建设大学网站建设多少钱
  • 鞍山+网站建设龙岩网站建设运营
  • 2021网站建设前景怎么样网页图片批量下载
  • 紫色网站模板项目网络的关键路径
  • 网站建设教程答允苏州久远网络竞价推广遇到恶意点击怎么办
  • 做网站的是如何赚钱的石家庄网站建设设计
  • 做空气开关那个网站推广比较好山西省这房和城乡建设厅网站
  • 赤峰网站设计个人摄影网站制作
  • 做网站怎么这么贵团工作网站建设意见
  • 温州通业建设工程有限公司网站做网站的前途
  • 企业网站建设专业中交建设设计院有限公司网站
  • 网站建设及推广培训班东莞东城区
  • 专业的网站建设企业中国4a广告公司100强
  • 上海易雅达网站建设公司深圳最新新闻事件
  • 建设网站如何盈利网站搭建交流群
  • 北京网站的建立的杭州化工网站建设
  • 网站制作策划方案最佳线上网站制作模板
  • 设计师接单网站做网站要会哪些软件
  • 网站验证码插件建筑工程网格化管理