9 篇文章带有标签 “sqlite”

可以说,在我人生的前四分之一个世纪里,尽管我对编程一直充满痴迷,却始终无法摆脱一种内疚感——我总是在怀疑,自己手头正在构建的工具,是不是早在 30 年或 40 年前就已经被别人用更好、更完美的方式实现了。比如,我可能会自己写一个支持 TSV(标签分隔值)的查找与替换程序,但随后却发现早就有了一个叫 awk 的工具,能一举解决这一整类问题。

而我核心的论点在于:这其实是一个陷阱

必须去重新发明几个轮子,才能触及人类对“造轮子”这件事的认知边界。不是发明一千个轮子,也不是一个都不发明。在大多数领域,重新发明四五个轮子就足够了;而在数学计算机科学这种在认识论上极度严密且成熟的领域,这个数字可能更接近二十三十个。你所重新发明的每一个轮子,以及一路上提出的每一个针对性问题,都会把你推向真正的技术前沿——其速度之快,是把同样的时间花在盲目死板的学习上,甚至是花上其五倍的时间,都无法比拟的。 来源: Simon Willison 的网络日志

Andrew Quinn

需求即代码:ZeroAI 让开发触手可及

ZeroAI 是一个通用的 AI 驱动软件开发助手,能够按照标准化的五步流程开发任意软件应用。从需求理解到代码生成,让 AI 帮你完成整个软件开发周期。

特性

  • 🚀 五步开发流程:需求分析 → 接口设计 → 数据库设计 → 业务逻辑设计 → 代码生成
  • 💾 版本管理:完整的项目版本控制,支持创建、查看和加载历史版本
  • 📝 Word 导出:一键导出项目文档到 Word 格式
  • 🎯 交互式审查:每一步生成结果都可查看、审批或重新生成
  • 📊 实时日志:完整记录 AI 开发过程中的所有操作和输出
  • 🔄 数据持久化:使用 SQLite 数据库存储项目数据

技术栈

核心依赖

  • 框架: Next.js 16 (App Router)
  • 语言: TypeScript
  • 样式: Tailwind CSS 4
  • 数据库: Better-SQLite3
  • AI: OpenAI API (兼容 LongCat 等第三方 API)
  • 文档导出: docx

测试依赖

  • 测试框架: Vitest
  • 测试 UI: Vitest UI
  • React 测试: @testing-library/react
  • DOM 断言: @testing-library/jest-dom
  • 用户事件: @testing-library/user-event
  • 浏览器环境: jsdom

快速开始

环境配置

  1. 复制环境变量模板:
cp .env.example .env

基于 OpenClaw 开发AI助手ZeroAI:五步流程,帮你完成软件开发全流程

ZeroAI 一个通用的 AI 开发助手,能够按照五步流程开发任意软件应用。从需求理解到代码生成,让 AI 帮你开发软件!

😀

一、理解需求

  1. 需要游戏房间创建功能,支持生成唯一的游戏会话标识,用于管理单局游戏的生命周期
  2. 需要玩家状态初始化功能,支持在游戏开始时设定玩家的初始生命值为3、初始分数为0及初始坦克属性
  3. 需要玩家坦克移动逻辑处理功能,支持根据移动指令计算坦克下一帧坐标,并校验与砖墙、钢墙、水域、边界等地图元素的碰撞情况以阻断非法移动
  4. 需要玩家坦克射击逻辑处理功能,支持根据射击指令生成子弹对象,判定子弹飞行轨迹与地图障碍物、敌方坦克及基地的碰撞结果
  5. 需要地图数据加载功能,支持根据关卡ID获取对应的地图布局数据,包含砖墙、钢墙、水域、树林、基地等元素的位置坐标信息
  6. 需要敌方坦克AI控制功能,支持自动控制敌方坦克进行移动路径规划、转向逻辑及自动射击,并实现随关卡递增的难度参数调整
  7. 需要子弹碰撞判定功能,支持区分子弹击中不同目标(砖墙、钢墙、坦克、基地)后的处理逻辑,包括销毁子弹、扣除目标生命值或销毁目标
  8. 需要基地保护判定功能,支持监测基地是否被敌方子弹或玩家误伤击中,一旦击中立即触发游戏失败结算流程
  9. 需要地图元素破坏机制功能,支持普通子弹破坏砖墙、增强子弹破坏钢墙的逻辑,并同步更新地图障碍物状态
  10. 需要道具生成与掉落功能,支持在特定条件触发下(如消灭敌方坦克)随机生成速度提升、火力提升、护盾、生命、炸弹、冻结等道具实体
  11. 需要道具拾取生效功能,支持玩家坦克拾取道具后触发对应效果,包括移动速度增益、射击属性增强、无敌状态、生命值增加、全屏敌人清除及敌人冻结状态
  12. 需要道具效果时效管理功能,支持对速度提升、火力提升、护盾、冻结等具有持续时间的道具效果进行倒计时管理及状态自动清除
  13. 需要分数结算功能,支持根据消灭敌方坦克的类型、数量及通关奖励计算并累加玩家当前得分
  14. 需要生命值管理功能,支持玩家坦克被击毁时扣除生命值,并在生命值归零时触发游戏结束流程
  15. 需要关卡进度管理功能,支持在消灭当前关卡所有敌人后判定通关,并自动切换至下一关卡或触发游戏胜利结算
  16. 需要游戏状态流转控制功能,支持管理游戏从准备开始、进行中、暂停、结束等状态的切换逻辑
  17. 需要游戏音效开关控制功能,支持接收客户端音效设置指令,维护当前游戏会话的音效开启或关闭状态
  18. 需要游戏结算功能,支持在游戏结束或通关时生成包含最终得分、存活状态、通关关卡数等数据的结算报告

