AIアプリケーション開発のためのレシピブック


AIアプリケーション開発のためのレシピブック

deepset-ai/haystack

2025-09-15

今日は「Haystack」という、AIの世界で最近話題の新しいカクテルを紹介させてください。これ、ただのAIじゃなくて、色々なAIの材料を組み合わせて、お客様の好みにぴったりの一杯を作り出すためのツールなんです。

ソフトウェアエンジニアの視点から言えば、Haystackは例えるなら「AIアプリケーション開発のためのシェイカーとレシピブック」です。

材料を自由に選べる Haystackを使えば、色々なAIモデル(OpenAI, Cohereなど)やデータベース(Pinecone, Weaviateなど)を、まるでバーの棚に並んだお酒のように自由に組み合わせて使うことができます。特定のベンダーに縛られないのがいいところです。

カクテル(アプリケーション)のレシピが豊富 Haystackは、RAG(Retrieval-Augmented Generation)という、外部の知識を元に回答を生成する手法に特に強いです。これは、あなたが知りたい情報(たとえば会社のドキュメント)を事前にHaystackに飲ませておけば、質問に対して正確な答えを返してくれる、賢いバーテンダーのようなものです。

複雑な手順もシンプルに たくさんの材料(コンポーネント)を混ぜ合わせる時、通常なら複雑なコードを書く必要がありますが、Haystackを使えば「パイプライン」として流れを定義するだけで、簡単にアプリケーションを構築できます。これは、複雑なカクテルを作る手順を、レシピ通りにステップ・バイ・ステップで進めるようなものです。

さあ、Haystackで一杯作ってみましょう。まずは材料を揃えるところからですね。

# Haystackの本体をインストール
pip install farm-haystack

# データベースやモデルなど、使いたい材料(コンポーネント)を追加でインストール
# 例:OpenAIとドキュメントを読み込むためのコンポーネント
pip install 'farm-haystack[all]'

これだけで準備完了です。あとは、Pythonのコードでレシピを組み立てていくだけです。

一番人気のあるカクテル、RAGの作り方を見てみましょう。このカクテルは、あなたの手元にある情報(ドキュメント)を元に、質問に答えてくれる優れものです。

import os
from haystack import Pipeline
from haystack.components.converters import TextFileToDocument
from haystack.components.embedders import SentenceTransformerDocumentEmbedder, SentenceTransformerTextEmbedder
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.components.builders.prompt_builder import PromptBuilder
from haystack.components.generators import OpenAIGenerator
from haystack.components.writers import DocumentWriter
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.utils import Secret

# 材料の準備
document_store = InMemoryDocumentStore() # ドキュメントを保存する場所
file_converter = TextFileToDocument()
document_embedder = SentenceTransformerDocumentEmbedder(model="sentence-transformers/all-MiniLM-L6-v2")
document_writer = DocumentWriter(document_store=document_store)
text_embedder = SentenceTransformerTextEmbedder(model="sentence-transformers/all-MiniLM-L6-v2")
retriever = InMemoryEmbeddingRetriever(document_store=document_store)
prompt_builder = PromptBuilder("{{documents}} \n\n Based on the context, answer the question: {{query}}")
llm = OpenAIGenerator(model="gpt-3.5-turbo", api_key=Secret.from_env_var("OPENAI_API_KEY"))

# レシピ(パイプライン)の定義
indexing_pipeline = Pipeline()
indexing_pipeline.add_component(instance=file_converter, name="converter")
indexing_pipeline.add_component(instance=document_embedder, name="document_embedder")
indexing_pipeline.add_component(instance=document_writer, name="writer")
indexing_pipeline.connect("converter.documents", "document_embedder.documents")
indexing_pipeline.connect("document_embedder.documents", "writer.documents")

query_pipeline = Pipeline()
query_pipeline.add_component(instance=text_embedder, name="text_embedder")
query_pipeline.add_component(instance=retriever, name="retriever")
query_pipeline.add_component(instance=prompt_builder, name="prompt_builder")
query_pipeline.add_component(instance=llm, name="llm")
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query_pipeline.connect("retriever.documents", "prompt_builder.documents")
query_pipeline.connect("prompt_builder.prompt", "llm.prompt")

# 実際に一杯作る!
# 1. まず、ドキュメント(材料)を仕込む
indexing_pipeline.run(data={"converter": {"sources": ["sample.txt"]}})

# 2. 質問(お客様の注文)に答える
response = query_pipeline.run(data={"text_embedder": {"text": "what is this document about?"}})
print(response["llm"]["replies"][0])

このコードでは、まずindexing_pipelinesample.txtというテキストファイルを読み込み、その内容を埋め込み(embed)して、データベース(document_store)に保存します。次に、query_pipelineで質問(what is this document about?)を同じように埋め込み、データベースから関連する情報を検索(retrieve)します。最後に、その情報と質問を組み合わせて、AIモデル(OpenAIGenerator)に渡して回答を生成してもらっています。

まるで、お客様の好み(質問)に合わせて、レシピ(パイプライン)通りに最高のカクテル(回答)を仕上げる、プロのバーテンダーの仕事そのものですね。


