<p>Python の LangChain に相当するものが Ruby にもあります。<br>
<strong>langchainrb</strong> は、LLM・ベクターDB・ドキュメントローダーを組み合わせて LLM アプリを構築するための Ruby ライブラリです。<br>
本記事では基本的な使い方から RAG の実装まで解説します。</p>

<h3 id="install">インストール</h3>
<pre><code># Gemfile
gem 'langchainrb'
gem 'ruby-openai' # LLMプロバイダー</code></pre>
<pre><code>bundle install</code></pre>

<h3 id="basic-llm">基本的な LLM 呼び出し</h3>
<p>OpenAI を使った最もシンプルな例です。</p>
<pre><code>require 'langchain'

llm = Langchain::LLM::OpenAI.new(api_key: ENV['OPENAI_API_KEY'])

response = llm.chat(messages: [
{ role: 'user', content: 'Rubyの特徴を3つ教えてください' }
])
puts response.chat_completion</code></pre>
<p>プロバイダーを Claude に変えるには <code>Langchain::LLM::Anthropic</code> を使います。</p>
<pre><code>llm = Langchain::LLM::Anthropic.new(api_key: ENV['ANTHROPIC_API_KEY'])</code></pre>

<h3 id="embedding">Embedding の生成</h3>
<p>テキストをベクトル化します。</p>
<pre><code>embedding = llm.embed(text: 'Rubyは楽しいプログラミング言語です')
puts embedding.embedding.length # => 1536</code></pre>

<h3 id="document-loader">ドキュメントローダー</h3>
<p>PDF・テキスト・CSV など様々な形式をロードできます。</p>
<pre><code># PDF を読み込む
loader = Langchain::Loader.load('docs/manual.pdf')
docs = loader.load

# テキストを分割
splitter = Langchain::Chunker::RecursiveText.new(chunk_size: 1000, chunk_overlap: 200)
chunks = splitter.chunks(docs.first)</code></pre>

<h3 id="vectorstore">ベクターストア(pgvector)との統合</h3>
<p>langchainrb_rails gem を使うと Rails モデルにベクター検索を追加できます。</p>
<pre><code># Gemfile
gem 'langchainrb_rails'</code></pre>
<pre><code>bin/rails generate langchainrb_rails:vectorsearch Document</code></pre>
<p>モデルに <code>vectorsearch</code> を追加します。</p>
<pre><code>class Document < ApplicationRecord
vectorsearch provider: :pgvector,
llm: Langchain::LLM::OpenAI.new(api_key: ENV['OPENAI_API_KEY'])

after_save :upsert_to_vectorstore
end</code></pre>
<p>類似検索はこれだけです。</p>
<pre><code>Document.similarity_search('Railsのデプロイ方法', k: 3)</code></pre>

<h3 id="agent">シンプルな AI エージェント</h3>
<p>ツールを持った AI エージェントも作れます。</p>
<pre><code>calculator = Langchain::Tool::Calculator.new

agent = Langchain::Agent::ReActAgent.new(
llm: llm,
tools: [calculator]
)
agent.run(input: '123 × 456 の計算結果は?')</code></pre>

<h3 id="summary">まとめ</h3>
<p>langchainrb は Python の LangChain に近い感覚で使えるため、LangChain の情報を参考にしながら Ruby で実装できるのが強みです。<br>
ただしエコシステムの成熟度は RubyLLM の方が Rails 統合に特化しており、新規プロジェクトでは RubyLLM も選択肢に入れると良いでしょう。</p>

<h3 id="related">関連記事</h3>
<ul>
<li><a href="/blog/javascript/rubyllm-rails-intro">RubyLLM gem 入門|Rails に ChatGPT・Claude を1時間で組み込む方法</a></li>
<li><a href="/blog/javascript/rails-pgvector-rag">Rails + pgvector で RAG を実装する|自社データで答える AI チャットの作り方</a></li>
</ul>