+2

9 Thư viện mã nguồn mở cần thiết để trở thành nhà phát triển AI

Đối với tôi, AI có ở khắp mọi nơi. Mọi người đều muốn ứng dụng AI. Nhưng đôi khi, thật khó để biết nên thành thạo công cụ nào để triển khai hiệu quả các tính năng AI trong ứng dụng của bạn. Bài viết sẽ cung cấp cho bạn 9 thư viện mã nguồn mở cần thiết để trở thành nhà phát triển AI.

Tìm hiểu thêm: Mã nguồn mở là gì? 5 phần mềm mã nguồn mở ưa chuộng nhất hiện nay

1. Composio: Xây dựng tự động hóa AI nhanh hơn 10 lần

Tôi đã và đang xây dựng các công cụ và tác nhân AI, nhưng độ chính xác của công cụ luôn là một vấn đề cho đến khi tôi gặp Composio.

Composio giúp tích hợp các ứng dụng phổ biến như GitHub, Slack, Jira, Airtable và dễ dàng hơn với các tác nhân AI để xây dựng tự động hóa phức tạp.

Nó xử lý xác thực người dùng và ủy quyền cho các tích hợp thay mặt người dùng của bạn. Vì vậy, bạn có thể xây dựng các ứng dụng AI của mình một cách yên tâm. Và nó được chứng nhận SOC2, do đó bạn hoàn toàn có thể an tâm khi sử dụng Composio.

Để bắt đầu với Composio, bạn có thể làm theo các bước như sau: (áp dụng cho Python)

pip install composio-core

Thêm tích hợp GitHub:

composio add github

Composio sẽ xử lý xác thực người dùng và ủy quyền thay mặt bạn.

Đây là cách bạn có thể sử dụng tích hợp GitHub để gắn sao cho kho lưu trữ:

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}
  ]
)

Chạy tập lệnh Python này để thực thi lệnh đã cho bằng tác nhân.

Composio hoạt động với các framework nổi tiếng như LangChain, LlamaIndex, CrewAi, v.v.

2. Unsloth: Huấn luyện và tinh chỉnh mô hình AI nhanh hơn

Việc huấn luyện và tinh chỉnh các Mô hình Ngôn ngữ Lớn (LLM) là những phần quan trọng của kỹ thuật AI.

Trong nhiều trường hợp, các mô hình độc quyền có thể không phục vụ mục đích. Nó có thể là chi phí, cá nhân hóa hoặc quyền riêng tư. Tại một số điểm, bạn sẽ cần tinh chỉnh mô hình của mình trên một tập dữ liệu tùy chỉnh. Và ngay bây giờ, Unsloth là một trong những thư viện tốt nhất để tinh chỉnh và đào tạo LLM.

Nó hỗ trợ tinh chỉnh đầy đủ, LoRA và QLoRA của các LLM phổ biến, bao gồm Llama-3 và Mistral, và các dẫn xuất của chúng như Yi, Open-hermes, v.v. Nó triển khai các nhân triton tùy chỉnh và công cụ back-prop thủ công để cải thiện tốc độ huấn luyện mô hình.

Để bắt đầu với Unsloth, hãy cài đặt nó bằng cách sử dụng pip và đảm bảo rằng bạn có torch 2.4 và CUDA 12.1.

pip install --upgrade pip
pip install "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"

Sau đây là một tập lệnh đơn giản để đào tạo mô hình Mistral trên một tập dữ liệu bằng cách sử dụng SFT (Tinh chỉnh được giám sát)

from unsloth import FastLanguageModel 
from unsloth import is_bfloat16_supported
import torch
from trl import SFTTrainer
from transformers import TrainingArguments
from datasets import load_dataset
max_seq_length = 2048 # Supports RoPE Scaling internally, so choose any!
# Get LAION dataset
url = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"
dataset = load_dataset("json", data_files = {"train" : url}, split = "train")

# 4bit pre quantized models we support for 4x faster downloading + no OOMs.
fourbit_models = [
    "unsloth/mistral-7b-v0.3-bnb-4bit",      # New Mistral v3 2x faster!
] # More models at https://huggingface.co/unsloth

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/llama-3-8b-bnb-4bit",
    max_seq_length = max_seq_length,
    dtype = None,
    load_in_4bit = True,
)

# Do model patching and add fast LoRA weights
model = FastLanguageModel.get_peft_model(
    model,
    r = 16,
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                      "gate_proj", "up_proj", "down_proj",],
    lora_alpha = 16,
    lora_dropout = 0, # Supports any, but = 0 is optimized
    bias = "none",    # Supports any, but = "none" is optimized
    # [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!
    use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context
    random_state = 3407,
    max_seq_length = max_seq_length,
    use_rslora = False,  # We support rank stabilized LoRA
    loftq_config = None, # And LoftQ
)

