我在人工智慧領域已經有一段時間了,當時頂級語言模型是 BERT 和 T5。在此期間,進步是瘋狂的。

我們現在擁有更好的模型、工具、框架和機器。

如果你正在考慮進入人工智慧領域,現在是最好的時機。理想的方法是掌握能讓您在競爭中領先的工具。

因此,我編制了一份令人垂涎的開源軟體列表,涵蓋人工智慧開發的各個方面,從人工智慧模型訓練和監控到建立人工智慧代理。

這是開始的Gif

如果還有什麼需要在這裡提及的,請評論。另外,加註星標並為儲存庫做出有意義的貢獻。這可能是提高履歷可信度的最佳策略


  1. Composio 👑:透過將流行應用程式與 AI 整合來實現工作流程自動化

人工智慧代理的時代已經來臨,許多財富 500 強公司已經開始引入代理工作流程。然而,自動化複雜的工作流程絕非易事。

要將人工智慧模型與外部應用程式連接起來,您需要專門的工具集。例如,為了實現軟體開發的自動化,AI 模型必須能夠存取 GitHub、Jira、程式碼解釋器、程式碼索引器、網際網路等。

這就是 Composio 發揮作用的地方。

它可讓您整合 100 多個生產就緒的工具集,例如 Gmail、Google Sheets、Jira、Notion 等,以自動化複雜的現實工作流程。

那麼,您可以按照以下方法開始使用它。

Python

pip install composio-core

新增 GitHub 整合。

composio add github

Composio 代表您處理使用者身份驗證和授權。

以下是如何使用 GitHub 整合來為儲存庫加註星標。

from openai import OpenAI
from composio_openai import ComposioToolSet, App

openai_client = OpenAI(api_key="******OPENAIKEY******")

# Initialise the Composio Tool Set 
composio_toolset = ComposioToolSet(api_key="**\\*\\***COMPOSIO_API_KEY**\\*\\***")

## Step 4
# Get GitHub tools that are pre-configured
actions = composio_toolset.get_actions(actions=[Action.GITHUB_ACTIVITY_STAR_REPO_FOR_AUTHENTICATED_USER])

## Step 5
my_task = "Star a repo ComposioHQ/composio on GitHub"

# Create a chat completion request to decide on the action
response = openai_client.chat.completions.create(
model="gpt-4-turbo",
tools=actions, # Passing actions we fetched earlier.
messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": my_task}
  ]
)

執行此 Python 腳本以使用代理程式執行給定的指令。

JavaScript

您可以使用npmyarnpnpm安裝它。

npm install composio-core

定義一個方法來讓使用者連接他們的 GitHub 帳戶。

import { OpenAI } from "openai";
import { OpenAIToolSet } from "composio-core";

const toolset = new OpenAIToolSet({
  apiKey: process.env.COMPOSIO_API_KEY,
});

async function setupUserConnectionIfNotExists(entityId) {
  const entity = await toolset.client.getEntity(entityId);
  const connection = await entity.getConnection('github');

  if (!connection) {
      // If this entity/user hasn't already connected, the account
      const connection = await entity.initiateConnection(appName);
      console.log("Log in via: ", connection.redirectUrl);
      return connection.waitUntilActive(60);
  }

  return connection;
}

將所需的工具加入 OpenAI SDK 並將實體名稱傳遞給executeAgent函數。

async function executeAgent(entityName) {
  const entity = await toolset.client.getEntity(entityName)
  await setupUserConnectionIfNotExists(entity.id);

  const tools = await toolset.get_actions({ actions: ["github_activity_star_repo_for_authenticated_user"] }, entity.id);
  const instruction = "Star a repo ComposioHQ/composio on GitHub"

  const client = new OpenAI({ apiKey: process.env.OPEN_AI_API_KEY })
  const response = await client.chat.completions.create({
      model: "gpt-4-turbo",
      messages: [{
          role: "user",
          content: instruction,
      }],
      tools: tools,
      tool_choice: "auto",
  })

  console.log(response.choices[0].message.tool_calls);
  await toolset.handle_tool_call(response, entity.id);
}

executeGithubAgent("joey")

執行程式碼並讓代理程式為您完成工作。

