Ollamaのモデルの比較用プログラム:ソースコード:Agent:llms:LlmInterface.py

from abc import ABC, abstractmethod # LlmInterface.py
from typing import Any, List, Optional, Dict # Dictを追加
from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.messages import BaseMessage

class LLMInterface(ABC):
    model_name: str # 各実装でモデル名を保持

    @abstractmethod
    def __init__(self, model_identifier: str, temperature: float = 0, **kwargs):
        pass

    @abstractmethod
    def get_langchain_llm_instance(self) -> Optional[BaseChatModel]:
        """
        LangchainのBaseChatModel互換インスタンスを返す (AgentExecutor用)。
        AgentExecutorを使わない、または直接モデルを叩く場合はNoneを返しても良い。
        """
        pass

    @abstractmethod
    def get_response(self,
                     prompt: str,
                     chat_history: Optional[List[BaseMessage]] = None,
                     image_paths: Optional[List[str]] = None,
                     system_prompt: Optional[str] = None, # AIAgentから渡される
                     tools: Optional[List[Any]] = None,       # AIAgentから渡される
                     callbacks: Optional[List[Any]] = None, # AIAgentから渡される
                     **kwargs) -> str:
        """
        LLMからの応答を取得する。
        ツールが指定されていれば、このメソッド内でAgentExecutorを作成・利用することを想定。
        """
        pass

    # clear_memory はAIAgentがLangchainのMemoryオブジェクトを管理するため、LLMInterfaceからは削除。
    # LLMプロバイダ固有のキャッシュクリアが必要な場合は別途検討。

    @property
    @abstractmethod
    def supports_images(self) -> bool:
        pass

    # オプショナルなメソッドとして、ツールやシステムプロンプトの更新をインターフェースに追加
    def update_tools(self, tools: List[Any]):
        """LLMプロバイダが保持するツールリストを更新する (オプション)"""
        # デフォルト実装は何もしない。必要に応じてサブクラスでオーバーライド。
        pass

    def update_system_prompt(self, system_prompt: str):
        """LLMプロバイダが保持するシステムプロンプトを更新する (オプション)"""
        pass

AIによる説明

LLMInterface クラスと関数リファレンスマニュアル

このドキュメントは、LLMInterface クラスとそのメソッドについて説明します。LLMInterface は、様々な大規模言語モデル(LLM)を統一的に扱うための抽象基底クラスです。具体的なLLM実装(例えば、OpenAI、Hugging Face Hubなど)は、このLLMInterface を継承して実装されます。

クラス: LLMInterface

様々なLLMプロバイダーを抽象化する基底クラスです。具体的なLLM実装は、このクラスを継承して、abstractmethod で宣言されているメソッドを実装する必要があります。

クラス変数:

  • model_name: str: 各LLM実装で使用するモデルの名前を文字列で保持します。

メソッド:

  • __init__(self, model_identifier: str, temperature: float = 0, **kwargs): コンストラクタ。
    • model_identifier: LLMを識別するための文字列(例: モデル名、APIキーなど)。
    • temperature: 生成テキストのランダム性を制御するパラメータ(0.0で最も決定論的、高い値ほどランダム)。
    • **kwargs: LLMプロバイダー固有の追加パラメータ。
  • get_langchain_llm_instance(self) -> Optional[BaseChatModel]: LangchainのBaseChatModel互換インスタンスを返します。
    • AgentExecutor を使用する場合は、このメソッドでLangchainと互換性のあるLLMインスタンスを返す必要があります。
    • AgentExecutor を使用しない場合、または直接モデルを呼び出す場合はNoneを返しても構いません。
  • get_response(self, prompt: str, chat_history: Optional[List[BaseMessage]] = None, image_paths: Optional[List[str]] = None, system_prompt: Optional[str] = None, tools: Optional[List[Any]] = None, callbacks: Optional[List[Any]] = None, **kwargs) -> str: LLMにプロンプトを送信し、応答を取得します。
    • prompt: LLMへの入力プロンプト(文字列)。
    • chat_history: 過去のチャット履歴(BaseMessageオブジェクトのリスト)。
    • image_paths: 画像ファイルへのパスリスト(画像処理に対応するLLMの場合)。
    • system_prompt: システムプロンプト(AIAgentから渡される)。
    • tools: 使用可能なツールリスト(AIAgentから渡される)。
    • callbacks: コールバック関数リスト(AIAgentから渡される)。
    • **kwargs: LLMプロバイダー固有の追加パラメータ。
    • 返り値: LLMからの応答(文字列)。ツールが指定されている場合は、このメソッド内でAgentExecutorを作成して利用することを想定しています。
  • supports_images(self) -> bool: このLLMが画像入力をサポートしているかどうかを返すプロパティ。

オプションメソッド:

  • update_tools(self, tools: List[Any]): LLMプロバイダーが保持するツールリストを更新します。デフォルト実装では何も行いません。必要に応じてサブクラスでオーバーライドします。
  • update_system_prompt(self, system_prompt: str): LLMプロバイダーが保持するシステムプロンプトを更新します。デフォルト実装では何も行いません。必要に応じてサブクラスでオーバーライドします。

概要:

LLMInterface は、様々なLLMを統一的に扱うためのインターフェースを提供します。具体的なLLM実装は、このインターフェースを実装することで、コードのモジュール性と再利用性を高めることができます。 get_response メソッドは、LLMとの対話の中核となるメソッドであり、AgentExecutor の利用や画像処理、コールバック機能などを含む柔軟な設計となっています。 supports_images プロパティは、LLMの機能を明確に示すために追加されています。 オプションメソッドである update_toolsupdate_system_prompt は、LLMの動作を動的に変更する機能を提供します。

このインターフェースを使用することで、異なるLLMプロバイダーを切り替える際にも、コードの変更を最小限に抑えることができます。