构建生产级 AI 应用的 13 个必知开源软件🧙♂️🪄✨
我开发人工智能和非人工智能应用程序已经有一段时间了。虽然创建原型相对简单,但构建真正适用于现实世界的人工智能系统却是一项更具挑战性的任务。
该软件需要
- 可靠且维护良好。
- 遵守安全标准(SOC2、ISO、GDPR 等)。
- 可扩展、高性能、故障安全等等。
尽管人工智能备受关注,但开发可用于生产的人工智能应用程序的生态系统仍处于早期阶段。
然而,由于开源软件的进步,最近已经取得了相当大的进展。
因此,我编制了一份开源软件列表,以帮助您构建可用于生产的 AI 应用程序。
单击表情符号即可访问该部分。
- Composio 👑 - 工具与 LLM 的无缝集成🔗
- Weaviate -适用于 AI 应用的 AI 原生数据库
- Haystack - 构建高效 RAG 的框架🛠️
- Litgpt - 预训练、微调、大规模部署模型🚀
- DsPy - LLM 编程框架💻
- Portkey 网关 - 通过 1 个快速友好的 API 可靠地路由到 200 多个 LLM 🌐
- AirByte - 可靠且可扩展的开源数据管道🔄
- AgentOps - 代理可观察性和监控🕵️♂️
- ArizeAI 的 Phoenix - LLM 可观察性和评估🔥
- vLLM - 为每个人提供简单、快速且便宜的 LLM 服务💨
- Vercel AI SDK - 轻松构建 AI 驱动的产品⚡
- LangGraph - 以图表形式构建语言代理🧩
- Taipy - 构建 Python 数据和 AI Web 应用程序💫
欢迎随意为存储库加星标并做出贡献。
1. Composio 👑:工具与 LLM 的无缝集成 🔗
我已经构建了自己的 LLM 工具调用工具,并使用了 LangChain 和 LLamaHub 的工具,但我对准确性从未感到满意,而且许多应用程序都无法使用。
然而,Composio 的情况并非如此。它拥有超过 100 种工具和集成,包括但不限于 Gmail、Google 日历、GitHub、Slack、Jira 等。
它代表您的用户处理集成的用户身份验证和授权。因此,您可以安心构建 AI 应用程序。并且它已获得 SOC2 认证。
那么,您可以按照以下方法开始使用它。
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
您可以使用 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 等著名框架兼容。
欲了解更多信息,请访问官方 文档,欲查看更复杂的示例,请参阅存储库的 示例 部分。
2. Weaviate:面向 AI 应用的 AInative 数据库
如果您想构建依赖于语义检索的AI应用程序,则需要一个向量数据库。与传统数据库不同,向量数据库可以高效地管理高维向量嵌入。对于基于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 的文档。
3. Haystack:构建高效 RAG 的框架🛠️
如果我要构建一个实际的 RAG 应用程序,Haystack 会是我的选择。它是一个用于高效构建 RAG 流水线的编排框架。它易于使用且可靠,并具备所有必要的功能,例如重新排序器、文档加载器、向量数据库支持、RAG 求值器等等。
无论是 RAG、问答还是语义搜索,Haystack 高度可组合的管道使开发、维护和部署变得轻而易举。
Haystack 是一个仅适用于 Python 的框架;您可以使用来安装它 pip
。
pip install haystack-ai
现在,使用 Haystack 组件构建您的第一个 RAG 管道。
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])
要了解更多教程和概念,请查看其 文档。
4. LitGPT:预训练、微调、大规模部署模型 🚀
很多情况下,专有的 LLM 可能不够用。原因可能是成本或高度个性化。你需要针对特定用例定制的 LLM。这时,模型微调就派上用场了。
Lightning AI 的 LitGPT 可以说是目前最好的基于自定义数据微调 LLM 的存储库。它提供了 20 多个 LLM 供预训练、微调和大规模部署。
每个 LLM 都是从头开始实现的,没有抽象和完全控制,这使得它在企业规模上速度极快、精简且性能卓越。
它支持 LoRA、QLoRA、FSDP、DPO 和 PPO 等常用方案,用于对 LLM 进行微调。此外,它还提供免费 Jupyter Notebook,可在 Lightning Studio 中使用 Nvidia Tesla T4 和 Nvidia A10 GPU 进行体验。
安装 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.
查看存储库中的各种实现代码。
5. DsPy:LLM 编程框架
阻碍 LLM 广泛集成到现有软件系统的主要挑战之一是其随机性。虽然这些模型能够为给定任务生成最可能的结果,但这与传统软件开发的确定性形成了鲜明对比。
它需要繁琐而迅速的工程设计、不断的修改和微调。DsPy 正在弥补这一差距。它提供了一种系统化的 LLM 学习方法。
斯坦福大学的 DSPy 通过两件关键的事情简化了这一过程:
- 将程序流程与参数分离:此功能将程序流程(您执行的步骤)与每个步骤的具体执行细节(LM 提示和权重)分离。这使得您的系统管理和更新更加便捷。
- 引入新的优化器: DSPy 使用先进的算法,根据您的目标自动微调 LM 提示和权重,例如提高准确性或减少错误。
查看此入门笔记本,了解有关如何使用 DsPy 的更多信息。
6. Portkey 网关:通过统一的 API 可靠地路由到 200 多个 LLM 🌐
在构建 AI 应用程序时,我们通常依赖于不同提供商托管的 LLM;如果模型宕机怎么办?这会给企业带来巨大的成本。您需要一个高效的模型路由器,在宕机期间将请求从一个提供商路由到另一个提供商。
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
)
欲了解更多信息,请访问官方存储库。
7. AirByte:可靠且可扩展的开源数据管道🔄
数据对于构建 AI 应用至关重要,在生产环境中,您需要处理来自多个来源的大量数据。这正是 AIrByte 的优势所在。
Airbyte 提供涵盖300 多个 API、数据库、数据仓库和数据湖连接器的庞大 目录
。AirByte 拥有一个名为 PyAirByte 的 Python 扩展。它支持 LangChain 和 LlamaIndex 等热门框架,让您能够便捷地将数据从多个来源迁移到您的 GenAI 应用程序。
查看此笔记本了解有关使用 LangChain 实现 PyAirByte 的详细信息。
欲了解更多信息,请查看文档。
8. AgentOps:代理可观察性和监控
与传统软件系统一样,人工智能代理也需要不断观察、监控和改进以获得最佳性能。
AgentOps 是该领域的领先解决方案。它帮助开发者构建、评估和监控 AI 代理。它提供了从原型到生产环境的代理构建工具。
它提供重放分析、LLM 成本管理、代理基准测试、合规性和安全性工具,并与 CrewAI、AutoGen 和 LangChain 等框架本地集成。
通过安装来开始使用 AgentOps pip
。
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 🎉
请参阅他们的文档以了解更多信息。
9. ArizeAI 的 Phoenix:LLM 可观察性和评估🔥
随着您的 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 的详细信息。
请参阅他们的文档以获取更多跟踪、数据集版本控制和评估示例。
10. VLLM:为每个人提供简单、快速且便宜的 LLM 服务💨
很多情况下,你都会想要使用开源 AI 模型。这可能是为了保护隐私、方便使用,也可能是为了避免供应商锁定。你需要一款能够帮助你在任何地方托管任何 AI 模型并进行推断的软件。
vLLM 是一个快速易用的 LLM 推理和服务库。它支持主流硬件供应商 NVIDIA、AMD、Intel 和 Google 的 CPU 和 GPU,并具备一流的推理吞吐量。
它支持模型量化、分布式推理的张量并行、传入请求的连续批处理等。
您可以通过从 安装 轻松开始使用 vLLM pip
。
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}")**
您可以在文档中找到更多信息。
11. Vercel AI SDK:轻松构建 AI 产品⚡
如果我现在要构建一个全栈 AI 驱动的应用程序,我会毫不犹豫地选择 Vercel AI SDK。
它是一个工具包,旨在让开发人员使用 React、Vue、NEXT、Sveltekit 等构建 AI Web 应用程序。
Vercel AI SDK 抽象了 LLM 提供商,消除了构建聊天机器人的样板代码,并提供了交互式可视化组件以提供丰富的客户体验。
它分为三个部分,
- AI SDK Cor e:用于生成文本、结构化数据和与 LLM 的工具交互的单一 API。
- AI SDK U I:独立于框架的钩子,用于快速构建聊天和生成 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 的更多信息,请访问其 文档。
12. LangGraph - 以图表形式构建语言代理🧩
LangGraph 无疑是构建高效可靠的 AI 代理的最强大框架之一。顾名思义,它遵循循环图形架构(例如节点和边)来构建 AI 代理。
它是 LangChain 的扩展,因此拥有庞大的 AI 开发者社区。
开始使用它pip
。
pip install -U langgraph
如果您想使用 LangGraph 构建代理/机器人,请查看我们关于构建 Gmail 和日历助手的详细博客。
有关 LangGraph 的更多信息,请访问文档。
13. Taipy:用 Python 构建 AI 应用程序💫
Taipy 是一款基于 Python 的开源软件,用于在生产环境中构建 AI Web 应用。它允许您构建可用于生产环境的数据和 AI 应用,从而将 Stremlit 和 Gradio 演示提升到一个新的水平。
Taipy 专为数据科学家和机器学习工程师构建数据和人工智能网络应用程序而设计。
- 支持构建可用于生产的 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://dev.to/composiodev/13-must-know-open-source-software-to-build-production-ready-ai-apps-2ch5