こんにちは。
クリエーションラインのKodakです。
Microsoft Build 2025で発表された NLWeb にとても未来を感じたので、さっそく触ってみました。
NLWebとは?
Natural Language Web(NLWeb) の略で、Webサイト上に会話型インターフェースを簡単に構築できることを目的としたオープンソースプロジェクトです。
「HTMLがWeb上で共有できるドキュメントとして標準化されたように、今度はAI Webの基盤を構築したい」
――そんなミッションを掲げているようです。
たしかに、Web上でAIと自然に会話して、欲しい情報をすぐに取得できるようになれば、かなり便利になりますよね。
今までと未来
これまでのような「入力」「検索」「クリック」といった操作から、
「会話するだけで情報が得られる」――そんな未来がやってくるのでは?と期待しています。
また、先日Googleが発表した Agent2Agent(A2A) を組み合わせれば、
AIエージェント同士がNLWeb上で会話し、最適な回答を導き出す ―― そんな世界も見えてきます。
さっそくNL Webを触ってみる
ローカル環境でNLWebを動かしてみます。
NLWebでは ベクターデータベース を使用するため、Embedding用のモデルが必要です。
2025年5月時点では、Azure、OpenAI、Gemini、Snowflake に対応しています。
これらを使うのが良さそうです。(AWS Bedrock も早く対応してほしいですね)
git clone https://github.com/microsoft/NLWeb
cd NLWeb
README.md
だとvenv
使っていますが、poetry
の方が使い慣れているため、poetry
を使いました。
cd code
poetry init
poetry add $( cat requirements.txt )
.env
を作成し、使用するモデルのAPI_KEYを入れます。
私は、Embedding用のモデルも使えるOpenAIのAPI_KEYを設定しました。
cp .env.template .env
code/config_embedding.yaml
ここで、Embedding用のモデルを選択します。
# code/config_embedding.yaml
- preferred_provider: azure_openai
+ preferred_provider: openai
code/config_llm.yaml
ここで会話用のモデルを選択します。
# code/config_llm.yaml
- preferred_provider: azure_openai
+ preferred_provider: openai
code/config_retrieval.yaml
ここでベクターDBを選択します。ローカルで動かしたいので、ローカルで動くQdrantを選択します。
# code/config_retrieval.yaml
- preferred_endpoint: azure_ai_search
+ preferred_endpoint: qdrant_local
今回は、自分の はてなブログのRSS をデータとして投入しました。
tools.db_load の引数として <データのURL> と <サイト名> を指定します。
この <サイト名> は、データに対するラベルのようなもののようです。
現時点では、さまざまな種類のデータを柔軟に扱える設計にはなっていないようなので、今後のアップデートに期待ですね。
python -m tools.db_load https://kodak.hatenablog.com/rss kodak-rss
最後に起動してみます。
python app-file.py
Ask
からAIとの会話が可能で、きちんと応答してくれました。
さいごに
- アーキテクチャや内部の仕組みなど、まだまだ分からないことだらけ
- 用語も難しく、深掘りしたくても言語化が難しいと感じた
- それでも「未来を感じる」と思っていただけた方には、以下の動画もおすすめです
👋