本週25個Github有趣專案SeekStorm等

banq發表於2024-07-13

github上有趣的專案、工具和庫

1、Pongo
類似MongoDB,但基於 Postgres,具有很強的一致性優勢。

Pongo 將 PostgreSQL 視為文件資料庫,得益於 JSONB 支援。與傳統 JSON 型別的純文字儲存不同,JSONB 以二進位制格式儲存 JSON 資料。這一簡單的改變在效能和儲存效率方面帶來了顯著的優勢。

Pongo 使用下面的表結構來儲存集合:

CREATE TABLE IF NOT EXISTS <font>"YourCollectionName" (
    _id           TEXT           PRIMARY KEY,
    data          JSONB          NOT NULL,
    metadata      JSONB          NOT NULL     DEFAULT '{}',
    _version      BIGINT         NOT NULL     DEFAULT 1,
    _partition    TEXT           NOT NULL     DEFAULT 'png_global',
    _archived     BOOLEAN        NOT NULL     DEFAULT FALSE,
    _created      TIMESTAMPTZ    NOT NULL     DEFAULT now(),
    _updated      TIMESTAMPTZ    NOT NULL     DEFAULT now()
)

本質上,Pongo 採用 MongoDB api 並將其轉換為原生 PostgreSQL 查詢。它與MartenFerretDBAWS DocumentDB的概念類似。

查詢:

const result = await users
  .find({ <font>"address.history": { $elemMatch: { street: "Elm St" } } })
  .toArray();

將被翻譯為

SELECT data
FROM <font>"users"
WHERE jsonb_path_exists(
  data,
  '$.address.history<li> ? (@.street ==
"Elm St")'
);

2、SeekStorm
Rust 中的亞毫秒級全文檢索庫與多租戶伺服器。
SeekStorm 高效能搜尋庫

  • 全文搜尋
  • 真正的實時搜尋,對效能的影響微乎其微
  • 增量索引
  • 多執行緒索引和搜尋
  • 無限欄位數量、欄位長度和索引大小
  • 壓縮文件儲存:ZStandard
  • 布林查詢:AND、OR、PHRASE、NOT
  • 欄位過濾
  • BM25F 和 BM25F_Proximity 排名
  • KWIC 片段,突出顯示
  • 十億級指數
  • 獨立於語言
  • API 金鑰
  • 帶有 CORS 的 RESTful API
  • RAM 或記憶體對映檔案中的索引

查詢型別

  • OR 析取聯合
  • AND 會合交叉點
  • "" phrase
  • - NOT

結果型別
  • TopK
  • Count
  • TopKCount

SeekStorm 多租戶搜尋伺服器
  • 使用 RESTful API
  • 多租戶索引管理
  • API金鑰管理
  • 嵌入式 Web 伺服器和 UI
  • 跨平臺:可在 Linux 和 Windows 上執行(其他作業系統未經測試)

為什麼選擇 SeekStorm?

效能更低的延遲、更高的吞吐量、更低的成本和能耗,尤其是對於多欄位和併發查詢。低尾延遲可確保流暢的使用者體驗並防止客戶和收入流失。雖然有些依靠專有硬體加速器(FPGA/ASIC)來提高效能,但 SeekStorm 在商用硬體上透過演算法實現了類似的提升。

一致性在大規模索引期間和之後,沒有不可預測的查詢延遲,因為 SeekStorm 不需要資源密集型的段合併。穩定的延遲 - 由於即時編譯,沒有冷啟動成本,沒有不可預測的垃圾收集延遲。

擴充套件即使對於十億級索引也能保持低延遲、高吞吐量和低 RAM 消耗。無限制的欄位數量、欄位長度和索引大小。

BM25 相比,相關性術語接近度排名提供了更相關的結果。

實時真正的實時搜尋,與 NRT 相反:每個索引文件都可以立即搜尋,甚至在提交之前和提交期間。

