」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼我要製作 TabbyAPI

為什麼我要製作 TabbyAPI

發佈於2024-08-29
瀏覽:303

封面照片由 Jason Leung 在 Unsplash 上拍摄

这可能是许多“我为什么制作”帖子中的第一篇,它解释了我制作一款软件并深入研究未来改进的原因。

今天,我将重点关注我最受欢迎的项目 TabbyAPI。 TabbyAPI 是一个基于 Python 的 FastAPI 服务器,允许用户使用 ExllamaV2 库与大型语言模型(或 LLM)交互,并遵守 OpenAI API 规范。

如果您不确定这些词的含义,那么您就不在人工智能领域。但是,没关系!这篇文章的目的是解释我的经历,而不是将整个厨房水槽的人工智能术语扔给你。

开始

让我回到 2023 年 11 月。人工智能蓬勃发展,公司纷纷发布模型,炒作列车似乎没有尽头。好像我说的是远古时期,但那时的每一天都感觉像是一整月的创新。

在这些新技术的冲击下,我专注于用我那微不足道的 3090ti 来运行它们。是的,“微不足道”这个词是正确的,因为显卡中的 24GB VRAM 对于运行大多数 AI 模型来说是入门级的。此时,运行模型的量化版本已成为常态。量化类似于压缩,允许用户在消费级 GPU 上运行这些大型模型。

我越来越喜欢的格式是 exl2,这种格式专注于速度、优化以及尽可能多地使用显卡。代币以音速生成。所以这个格式很棒!有什么问题吗?

问题是运行模型。 Exl2 是 ExllamaV2 库的一部分,但要运行模型,用户需要 API 服务器。唯一的选择是使用 text-generate-webui (TGW),该程序将每个加载器捆绑到 Gradio webui 中。 Gradio 是一种用于 Python 开发的常见“构建块”UI 框架,通常用于 AI 应用程序。这个设置一度不错,但后来就不行了。

本质上,创造Tabby的主要原因是烦恼。我对加载一个模型所需的工作量感到厌倦。更不用说 Gradio 的开销和 TGW 的大量依赖项。我尊重开发人员,但虽然 TGW 对于许多想要一体化解决方案的人来说有好处,但对我来说却不好。

该计划…

Why I made TabbyAPI
照片由 Glenn Carstens-Peters 在 Unsplash 上拍摄

很简单。创建一个可以位于我的计算机上并且不需要大量臃肿的程序来运行的 API 服务器。听起来很简单,但我真的能做到吗?我在 AI 模型理论方面没有太多经验,但在创建后端服务器和理解 API 设计方面有很多经验。

因此,我需要有人帮忙,但是谁呢?进入turboderp,ExllamaV2 背后的人。自从他创建了这个库以来,他几乎了解模型如何工作背后的一切,这与我的 API 知识非常匹配。此外,另一位名叫 Splice 的感兴趣者由于他使用 Python 的经验也加入了。我们三个人一起创建了 TabbyAPI。

但是计划真的那么简单吗?嗯,有点。虽然我有适合这项工作的人员,但我对 Python 和 API 服务器的知识基本上是 0。我最终使用了一个名为 FastAPI 的网络服务器框架,这让我的生活变得更加轻松。它在 python 社区中也很受欢迎,并且有很好的文档记录。

使用 FastAPI 几天后,我迷上了编写 Python Web 服务器代码。文档非常好,网上有很多示例,开发人员很乐意接受反馈。总的来说,社区很受欢迎,我很乐意更频繁地使用 python 进行网络连接。

几周后,我觉得一切都已准备好公开部署,并决定以我所知道的最佳方式发布所有内容。 YOLO 并将所有内容推送到 GitHub。

问题和更多问题

当向世界发布开源项目时,预计会出现问题……很多问题。人们总是有实用程序不适合的用例。由于 Tabby 是后端服务器,因此出现了很多这样的情况。在这篇文章中,我只会提到一些一开始对我来说很难处理的事情。

一个很大的痛点是我在 RAG 炒作周期的中间发布了 Tabby。 RAG 代表“检索增强生成”,即在获得回复时除了法学硕士知识之外还使用外部文档。问题是这些新技术(例如函数调用)需要完全不同的 API 端点和方法来完成任务。

最重要的是,几乎没有关于这些功能如何在后端实际工作的文档。直到今天,我还没有实现 OpenAI 的工具调用,因为我不知道它是如何工作的。可悲的是,缺乏文档在人工智能世界中很常见,它限制了开发人员在没有事先收集大量信息的情况下在项目中实现代码的能力。

