import os import cohere import gradio as gr from dotenv import load_dotenv # 環境変数の読み込み load_dotenv(verbose=True) # APIキーを環境変数から取得 cohere_api_key = os.getenv("COHERE_API_KEY") # Cohereクライアントの初期化 try: cohere_client = cohere.Client(cohere_api_key) except Exception as e: print(f"Cohereクライアントの初期化に失敗しました: {e}") cohere_client = None def process_query(query, arrayData): """ ユーザーのクエリを処理し、再ランキングと回答生成を行う関数。 Gradioのイベントハンドラーとして使用される。 """ if not cohere_client: return "エラー: Cohere APIキーが正しく設定されていません。", "", "" # 1. 再ランキング(Reranking) try: cleaned_text = arrayData.replace('\n', '').replace(' ', '') documents_to_rerank = eval(cleaned_text) rerank_response = cohere_client.rerank( query=query, documents=documents_to_rerank, top_n=3, model="rerank-multilingual-v3.0" ) except Exception as e: return f"Rerank API call failed: {e}", "", "" rerank_output = "--- 再ランキングの結果(上位3件) ---\n" context_for_chat = [] for i, result in enumerate(rerank_response.results): document_index = result.index relevance_score = result.relevance_score reranked_document = documents_to_rerank[document_index] rerank_output += f"順位: {i+1}, スコア: {relevance_score:.4f}, ドキュメント: {reranked_document}\n" context_for_chat.append(reranked_document) # 2. 回答生成(Generation) tmp = '\n'.join([f"- {doc}" for doc in context_for_chat]) prompt = f""" 以下の情報に基づいて、{query }について具体的に説明してください。 情報: {tmp} 回答: """ try: response = cohere_client.chat( model="command-r-plus", message=prompt ) chat_output = response.text except Exception as e: chat_output = f"Chat API call failed: {e}" return rerank_output, chat_output # Gradio BlocksのUIを定義 with gr.Blocks() as demo: gr.Markdown("# Cohere Rerank と Chat を使った検索強化デモ") gr.Markdown("Rerankで関連ドキュメントを絞り込み、Chatで回答を生成します。") with gr.Sidebar(open=False, width=400): gr.HTML(''' Cohere Rerank: 検索精度を高める強力なツール

Cohere Rerank: 検索結果の精度と関連性を高めるモデル

Cohere Rerankは、検索結果の精度と関連性を大幅に向上させるためのモデルです。特に、Retrieval Augmented Generation (RAG) システムにおいて、その真価を発揮します。

RAGシステムとは、大規模言語モデル(LLM)が外部の知識ベースやドキュメントを参照して回答を生成する仕組みです。しかし、初期の検索段階で取得された情報が必ずしもユーザーの意図に合致するとは限りません。ここでCohere Rerankが活躍します。

Cohere Rerankの主な役割とメリット

🛠️ 活用例

Cohere Rerankは、既存の検索システムに比較的容易に統合でき、検索品質を大幅に改善できる強力なツールです。

''') #aryData = gr.Textbox(label="データ", value='["AIは、顧客行動の予測やパーソナライズされた広告配信に利用できます。","マーケティングオートメーションツールは、AIの力を借りて顧客エンゲージメントを向上させます。","AIを導入することで、マーケティングキャンペーンの効果をリアルタイムで分析できます。","最新のAI技術により、よりパーソナライズされた顧客体験を提供できます。","AIがもたらすマーケティングの進化は、企業の競争力を高める鍵となります。","ウェブサイトのデザインには、ユーザーインターフェース(UI)とユーザーエクスペリエンス(UX)の最適化が重要です。","SEO対策は、検索エンジンからのオーガニックトラフィックを増やすために不可欠です。"]') aryData = gr.Textbox(label="データ", value=''' [ "AIは、顧客行動の予測やパーソナライズされた広告配信に利用できます。", "マーケティングオートメーションツールは、AIの力を借りて顧客エンゲージメントを向上させます。", "AIを導入することで、マーケティングキャンペーンの効果をリアルタイムで分析できます。", "最新のAI技術により、よりパーソナライズされた顧客体験を提供できます。", "AIがもたらすマーケティングの進化は、企業の競争力を高める鍵となります。", "ウェブサイトのデザインには、ユーザーインターフェース(UI)とユーザーエクスペリエンス(UX)の最適化が重要です。", "SEO対策は、検索エンジンからのオーガニックトラフィックを増やすために不可欠です。", ] ''') with gr.Row(): query_input = gr.Textbox(label="クエリを入力", lines=2, info="例: AIを活用したマーケティング戦略について教えてください") run_button = gr.Button("実行") with gr.Row(): rerank_output = gr.Textbox(label="再ランキング結果", lines=5, interactive=False) with gr.Row(): chat_output = gr.Textbox(label="AIによる回答", lines=10, interactive=False, show_copy_button=True) # ボタンクリック時のアクションを定義 run_button.click( fn=process_query, inputs=[query_input, aryData], outputs=[rerank_output, chat_output] ) # アプリケーションを起動 if __name__ == "__main__": demo.launch()