NanoClaw 完整文档(含使用、架构、安全与开发)

NanoClaw 是您的专属 AI 助手,可安全运行在容器中轻量设计易于理解,还能根据您的需求自由定制。 与复杂的 OpenClaw 不同,NanoClaw 坚持“小巧易懂”的哲学,仅由单一 Node.js 进程和少量源文件组成,无微服务或复杂配置。其核心安全机制在于利用 Linux 容器(macOS 上支持 Apple Container 或 Docker)进行操作系统级别的隔离,确保智能体只能在挂载的沙箱环境中运行,无法访问宿主机敏感数据。系统支持按群组隔离的持久记忆、可安排的任务调度及网络访问功能。独特的“技能优于功能”架构鼓励用户通过贡献技能脚本(如添加 Telegram 支持)来定制功能,而非直接修改核心代码,从而保持代码库的纯净与个性化适配。

README

NanoClaw Logo

NanoClaw —— 您的专属 Claude 助手,在容器中安全运行。它轻巧易懂,并能根据您的个人需求灵活定制。

我为什么创建这个项目

OpenClaw 是一个令人印象深刻的项目,愿景宏大。但我无法安心使用一个我不了解却能访问我个人隐私的软件。OpenClaw 有 52+ 个模块、8 个配置管理文件、45+ 个依赖项,以及为 15 个渠道提供商设计的抽象层。其安全性是应用级别的(通过白名单、配对码实现),而非操作系统级别的隔离。所有东西都在一个共享内存的 Node 进程中运行。

NanoClaw 用一个您能在 8 分钟内

MCP 服务器示例和实现列表

本页展示了各种模型上下文协议(MCP)服务器,这些服务器展示了该协议的功能和多样性。这些服务器使大型语言模型(LLM)能够安全地访问工具和数据源。

参考实现

这些官方参考服务器展示了核心 MCP 功能和 SDK 用法:

数据和文件系统

  • 文件系统 - 具有可配置访问控制的安全文件操作
  • PostgreSQL - 具有架构检查功能的只读数据库访问
  • SQLite - 数据库交互和商业智能功能
  • Google Drive - Google Drive 的文件访问和搜索功能

开发工具

  • Git - 读取、搜索和操作 Git 仓库的工具
  • GitHub - 仓库管理、文件操作和 GitHub API 集成
  • GitLab - GitLab API 集成,支持项目管理
  • Sentry - 从 Sentry.io 检索和分析问题

Web 和浏览器自动化

  • Brave 搜索 - 使用 Brave 的搜索 API 进行网络和本地搜索
  • Fetch - 为 LLM 使用优化的网络内容获取和转换
  • Puppeteer - 浏览器自动化和网页抓取功能

生产力和通信

  • Slack - 频道管理和消息功能
  • Google Maps - 位置服务、方向和地点详情
  • Memory - 基于知识图谱的持久记忆系统

AI 和专业工具 EverArt - 使用各种模型的 AI 图像生成 Sequential Thinking -