另一个持续了几个月的问题是多用户生成。事实证明,对于开发人员来说,处理服务器上的分布式查询并不是一个容易处理的主题。 FastAPI 为此类工作负载提供支持,但 Tabby 是用同步代码编写的。这意味着我必须学习 Python 异步编程(这绝对不容易)。

最糟糕的是,人工智能开发人员不喜欢异步Python,而网络服务器却接受它。这意味着我必须学习如何以线程的形式在异步和同步库之间进行通信。这是更深入地了解 Python 的线程问题以及异步模型存在的原因。我将在另一篇博文中详细介绍所有这些内容,但希望这能解释我在 2-3 个月内应对这些问题时必须完成的学习量。

最终,turbo 和我一起在 ExllamaV2 库中创建了一个更好的生成器,消除了线程库中的所有多用户问题和奇怪的错误。 9 个月后,可以肯定地说,Tabby 终于成为一个运行模型的稳定程序。

倦怠

Why I made TabbyAPI
照片由 Annie Spratt 在 Unsplash 上拍摄

在我开发软件的整个过程中,我从未经历过倦怠期。这很难相信,因为倦怠在软件世界中是很常见的事情,但在过去的 6 年里我一直想编写一些东西。编码是我最喜欢的消遣,可以帮助我逃避一天的压力。

然而,Tabby 和人工智能社区总体上改变了一切。一开始,我结交了很多朋友,他们在探索蓬勃发展的人工智能领域有着共同的兴趣。我的社区过去几乎每天都会进行语音通话,并专注于分享有关该领域新事物的项目和想法。它让开发变得有趣和愉快,因为我可以与志同道合的人一起出去玩并分享新想法。

不幸的是,这些语音通话的人数开始减少,而且发生的频率也越来越低。由于完成医学院第一年的学业,我也承受着很大的压力。在网络世界中,这对我来说是一段巨大的孤独时期,而正在发育的塔比感觉就像是我医学生生活的负担。最终,这些事件以巨大的挫败感和疲惫感达到了顶峰。为了解决这个问题,我决定无限期地脱离人工智能。

在休息期间,我离开了Tabby,花更多的时间享受我的暑假。实际上,我参与了一些较旧的 iOS 应用程序项目,并与家人共度时光。如今,我又重新开始开发 Tabby。由于人工智能炒作的消退,我以前参与的那些语音通话可能在很长一段时间内不会发生。这是一颗难以下咽的药丸,但我找到了继续开发的不同动机。

我学到的教训

Tabby 是我做过的第一个法学硕士项目。它不知何故在社区中成为了一个流行的名字,我也因此陷入了管理的深渊。了解了这一点,以下是我从这次经历中学到的一些想法。

知道你想迎合谁:任何人都可以使用开源项目。对于 Tabby,我优先考虑有利于项目的易用性、我的朋友和我自己的功能。通过控制这一理念,我可以管理我的日程安排,并且知道要处理哪些功能。

了解你的极限:倦怠并不有趣。不要像我一样,因为用户无数次遇到问题而让自己陷入困境。如果出现沮丧、愤怒或无聊的感觉,请休息一下。偶尔放松一下也不错。

不要为每个人都竭尽全力:一个想法在第一次提出时可能看起来不错,但人们不明白开发人员需要在之后维护这个功能。如果它很痛苦并且不经常使用,那么该功能就不会得到维护,并将成为技术债务。请记住,互联网上的随机陌生人总是有想法。由您或您的团队决定向哪些项目投入脑力。

创造你喜欢和享受的东西:开发人员经常会失去对项目的兴趣,因为维护可能很麻烦并且需要很长时间。如果开发人员不再积极使用该项目,则尤其如此。弄清楚你的动机是什么,如果它改变了,那也没关系。

我可能会在另一篇文章中详细阐述这些内容,因为这可能是它自己的主题,但我觉得在 Tabby 上工作让我对我希望我的项目如何运作有了更多的了解。另外,我对开源社区的了解也得到了扩展。

未来会怎样

我感谢所有每天为改进 TabbyAPI 和 ExllamaV2 做出贡献并提出建议的人们。每个人都帮助完善和改进程序,以便更好地用于一般用途。我是一个人,帮助别人会减轻我的负担。