trainer = SFTTrainer(
    model = model,
    train_dataset = dataset,
    dataset_text_field = "text",
    max_seq_length = max_seq_length,
    tokenizer = tokenizer,
    args = TrainingArguments(
        per_device_train_batch_size = 2,
        gradient_accumulation_steps = 4,
        warmup_steps = 10,
        max_steps = 60,
        fp16 = not is_bfloat16_supported(),
        bf16 = is_bfloat16_supported(),
        logging_steps = 1,
        output_dir = "outputs",
        optim = "adamw_8bit",
        seed = 3407,
    ),
)
trainer.train()

3. DsPy: Framework để lập trình LLM

Một yếu tố cản trở việc sử dụng LLM trong các trường hợp sử dụng sản xuất là tính chất ngẫu nhiên của chúng. Việc nhắc nhở họ đưa ra phản hồi mong muốn có tỷ lệ thất bại cao đối với các trường hợp sử dụng này.

DsPy đang giải quyết vấn đề này. Thay vì nhắc nhở, nó lập trình các LLM để có được độ tin cậy tối đa.

DSPy đơn giản hóa điều này bằng cách thực hiện hai điều chính:

  • Tách luồng chương trình khỏi các tham số: Tính năng này giữ cho luồng chương trình của bạn (các bước bạn thực hiện) tách biệt với chi tiết về cách thực hiện từng bước (nhắc nhở và trọng số của LM). Điều này giúp bạn dễ dàng quản lý và cập nhật hệ thống của mình hơn.
  • Giới thiệu các trình tối ưu hóa mới: DSPy sử dụng các thuật toán nâng cao tự động tinh chỉnh lời nhắc và trọng số của LM dựa trên mục tiêu của bạn, chẳng hạn như cải thiện độ chính xác hoặc giảm lỗi.

4. TaiPy: Xây dựng ứng dụng web AI nhanh hơn với Python

Taipy là phần mềm mã nguồn mở, dựa trên Python được thiết kế để xây dựng các ứng dụng web AI trong môi trường sản xuất. Nó tăng cường Streamlit và Gradio bằng cách cho phép các nhà phát triển Python triển khai các ứng dụng demo trong sản xuất.

Taipy được thiết kế cho các nhà khoa học dữ liệu và kỹ sư học máy để xây dựng các ứng dụng web dữ liệu & AI.

  • Cho phép xây dựng các ứng dụng web sẵn sàng cho sản xuất
  • Không cần học ngôn ngữ mới. Chỉ cần Python.
  • Tập trung vào dữ liệu và thuật toán AI mà không gặp phải sự phức tạp của việc phát triển và triển khai.

Bắt đầu nhanh chóng với nó bằng cách sử dụng pip.

pip install taipy

Ứng dụng Taipy đơn giản này minh họa cách tạo hệ thống đề xuất phim cơ bản bằng Taipy.

import taipy as tp
import pandas as pd
from taipy import Config, Scope, Gui

# Defining the helper functions

# Callback definition - submits scenario with genre selection
def on_genre_selected(state):
    scenario.selected_genre_node.write(state.selected_genre)
    tp.submit(scenario)
    state.df = scenario.filtered_data.read()

## Set initial value to Action
def on_init(state):
    on_genre_selected(state)

# Filtering function - task
def filter_genre(initial_dataset: pd.DataFrame, selected_genre):
    filtered_dataset = initial_dataset[initial_dataset["genres"].str.contains(selected_genre)]
    filtered_data = filtered_dataset.nlargest(7, "Popularity %")
    return filtered_data

# The main script
if __name__ == "__main__":
    # Taipy Scenario & Data Management

    # Load the configuration made with Taipy Studio
    Config.load("config.toml")
    scenario_cfg = Config.scenarios["scenario"]

    # Start Taipy Core service
    tp.Core().run()

    # Create a scenario
    scenario = tp.create_scenario(scenario_cfg)

    # Taipy User Interface
    # Let's add a GUI to our Scenario Management for a complete application

    # Get list of genres
    genres = [
        "Action", "Adventure", "Animation", "Children", "Comedy", "Fantasy", "IMAX"
        "Romance","Sci-FI", "Western", "Crime", "Mystery", "Drama", "Horror", "Thriller", "Film-Noir","War", "Musical", "Documentary"
    ]

    # Initialization of variables
    df = pd.DataFrame(columns=["Title", "Popularity %"])
    selected_genre = "Action"

    # User interface definition
    my_page = """
# Film recommendation

## Choose your favorite genre
<|{selected_genre}|selector|lov={genres}|on_change=on_genre_selected|dropdown|>

## Here are the top seven picks by popularity
<|{df}|chart|x=Title|y=Popularity %|type=bar|title=Film Popularity|>
    """

    Gui(page=my_page).run()

