from Agents.llms.LlmBase import LlmBase # Import the new base class
# LangChainDeprecationWarning に従い、新しいパッケージからインポートする
# 古いインポート: from langchain_community.chat_models import ChatOllama
# これにより、bind_tools をサポートする最新の ChatOllama が使用される
from langchain_ollama import ChatOllama
from langchain_core.language_models.chat_models import BaseChatModel
from langchain_core.messages import HumanMessage, AIMessage, BaseMessage, SystemMessage, AIMessageChunk
from typing import List, Optional, Any, Dict # Dict を追加
from tools.exception import InterruptedException as InterruptedException # または共通の例外モジュールから
class OllamaLLM(LlmBase): # Inherit from LlmBase
def __init__(self, model_identifier: str = "llama2", temperature: float = 0, **kwargs):
super().__init__(model_identifier, temperature, **kwargs) # Call base class constructor
# Specific OllamaLLM initialization
# self.llm is already initialized in LlmBase.__init__ via _initialize_llm()
# Easy image support detection (more accurate detection needed)
if "llava" in self.model_name.lower() or \
"bakllava" in self.model_name.lower() or \
"gemma3" in self.model_name.lower() or \
"qwen2.5vl" in self.model_name.lower() or \
"moondream" in self.model_name.lower(): # 他のOllamaマルチモーダルモデルも追加可能
self._supports_images = True
print(f"OllamaLLM: モデル '{self.model_name}' は画像対応の可能性があります。")
else:
self._supports_images = False
def _initialize_llm(self) -> BaseChatModel:
try:
self.llm = ChatOllama(
model=self.model_name,
temperature=self.temperature,
**self.llm_kwargs # kwargsではなくself.llm_kwargsを使用
)
return self.llm
except Exception as e:
print(f"OllamaLLM初期化エラー: {e}. モデル名: {self.model_name}, kwargs: {kwargs}")
raise
@property
def supports_images(self) -> bool:
return self._supports_images
AIによる説明
OllamaLLM クラスの概要:LangChain で Ollama を利用するための LLM クラス
この OllamaLLM クラスは、LangChain フレームワークで Ollama を LLM (Large Language Model) として利用するためのクラスです。LangChain の新しいバージョンでは、Ollama の機能が改善され、langchain_ollama パッケージからインポートされるようになりました。
主な機能:
- Ollama の利用: Ollama を LLM として LangChain で利用するためのインターフェースを提供します。
- 画像対応の検出: モデル名に含まれるキーワード (例:
llava,bakllava,gemma3,qwen2.5vl,moondream) をチェックし、モデルが画像に対応しているかどうかを自動的に判断します。画像対応モデルの場合、LangChain で画像処理をサポートします。 - LangChain のベースクラスからの継承:
LlmBaseクラスを継承することで、LangChain の LLM の基本的な機能 (例: 温度調整、プロンプトの管理) を利用できます。 - エラー処理: LLM の初期化時にエラーが発生した場合、エラーメッセージと関連するパラメータ (モデル名、キーワード) を出力し、例外を再発生させます。
クラスの構成要素:
__init__(self, model_identifier: str = "llama2", temperature: float = 0, **kwargs):- コンストラクタです。モデルの識別子 (
model_identifier)、温度 (temperature) を設定します。 **kwargsを使用して、追加のキーワード引数を渡すことができます。- モデル名に含まれるキーワードに基づいて、画像対応の有無を判断します。
- コンストラクタです。モデルの識別子 (
_initialize_llm(self) -> BaseChatModel:- Ollama LLM のインスタンスを初期化します。
ChatOllamaクラスを使用して、指定されたモデルと温度で Ollama LLM のインスタンスを作成します。- 初期化時にエラーが発生した場合、エラーメッセージを出力し、例外を再発生させます。
supports_images(self) -> bool:- モデルが画像に対応しているかどうかを返します。
使用方法:
OllamaLLM クラスを使用するには、まず langchain_ollama パッケージをインストールする必要があります。その後、OllamaLLM クラスのインスタンスを作成し、LangChain の他のコンポーネント (例: チャットモデル、ツール) と連携して、Ollama を LLM として利用できます。
注意点:
- このクラスは、LangChain の新しいバージョンで提供される Ollama の機能を利用しています。
- モデル名に含まれるキーワードは、Ollama がサポートするモデルのリストを更新するたびに変更される可能性があります。
- 画像対応の検出は、必ずしも正確ではありません。モデルが画像に対応しているかどうかを確実な方法で判断するには、追加の検証が必要になる場合があります。
このドキュメントは、OllamaLLM クラスの基本的な使い方と機能について説明しています。LangChain のドキュメントを参照して、より詳細な情報や使用例を確認してください。