在可预见的未来,我将减少在 Tabby 上的工作量。该项目仍在顺利进行,许多人都致力于改进它,但我的心理健康更重要,休息会有所帮助。

感谢您阅读这篇回顾展。如果您想了解更多关于我和我所做的事情,请访问 kingbri.dev。

Brian Dashore 的个人网站

Why I made TabbyAPI 治疗实验室 / 虎斑API

兼容 OAI 的 exllamav2 API,既轻量又快速

TabbyAPI

Why I made TabbyAPIWhy I made TabbyAPIWhy I made TabbyAPI

Why I made TabbyAPI

Why I made TabbyAPI

重要的

除了自述文件之外,请阅读 Wiki 页面以获取有关入门的信息!

笔记

需要帮助吗?加入 Discord 服务器并获得 Tabby 角色。提问时请保持礼貌。

基于 FastAPI 的应用程序,允许使用 Exllamav2 后端使用 LLM(大语言模型)生成文本

免责声明

该项目被标记为滚动发布。后续可能会出现错误和更改。请注意,如果需要,您可能需要重新安装依赖项。

TabbyAPI 是一个仅供少量用户使用的业余爱好项目。它不适合在生产服务器上运行。为此,请查看支持这些工作负载的其他后端。

入门

重要的

本自述文件不适用于入门。请阅读维基百科。

阅读 Wiki 了解更多信息。它包含面向用户的安装、配置、采样、API 使用等文档。

支持的型号

