本週17個github有趣專案Teo等

banq發表於2024-06-15

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 允許受支援的編輯器從這些進步中受益,而無需多餘的開發工作。
  2. 簡化外掛開發:
    • LSP-AI 簡化了設定 LLM 後端、構建複雜提示等複雜操作。外掛開發人員可以專注於增強他們正在開發的特定編輯器,而不必處理後端的複雜性。
  3. 增強協作:
    • 提供共享後端可建立一個協作平臺,讓開源開發人員可以齊聚一堂,共同新增新功能。這種統一的努力可以促進創新並減少重複工作。
  4. 廣泛相容性:
    • LSP-AI 支援任何遵守語言伺服器協議 (LSP) 的編輯器,確保廣泛的編輯器可以利用 LSP-AI 提供的 AI 功能。
  5. 靈活的 LLM 後端支援:
    • 目前,LSP-AI 支援 llama.cpp、Ollama、與 OpenAI 相容的 API、與 Anthropic 相容的 API 以及與 Mistral AI FIM 相容的 API,讓開發人員可以靈活地選擇他們喜歡的後端。這個列表很快就會增加。
  6. 面向未來:
    • LSP-AI 致力於緊跟 LLM 驅動軟體開發的最新進展。
    <ul>
  7. 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=[<font>"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可以為您做到這一點,並支援開箱即用的多種嵌入提供程式和模型。
    3. 之後當你想和LLM談問題的時候,你首先把問題發到向量資料庫中,尋找相似/相關的內容。這叫做“最近鄰搜尋”。
    4. 在向 LLM 提出的問題中,您可以隨問題一起提供此內容。
    5. LLM 在回答時可以考慮到這些最新的精確內容。 <ul>
      檢視示例程式碼來觀察它的實際執行!
    6. 17、moa
      混合代理 (MoA) 是一種新穎的方法,它利用多個 LLM 的集體優勢來提高效能,從而實現最先進的結果。透過採用分層架構(每層由多個 LLM 代理組成),MoA 在 AlpacaEval 2.0 上的表現顯著優於 GPT-4 Omni 的 57.5%,得分為 65.1%,而且僅使用開源模型!

      我們首先展示一個互動式演示。它展示了一個簡單的多輪聊天機器人,其中的最終響應是從各種參考模型中彙總而來的。

      我們提供指令碼來快速重現我們論文中提出的一些結果。為了方便起見,我們包含了AlpacaEval、 MT-BenchFLASK的程式碼,並進行了必要的修改。我們感謝這些專案建立了基準。

      相關文章