本周Github上6个有趣项目AdonisJs、Vanna 等

本周Github上有趣的项目、工具和图书馆

1、AdonisJS
AdonisJs 是一个注重人体工程学和速度的全栈 Web 框架。它解决了许多 Web 开发方面的麻烦,为您提供了一个简洁、稳定的 API 来构建 Web 应用程序和微服务。

AdonisJS 是 Node.js 的 TypeScript 优先 Web 框架。您可以使用它来创建全栈 Web 应用程序或 JSON API 服务器。

在基础层面上,AdonisJS为您的应用程序提供结构,配置无缝的 TypeScript 开发环境,并提供大量维护良好且记录广泛的软件包。

我们设想使用 AdonisJS 的团队可以花更少的时间在琐碎的决策上,比如为每个小功能挑选 npm 包、编写粘合代码、讨论完美的文件夹结构,以及花更多的时间提供对业务需求至关重要的实际功能。

前端不可知论
AdonisJS 专注于后端,让您可以选择自己喜欢的前端堆栈。

如果您想让事情变得简单,请将 AdonisJS 与传统模板引擎配对以在服务器上生成静态 HTML。或者为您的前端 Vue/React 应用程序创建一个 JSON API。

AdonisJS 旨在为您提供电池,以从头开始创建强大的后端应用程序。无论是发送电子邮件、验证用户输入、执行 CRUD 操作还是验证用户身份。我们负责这一切。

现代且类型安全
AdonisJS 构建在现代 JavaScript 原语之上。我们使用 ES 模块、Node.js 子路径导入别名、用于执行 TypeScript 源的 SWC 以及用于资产捆绑的 Vite。
此外,TypeScript 在设计框架的 API 时也发挥着相当大的作用。例如,AdonisJS 有:

拥抱 MVC
AdonisJS 采用经典的 MVC 设计模式。首先使用函数式 JavaScript API 定义路由,将控制器绑定到它们,并编写逻辑来处理控制器内的 HTTP 请求。

import router from '@adonisjs/core/services/router'
import PostsController from 'controllers/posts_controller'

router.get('posts', [PostsController, 'index'])

控制器可以使用模型从数据库中获取数据并呈现视图(也称为模板)作为响应。


import { HttpContext } from '@adonisjs/core/http'
import Post from 'models/post'

export default class PostsController {
  async index({ view }: HttpContext) {
    const posts = await Post.all()
    return view.render('pages/posts/list', { posts })
  }
}

如果您正在构建 API 服务器,则可以用 JSON 响应替换视图层。但是,处理和响应 HTTP 请求的流程保持不变。
import { HttpContext } from '@adonisjs/core/http'
import Post from 'models/post'

export default class PostsController {
  async index({ view }: HttpContext) {
    const posts = await Post.all()
    return view.render('pages/posts/list', { posts })
    /**
     * Posts array will be serialized to JSON
     * automatically.
     */

    return posts
  }
}

VSCode 扩展
您可以在任何支持 TypeScript 的代码编辑器上开发 AdonisJS 应用程序。不过,我们为 VSCode 开发了多个扩展,以进一步增强开发体验。

  • AdonisJS - 查看应用程序路由、运行 ace 命令、迁移数据库以及直接从代码编辑器读取文档。
  • Edge - 通过支持语法突出显示、自动完成和代码片段来增强您的开发工作流程。
  • Japa - 使用键盘快捷键无需离开代码编辑器即可运行测试,或直接从活动侧边栏运行测试。

2、Vanna
与 SQL 数据库聊天使用 RAG 通过 LLM 生成准确的文本到 SQL。

Vanna 是一个获得 MIT 许可的开源 Python RAG(检索增强生成)框架,用于 SQL 生成和相关功能。

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

  1. 根据您的数据训练 RAG“模型”。
  2. 问问题。

如果您不知道 RAG 是什么,请不要担心——您不需要知道它在幕后是如何工作的就可以使用它。您只需要知道您“训练”了一个模型,该模型存储一些元数据,然后用它来“提出”问题。

训练方式:

  • 使用 DDL 语句进行训练
  • 使用业务术语或定义的文档进行培训
  • 使用 SQL 进行训练

问问题:

vn.ask("What are the top 10 customers by sales?")

你会得到 SQL
SELECT c.c_name as customer_name, sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales FROM snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c ON o.o_custkey = c.c_custkey GROUP BY customer_name ORDER BY total_sales desc limit 10;

如果您已连接到数据库,您将获得该表的数据。

特点

  1. 复杂数据集的高精度。
    • Vanna 的能力与您提供的训练数据相关
    • 更多训练数据意味着大型复杂数据集的准确性更高
  • 安全且私密。
    • 您的数据库内容永远不会发送到法学硕士或矢量数据库
    • SQL 执行发生在您的本地环境中
  • 自学。
    • 如果通过 Jupyter 使用,您可以选择在成功执行的查询上“自动训练”它
    • 如果通过其他界面使用,您可以让界面提示用户提供结果反馈
    • 正确的问题对 SQL 对进行存储以供将来参考,使将来的结果更加准确
  • 支持任何SQL数据库。
    • 该包允许您连接到任何可以使用 Python 连接的 SQL 数据库
  • 选择您的前端。
    • 大多数人都是从 Jupyter Notebook 开始的。
    • 通过 Slackbot、Web 应用程序、Streamlit 应用程序或自定义前端向最终用户公开。

    3、Vocs
    极简文档框架,由 React + Vite 提供支持。

    • Vocs 是一个最小的静态文档生成器,旨在增强您的文档工作流程,采用现代 Web 技术构建。
    • 用Markdown或MDX编写内容,Vocs 将生成一个具有默认主题的静态站点。


    4、pgroll
    Postgres 的零停机时间、可逆模式迁移。

    pgroll是一个开源命令行工具,通过同时提供多个模式版本,为 PostgreSQL 提供安全且可逆的模式迁移。它负责复杂的迁移操作,以确保客户端应用程序在更新数据库架构时继续工作。这包括确保在不锁定数据库的情况下应用更改,并且新旧模式版本同时工作(即使正在进行重大更改!)。这消除了与架构迁移相关的风险,并极大地简化了客户端应用程序的部署,还允许即时回滚。

    特征

    • 零停机迁移(无数据库锁定,无重大更改)。
    • 保持新旧模式版本同时工作。
    • 需要时自动柱回填。
    • 迁移过程中出现问题时即时回滚。
    • 针对现有模式工作,无需从头开始。
    • 适用于 Postgres 14.0 或更高版本。
    • 可与任何 Postgres 服务(包括 RDS 和 Aurora)配合使用。
    • 用 Go 编写,跨平台单一二进制文件,没有外部依赖项。

    pgroll通过使用物理表之上的视图来创建虚拟模式。这允许执行迁移所需的所有必要更改,而不会影响现有客户端。

    pgroll遵循扩展/收缩工作流程。迁移开始时,它将在物理模式中执行所有附加更改(创建表、添加列等),而不会破坏它。

    当需要对列进行重大更改时,它将在物理模式中创建一个新列,并从旧列回填它。此外,配置触发器以确保在整个活动迁移期间对旧/新列的所有写入都传播到其对应列。新列将在新版本的架构中公开。

    启动阶段完成后,新的架构版本就准备就绪,将所有视图映射到正确的表和列。然后,客户端应用程序可以访问新的架构版本,而旧的架构版本仍然可用。现在是开始推出新版本客户端应用程序的时候了。

    当不再有客户端应用程序使用旧架构版本时,迁移即可完成。这将删除旧模式,新模式将是唯一可用的模式。不再需要的表和列将被删除(此时没有客户端使用它),新的表和列将被重命名为其最终名称。在此阶段,客户端应用程序仍然可以工作,因为视图仍然映射到正确的表和列。


    5、Seabird
    原生 Kubernetes 桌面客户端。

    Seabird 是一个本机跨平台 Kubernetes 桌面客户端,可以让您非常轻松地探索集群的资源。我们的目标是在一个简单、无膨胀的用户界面中可视化所有常见资源类型。

    Seabird 适用于所有主要操作系统,包括 Linux、Windows 和 Mac。


    6、llm-app-stack
    LLM 应用的新兴架构。

    大型语言模型(LLM)应用程序堆栈的参考架构,主要是关于上下文情境学习的设计模式。