在 GitHub 上查看
版本聲明 本文轉載於:https://dev.to/kingbri/why-i-made-tabbyapi-385f?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何在 JavaScript 中刪除字串中的最後一個字元?
    如何在 JavaScript 中刪除字串中的最後一個字元?
    在JavaScript 中修剪字串的最後一個字元您有一個字串“12345.00”,並且希望它返回“12345.0” 」。雖然修剪會刪除空格,但您可以考慮使用substring 函數來完成此任務。使用substring 的解決方案substring 函數允許您從指定的解決方案let str = &qu...
    程式設計 發佈於2024-11-06
  • Go ost 量子密碼網路伺服器
    Go ost 量子密碼網路伺服器
    Golang 1.23 將後量子密碼學引入 Go 標準庫。它非常棒且易於使用。 這篇文章「Go 1.23 中的後量子加密 Web 伺服器」包含一些程式碼範例和後量子加密的背景.. 我總是很好奇我正在使用哪個 TLS 密碼套件和曲線,因此我添加了一個片段來執行此操作(使用反射) 您認為還需要更多的例...
    程式設計 發佈於2024-11-06
  • Js電子表格組件
    Js電子表格組件
    我經常使用的一件事是我們用來組織資料的 Excel 表格。 Jspreadsheet 執行的操作非常相似,但直接在瀏覽器中執行。您無需安裝任何東西,只需打開並使用它即可。對於任何需要以簡單實用的方式組織資訊的人來說,它都是完美的選擇。 簡單易用: 如果您曾經使用過 Excel,您會感到賓至如歸。介...
    程式設計 發佈於2024-11-06
  • 掌握 MySQL:每個開發人員都應該監控的關鍵效能指標
    掌握 MySQL:每個開發人員都應該監控的關鍵效能指標
    监控 MySQL 性能指标和管理数据库并不困难。是的,你没听错。有了适当的监控策略和工具,您终于可以退居二线了。 RED 方法与 Releem 强大的监控功能和易于应用的配置建议相结合,可以为您完成繁重的工作。 红色方法简介 RED方法传统上用于监控Web应用程序和服务的性能,但也可...
    程式設計 發佈於2024-11-06
  • 答:C++中如何產生隨機數?
    答:C++中如何產生隨機數?
    這是一個很好的答案! 回覆回覆:如何在C中產生隨機數? 2012 年 11 月 18 日 ...
    程式設計 發佈於2024-11-06
  • 如何在 JavaScript 中對 HTML 實體進行編碼以便在 CMS 中正確顯示?
    如何在 JavaScript 中對 HTML 實體進行編碼以便在 CMS 中正確顯示?
    在JavaScript 中編碼HTML 實體將內容輸入內容管理系統(CMS) 時,處理® 等特殊字元至關重要確保跨瀏覽器正確顯示。為了解決這個問題,可以使用 JavaScript 來定位這些符號並將其轉換為適當的 HTML 實體。 使用正規表示式,可以透過將特定字元範圍替換為對應的 HTML 實體來...
    程式設計 發佈於2024-11-06
  • 為什麼「float: right」會顛倒 HTML 中的 Span 順序?
    為什麼「float: right」會顛倒 HTML 中的 Span 順序?
    Float:跨度的右反轉順序給定 HTML 標記:<div> <span class="label"><a href="/index/1">Bookmix Offline</a></span>...
    程式設計 發佈於2024-11-06
  • Python 字典如何保持程式碼乾淨、乾燥
    Python 字典如何保持程式碼乾淨、乾燥
    Python 字典和 DRY 原则:初学者快速指南 嘿! ?如果您正在深入研究 Python 编程,您可能偶然发现了字典,并且可能想知道“Python 中的字典到底是什么?它如何帮助我更智能地编写代码?”不用担心,让我们用一种超级简单的方式来分解它。 Python ...
    程式設計 發佈於2024-11-06
  • 使用 Django、Twilio 和 Pinata 建立安全的匿名回饋系統
    使用 Django、Twilio 和 Pinata 建立安全的匿名回饋系統
    在本指南中,我将引导您使用 Django、用于短信通知的 Twilio、用于安全媒体上传的 Pinata 以及用于响应式样式的 TailwindCSS 构建安全匿名反馈系统。在本教程结束时,您将拥有一个功能齐全的反馈系统,用户可以在其中提交反馈、选择上传媒体以及接收短信通知 - 所有这些都考虑到安全...
    程式設計 發佈於2024-11-06
  • 為什麼 Tkinter Entry 的 get 函數不回傳任何內容?
    為什麼 Tkinter Entry 的 get 函數不回傳任何內容?
    Tkinter Entry 的get 函數沒有產生任何結果:綜合解釋當嘗試使用get() 從Tkinter Entry 小部件檢索用戶輸入時函數時,您可能會遇到空返回值。這個看似令人困惑的問題源自於 Tkinter 的非同步特性和函數執行的順序。 在提供的程式碼片段中,您嘗試在建立 Entry 後立...
    程式設計 發佈於2024-11-06
  • 使用 NodeJs 開始使用 RabbitMq
    使用 NodeJs 開始使用 RabbitMq
    RabbitMq簡介 RabbitMq 是一個訊息代理,允許在不同服務之間發送和接收訊息。它是一個實作高階訊息佇列協定(AMQP)的訊息代理程式。用 Erlang 程式語言寫成。 安裝 RabbitMq RabbitMq 可以使用各自的套件管理器安裝在不同的作業系統上。 Rabbi...
    程式設計 發佈於2024-11-06
  • 讓網路更加互聯
    讓網路更加互聯
    讓網路更互聯 - Infometka 如何解決「隱形網站」問題 身為 Web 開發人員和 ???️??????️ 的創建者,我一直熱衷於解決現實世界的問題。今天,我想分享我開發的一個解決方案,我相信它可以為無數網站所有者帶來重大改變,並在某種程度上使互聯網成為一個更加互聯的地方。 ...
    程式設計 發佈於2024-11-06
  • 使用 React 建置 Loop Studio
    使用 React 建置 Loop Studio
    介绍 Loop Studio 是一个沉浸式网站,旨在展示各种虚拟现实 (VR) 项目。使用 React,我们可以有效地管理和渲染不同的组件,以构建有凝聚力和交互式的用户体验。该项目采用简洁的设计,带有导航标题、详细的 VR 部分、创作画廊以及带有社交媒体链接的页脚。 ...
    程式設計 發佈於2024-11-06
  • 如何解決用PHP在CURL中傳送多維數組時出現「陣列到字串轉換」錯誤?
    如何解決用PHP在CURL中傳送多維數組時出現「陣列到字串轉換」錯誤?
    透過CURL 和PHP 發送多維數組使用CURL 發布包含多維數組的表單資料時,遇到「數組到字串轉換」錯誤是一個常見問題。當嘗試使用包含陣列的陣列設定 CURLOPT_POSTFIELDS 時會發生這種情況。 由於 Content-Type 標頭必須是 multipart/form-data 以方便...
    程式設計 發佈於2024-11-06
  • 如何在 Selenium 中使用 \"span:contains(\'String\')\" 解決 InvalidSelectorException?
    如何在 Selenium 中使用 \"span:contains(\'String\')\" 解決 InvalidSelectorException?
    Selenium 中的Invalid SelectorException with "span:contains('String')"在Firefox 中使用Python 中的Selenium 時,嘗試使用CSS 選擇器「span:contains('Co...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3