5. Phidata: Xây dựng tác nhân LLM có bộ nhớ

Thông thường, việc xây dựng các tác nhân hoạt động có thể không dễ dàng như âm thanh. Việc quản lý bộ nhớ, bộ nhớ đệm và thực thi công cụ có thể trở nên khó khăn.

Phidata là một framework mã nguồn mở cung cấp một cách thuận tiện và đáng tin cậy để xây dựng các tác nhân có bộ nhớ dài hạn, kiến thức theo ngữ cảnh và khả năng hành động bằng cách sử dụng các lệnh gọi hàm.

Bắt đầu với Phidata bằng cách cài đặt qua pip

pip install -U phidata

Hãy tạo một trợ lý đơn giản có thể truy vấn dữ liệu tài chính.

from phi.assistant import Assistant
from phi.llm.openai import OpenAIChat
from phi.tools.yfinance import YFinanceTools

assistant = Assistant(
    llm=OpenAIChat(model="gpt-4o"),
    tools=[YFinanceTools(stock_price=True, analyst_recommendations=True, company_info=True, company_news=True)],
    show_tool_calls=True,
    markdown=True,
)
assistant.print_response("What is the stock price of NVDA")
assistant.print_response("Write a comparison between NVDA and AMD, use all tools available.")

Một trợ lý có thể lướt web.

from phi.assistant import Assistant
from phi.tools.duckduckgo import DuckDuckGo

assistant = Assistant(tools=[DuckDuckGo()], show_tool_calls=True)
assistant.print_response("Whats happening in France?", markdown=True)

6. Phoenix: Khả năng quan sát LLM được thực hiện hiệu quả

Việc xây dựng các ứng dụng AI chỉ được hoàn thành bằng cách thêm một lớp khả năng quan sát. Thông thường, một ứng dụng LLM có nhiều phần chuyển động, chẳng hạn như lời nhắc, nhiệt độ mô hình, giá trị p, v.v., có thể ảnh hưởng đáng kể đến kết quả ngay cả khi có một chút thay đổi.

Điều này có thể làm cho các ứng dụng rất không ổn định và không đáng tin cậy. Đây là lúc khả năng quan sát LLM xuất hiện. Phoneix của ArizeAI giúp bạn dễ dàng theo dõi toàn bộ quá trình thực thi LLM.

Nó là một nền tảng khả năng quan sát AI mã nguồn mở được thiết kế để thử nghiệm, đánh giá và khắc phục sự cố. Nó cung cấp:

  • Theo dõi - Theo dõi thời gian chạy ứng dụng LLM của bạn bằng cách sử dụng thiết bị đo đạc dựa trên OpenTelemetry.
  • Đánh giá - Tận dụng LLM để đánh giá hiệu suất ứng dụng của bạn bằng cách sử dụng đánh giá phản hồi và truy xuất.
  • Tập dữ liệu - Tạo các tập dữ liệu được phiên bản của các ví dụ để thử nghiệm, đánh giá và tinh chỉnh.
  • Thử nghiệm - Theo dõi và đánh giá lời nhắc, LLM và thay đổi truy xuất.

Phoenix không phụ thuộc vào nhà cung cấp và ngôn ngữ, hỗ trợ các framework như LlamaIndex, LangChain, DSPy và các nhà cung cấp LLM như OpenAI và Bedrock.

Nó có thể chạy trong nhiều môi trường khác nhau, bao gồm sổ ghi chép Jupyter, máy cục bộ, vùng chứa hoặc đám mây.

Rất dễ dàng để bắt đầu với Phoneix.

pip install arize-phoenix

Để bắt đầu, hãy khởi chạy ứng dụng Phoenix.

import phoenix as px
session = px.launch_app()

Điều này sẽ khởi tạo máy chủ Phoneix.

Giờ đây, bạn có thể thiết lập theo dõi cho ứng dụng AI của mình để gỡ lỗi ứng dụng của bạn khi các dấu vết truyền vào.

Để sử dụng một cú nhấp chuột của LlamaIndex, trước tiên bạn phải cài đặt tích hợp nhỏ:

pip install 'llama-index>=0.10.44'
import phoenix as px
from openinference.instrumentation.llama_index import LlamaIndexInstrumentor
import os
from gcsfs import GCSFileSystem
from llama_index.core import (
    Settings,
    VectorStoreIndex,
    StorageContext,
    set_global_handler,
    load_index_from_storage
)
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
import llama_index