為什麼延遲很重要

  • 搜尋速度可能足以滿足單次搜尋的需求。如果低於 10 毫秒,人們將無法分辨延遲。與網際網路網路延遲相比,搜尋延遲可能很小。
  • 但是,當在伺服器或服務中使用許多併發使用者並請求最大擴充套件、吞吐量以及低處理器負載和成本時,搜尋引擎效能仍然很重要。
  • 利用高效能搜尋技術,您可以為大量併發使用者提供服務,以更少的伺服器、更低的成本、更少的能耗和更低的碳足跡實現更低的延遲。
  • 它還能確保即使對於複雜且具有挑戰性的查詢也能實現低延遲:即時搜尋、模糊搜尋、分面搜尋以及非常頻繁的術語的並集/交集/短語。
  • 除了平均延遲之外,我們還需要減少尾部延遲,尾部延遲經常被忽視,但可能會導致客戶和收入的流失,並導致糟糕的使用者體驗。
  • 始終建議為搜尋基礎架構設計足夠的效能空間,以便即使在高併發負載期間也能控制尾部延遲。
  • 此外,即使人類使用者可能不會注意到延遲,但它仍然可能對需要多次查詢的自主股票市場、國防應用或 RAG 產生很大影響。

關鍵詞搜尋仍然是向量搜尋和 LLM 出現的核心組成部分
關鍵字搜尋只是一組文件的過濾器,返回包含某些關鍵字的文件,通常與 BM25 等排名指標結合使用。這是一項非常基本和核心的功能,要大規模實現低延遲非常具有挑戰性。由於該功能非常基礎,因此有無限的應用領域。它是一個元件,可與其他元件一起使用。有些用例今天可以用向量搜尋和 LLM 更好地解決,但對於更多用例來說,關鍵字搜尋仍然是最佳解決方案。關鍵字搜尋精確、無損,而且速度非常快,具有更好的擴充套件性、更好的延遲、更低的成本和能耗。向量搜尋與語義相似性一起工作,返回給定接近度和機率內的結果。

關鍵字搜尋(詞彙搜尋)
如果您搜尋的是精確的結果,如專有名詞、數字、車牌、域名和短語(例如抄襲檢測),那麼關鍵字搜尋就是您的好幫手。另一方面,向量搜尋會將您正在尋找的精確結果埋沒在無數只以某種方式語義相關的結果中。同時,如果您不知道確切的術語,或者您對更廣泛的主題、含義或同義詞感興趣,那麼無論使用什麼確切的術語,關鍵字搜尋都會讓您失望。

向量搜尋
如果您不知道確切的查詢詞,或者您對更廣泛的主題、含義或同義詞感興趣,無論使用什麼確切的查詢詞,向量搜尋都是完美的選擇。但如果您正在尋找確切的術語,例如專有名詞、數字、車牌、域名和短語(例如抄襲檢測),那麼您應該始終使用關鍵字搜尋。向量搜尋只會將您正在尋找的確切結果埋沒在僅以某種方式相關的無數結果中。它具有良好的召回率,但準確率低,延遲較高。它容易出現誤報,例如在抄襲檢測中,因為確切的單詞和詞序會丟失。

向量搜尋不僅使您能夠搜尋相似的文字,還可以搜尋可以轉換為向量的所有內容:文字,影像(面部識別,指紋),音訊,它還能讓您做一些神奇的事情,例如女王 - 女人+男人=國王。

為什麼使用 Rust
我們已將 SeekStorm 程式碼庫(部分)從 C# 移植到 Rust

  • 與 C# 相比,效能提升 2..4 倍(延遲和吞吐量)
  • 首次執行不會很慢(由於即時編譯,沒有冷啟動成本)
  • 穩定的延遲(無垃圾收集延遲)
  • 減少記憶體消耗(直到下一次垃圾收集時才增加)
  • 無框架依賴(CLR 或 JVM 虛擬機器)
  • 提前編譯而非即時編譯
  • 記憶體安全語言

Rust 非常適合處理大資料和/或許多併發使用者的效能關鍵型應用程式。使用注重效能的程式語言,快速演算法將更加出色 

3、autokitteh
AutoKitteh 是一個用於工作流 自動化和協調的開發者平臺。 它易於使用,基於程式碼,是無程式碼/低程式碼平臺(如 Zapier、Workato、Make.com、n8n)的替代平臺,具有無限的靈活性。

此外,它還是一個持久的執行平臺,適用於長期執行且可靠的工作流程。它基於Temporal,隱藏了許多基礎架構和編碼複雜性。
AutoKitteh 可以自託管,並且也可以提供雲服務。

安裝後,AutoKitteh 是一個可擴充套件的“無伺服器”平臺(包含電池),適用於 DevOps、FinOps、MLOps、SOAR、生產力任務、關鍵後端業務流程等。

