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_tools と update_system_prompt は、LLMの動作を動的に変更する機能を提供します。
このインターフェースを使用することで、異なるLLMプロバイダーを切り替える際にも、コードの変更を最小限に抑えることができます。
