【入門】onyx-dot-app/onyxで始めるAIチャットボット開発
ソフトウェアエンジニアの視点から、onyx-dot-app/onyxがどのように役立つか、導入方法、サンプルコードについて、真面目に、分かりやすく説明するね。
onyx-dot-app/onyxは、AIを活用したチャットアプリケーションを構築するためのオープンソースプラットフォームなんだ。これを導入するメリットは、主に次の3つだよ。
AIモデルの選択肢が広がる
特定のAIモデルに依存することなく、OpenAI、Anthropic、Googleなど、様々な大規模言語モデル(LLM)と連携できるんだ。これにより、プロジェクトの要件やコストに応じて最適なモデルを選べるようになる。
情報検索機能(RAG)の強化
外部の情報(ドキュメント、データベースなど)と組み合わせて、より正確で最新の回答を生成するRAG(Retrieval-Augmented Generation)という機能が強力なんだ。例えば、自社の製品マニュアルやFAQを読み込ませて、ユーザーサポートチャットボットを作ったりできるよ。
開発効率の向上
チャットUIやバックエンドの処理など、ゼロから開発すると手間がかかる部分が、このプラットフォームを使うことで簡単に構築できる。開発者は、より本質的なロジックや機能の追加に集中できるんだ。
onyx-dot-app/onyxは、Dockerを使うと簡単に起動できるんだ。手元の環境で試すための基本的な手順は以下の通り。
DockerとDocker Composeをインストール
まず、PCにDockerとDocker Composeがインストールされていることを確認してね。
リポジトリをクローン
GitHubからプロジェクトのソースコードをダウンロードするよ。
git clone https://github.com/onyx-dot-app/onyx.git
cd onyx
環境設定ファイルの準備
.envファイルを作成し、使用したいLLMのAPIキーを設定する。
# .envファイルの内容例
OPENAI_API_KEY="sk-..."
# GOOGLE_API_KEY="AIza..."
# ANTHROPIC_API_KEY="sk-ant-..."
サービスを起動
以下のコマンドを実行すると、すべてのコンポーネントが起動する。
docker-compose up -d
ブラウザでアクセス
http://localhost:3000にアクセスすると、チャットUIが表示されるはずだ。
ここでは、RAG機能を使って、特定のドキュメントから情報を引き出すチャットボットを作る簡単な例を示すね。 以下の例は、Pythonを使ってonyxのAPIと連携するイメージだよ。
import requests
import json
# onyx APIのURL
API_URL = "http://localhost:8000/v1/chat/completions"
# 質問
question = "onyxの特徴は何ですか?"
# 外部ドキュメントの例(今回はコード内で直接定義)
document_text = """
onyxは、AIチャットアプリケーションを構築するためのオープンソースプラットフォームです。
主な特徴は、複数の大規模言語モデル(LLM)をサポートしている点と、
Retrieval-Augmented Generation(RAG)機能により、外部データに基づいた回答を生成できる点です。
また、開発者が簡単に拡張できるように設計されています。
"""
# APIリクエストのペイロード
payload = {
"model": "gpt-4o", # 使用するLLM
"messages": [
{
"role": "user",
"content": question
}
],
"context": {
"text": document_text # ここに外部データを埋め込む
}
}
headers = {
"Content-Type": "application/json"
}
# APIリクエストの実行
try:
response = requests.post(API_URL, data=json.dumps(payload), headers=headers)
response.raise_for_status() # HTTPエラーチェック
result = response.json()
# レスポンスの表示
answer = result["choices"][0]["message"]["content"]
print(f"ユーザーの質問: {question}")
print(f"AIの回答: {answer}")
except requests.exceptions.RequestException as e:
print(f"APIリクエスト中にエラーが発生しました: {e}")
このコードの説明
payloadのcontextフィールドに、参照させたいdocument_textを入れているよ。
onyxは、このcontextの内容とmessages(質問)を組み合わせて、指定されたモデル(gpt-4o)に送信する。
これにより、モデルは与えられたドキュメントの内容に基づいて、質問に答えるんだ。