高階架構

  • 平臺:一個可擴充套件的伺服器,提供用於構建專案(工作流)、部署專案、使用 webhook 或排程程式觸發程式碼、將程式碼作為持久工作流執行以及管理這些工作流的介面。
  • API: AutoKitteh 是一個 API 優先平臺。所有服務都可透過 gPRC / HTTP 獲得。
  • 內建整合: Slack、GitHub、Twilio、ChatGPT、Gemini、Gmail、Google 日曆、HTTP、gRPC 等。新增新整合非常容易。
  • 支援的程式語言: Python、Starlark(Python 的一種方言)和 JavaScript(即將推出)。

AutoKitteh 提供一整套現成的高階工程功能。您可以專注於編寫業務邏輯,我們負責其餘工作:
  • 安全、無縫、雙向 API 整合
  • 使用者友好的管理、監控和除錯
  • 獨立和分散式系統可靠性
  • 自動恢復,不丟失狀態
  • 內建永續性,適合長期執行的工作流程
  • 滿足世界級可擴充套件性需求


4、gpt4all
GPT4All 在日常桌上型電腦和膝上型電腦上私下執行大型語言模型 (LLM)。無需 API 呼叫或 GPU - 您只需下載應用程式即可開始使用

Nomic 的嵌入模型可以將您本地文件和檔案中的資訊帶入您的聊天中。它速度快、在裝置上使用,並且完全私密。


5、karpor
Intelligence for Kubernetes。 世界上最有前途的 Kubernetes 視覺化工具,適用於開發人員和平臺工程團隊。

Kubernetes 生態系統日趨複雜是一個不可否認的趨勢,管理難度越來越大。這種複雜性不僅給運維帶來了更重的負擔,也減緩了使用者對新技術的採用,限制了他們充分發揮 Kubernetes 的潛力。

總體來說,我們希望 Karpor 能夠聚焦搜尋、洞察、AI,突破日益複雜的 Kubernetes 迷宮

它為 Kubernetes 帶來了高階搜尋、 洞察 和AI。它本質上是一個Kubernetes 視覺化工具。藉助 Karpor,您可以跨任何雲獲得對 Kubernetes 叢集的關鍵可見性。

  • 自動同步 自動同步多雲平臺管理的任何叢集中的資源。
  • 強大、靈活的查詢以快速簡便的方式有效檢索和定位您正在尋找的多叢集資源。
  • 合規治理瞭解跨多個叢集和合規標準的合規狀態。
  • 資源拓撲相關資源在其操作環境中的邏輯和拓撲檢視。
  • 自然語言操作使用通俗易懂的語言與 Kubernetes 互動,實現更直觀的操作。
  • 情境化 AI 響應獲得智慧的情境化幫助,瞭解您的需求。
  • Kubernetes 的 AIOps利用 AI 驅動的洞察力實現 Kubernetes 管理自動化和最佳化。

微信群(中文)


6、bashbro
基於 Bash 的網路檔案瀏覽器。 允許您透過網路瀏覽器瀏覽、檢視和傳輸檔案。

基於 Bash 的 Web 檔案瀏覽器 - 允許您透過 Web 瀏覽器遠端瀏覽、流式傳輸、檢視文件和儲存檔案。透過 WSL 在 Windows 上執行。

7、bash-dungeon
在 shell 中的教育性地下城探索遊戲。

用 Bash 編寫的地下城探索遊戲,這個遊戲旨在以有趣和互動的方式教新使用者如何使用他們的 shell。

8、Termino.js
在任何網站上建立基於Web的終端--非常適合遊戲、動畫和現實世界中的應用程式!

Termino.js 是一個高度可定製的前端元件,用純 JavaScript 編寫,非常適合在任何網站上製作基於 Web 的終端動畫、遊戲和應用程式,包括對基於 curses 的應用程式的支援、使用者命令的自定義函式、鍵程式碼和滑鼠事件等等!

