我開發人工智慧和非人工智慧應用程式已經有一段時間了。雖然建立原型相對簡單,但建立真正為現實世界做好準備的人工智慧系統卻是一項更具挑戰性的任務。
該軟體需要
可靠且維護良好。
遵守安全標準(SOC2、ISO、GDPR 等)。
可擴展、高效能、故障安全等等。
儘管圍繞人工智慧的討論很多,但用於開發生產就緒的人工智慧應用程式的生態系統仍處於早期階段。
然而,由於開源軟體的進步,最近已經取得了相當大的進展。
因此,我整理了一份開源軟體列表,以幫助您建立可用於生產的人工智慧應用程式。
點擊表情符號即可存取該部分。
Weaviate - AI 應用程式的 AI 原生資料庫🧠
Haystack - 建造高效能 RAG 的框架🛠️
Litgpt - 大規模預訓練、微調、部署模式🚀
DsPy - LLM 程式框架💻
Portkey 的網關 - 透過 1 個快速且友善的 API 可靠地通往 200 多個 LLMs 🌐
AirByte - 可靠且可擴展的開源資料管道🔄
AgentOps - 代理商可觀察性與監控🕵️♂️
ArizeAI 的 Phoenix - LLM 可觀察性和評估🔥
vLLM - 簡單、快速、廉價的 LLM 為每個人提供服務💨
Vercel AI SDK - 輕鬆建構人工智慧驅動的產品⚡
LangGraph - 將語言代理建構成圖🧩
Taipy - 建立 Python 資料和 AI Web 應用程式💫
請隨意為儲存庫加註星標並做出貢獻。
我已經建立了LLM工具呼叫的工具,並使用了LangChain和LLamaHub的工具,但我對準確性始終不滿意,並且許多應用程式不可用。
然而,Composio 的情況並非如此。它擁有超過 100 個工具和集成,包括但不限於 Gmail、Google Calendar、GitHub、Slack、Jira 等。
它代表您的使用者處理整合的使用者身份驗證和授權。這樣您就可以安心地建立您的 AI 應用程式。並且它通過了 SOC2 認證。
那麼,您可以按照以下方法開始使用它。
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 腳本以使用代理程式執行給定的指令。
您可以使用npm
、 yarn
或pnpm
安裝它。
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 等著名框架搭配使用。
有關更多訊息,請存取官方文件,有關更複雜的示例,請參閱存儲庫的示例部分。
https://dub.composio.dev/prdapps 為 Composio 儲存庫加註星標 ⭐
如果你想建立一個依賴語義檢索的人工智慧應用程式,你需要一個向量資料庫。與傳統資料庫不同,向量資料庫可以有效管理高維向量嵌入。它對於基於 RAG 的應用程式至關重要。
Weaviate 是領先的 AI 原生向量資料庫之一。它快速、高效、可擴展,並且擁有快速成長的開發者社群。
它擁有適用於多種程式語言的 SDK,包括 Go、Python、JS/TS 和 Java。
開始安裝 Weaviate
pip install -U weaviate-client
導入模組並建立 Weavite 客戶端。
import weaviate
import weaviate.classes as wvc
import os
import requests
import json
# Best practice: store your credentials in environment variables
wcd_url = os.environ["WCD_DEMO_URL"]
wcd_api_key = os.environ["WCD_DEMO_RO_KEY"]
openai_api_key = os.environ["OPENAI_APIKEY"]
client = weaviate.connect_to_weaviate_cloud(
cluster_url=wcd_url, # Replace with your Weaviate Cloud URL
auth_credentials=wvc.init.Auth.api_key(wcd_api_key), # Replace with your Weaviate Cloud key
headers={"X-OpenAI-Api-Key": openai_api_key} # Replace with appropriate header key/value pair for the required API
)
建立集合、載入資料並關閉客戶端。
try:
# ===== define collection =====
questions = client.collections.create(
name="Question",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(), # If set to "none", you must always provide vectors yourself. It could be any other "text2vec-*" also.
generative_config=wvc.config.Configure.Generative.openai() # Ensure the `generative-open` module is used for generative queries.
)
# ===== import data =====
resp = requests.get('https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/jeopardy_tiny.json')
data = json.loads(resp.text) # Load data
question_objs = list()
for i, d in enumerate(data):
question_objs.append({
"answer": d["Answer"],
"question": d["Question"],
"category": d["Category"],
})
questions = client.collections.get("Question")
questions.data.insert_many(question_objs)
finally:
client.close() # Close client gracefully
現在,查詢集合。
try:
# Replace with your code. Close the client gracefully in the final block.
questions = client.collections.get("Question")
response = questions.query.near_text(
query="biology",
limit=2
)
print(response.objects[0].properties) # Inspect the first object
finally:
client.close() # Close client gracefully
有關其他用戶端的更多資訊和實施,請參閱 Weaviate 的文件。
https://github.com/weaviate/weaviate 為 Weaviate 儲存庫加註星標 ⭐
如果我要建立一個真實世界的 RAG 應用程式,Haystack 將是我的選擇。它是一個用於高效建置 RAG 管道的編排框架。它易於使用且可靠,具有所有附加功能,例如重新排名器、文件載入器、向量資料庫支援、RAG 評估器等。
無論是 RAG、問答還是語義搜尋,Haystack 的高度可組合管道都使開發、維護和部署變得輕而易舉。
Haystack 是一個純 Python 框架;您可以使用pip
安裝它。
pip install haystack-ai
現在,使用 Haystack 元件建立您的第一個 RAG Pipeline。
import os
from haystack import Pipeline, PredefinedPipeline
import urllib.request
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"
urllib.request.urlretrieve("https://www.gutenberg.org/cache/epub/7785/pg7785.txt", "davinci.txt")
indexing_pipeline = Pipeline.from_template(PredefinedPipeline.INDEXING)
indexing_pipeline.run(data={"sources": ["davinci.txt"]})
rag_pipeline = Pipeline.from_template(PredefinedPipeline.RAG)
query = "How old was he when he died?"
result = rag_pipeline.run(data={"prompt_builder": {"query":query}, "text_embedder": {"text": query}})
print(result["llm"]["replies"][0])
有關更多教學和概念,請查看他們的文件。
https://github.com/deepset-ai/haystack 為 Haystack 儲存庫加註星標 ⭐
在許多情況下,專有的 LLMs 可能還不夠。這可能是成本或超個性化。您將需要針對您的特定用例進行個人化的 LLMs 。這就是模型微調的用武之地。
Lightning AI 的 LitGPT 可以說是針對自訂資料微調 LLM 的最佳儲存庫。它提供 20 多個 LLMs 可供大規模預訓練、微調和部署。
每個 LLM 從頭開始實施,沒有抽象和完全控制,使其在企業規模上速度極快、極簡且高效能。
它支援 LoRA、QLoRA、FSDP、DPO 和 PPO 等流行配方,以微調 LLM。它還在 Lightning Studio 中提供了帶有 Nvidia Tesla T4 和 Nvidia A10 GPU 的免費 Jupyter 筆記本供您使用。
安裝 LitGPT
pip install 'litgpt[all]'
載入並使用20 多個 LLM中的任一個:
from litgpt import LLM
llm = LLM.load("microsoft/phi-2")
text = llm.generate("Fix the spelling: Every fall, the familly goes to the mountains.")
print(text)
# Corrected Sentence: Every fall, the family goes to the mountains.
查看儲存庫中的各種實作程式碼。
https://github.com/Lightning-AI/litgpt 為 Litgpt 儲存庫加註星標 ⭐
阻礙 LLMs 廣泛整合到現有軟體系統的主要挑戰之一是其隨機性。雖然這些模型為給定任務產生最可能的結果,但這與傳統軟體開發的確定性性質形成鮮明對比。
它需要繁瑣而迅速的工程設計。駭客攻擊和微調。 DsPy 正在彌補這一差距。它提供了與 LLMs 合作的系統方法。
史丹佛大學的 DSPy 透過執行兩項關鍵操作來簡化此過程:
將程式流程與參數分開:此功能可使程式流程(您採取的步驟)與每個步驟如何完成的詳細資訊(LM 提示和權重)分開。這使得管理和更新您的系統變得更加容易。
引入新的優化器: DSPy 使用先進的演算法,根據您的目標(例如提高準確性或減少錯誤)自動微調 LM 提示和權重。
請查看此入門筆記本,以了解有關如何使用 DsPy 的更多資訊。
https://github.com/stanfordnlp/dspy 為 DsPy 儲存庫加註星標 ⭐
在建立人工智慧應用程式時,我們通常依賴不同提供者的託管 LLMs ;如果模型故障怎麼辦?這對企業來說成本可能非常高。您需要一個高效的模型路由器來在停機期間將請求從一個提供者路由到另一個提供者。
PortKey 做的事情完全相同,甚至更多。它為 200 多家 LLM 提供者提供統一的 API。它支援快取、負載平衡、路由和重試,並且可以進行邊緣部署以實現最小延遲。
這是建立容錯、強大的人工智慧系統的重要組成部分。它可用於 Python、Go、Rust、Java、Ruby 和 Javascript。
透過安裝來開始使用 Gateway。
pip install -qU portkey-ai openai
對於 OpenAI 模型,
from openai import OpenAI
from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders
client = OpenAI(
api_key=OPENAI_API_KEY,
base_url=PORTKEY_GATEWAY_URL,
default_headers=createHeaders(
provider="openai",
api_key=PORTKEY_API_KEY
)
)
chat_complete = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user",
"content": "What's a fractal?"}],
)
print(chat_complete.choices[0].message.content)
對於人擇模型,
from openai import OpenAI
from portkey_ai import PORTKEY_GATEWAY_URL, createHeaders
client = OpenAI(
api_key=userdata.get('ANTHROPIC_API_KEY')
base_url=PORTKEY_GATEWAY_URL,
default_headers=createHeaders(
provider="anthropic",
api_key=PORTKEY_API_KEY
),
)
response = client.chat.completions.create(
model="claude-3-opus-20240229",
messages=[{"role": "user",
"content": "What's a fractal?"}],
max_tokens= 512
)
欲了解更多訊息,請存取官方存儲庫。
https://github.com/Portkey-AI/gateway 為 Gateway 儲存庫加註星標 ⭐
資料對於建立人工智慧應用至關重要,在生產中,您需要處理來自多個來源的大量資料。這就是 AIrByte 的閃光點。
Airbyte 為 API、資料庫、資料倉儲和資料湖提供了包含 300 多個連接器的最大目錄。
AirByte 有一個名為 PyAirByte 的 Python 擴充功能。它支援 LangChain 和 LlamaIndex 等流行框架,讓您可以輕鬆地將資料從多個來源移至 GenAI 應用程式。
請參閱此筆記本,以了解有關使用 LangChain 實現 PyAirByte 的詳細資訊。
有關更多訊息,請查看文件。
https://github.com/airbytehq/airbyte 為 Airbyte 儲存庫加註星標 ⭐
與傳統軟體系統一樣,人工智慧代理也需要不斷觀察、監控和改進以獲得最佳效能。
AgentOps 是該領域的領先解決方案。它幫助開發人員建立、評估和監控人工智慧代理。用於建立從原型到生產的代理的工具。
它提供用於回放分析、LLM 成本管理、代理基準測試、合規性和安全性的工具,並與 CrewAI、AutoGen 和 LangChain 等框架進行本地整合。
透過pip
安裝 AgentOps 來開始使用它。
pip install agentops
初始化 AgentOps 用戶端並自動取得每個 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 🎉
有關更多訊息,請參閱他們的文件。
<a href="">https://github.com/AgentOps-AI/agentops</a> 為 AgentOps 儲存庫加註星標 ⭐
隨著您的 AI 應用程式不斷發展,追蹤提示、檢索準確性和 LLM 回應將變得很困難。
Phoenix 是一個開源 AI 可觀察平台,用於實驗、評估和故障排除。它透過視覺化工具提供 OpenTelemetry 追蹤、效能基準測試、版本化資料集、實驗追蹤和推理分析。
Phoenix 與供應商和語言無關,支援 LlamaIndex、LangChain、DSPy 等框架以及 OpenAI 和 Bedrock 等 LLM 供應商。
它可以在各種環境中執行,包括 Jupyter 筆記本、本機電腦、容器或雲端。
Phoneix 上手很簡單。
'pip install arize-phoenix
首先,啟動 Phoenix 應用程式。
import phoenix as px
session = px.launch_app()
這將啟動 Phoneix 伺服器。
現在 Phoenix 已啟動並執行,您可以為 AI 應用程式設定跟踪,以便在跟踪流入時除錯您的應用程式。
若要使用 LlamaIndex 的一鍵功能,您必須先安裝小型整合:
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
一旦您為應用程式執行了足夠數量的查詢(或聊天),您就可以透過刷新瀏覽器 URL 來查看 UI 的詳細資訊。
請參閱他們的文件以獲取更多追蹤、資料集版本控制和評估範例。
https://github.com/Arize-ai/phoenix 為 Phoneix 儲存庫加註星標 ⭐
在很多情況下您想要使用開源人工智慧模型。這可能是為了隱私、方便、避免供應商鎖定。您將需要能夠幫助您在任何地方託管任何人工智慧模型並讓您從中進行推斷的軟體。
vLLM 是一個快速且易於使用的 LLM 推理和服務函式庫。它支援主要硬體供應商 NVIDIA、AMD、Intel 和 Google CPU 和 GPU,具有最先進的推理吞吐量。
它支援模型量化、分散式推理的張量並行性、傳入請求的連續批次等。
您可以透過pip
安裝 vLLM 來輕鬆啟動它。
pip install vllm
用於離線批量推理
**from vllm import LLM, SamplingParams
prompts = [
"Hello, my name is",
"The president of the United States is",
"The capital of France is",
"The future of AI is",
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
llm = LLM(model="facebook/opt-125m")
outputs = llm.generate(prompts, sampling_params)
# Print the outputs.
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")**
您可以在文件中找到更多資訊。
https://github.com/vllm-project/vllm 為 vLLM 儲存庫加註星標 ⭐
如果我現在要建立一個全端 AI 支援的應用程式,我會立即選擇 Vercel AI SDK。
它是一個工具包,旨在讓開發人員使用 React、Vue、NEXT、Sveltekit 等來建立 AI Web 應用程式。
Vercel AI SDK 抽象化了 LLM 供應商,消除了用於建立聊天機器人的樣板程式碼,並提供互動式視覺化元件以提供豐富的客戶體驗。
它由三個部分組成,
AI SDK Core :用於產生文字、結構化資料以及與 LLMs 進行工具互動的單一 API。
AI SDK UI :獨立於框架的掛鉤,用於快速建立聊天和產生 UI。
AI SDK RSC :使用 React Server Components (RSC) 串流傳輸產生 UI 的函式庫。
首先,安裝該庫。
npm install ai
安裝您選擇的模型提供者。
npm install @ai-sdk/openai
呼叫OpenAI API。
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai'; // Ensure OPENAI_API_KEY environment variable is set
async function main() {
const { text } = await generateText({
model: openai('gpt-4-turbo'),
system: 'You are a friendly assistant!',
prompt: 'Why is the sky blue?',
});
console.log(text);
}
main();
有關 Vercel AI SDK 的更多訊息,請存取他們的文件。
https://github.com/vercel/ai 為 Vercel AI SDK 儲存庫加註星標 ⭐
LangGraph 無疑是建立高效、可靠的人工智慧代理程式最有能力的框架之一。顧名思義,它遵循循環圖形架構(例如節點和邊)來建立人工智慧代理。
它是浪鏈的延伸,因此擁有龐大的人工智慧開發者社群。
使用pip
開始使用它。
pip install -U langgraph
如果您想使用 LangGraph 建立代理/機器人,請查看我們關於建立 Gmail 和日曆助理的詳細部落格。
有關 LangGraph 的更多訊息,請存取文件。
https://github.com/langchain-ai/langgraph 為 LangGraph 儲存庫加註星標 ⭐
Taipy 是基於 Python 的開源軟體,用於在生產環境中建立 AI Web 應用程式。它將 Stremlit 和 Gradio 演示提升到一個新的水平,讓您可以建立可用於生產的資料和 AI 應用程式。
Taipy 專為資料科學家和機器學習工程師建立資料和人工智慧 Web 應用程式而設計。
能夠建立生產就緒的 Web 應用程式
無需學習新語言。只需要Python。
專注於資料和人工智慧演算法,無需開發和部署複雜性。
使用pip
輕鬆開始使用。
pip install taipy
這個 Taipy 應用程式演示了一個基本的電影推薦系統。它按類型過濾電影資料集,並按受歡迎程度顯示前七名。這是完整的前端和後端程式碼。
**import taipy as tp
import pandas as pd
from taipy import Config, Scope, Gui
# Taipy Scenario & Data Management
# 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
# 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 full application
# 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()
# Get the 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"
## Set initial value to Action
def on_init(state):
on_genre_selected(state)
# User interface definition
my_page = """
# Film recommendation
## Choose your favourite 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()**
查看文件以了解更多資訊。
https://github.com/avaiga/taipy 為 Taipy 儲存庫加註星標 ⭐
感謝您閱讀這篇文章。如果您有更多想法,請在下面的評論中告訴我。 👇
原文出處:https://dev.to/composiodev/13-must-know-open-source-software-to-build-production-ready-ai-apps-2ch5