Continue 源码分析 - SQLite 数据库设计

SQLite 数据库设计

CREATE TABLE tag_catalog (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    dir STRING NOT NULL,
    branch STRING NOT NULL,
    artifactId STRING NOT NULL,
    path STRING NOT NULL,
    cacheKey STRING NOT NULL,
    lastUpdated INTEGER NOT NULL
)

CREATE TABLE sqlite_sequence(name,seq)

CREATE TABLE global_cache (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cacheKey STRING NOT NULL,
    dir STRING NOT NULL,
    branch STRING NOT NULL,
    artifactId STRING NOT NULL
)

CREATE TABLE chunks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cacheKey TEXT NOT NULL,
    path TEXT NOT NULL,
    idx INTEGER NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL,
    content TEXT NOT NULL
)

CREATE TABLE chunk_tags (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    tag TEXT NOT NULL,
    chunkId INTEGER NOT NULL,
    FOREIGN KEY (chunkId) REFERENCES chunks (id)
)

CREATE TABLE code_snippets (
    id INTEGER PRIMARY KEY,
    path TEXT NOT NULL,
    cacheKey TEXT NOT NULL,
    content TEXT NOT NULL,
    title TEXT NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL
)

CREATE TABLE code_snippets_tags (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    tag TEXT NOT NULL,
    snippetId INTEGER NOT NULL,
    FOREIGN KEY (snippetId) REFERENCES code_snippets (id)
)

CREATE TABLE lance_db_cache (
    uuid TEXT PRIMARY KEY,
    cacheKey TEXT NOT NULL,
    path TEXT NOT NULL,
    artifact_id TEXT NOT NULL,
    vector TEXT NOT NULL,
    startLine INTEGER NOT NULL,
    endLine INTEGER NOT NULL,
    contents TEXT NOT NULL
)

CREATE TABLE fts_metadata (
    id INTEGER PRIMARY KEY,
    path TEXT NOT NULL,
    cacheKey TEXT NOT NULL,
    chunkId INTEGER NOT NULL,
    FOREIGN KEY (chunkId) REFERENCES chunks (id),
    FOREIGN KEY (id) REFERENCES fts (rowid)
)

CREATE VIRTUAL TABLE fts USING fts5(
    path,
    content,
    tokenize = 'trigram'
)

CREATE TABLE 'fts_data'(id INTEGER PRIMARY KEY, block BLOB)
CREATE TABLE 'fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID
CREATE TABLE 'fts_content'(id INTEGER PRIMARY KEY, c0, c1)
CREATE TABLE 'fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB)
CREATE TABLE 'fts_config'(k PRIMARY KEY, v) WITHOUT ROWID

CREATE UNIQUE INDEX idx_tag_catalog_unique 
     ON tag_catalog(dir, branch, artifactId, path, cacheKey)
CREATE UNIQUE INDEX idx_global_cache_unique 
     ON global_cache(cacheKey, dir, branch, artifactId)

Vanna.AI

Vanna 工作原理

使用检索增强来帮助您使用 LLM 为数据库生成准确的 SQL 查询。

Vanna 的工作过程分为两个简单步骤 - 在您的数据上训练 RAG“模型”,然后提出问题,这些问题将返回 SQL 查询,这些查询可以设置为在您的数据库上自动运行。

  • vn.train(...)

在您的数据上训练 RAG“模型”。这些方法将添加到参考语料库。

  • vn.ask(...)

问问题。这将使用参考语料库生成可以在您的数据库上运行的 SQL 查询。

例子

与您的 SQL 数据库聊天 📊。通过 RAG 使用 LLM 实现准确的文本到 SQL 生成 🔄。

ChromaDB & Ollama from vanna.ollama import Ollama from vanna.chromadb import ChromaDB_VectorStore class MyVanna(ChromaDB_VectorStore, Ollama): def init(self, config=None): ChromaDB_VectorStore.init(self, config=config) Ollama.init(self, config=config) vn = MyVanna(config={'model': 'qwen2:7b'}) vn.

LangChain : SQL Chain & SQL Agent

SQL Chain

from datetime import datetime
from operator import itemgetter

from langchain.chains import create_sql_query_chain

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.runnables import RunnableLambda

from langchain_community.chat_models.tongyi import ChatTongyi
from langchain_community.utilities import SQLDatabase
from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool


// ...