- Red HatのNode.jsチームが、LLMとNode.js、TypeScript/JavaScriptの統合方法を実験
- 複数のフレームワークを比較し、特に tool/function呼び出しとエージェントの動作方式 を重点的に検討
- 最近リリースされた Llama Stack の機能と、Node.jsとの統合可能性を分析
Llama Stackの設定と実行方法
- Llama StackはAPIの標準化を目指し、さまざまな実装を提供する モジュラー・フレームワーク
- Ollama ベースのコンテナを使う場合、最も簡単な実行方法を提供
- 実行スクリプト例を通じたサーバー設定:
- モデル:
meta-llama/Llama-3.1-8B-Instruct
- ポート:
8321
- OllamaサーバーIP:
10.1.2.38
- Ollamaでは事前にモデルを実行しておく必要があり、keepalive維持のため毎日1回以上の利用が必要
- ドキュメントエンドポイント(
/docs)からAPIスキーマとインタラクティブなテストが可能
最初のNode.jsアプリケーション例
llama-stack-client-typescript ライブラリを使ってLlama Stackと通信
- 2つのツールを定義:
favorite_color_tool: 都市/国に基づく色の情報を提供
favorite_hockey_tool: 都市/国に基づくアイスホッケーチーム情報を提供
- 質問シナリオを通じてツール呼び出しの流れをテスト
- 初期の問題点: ツールに必要な情報がない場合、明確な誘導文が出力されない
- 解決方法: 応答メッセージに
assistant という単語を挿入することで、流れが自然に改善
Llama Stackにおけるtool呼び出しの処理方式
chatCompletion() APIを使う場合、ツール呼び出しは直接処理する必要がある
handleResponse() 関数でツール要求を検出し、結果を再びメッセージとして渡す
tool_choice はデフォルトで "auto" に設定されているが、ツールがあると使おうとする傾向が強い
- 質問がツールと無関係な場合でも、ツール利用の試行をやめて「回答不可」として処理される現象が観察された
MCPとLlama Stackの統合実験
- MCP(Model Context Protocol)を通じて ツールを外部サーバーでホスト し、さまざまなフレームワークと共有可能
- MCPサーバーはSupergatewayを通じて、stdioベースのサーバーをSSE方式へブリッジ処理
- MCPサーバー登録後、Llama Stackのagent APIを使ってMCPツールの自動呼び出しが可能
- agent APIでは:
- 状態/メッセージ管理を自動処理
- ツール呼び出しの流れをフレームワークが内部的に実行
- ただしツール呼び出しログを直接見ることはできず、最終応答のみ確認可能
ローカル環境アクセスのためのMCP活用
- MCPサーバーをローカル環境でstdio方式で実行し、Llama Stackと接続可能
- MCPサーバーのツール定義JSONを、Llama Stack互換形式に変換するコードが必要
mcpClient.callTool() を通じて、LLM応答フロー内でツール結果を返却可能
- これにより、中央集約型サーバーではないローカルアプリ環境にアクセスするシナリオを実装できる
まとめ
- Node.js環境で、Llama Stackを通じたLLMとツール呼び出しの統合を実践
- ローカルツール、リモートMCP、ローカルMCPを通じたさまざまな活用事例を提供
- 特にJavaScript/TypeScript開発者に向けて、実践的なコード例と処理フローを提示
- 今後LLMとNode.jsを統合したい開発者にとって、有益な出発点となる
追加資料
まだコメントはありません。