deepset-ai/haystack




AIの知性を飛躍させる「MemoriLabs/Memori」入門:記憶の保存と検索のアーキテクチャ

ご提示いただいたオープンソースの記憶エンジン「MemoriLabs/Memori」について、ソフトウェアエンジニアの視点から、その有用性、導入方法、そしてサンプルコードの例を、コントのお化け屋敷のように面白おかしく、しかし技術的に分かりやすく解説しますね!


ACL 2024採択!LLaMA-Factoryが変えるAIモデル開発の常識

おっと、あなたはソフトウェアエンジニアさんですね!ここでは、「hiyouga/LLaMA-Factory」という、とっても強力なツールキットについて、恐怖の館. ..ではなく、知識の館で詳しくご紹介しましょう!「hiyouga/LLaMA-Factory」は、まるで高性能なお化け除けのお札のように、大規模言語モデル(LLMs)やマルチモーダルモデル(VLMs)のファインチューニングを効率的かつ統一的に行うための強力なフレームワークです。


ハルシネーションを許さない。LangExtractで実現する根拠(ソース)付きの情報抽出の実践

「彼女の下着は何色?」という、一歩間違えれば通報案件の問いを、LangExtractがどう鮮やかに(かつ紳士的に)解決するのか……。コント仕立てのサンプルコードと一緒に見ていきましょう!一言でいうと、「LLMを使って、超高精度かつ『証拠付き』でテキストを構造化データ(JSON等)にするライブラリ」です。


ソフトウェアエンジニアのためのAIエージェント入門:自律的なデバッグと実行のループを設計する

「本当のAIエージェント(Claude Codeのようなもの)」をどう作るのか、実際に手を動かした時のワクワク感を込めて解説します!これまで僕たちが使ってきたチャットAIは、言わば「アドバイスをくれる同僚」でした。でも、Claude CodeのようなAIエージェントは違います。彼は「実際にキーボードを叩いて、コマンドを実行し、バグを直して、テストを通す実務担当者」なんです。


動画ファイルが賢くなる?NLPとOpenCVでテキスト検索を可能にする「memvid」とは

「memvid」は、Olow304/memvid というGitHubリポジトリで公開されている、Pythonで書かれたライブラリです。NLP(自然言語処理)とOpenCV(コンピュータービジョンライブラリ)を組み合わせて、テキスト情報を動画ファイル(MP4)の中に効率的に保存し、高速な意味検索を可能にします。


サーバーレス&シングルファイル!Pythonライブラリ「memvid」で実現する最小構成のAI長期記憶

Aさん(部長)「いや〜、最近のAIエージェントは物忘れがひどくて困るよ。昨日の打ち合わせ内容を忘れて、また同じ質問をしてくるんだ。まるで私のスライスショットの癖を忘れて、毎回池に打ち込むキャディみたいだよ!」Bさん(エンジニア)「部長、それは『長期記憶』が足りないんですよ。普通はRAG(ラグ)っていう複雑な仕組みを作るんですけど、データベースを立てたり、ベクトル検索の設定をしたり……。例えるなら、パター一本でいいのに、わざわざ大型ダンプカーで芝を整えに行くような手間がかかるんです。」


PythonとNode.jsの力を解き放つ。ByteDanceのオープンソース「Deer-flow」でエージェント開発を加速させる

エンジニアの視点で見ると、これって「ただのチャットAI」とは全然別物。まるで、一歩先を読んで複雑な家事(仕事)を全部片付けてくれる、すごく有能な執筆・開発パートナーって感じかな。「どれが一番似合うかな?」って水着選びで迷うみたいに、Deer-flowの可能性を一緒に探っていこう!


【ガンダムコントで解説】AIエージェントに「長期記憶」を持たせる!GibsonAI/Memori 導入と活用法

Memoriは、LLM(大規模言語モデル)やAIエージェントに、人間のように「記憶」を持たせ、文脈(コンテキスト)を理解させるためのオープンソースのメモリーエンジンです。これはまるで、ホワイトベース隊が「ザビ家の陰謀」や「アムロのわがまま」といった過去の経験や人間関係を、戦闘のたびにいちいち思い出さなくても、自然に判断を下せるようになるのと同じです!


22世紀のチャット運用術:AstrBotによるマルチプラットフォーム抽象化とエージェント基盤

のび太「ドラえも〜ん!LINEとかDiscordとか、いろんなSNSで動く自分専用のAI秘書を作りたいんだけど、設定が難しすぎて頭がパンクしそうだよ〜!」ドラえもん「やれやれ、のび太くんは相変わらずだね。でも安心しなよ!そんなときのために……(四次元ポケットをガサゴソ)……『AstrBot(アストラ・ボット)』!!」


現場直結!Difyで始めるプロダクションレディなエージェントワークフロー入門

(現場は薄暗い取り調べ室。刑事役の私と、容疑者役のDifyが向かい合っています)私(刑事) さて、Difyくん。キミは一体何者なんだ?「Production-ready platform for agentic workflow development」… ソフトウェアエンジニアにとって、どういう意味があるのか、正直に話してもらおうか!