# To view traces in Phoenix, you will first have to start a Phoenix server. You can do this by running the following:
session = px.launch_app()

# Initialize LlamaIndex auto-instrumentation
LlamaIndexInstrumentor().instrument()

os.environ["OPENAI_API_KEY"] = "<ENTER_YOUR_OPENAI_API_KEY_HERE>"

# LlamaIndex application initialization may vary
# depending on your application
Settings.llm = OpenAI(model="gpt-4-turbo-preview")
Settings.embed_model = OpenAIEmbedding(model="text-embedding-ada-002")

# Load your data and create an index. Here we've provided an example of our documentation
file_system = GCSFileSystem(project="public-assets-275721")
index_path = "arize-phoenix-assets/datasets/unstructured/llm/llama-index/arize-docs/index/"
storage_context = StorageContext.from_defaults(
    fs=file_system,
    persist_dir=index_path,
)

index = load_index_from_storage(storage_context)

query_engine = index.as_query_engine()

# Query your LlamaIndex application
query_engine.query("What is the meaning of life?")
query_engine.query("How can I deploy Arize?")

# View the traces in the Phoenix UI
px.active_session().url

Sau khi bạn đã thực hiện đủ số lượng truy vấn (hoặc cuộc trò chuyện) cho ứng dụng của mình, bạn có thể xem chi tiết của giao diện người dùng bằng cách làm mới URL của trình duyệt.

7. Airbyte: Đường ống dữ liệu đáng tin cậy và có thể mở rộng

Dữ liệu rất cần thiết để xây dựng các ứng dụng AI, đặc biệt là trong sản xuất, nơi bạn phải quản lý khối lượng dữ liệu lớn từ nhiều nguồn khác nhau. Airbyte vượt trội trong việc này.

Airbyte cung cấp một danh mục phong phú với hơn 300 trình kết nối cho API, cơ sở dữ liệu, kho dữ liệu và hồ dữ liệu.

Airbyte cũng có một tiện ích mở rộng Python có tên là PyAirByte. Tiện ích mở rộng này hỗ trợ các framework phổ biến như LangChain và LlamaIndex, giúp bạn dễ dàng di chuyển dữ liệu từ nhiều nguồn đến các ứng dụng GenAI của mình.

8. AgentOps: Giám sát và Khả năng quan sát của tác nhân

Cũng giống như các hệ thống phần mềm truyền thống, các tác nhân AI yêu cầu giám sát và quan sát liên tục. Điều này rất quan trọng để đảm bảo hành vi của tác nhân không đi chệch khỏi mong đợi.

AgentOps cung cấp một giải pháp toàn diện để giám sát và quan sát các tác nhân AI.

Nó cung cấp các công cụ để phân tích phát lại, quản lý chi phí LLM, điểm chuẩn tác nhân, tuân thủ và bảo mật và tích hợp nguyên bản với các framework như CrewAI, AutoGen và LangChain.

Bắt đầu với AgentOps bằng cách cài đặt nó thông qua pip.

pip install agentops

Khởi tạo máy khách AgentOps và tự động nhận phân tích về mọi lệnh gọi LLM.

import agentops

# Beginning of program's code (i.e. main.py, __init__.py)
agentops.init( < INSERT YOUR API KEY HERE >)

...

# (optional: record specific functions)
@agentops.record_action('sample function being record')
def sample_function(...):
    ...

# End of program
agentops.end_session('Success')
# Woohoo You're done 🎉

9. RAGAS: Framework để đánh giá RAG

Xây dựng các đường ống RAG rất khó khăn, nhưng việc xác định hiệu quả của chúng trong các tình huống thực tế lại là một vấn đề khác. Bất chấp những tiến bộ trong các framework cho các ứng dụng RAG, việc đảm bảo độ tin cậy của chúng đối với người dùng thực vẫn còn khó khăn, đặc biệt là khi chi phí cho việc truy xuất không chính xác là rất cao.

RAGAS là một framework được thiết kế để giải quyết vấn đề này. Nó giúp bạn đánh giá các đường ống Tạo Tăng cường Truy xuất (RAG) của mình.

Nó giúp bạn tạo tập hợp thử nghiệm tổng hợp, kiểm tra các đường ống RAG của bạn dựa trên chúng và giám sát ứng dụng RAG của bạn trong sản xuất.

Hãy xem tài liệu để hiểu cách sử dụng RAGAS để cải thiện các đường ống RAG mới và hiện có của bạn.

Cảm ơn các bạn đã theo dõi.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí