本周17个github有趣项目Teo等

17个github有趣的项目、工具和库

1、Teo
Teo 是模式驱动的 Web 服务器框架。服务器端 API 是 Rust、Node.js 和 Python 的原生 API。

亮点和特点

  • 原生于Rust、Node.js和Python
  • 受GraphQL和Prisma启发的创新模式定义
  • 自动数据库迁移
  • 支持MySQL、PostgreSQL、SQLite和MongoDB
  • 生成的ORM类型和接口
  • 为前端生成查询客户端
  • 非常高效且性能卓越
  • 数据清理、转换和验证
  • 内置用户会话
  • 内置权限检查
  • 先进后出的中间件
  • 自定义路由处理程序
  • 生成可定制的管理仪表板
  • 与 AI 工具配合良好


2、KeyEcho
让您的打字更愉快 - 每次击键都会发出悦耳的声音。

  • 最小的 CPU 和内存使用率,即时按键响应
  • 大小小于 5 MB,跨平台兼容
  • 可定制的声音以满足您的喜好

3、migrate-ai
一个 CLI 工具,旨在帮助将代码从各种框架和语言迁移,例如从 Vue 2 迁移到 Vue 3 或从 JavaScript 迁移到 TypeScript。它使用 OpenAI 来帮助执行这些迁移,并包含用于格式化代码和管理配置的功能。

migrate.ai提供了几个命令来帮助您迁移代码。
命令

  • vue2ToVue3:将 Vue 2 代码迁移到 Vue 3。
  • javascriptToTypescript:将 JavaScript 代码迁移到 TypeScript。
  • moveWithPrompt:根据提供的提示运行自定义迁移。

怎么运行?

  1. 设置环境:添加必要的文件.gitignore并清除旧的会话数据。
  2. 获取配置:确保 OpenAI API 密钥可用并获取任何现有的助手配置。
  3. 处理文件:根据迁移任务查找相关文件,并使用 OpenAI 处理每个文件。
  4. 格式化代码:使用 Prettier 根据项目的配置来格式化迁移的代码。
  5. 完成消息:显示对代码库所做更改的摘要。


4、lsp-ai
LSP-AI 可以作为 Github Copilot 的替代品。

一个开源语言服务器,用作 AI 功能的后端,旨在协助和支持软件工程师,而不是取代他们。

LSP-AI 是一款开源语言服务器,可作为后端,使用大型语言模型执行补全,并很快推出其他支持 AI 的功能。由于它是一款语言服务器,因此可与任何支持 LSP 的编辑器配合使用。
LSP-AI 的目标是通过与软件工程师已经熟悉和喜爱的工具集成来协助和增强软件工程师的能力,而不是取代软件工程师。
与其合作的部分编辑人员名单如下:

  • VS Code
  • NeoVim
  • Emacs
  • Helix
  • Sublime

早期研究已经显示出其优势。虽然有几家公司已经发布了像[url=https://cursor.sh/]Cursor[/url]这样的先进人工智能编辑器,但开源社区缺乏直接竞争对手。
LSP-AI 旨在通过提供语言服务器来填补这一空白,该服务器将 AI 驱动的功能集成到我们熟知和喜爱的编辑器中。以下是我们认为 LSP-AI 是必要且有益的原因:

  1. 统一AI功能:
    • 通过将 AI 功能集中到单个后端,LSP-AI 允许受支持的编辑器从这些进步中受益,而无需多余的开发工作。
  • 简化插件开发:
    • LSP-AI 简化了设置 LLM 后端、构建复杂提示等复杂操作。插件开发人员可以专注于增强他们正在开发的特定编辑器,而不必处理后端的复杂性。
  • 增强协作:
    • 提供共享后端可创建一个协作平台,让开源开发人员可以齐聚一堂,共同添加新功能。这种统一的努力可以促进创新并减少重复工作。
  • 广泛兼容性:
    • LSP-AI 支持任何遵守语言服务器协议 (LSP) 的编辑器,确保广泛的编辑器可以利用 LSP-AI 提供的 AI 功能。
  • 灵活的 LLM 后端支持:
    • 目前,LSP-AI 支持 llama.cpp、Ollama、与 OpenAI 兼容的 API、与 Anthropic 兼容的 API 以及与 Mistral AI FIM 兼容的 API,让开发人员可以灵活地选择他们喜欢的后端。这个列表很快就会增加。
  • 面向未来:
    • LSP-AI 致力于紧跟 LLM 驱动软件开发的最新进展。

    5、Omakub
    只需运行一条命令,即可将全新安装的 Ubuntu 转变为配置齐全、美观且现代化的 Web 开发系统。这就是 Omakub 的一行宣传。无需为每个基本工具编写定制配置,只需开始使用或掌握所有最新的命令行工具即可。Omakub 是 Linux 最佳状态的坚定主张。

    观看介绍视频并阅读更多内容,请访问omakub.org

    6、spreadsheet-is-all-you-need
    电子表格中的 nanoGPT 流程 用Excel解释GPT工作原理

    这是我做的一个项目,目的是帮助自己了解 GPT 的工作原理。玩起来非常有趣,尤其是当你试图弄清楚Transformer 内部到底发生了什么时。这帮助我可视化了整个结构和数据流。里面的所有机制、计算、矩阵都是完全交互和可配置的。

    在阅读有关 LLM 的文章时,我意识到 Transformer 的内部机制基本上是一系列按特定顺序连接的矩阵计算。我开始想知道整个过程是否可以在电子表格中表示,因为所有计算都相当简单。我是一个视觉思考者,我想不出更好的方法来做到这一点。然后,经过反复试验,我将 nanoGPT 架构的完整推理流程写入了一个电子表格中。忘掉 Python 吧,结果发现电子表格就是你所需要的。

    它包含所有Transformer 组件,包括:

    1. 嵌入
    2. layer norm
    3. 自我注意力
    4. projection
    5. MLP
    6. softmax
    7. logits

    它基于 Andrej Karpathy 的 NanoGPT 结构,包括大约 85000 个参数。
    这显然是一个非常小的规模,但它既足够复杂,让我能理解它是如何工作的,又不会太大而导致我的电脑崩溃。

    与 chatgpt 不同,该项目是一个基于字符的预测系统,这意味着每个标记都是一个字符,为了降低复杂性,只有字母 A/B/C 被标记化。

    其他内容
    在数字文件 "nanoGPT.numbers "中,你会看到两个标签,一个叫 "无权重",一个叫 "随机权重"。
    它们本质上是一样的,只是 "随机权重 "选项卡中的所有参数都是随机生成的,而 "无权重 "选项卡中的参数则非常整洁,会显示出管道中的奇怪值,但也更清晰,有助于你阅读。这就是我保留这两个选项的原因。
    由于电子表格软件的内部机制,每当您更新 "随机权重 "选项卡中的电子表格时,所有数值都会重新生成(由于计算量很大,电脑会冻结几秒钟,这有点恼人,但您可以将所有数值变成静态值来避免)。

    电子表格不包含实际训练的权重和参数,因此在更新参数之前,不要指望它会为你计算出正确的结果。

    你可能还想知道是否有 excel 或 google sheets 版本,很遗憾,目前还没有。
    这只是因为整个管道太大,我需要多个表格来组织所有内容,而只有数字才能做到这一点。
    我会看看能否在不久的将来用 excel 重新创建这个版本(现在已经添加了,只需查看列表中的 excel 文件)。

    如何阅读/使用
    首先,所有区块都是通过 GPT 架构处理的值或参数,它们用紫色、绿色和橙色编码。

    • 紫色:这些参数应该由训练有素的模型参数替换。
    • 绿色:这些是由输入开始并转化为最终结果的值。
    • 橙色:这些只是用于计算的中间值,放在这里是为了减少混淆。

    其次,您应该从顶部开始,一直向下到底部,页面左侧的标签显示了您所处的阶段。
    这里有三个Transformer ,分别标为 0/1/2,每个Transformer 的结构相同,但包含的参数不同,数据将按顺序依次经过所有Transformer 。

    7、mpa-archive
    将多页面应用程序抓取到 zip 文件中,并从 zip 文件中为多页面应用程序提供服务。MPA 存档器。可用作网站生成器。

    特征

    • 它使用headless puppeteer
    • 使用 CPU 数量/2 线程爬行 http://example.net
    • 进度显示在控制台中
    • 获取 sitemap.txt 和 sitemap.xml 作为种子点
    • 报告不同于 200、304、204 和 206 的 HTTP 状态代码
    • 只抓取网站网址,但会获取外部资源
    • 截取网站资源并保存
    • 生成 mpa/sitemap.txt 和 mpa/sitemap.xml
    • 保存网站源地图
    • 进程退出时可恢复,每 250 个网址保存一个检查点
    • 在提供已抓取的内容时,如果未找到网址,会从源代码中获取该网址并更新压缩包

    SPA 模式
    最初的想法是保存 JavaScript 生成的 HTML,以便搜索引擎索引使用 JavaScript 的网站内容。但这样做的不良后果是,某些应用程序,特别是 SPA 无法运行。要保存原始 HTML 而不是渲染后的 HTML,可以使用 --spa 选项,它将保存原始 HTML 并避免重写链接。

    mpa https://example.net --spa

    • 以增量压缩格式保存,这样就不需要在文件发生变化时重新压缩整个文件,也许已经这样做了?
    • 外部资源的 url 不会被重写为本地资源,如果这样做,从根目录加载的内容就会被破坏
    • 应通过点击链接抓取网站,而不是打开一个完整的标签页

    8、ScrapeGraphAI
    ScrapeGraphAI 是一个网络爬虫 Python 库,使用大型语言模型和直接图逻辑为网站和本地文档(XML,HTML,JSON 等)创建爬取管道。

    有三种主要的爬取管道可用于从网站(或本地文件)提取信息:

    • SmartScraperGraph: 单页爬虫,只需用户提示和输入源;
    • SearchGraph: 多页爬虫,从搜索引擎的前 n 个搜索结果中提取信息;
    • SpeechGraph: 单页爬虫,从网站提取信息并生成音频文件。
    • SmartScraperMultiGraph: 多页爬虫,给定一个提示 可以通过 API 使用不同的 LLM,如 OpenAI,Groq,Azure 和 Gemini,或者使用 Ollama 的本地模型。

    9、piku
    您见过的最小的 PaaS。 Piku 允许您将 git push 部署到您自己的服务器。

    piku受到 的启发dokku,允许您git push对自己的服务器进行部署,无论它们有多小。

    动机
    我们想用类似 Heroku/CloudFoundry 的方式在几块 ARM 板上部署东西,但由于当时 dokku 无法在 ARM 上运行,而且即使是 docker 有时也会矫枉过正,因此我们需要一个更简单的解决方案。

    目前,piku 可以在 ARM 和英特尔架构上部署、管理和独立扩展每台主机上的多个应用程序,并且可以在任何可以运行 Python、nginx 和 uwsgi 的云提供商(以及裸机)上运行。

    10、thread
    使用 React 构建的 AI 驱动的 Jupyter Notebook。

    Thread是一个 Jupyter Notebook,它将 OpenAI 代码解释器的体验与 Python Notebook 熟悉的开发环境相结合。

    借助 Thread,您可以使用自然语言生成单元格、编辑代码、提问或修复错误,同时能够像在常规 Jupyter Notebook 中一样编辑或重新运行代码。

    主要特征

    1.  熟悉Jupyter Notebook编辑体验
    2.  自然语言代码编辑
    3.  生成单元格来回答自然语言问题
    4.  在上下文感知聊天侧栏中提问
    5. 自动解释或修复错误

    为何创建 Thread
    我们最初是在构建Vizly时产生了这个想法的,Vizly 是一款让非技术用户根据数据提出问题的工具。虽然 Vizly 在执行数据转换方面功能强大,但作为工程师,我们常常觉得自然语言没有给我们足够的自由来编辑生成的代码或进一步探索数据。这就是我们创办 Thread 的灵感来源。

    11、Inspectus
    是一款多功能的大型语言模型 可视化工具。它通过易于使用的 Python API 在 Jupyter 笔记本中顺利运行。Inspectus 提供多种视图,提供对语言模型行为的不同见解。

    • 注意力矩阵:可视化标记之间的注意力分数,突出显示每个标记在处理过程中如何关注其他标记。
    • 查询标记热图:显示每个查询与选定关键标记之间的注意力得分总和
    • 关键标记热图:显示每个关键标记与选定查询标记之间的注意力得分总和
    • 维度热图:显示按维度标准化的维度(层和头部)中每个项目的注意力得分总和。

    在此处查看笔记本:自定义注意力图教程

    12、Burr
    Burr 使从简单的 Python 构建块开发做出决策的应用程序(聊天机器人、代理、模拟等)变得容易。pytest

    Burr 适用于任何使用 LLM 的应用程序,并且可以与您喜欢的任何框架集成。Burr 包含一个可以实时跟踪/监控您的系统的 UI。

    文档链接。快速(<3 分钟)视频简介在此。较长的视频简介和演示。博客文章在此

    Burr 如何工作?
    使用 Burr,您可以将应用程序表达为状态机(即图形/流程图)。您可以(并且应该!)将其用于任何需要管理状态、跟踪复杂决策、添加人工反馈或指示幂等、自我持久工作流程的事情。
    核心 API 很简单 - Burr hello-world 看起来像这样(插入你自己的 LLM,或者从gpt -X文档中复制)

    from burr.core import action, State, ApplicationBuilder

    @action(reads=[], writes=["prompt", "chat_history"])
    def human_input(state: State, prompt: str) -> State:
        # your code -- write what you want here!
        return state.update(prompt=prompt).append(chat_history=chat_item)

    @action(reads=[
    "chat_history"], writes=["response", "chat_history"])
    def ai_response(state: State) -> State:
        response = _query_llm(state[
    "chat_history"]) # Burr doesn't care how you use LLMs!
        return state.update(response=content).append(chat_history=chat_item)

    app = (
        ApplicationBuilder()
        .with_actions(human_input, ai_response)
        .with_transitions(
            (
    "human_input", "ai_response"),
            (
    "ai_response", "human_input")
        ).with_state(chat_history=[])
        .with_entrypoint(
    "human_input")
        .build()
    )
    *_, state = app.run(halt_after=[
    "ai_response"], inputs={"prompt": "Who was Aaron Burr, sir?"})
    print(
    "answer:", app.state["response"])

    Burr 包括:

    1. 一个(无依赖)低抽象 Python 库,可让你使用简单的 Python 函数构建和管理状态机
    2. 您可以使用查看执行遥测数据进行自省和调试的 UI
    3. 一组集成,使持久状态、连接遥测和与其他系统集成变得更加容易

    用 Burr 做什么?
    Burr 可用于为多种应用提供动力,包括:

    1. 一个简单的类似 gpt 的聊天机器人
    2. 基于 RAG 的状态聊天机器人
    3. 一款基于大模型的冒险游戏
    4. 用于撰写电子邮件的交互式助手

    Burr 不会告诉您如何构建模型、如何查询 API 或如何管理数据。它将帮助您将所有这些结合在一起,以满足您的需求,并让您轻松遵循系统逻辑。Burr 开箱即用,具有大量集成功能,包括在 streamlit 中构建 UI 和观察状态机执行的工具。

    13、llama-zip
    LLM 驱动的无损压缩工具。

    llama-zip是一个用于无损文本压缩和解压缩的命令行实用程序。它通过利用用户提供的 LLM(大型语言模型)作为算术编码器的概率模型来发挥作用。这允许llama-zip实现结构化或自然语言文本的高压缩比,因为需要更少的位来编码模型以高置信度预测的标记。通过使用滑动上下文窗口,llama-zip不受模型最大上下文长度的限制,可以处理任意长的输入文本。的主要限制llama-zip是压缩和解压缩的速度受模型推理速度的限制。

    llama-zip支持三种操作模式:

    1. 压缩模式-c(由或标志指定--compress):要压缩的字符串可以作为参数提供或通过管道传输到 stdin。压缩输出将以 base64 编码并打印到 stdout。
    2. 解压缩模式-d(由或标志指定--decompress):压缩字符串可以作为参数提供或通过管道传输到 stdin。解压缩的输出将打印到 stdout。
    3. 交互模式-i(由或标志指定--interactive):显示提示,用户可以在其中输入要压缩或解压缩的字符串。输入 base64 编码的字符串时,将对其进行解压缩;否则,将压缩输入的字符串。每次压缩或解压缩操作后,系统都会提示用户输入另一个字符串。要退出交互模式,请按Ctrl+C。

    14、GoJVM
    Go 的 JVM (JNI) 绑定

    有时,在“Java”世界中存在少量(或大量)数据;这可能包括 第三方 Java 库,或者 Go 尚未准备好处理的实现。

    使用GoJVM可以加载动态链接的JVM,并且可以操作Java对象和类, 允许 Go“调用”实例化类,并管理 Java 的部分逻辑。

    15、使用 chatgpt 在 python 中进行文本摘要
    在此代码中,我们探索使用 ChatGPT 执行三个围绕摘要的不同 NLP 任务。我们利用了 openAI 平台。

    16、chromem-go
    可嵌入 Go 的RAG矢量数据库,具有类似 Chroma 的界面,且不依赖第三方。内存中,具有可选的持久性。

    因为chromem-go它是可嵌入的,所以您可以将检索增强生成 (RAG) 和类似的基于嵌入的功能添加到您的 Go 应用程序中,而无需运行单独的数据库。就像使用 SQLite 而不是 PostgreSQL/MySQL/等时一样。
    它不是一个用于连接 Chroma 的库,也不是用 Go 重新实现的。它本身就是一个数据库。

    重点不是规模(数百万个文档)或功能数量,而是最常见用例的简单性和性能。在中端 2020 Intel 笔记本电脑 CPU 上,您可以在 0.3 毫秒内查询 1,000 个文档,在 40 毫秒内查询 100,000 个文档,并且内存分配很少且很少。有关详细信息,请参阅基准测试

    使用矢量数据库,您可以做各种事情:

    • 检索增强生成 (RAG)、问答 (Q&A)
    • 文本和代码搜索
    • 推荐系统
    • 分类
    • 聚类

    大型语言模型 (LLM) 的知识是有限的,即使是那些拥有 300 亿、700 亿甚至更多参数的模型。它们对训练结束后发生的事情一无所知,对未经训练的数据一无所知(例如公司的内部网、Jira/bug 跟踪器、wiki 或其他类型的知识库),甚至连它们知道的数据,它们也常常无法准确再现,而是开始产生幻觉。

    对 LLM 进行微调可能会有所帮助,但它更多的是为了改进 LLM 对特定主题的推理,或重现书面文本或代码的风格。微调不会将知识1:1添加到模型中。细节会丢失或混淆。而且知识截断(关于微调后发生的任何事情)也没有得到解决。

    => 矢量数据库可以作为 LLM 的最新、精确知识:

    1. 您将希望 LLM 了解的相关文档存储在数据库中。
    2. 数据库将嵌入与文档一起存储,您可以提供嵌入,也可以由特定的“嵌入模型”(如 OpenAI 的)创建text-embedding-3-small。
      • chromem-go可以为您做到这一点,并支持开箱即用的多种嵌入提供程序和模型。
  • 之后当你想和LLM谈问题的时候,你首先把问题发到向量数据库中,寻找相似/相关的内容。这叫做“最近邻搜索”。
  • 在向 LLM 提出的问题中,您可以随问题一起提供此内容。
  • LLM 在回答时可以考虑到这些最新的精确内容。
    查看示例代码来观察它的实际运行!

    17、moa
    混合代理 (MoA) 是一种新颖的方法,它利用多个 LLM 的集体优势来提高性能,从而实现最先进的结果。通过采用分层架构(每层由多个 LLM 代理组成),MoA 在 AlpacaEval 2.0 上的表现显著优于 GPT-4 Omni 的 57.5%,得分为 65.1%,而且仅使用开源模型!

    我们首先展示一个交互式演示。它展示了一个简单的多轮聊天机器人,其中的最终响应是从各种参考模型中汇总而来的。

    我们提供脚本来快速重现我们论文中提出的一些结果。为了方便起见,我们包含了AlpacaEval、 MT-BenchFLASK的代码,并进行了必要的修改。我们感谢这些项目创建了基准。