Composio 可與 LangChain、LlamaIndex、CrewAi 等著名框架搭配使用。

有關更多訊息,請存取官方文件,有關更複雜的示例,請參閱存儲庫的示例部分。

GIF 構圖

{% cta https://dub.composio.dev/3am496K %}為 Composio 儲存庫加註星標 ⭐{% endcta %}


  1. HuggingFace 的 TRL:透過強化學習訓練 Transformer 語言模型

您通常需要LLMs和擴散模型以特定方式執行,例如加入護欄或確保它們遵循人類指示。這就是您需要 TRL 的地方。

TRL(即 HuggingFace 支援的 Transformer 強化學習)是一個廣泛使用的開源程式庫,可輕鬆微調和對齊語言模型。

它支援多種模型對齊方法,例如使用 PPO(鄰近策略最佳化)的強化學習、監督微調和 DPO(直接偏好最佳化)。

很簡單,Pythonic 介面讓初學者更容易快速上手。

使用pip安裝trl

pip install trl

讓我們快速瀏覽一下SFTTrainer類,以對 LLM 進行監督微調。

# imports
from datasets import load_dataset
from trl import SFTTrainer

# get dataset
dataset = load_dataset("imdb", split="train")

# get trainer
trainer = SFTTrainer(
    "facebook/opt-350m",
    train_dataset=dataset,
    dataset_text_field="text",
    max_seq_length=512,
)

# train
trainer.train()

這個程式碼區塊使用facebook/opt-350m建立一個 SFTTrainer 實例。 train()方法將開始透過 IMDB 資料訓練模型。

查看範例部分以了解更多資訊。

gif 動圖

{% cta https://github.com/huggingface/trl %}為 trl 儲存庫加註星標 ⭐{% endcta %}


Pytorch-Lightning:大規模建置、訓練與微調模型

人工智慧開發離不開 Pytorch,而 Pytorch 監聽則更進一步。

它是一個通用框架,有助於建立和擴展基於 PyTorch 的深度學習專案,提供跨各個領域的培訓、實驗和部署工具。

閃電網路相對於 Pytorch 的幾個好處。

  • 它使 Pytorch 程式碼更具可讀性、結構化和用戶友善性。

  • 透過預先定義的訓練循環和實用程式減少重複程式碼。

  • 使用更少的樣板程式碼簡化培訓、實驗和部署。

使用pip開始使用 Lightning

pip install lightning

使用 Lightning 模組定義自動編碼器。

import os
from torch import optim, nn, utils, Tensor
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor
import lightning as L 

# define any number of nn.Modules (or use your current ones)
encoder = nn.Sequential(nn.Linear(28 * 28, 64), nn.ReLU(), nn.Linear(64, 3))
decoder = nn.Sequential(nn.Linear(3, 64), nn.ReLU(), nn.Linear(64, 28 * 28))

# define the LightningModule
class LitAutoEncoder(L.LightningModule):
    def __init__(self, encoder, decoder):
        super().__init__()
        self.encoder = encoder
        self.decoder = decoder

    def training_step(self, batch, batch_idx):
        # training_step defines the train loop.
        # it is independent of forward
        x, _ = batch
        x = x.view(x.size(0), -1)
        z = self.encoder(x)
        x_hat = self.decoder(z)
        loss = nn.functional.mse_loss(x_hat, x)
        # Logging to TensorBoard (if installed) by default
        self.log("train_loss", loss)
        return loss

    def configure_optimizers(self):
        optimizer = optim.Adam(self.parameters(), lr=1e-3)
        return optimizer

# init the autoencoder
autoencoder = LitAutoEncoder(encoder, decoder)

載入 MNIST 資料。

# setup data
dataset = MNIST(os.getcwd(), download=True, transform=ToTensor())
train_loader = utils.data.DataLoader(dataset)

Lightning Trainer將任何LightningModule與任何資料集“混合”,並抽像出擴展所需的所有工程複雜性。

# train the model (hint: here are some helpful Trainer arguments for rapid idea iteration)
trainer = L.Trainer(limit_train_batches=100, max_epochs=1)
trainer.fit(model=autoencoder, train_dataloaders=train_loader)

有關閃電網路的更多訊息,請查看官方文件

閃電AI GIF

{% cta https://github.com/Lightning-AI/pytorch-lightning %}為閃電 AI 儲存庫加註星標 ⭐{% endcta %}


  1. 權重和偏差:監控 ML 管道的所有部分

假設您想要微調或訓練模型。在這種情況下,您必須追蹤多個元件,例如模型超參數、訓練和驗證指標、資料預處理步驟、模型架構版本和實驗配置。

了解您正在訓練的模型是否走在正確的道路上至關重要。

Wandb 是最好的開源解決方案之一。它允許您追蹤指標並與團隊成員協作。

透過四個步驟開始使用 W&B:

  1. 首先,註冊一個W&B帳戶

  2. 其次,使用pip安裝 W&B SDK。導航到您的終端並鍵入以下命令:

pip install wandb
  1. 三、登入W&B:
wandb.login()
  1. 使用下面的範例程式碼片段作為範本將 W&B 整合到您的 Pytorch Lightning 腳本中:
# This script needs these libraries to be installed:
#   torch, torchvision, pytorch_lightning

import wandb

import os
from torch import optim, nn, utils
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor

import pytorch_lightning as pl
from pytorch_lightning.loggers import WandbLogger

class LitAutoEncoder(pl.LightningModule):
    def __init__(self, lr=1e-3, inp_size=28, optimizer="Adam"):
        super().__init__()

        self.encoder = nn.Sequential(
            nn.Linear(inp_size * inp_size, 64), nn.ReLU(), nn.Linear(64, 3)
        )
        self.decoder = nn.Sequential(
            nn.Linear(3, 64), nn.ReLU(), nn.Linear(64, inp_size * inp_size)
        )
        self.lr = lr

        # save hyperparameters to self.hparamsm auto-logged by wandb
        self.save_hyperparameters()

    def training_step(self, batch, batch_idx):
        x, y = batch
        x = x.view(x.size(0), -1)
        z = self.encoder(x)
        x_hat = self.decoder(z)
        loss = nn.functional.mse_loss(x_hat, x)

        # log metrics to wandb
        self.log("train_loss", loss)
        return loss

    def configure_optimizers(self):
        optimizer = optim.Adam(self.parameters(), lr=self.lr)
        return optimizer

# init the autoencoder
autoencoder = LitAutoEncoder(lr=1e-3, inp_size=28)

# setup data
batch_size = 32
dataset = MNIST(os.getcwd(), download=True, transform=ToTensor())
train_loader = utils.data.DataLoader(dataset, shuffle=True)

# initialise the wandb logger and name your wandb project
wandb_logger = WandbLogger(project="my-awesome-project")

# add your batch size to the wandb config
wandb_logger.experiment.config["batch_size"] = batch_size

# pass wandb_logger to the Trainer
trainer = pl.Trainer(limit_train_batches=750, max_epochs=5, logger=wandb_logger)

# train the model
trainer.fit(model=autoencoder, train_dataloaders=train_loader)

# [optional] Finish the wandb run, which is necessary for the notebook
wandb.finish()

您可以在 Wandb 儀表板上即時觀察指標。

有關更多訊息,請參閱開發人員指南

gif 動態圖

{% cta https://github.com/wandb/wandb %}為 Wandb 儲存庫加註星標 ⭐{% endcta %}


5.MlFlow:機器學習生命週期平台

Mlflow 是跨產業使用的綜合 Mlops 框架。

它可讓您追蹤 AI 模型的整個生命週期,從訓練、微調到部署。 MLflow 提供了一組輕量級API,可與任何現有的機器學習應用程式或函式庫(TensorFlow、PyTorch、XGBoost 等)一起使用,無論您目前在何處執行ML 程式碼(例如在筆記本、獨立應用程式或雲中)

不僅是人工智慧模型,它還可以讓您追蹤和監控使用 LangChain、OpenAI SDK 等建置的人工智慧代理。

它是建立完整的端到端機器學習/人工智慧管道的重要工具。

流動 GIF

{% cta https://github.com/mlflow/mlflow %}為 MlFlow 儲存庫加註星標 ⭐{% endcta %}


  1. Pgvector:Postgres 的開源向量相似度搜尋

RAG 應用程式隨附向量資料庫。向量資料庫將非結構化資料作為高維向量或嵌入進行管理。

許多組織已經使用 Postgres 資料庫來儲存結構化資料,這使得 Pgvector 成為所有這些公司向量資料庫的最佳選擇。

在許多可用選項中,從長遠來看,Pgvector 將是最有意義的。

在 Linux 和 Mac 中安裝 PGVector。

Compile and install the extension (supports Postgres 12+)

cd /tmp
git clone --branch v0.7.4 https://github.com/pgvector/pgvector.git
cd pgvector
make
make install # may need sudo
See the installation notes if you run into issues 

您可以使用DockerHomebrewPGXNAPTYumpkgconda-forge來安裝它。它預裝了Postgres 應用程式和許多託管提供者。還有GitHub Actions的說明。

啟用擴充(在每個要使用它的資料庫中執行一次)

CREATE EXTENSION vector;

建立 3 維向量列

CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));

插入向量

INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

透過L2距離獲取最近鄰居

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

也支援內積 ( <#> )、餘弦距離 ( <=> ) 和 L1 距離 ( <+> ,在 0.7.0 中加入)

注意: <#>傳回有害的內積,因為 Postgres 僅支援對運算子進行ASC順序索引掃描

儲存

建立一個帶有向量列的新表

CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));

或將向量列

ALTER TABLE items ADD COLUMN embedding vector(3);

插入向量

INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

或使用COPY批次載入向量(範例

COPY items (embedding) FROM STDIN WITH (FORMAT BINARY);

更新插入向量

INSERT INTO items (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
    ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;

更新向量

UPDATE items SET embedding = '[1,2,3]' WHERE id = 1;

刪除向量

DELETE FROM items WHERE id = 1;

查詢

取得向量的最近鄰

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

有關 PGVector 的更多訊息,請參閱他們的存儲庫

Pg向量 Gif

{% cta https://github.com/pgvector/pgvector %}為 PgVector 儲存庫加註星標 ⭐{% endcta %}


  1. Llama Cpp:C/C++ 中的 LLM 推理

許多組織希望自己託管或開源LLMs。這將需要高度優化且高效的推理引擎。

Llama Cpp 在這裡最有意義。它由Georgi Gerganov開發,是為LLMs提供服務的最佳開源解決方案之一。

顧名思義,它是用 C++ 建構的,速度很快。它也支援幾乎所有的開放模型,例如Llama 3、Mistral、Gemma、Nous Hermes等。

請參閱本指南,了解如何自行建立 llama cpp 的說明。

呼叫cpp

{% cta https://github.com/ggerganov/llama.cpp %}為 Llama Cpp 儲存庫加註星標 ⭐{% endcta %}


  1. LangGraph:將彈性語言代理程式建構為圖表

LangGraph 無疑是建立高效、可靠的 AI 代理程式的最有能力的框架之一。顧名思義,它遵循循環圖形架構(例如節點和邊)來建立人工智慧代理。

它是浪鏈的延伸,因此擁有龐大的人工智慧開發者社群。

使用pip開始使用它。

pip install -U langgraph

如果您想使用 LangGraph 建立代理/機器人,請查看我們關於建立 Gmail 和日曆助理的詳細部落格。

有關 LangGraph 的更多訊息,請存取文件

有關 LangGraph 的更多訊息,請存取文件

郎圖 GIF

{% cta https://github.com/langchain-ai/langgraph %}為 LangGraph 儲存庫加註星標 ⭐{% endcta %}


  1. Pydantic:使用 Python 類型提示進行資料驗證

這無疑是 Python 生態系統一段時間以來發生的最好的事情之一。

Pydantic 的核心價值主張是資料驗證。

從建構彈性 API 到從LLMs獲得結構化輸出,Pydantic 的受歡迎程度大幅上升。許多公司都在使用 Pydantic,甚至 OpenAI 也宣布使用 Pydantic 從LLMs那裡獲得結構化輸出。

使用pip安裝 Pydantic。

pip install pydantic

一個小例子。

from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str = 'John Doe'
    signup_ts: Optional[datetime] = None
    friends: List[int] = []

external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
user = User(**external_data)
print(user)
#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
print(user.id)
#> 123

查看文件以了解更多資訊。

派丹蒂克 GIF

{% cta https://github.com/pydantic/pydantic %}為 Pydantic 儲存庫加註星標 ⭐{% endcta %}


  1. FastAPI:快速、簡單、易用的Python框架

FastAPI 也因其高效能、簡單性和易於學習而受到廣泛讚譽。自然。

許多人工智慧公司主要使用 FastAPI 來建立 API,使用 FasAPI 來公開端點以從模型進行推斷或建立 Web 應用程式。

掌握 FastAPI 將使您能夠很好地處理 AI 和 API 開發。

它基於 Starllete 建置,使其成為最快的 Python 框架。

使用pip開始使用 FastAPI。

pip install "fastapi[standard]"

建立一個簡單的 API。

from typing import Union

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

使用執行伺服器。

fastapi dev main.py

有關 FastAPI 的更多訊息,請存取文件。

FastAPI 動圖

{% cta https://github.com/fastapi/fastapi %}為 FastAPI 儲存庫加註星標 ⭐{% endcta %}


  1. Neo4j:適合所有人的圖表

Neo4j 在為 AI 應用程式建立知識庫方面擁有獨立的地位。它是唯一提供帶有向量搜尋的圖資料庫的OSS工具。

Neo4j 開創了 GraphRAG,這是一種有效的 RAG 方法,它使用混合檢索方法從知識圖和向量資料庫中提取相關資訊。

事實證明,這比僅使用向量檢索的傳統 RAG 更有效。

使用 GraphRAG 的常見模式之一如下:

  1. 進行向量或關鍵字搜尋以尋找初始節點集。

  2. 遍歷圖以帶回相關節點的資訊。

  3. 或者,使用基於圖形的排名演算法(例如 PageRank)對文件重新排名。

有關更多訊息,請參閱 GraphRAG 上的這篇文章

Neo4j gif

{% cta https://github.com/neo4j/neo4j %}為 Neo4j 儲存庫加註星標 ⭐{% endcta %}


  1. AirByte:可靠且可擴展的資料管道

資料對於建立人工智慧應用至關重要,尤其是在生產環境中,管理來自不同來源的大量資料至關重要。 Airbyte 在處理這個問題上特別有效。

Airbyte 擁有超過 300 個連接器的龐大目錄,支援與各種 API、資料庫、資料倉儲和資料湖的整合。

Airbyte 還包括一個名為 PyAirByte 的 Python 擴充功能。此擴充與 LangChain 和 LlamaIndex 等流行框架相容,使將多個來源的資料傳輸到 GenAI 應用程式變得更加容易。

請參閱此筆記本,了解將 PyAirByte 與 LangChain 結合使用的詳細範例。

有關更多訊息,請參閱文件

空中位元組 GIF

{% cta https://github.com/airbytehq/airbyte %}為 AirByte 儲存庫加註星標 ⭐{% endcta %}


  1. DsPy:程式設計LLMs

DsPy 是另一個被高度低估的框架,它在未來會變得非常大。

他們正在解決目前沒人在做的事情。

LLMs的隨機性使得將它們整合到通常是確定性的傳統軟體系統中具有挑戰性。

這通常導致需要進行大量的即時工程和微調。 DsPy 透過提供更有系統的與LLMs合作的方式來彌補這一差距。

史丹佛大學的 DSPy 透過執行兩項關鍵操作來簡化此過程:

  1. 將程式流程與參數分開:此功能可使程式流程(您採取的步驟)與每個步驟如何完成的詳細資訊(LM 提示和權重)分開。這使得管理和更新您的系統變得更加容易。

  2. 引入新的優化器: DSPy 使用先進的演算法,根據您的目標(例如提高準確性或減少錯誤)自動微調 LM 提示和權重。

請查看此入門筆記本,以了解有關如何使用 DsPy 的更多資訊。

DsPy gif

{% cta https://github.com/stanfordnlp/dspy %}為 DsPy 儲存庫加註星標 ⭐{% endcta %}


感謝您的閱讀!歡迎在評論中分享任何其他重要的人工智慧開源工具。 ✨


原文出處:https://dev.to/composiodev/13-open-source-tools-that-will-make-you-99-more-likely-to-land-any-ai-job-3049


共有 0 則留言