特徵

  • 快速:Termino.js 很輕量- 採用純 JavaScript 構建
  • 自包含:無需任何依賴即可工作。
  • 非常適合動畫:您可以輕鬆製作終端動畫並帶入您最喜歡的打字機庫等!
  • 可定製:帶來您自己的 HTML、CSS 並根據您的喜好定製/建立終端!
  • 輸入:支援透過承諾/等待的值返回的問題輸入
  • 多個例項:在一個頁面中建立多個自定義終端!
  • HTML 支援:向您的終端新增 HTML 元素(如連結等)!
  • 自定義函式:輕鬆建立您自己的自定義函式(包括使用者命令函式、鍵程式碼函式和您自己的滑鼠事件函式)
  • 還有更多:選擇無窮無盡!

Termino.js 不是:
  • Termino.js 不是您可以在計算機上下載並使用的可執行應用程式。它是您在瀏覽器中使用的 JavaScript 庫。
  • Termino.js 不是bash模擬器等。Termino.js 可以透過 API 等連線到程序bash 或SSH例項,或者任何允許您透過提供輸入和接收輸出與它們互動的程序。

您可以在此處檢視 Termino.js 的使用演示。

如何使用Termino.js:

<!doctype html>
  <html>
    <head>
    <title>Termino.js Basic Example</title>
    </head>
    <body>
      <div id=<font>"terminal">
      <pre><code class=
"termino-console"></code></pre>
      <textarea class=
"termino-input" rows="1" wrap="hard"></textarea>
      </div>
      <script type=
"module">
        import {Termino} from 'https:
//cdn.jsdelivr.net/gh/MarketingPipeline/Termino.js@latest/dist/termino.min.js';<i>
        let term= Termino(document.getElementById(
"terminal"))
        term.echo(
"Hello world from https://github.com/MarketingPipeline")
      </script>
    </body>
  </html>

9、transfer-thought
用於構建虛擬現實 體驗的網路平臺。

10、pgcli
具有自動完成和語法高亮功能的 Postgres CLI

這是一個具有自動完成和語法高亮功能的 postgres 客戶端。

11、crawlee-python
一個用於 Python 的網頁抓取和瀏覽器自動化庫,用於構建可靠的爬蟲。提取 AI、LLM、RAG 或 GPT 的資料。從網站下載 HTML、PDF、JPG、PNG 和其他檔案。適用於 BeautifulSoup、Playwright 和原始 HTTP。有頭模式和無頭模式。具有代理旋轉功能。

為什麼 Crawlee 是網頁抓取和爬取的首選?
為什麼要使用 Crawlee,而不是僅僅使用帶有 HTML 解析器的隨機 HTTP 庫?

  • HTTP 和無頭瀏覽器抓取的統一介面。
  • 根據可用的系統資源自動並行抓取。
  • 用 Python 編寫,帶有型別提示- 增強 DX(IDE 自動完成)並減少錯誤(靜態型別檢查)。
  • 出現錯誤或被阻止時自動重試。
  • 整合代理輪換和會話管理。
  • 可配置的請求路由- 將 URL 直接傳送到適當的處理程式。
  • 要抓取的URL 的持久佇列。
  • 表格資料和檔案的可插入儲存。
  • 強大的錯誤處理。

為什麼使用 Crawlee 而不是 Scrapy?
  • Crawlee 對無頭瀏覽器爬取(Playwright)具有開箱即用的支援。
  • Crawlee 具有簡約而優雅的介面- 用少於 10 行的程式碼即可設定您的抓取工具。
  • 完整的型別提示覆蓋。
  • 基於標準Asyncio。

12、papaya
適用於讀取密集型工作負載的快速且符合人體工程學的Rust併發雜湊表。

特徵

  • 符合人體工程學的無鎖 API — 不再有死鎖!
  • 強大的原子操作。
  • 在非同步上下文中無縫使用。
  • 極具可擴充套件性,低延遲讀取(參見效能)。
  • 所有操作的延遲均可預測。
  • 高效記憶體使用,並由 提供支援的垃圾收集功能

papaya專為讀取密集型工作負載而構建。因此,讀取操作具有極高的吞吐量,並提供隨併發性擴充套件的一致效能,這意味著papaya在讀取比寫入更常見的工作負載中將表現出色。在寫入密集型工作負載中,papaya儘管這不是其主要用例,但仍將提供具有競爭力的效能。有關詳細資訊,請參閱基準測試

papaya旨在為所有操作提供可預測且一致的延遲。大多數操作都是無鎖的,那些非鎖操作僅在罕見和受限的條件下才會阻塞。papaya還具有增量調整大小的功能。可預測的延遲是效能的重要組成部分,通常不會出現在基準測試中,但對實際使用具有重要影響。


以下是Python庫:

13、whenever
用 Rust 編寫的 Python 現代日期時間庫。

每次使用 Python 的日期時間時,您是否都會祈禱自己沒有混淆 naive 和 awareness?

Whatever可幫助您編寫正確且經過型別檢查的日期時間程式碼。錯誤會變成IDE 中的紅色波浪線,而不是生產中的錯誤。它的速度也比其他第三方庫(通常也比標準庫)快得多。

二十多年來,Pythondatetime已經與現代日期時間庫的期望不符。有兩點尤為突出:

  1. 它並不總是考慮夏令時 (DST)。
  2. 型別無法區分簡單日期時間和感知日期時間。

還有另外兩個流行的第三方庫,但它們沒有(完全)解決這些問題。

為什麼要用everyone?

  • DST 安全演算法
  • Typesafe API 可防止常見錯誤
  • 修復箭頭/鐘擺無法移動的問題
  • 基於已證實且熟悉的概念
  • 無與倫比的效能
  • 經過徹底測試和記錄
  • 支援日期運算
  • 納秒精度
  • Rust!—但有純 Python 後備
  • 支援最新的 GIL 相關改進(實驗性)

程式碼演示:

>>> from whenever import (
...    # 不同用例的顯式型別
...    Instant,
...    ZonedDateTime,
...    LocalDateTime,
... )

# 無需複雜的時區/日曆,即可識別時間時刻
>>> now = Instant.now()
Instant(2024-07-04 10:36:56Z)

簡單明瞭的轉換
>>> now.to_tz(<font>"Europe/Paris")
ZonedDateTime(2024-07-04 12:36:56+02:00[Europe/Paris])

天真
"的本地時間不會意外地與其他型別的時間混合。
# 需要明確地進行轉換並處理歧義。
>>> party_invite = LocalDateTime(2023, 10, 28, hour=22)
>>> party_invite.add(hours=6)
Traceback (most recent call last):
  ImplicitlyIgnoringDST: Adjusting a local datetime implicitly ignores DST [...]
>>> party_starts = party_invite.assume_tz(
"Europe/Amsterdam", disambiguate="earlier")
ZonedDateTime(2023-10-28 22:00:00+02:00[Europe/Amsterdam])

# DST 安全運算
>>> party_starts.add(hours=6)
ZonedDateTime(2022-10-29 03:00:00+01:00[Europe/Amsterdam])

# Comparison and equality
>>> now > party_starts
True

格式化和解析常用格式(ISO8601、RFC3339、RFC2822)
>>> now.format_rfc2822()
"Thu, 04 Jul 2024 10:36:56 GMT"

如果您必須這樣做:您可以將其轉換為/從標準程式庫
>>> now.py_datetime()
datetime.datetime(2024, 7, 4, 10, 36, 56, tzinfo=datetime.timezone.utc)


14、django-sql-explorer
將人工智慧助手與 Django 整合,構建智慧應用程式。

15、0xtools
用於 Linux 系統的 X 射線視覺。

16、FastEmbed
快速、準確、輕量級的 Python 庫,用於實現最先進的嵌入式技術。

17、Satyrn  
一個適用於 Mac 的現代 Jupyter 客戶端。

18、LivePortrait
讓一幅肖像活起來!

19、django-sql-explorer
透過 SQL 查詢在公司內部輕鬆共享資料。

20、Incidental
一個與 Slack 整合的開源事件管理平臺。

21、maelstrom
Maelstrom 是一個快速的 Rust 和 Python 測試執行器,它在自己的容器中執行每個測試。 測試既可在本地執行,也可分佈到叢集作業執行程式中。

22、Crawlee
一個用於構建可靠爬蟲的 Python 網路抓取和瀏覽器自動化庫。 為 AI、LLM、RAG 或 GPT 提取資料。 從網站下載 HTML、PDF、JPG、PNG 和其他檔案。 可與 BeautifulSoup、Playwright 和原始 HTTP 一起使用。 同時支援有頭和無頭模式。 具有代理輪換功能。

23、Posting
一個強大的 HTTP 客戶端,可在終端中使用。

24、Dishka
可愛的 DI 框架,具有作用域和可接受的 API。

25、momentum
後端程式碼的開源行為審計器。
 

相關文章