【LLM】モンテカルロ木探索思考Functionを利用する【Open WebUI】
はじめに
ローカルでLLM(Large Language Model)を実行できるOpen WebUIには、様々な機能を追加するFunctionがあります。面白そうなものがOpen WebUIのコミュニティに登録されていたので紹介します。
※ 【PR】Open WebUIの詳細な導入方法は下記事で紹介しています。
モンテカルロ木探索思考法を利用して、何度も回答を推敲・改善していきます。

Visual Tree Of Thoughtsの導入
「ワークスペース」→「Functions」→コミュニティのページを開きます


コミュニティーにログインしていない場合は、手動でコピー&ペーストする必要があります。
※ ToolsやFunction機能は、LLMがPythonスクリプトを実行する事になるので、安全なコードである事を確認してください。

「+」ボタンで新しいFunctionを追加します。Function Name, Function Description, コードをコピーペーストして保存します。

有効にします。念のためにブラウザを一旦閉じて再読み込みします。
導入は以上で終わりです。
動作テスト
導入後は、上部プルダウンメニューのモデルに「mcts-」が名前の先頭についたものを選択できるようになります。

LLMは、Mistral社&Nvidia社&Cyberagent日本語チューニングモデル「mistral-nemo-japanese-instruct-2408-Q4_1.gguf」を利用します。
本当に論理思考が改善するかどうかを確認するために、下記問題を解かせてみます。
問題: 教室には5人の生徒(A, B, C, D, E)がいます。以下の情報に基づいて、それぞれの生徒の席順を決めてください。
AはCの隣に座っています。 BはEの右隣に座っています。 DはAとBの間に座っています。 質問: 各生徒の正しい席順を答えてください。
まずは、Function(mtcs)を利用せずに、Mistral-nemoに回答させます。
この問題を解くためには、一つずつ情報を整理していきましょう。
まず、「AはCの隣に座っています」という条件があります。これは、AとCが隣同士であることを意味します。具体的な位置はまだ決められませんが、この二人が隣り合っていることは確かです。
次に、「BはEの右隣に座っています」という条件を考えます。「右隣」というのは、座席が左から右へと順番で並んでいると仮定します。そのため、Bは必ずEの直後に座ることになります。
さらに、「DはAとBの間に座っています」という情報もあります。これを前提にして考えると、以下のように位置を絞っていくことができます:BとEが隣同士であることを考慮します。
AとCが隣同士であることを考慮しつつ、A, C, Dの順序も考慮します。
これらの条件を満たす席順は以下のようになります:E
B - BはEの右隣にいるため、Eの右側にBが座ります。
その次にAとCが隣同士になるように配置しなければなりません。Aの位置を決めてから、Cをその隣にします。
最後にDはAとBの間に座ることになります。
したがって、正しい席順は次の通りです:
E
B
A
C
D
以上の手順で条件をすべて満たしています。各生徒の正しい席順は「E, B, A, C, D」となります。この順序が最も条件に合致します。
「DはAとBの間に座っています」が明らかに間違えています。
次にFunctionを利用してみます。

以下のように改善しました。
この問題では、与えられた条件を一つずつ検討しながら席順を決定していきます。各条件を丁寧に解釈し、それを基に試行錯誤を行い、一貫性のある座席配置を見出します。
まず提供された条件を分析します:AはCの隣に座っています。
これはAとCが隣同士でなければならないことを意味します。
BはEの右隣に座っています。
「右隣」とは、左から順番に考えてBがEの直前に位置することを表します。
DはAとBの間に座っています。
これはDがAとBの間の何らかの位置に座る必要があります。
これらの条件を基にして、可能な席順を探していきましょう:
ステップ1: AとCが隣同士
まず、AとCが隣り合っていることを考慮します。
ステップ2: BはEの右隣
「右隣」は左から右に並べたときの意味で考えます。したがって、BがEより前に配置される必要があります。
ステップ3: DはAとBの間に座る
この条件を満たすように座席をアレンジします。
これらのステップに基づいて仮定を作りながら試行錯誤を行います:仮に、CとAが1番目と2番目、または逆の順序で並ぶとして、
C -> A または A -> C これを検討し、どちらが可能か見てみます。
仮定: C -> A とすると:3番目にはDを配置する。
BとEはあとは決まり次第。BがEの前に来るように配置します。
具体的には次のような席順が考えられます:
C
A
D
B
E
確認:AはCの隣に座っています:CとAが連続していますので満たす。
BはEの右隣です。実際にはB=4, E=5なので、右順になります。
DはAとBの間にいる必要があります。D(3) はA(2)とB(4)の間に位置します。
この席順により与えられた全ての条件を満たすことができました。
したがって、正しい席順は「C, A, D, B, E」です。この解答を得るためのプロセスも含めて確認することで妥当性を高めました。これで、問題の全条件に適合し、唯一無二の解決策が導き出されました。
「BはEの右隣です。実際にはB=4, E=5なので、右順になります。」「右隣は左から右に並べたときの意味で考えます。したがって、BがEより前に配置される」の解釈があまり理解できませんが、先生からみた生徒とすると正解になります。ちょっと強引ですが。
ちなみにChatGPT-4oだと、「E, C, A, D, B」となり、「BはEの右隣に座っています」が違います。英語で思考するので、右側と解釈したのかもしれません。
Geminiだと、「C, A, D, B, E」になりました。MCTSと同じ間違いをしています「2. BがEの右隣 B - E」。やはりAI基準では、先生から見た生徒達なんでしょうか??
まとめ
実際に実行すればわかりますが、かなりの時間が必要です。ChatGPT-o1の月々30万円プランのように、何度も推論を行って電気代を消費すればするほど性能が上がるということですね。
以下、関連する記事の【PR】です。
