🚀「LangChain × DeepSeek 1.3B で爆速 RAG 実装！」📚💡

## LangChain と DeepSeek 1.3B で RAG を実装しよう！

みなさん、こんにちは！今日は LangChain と DeepSeek 1.3B を使って RAG（Retrieval-Augmented Generation）を実装する方法を楽しく学びましょう！

「え？RAG って何？」と思った方、大丈夫です！RAG とは、言語モデル（LLM）と外部知識ベースを組み合わせて、より正確で関連性の高い回答を生成する仕組みのことです。つまり、単なる LLM だけよりも、「調べて答える」ことができる賢い AI というわけですね。

では、早速始めていきましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917980/0060f9aa-b8da-e176-c2da-3721588f5c6f.png)

---

### **準備しよう！**

まずは環境を整えましょう。以下の準備ができていれば OK です。

✅ Python 3.10 以上
✅ Python の基本的な知識
✅ 言語モデルや検索システムの基礎知識（なくても OK！）

では、必要なライブラリをインストールしましょう。

```bash
pip install langchain openai chromadb
```

よし！インストールできたら、次に進みます。

---

### **1. データを準備しよう！**

「材料がなければ料理はできない！」ということで、RAG に使うドキュメントを用意しましょう。

例えば、`data/documents` フォルダにテキストファイルをたくさん入れておきます。

---

### **2. ドキュメントを読み込んで分割しよう！**

次に、ドキュメントを読み込んで、適当な長さに分割します。

```python
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# フォルダ内のドキュメントをロード
loader = DirectoryLoader('data/documents', glob='*.txt')
documents = loader.load()

# ドキュメントを 1000 文字ずつに分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
docs = text_splitter.split_documents(documents)
```

「一気に読むのはしんどい！」という AI のために、小分けにしてあげましょう。

---

### **3. 埋め込みを作成しよう！**

ここで、「検索しやすいように」テキストをベクトルに変換します。

```python
from langchain.embeddings import OpenAIEmbeddings

# OpenAI の埋め込みモデルを初期化
embeddings = OpenAIEmbeddings()

# テキストの埋め込みを作成
doc_embeddings = embeddings.embed_documents([doc.page_content for doc in docs])
```

「え？ベクトルって何？」と思った方、大丈夫です！簡単に言えば、「テキストを数学的な数字の並びに変換して、似たもの同士を探しやすくする」って感じです。

---

### **4. ベクトルストアを作ろう！**

次に、ChromaDB を使ってベクトルストアを作成し、検索できるようにします。

```python
import chromadb

# ChromaDB クライアントを初期化
client = chromadb.Client()

# コレクションを作成
collection = client.create_collection('document_collection')

# ドキュメントと埋め込みを追加
for doc, embedding in zip(docs, doc_embeddings):
    collection.add(doc.page_content, embedding)
```

これで、AI がドキュメントを探しやすくなりました！

---

### **5. 検索機能をセットアップ！**

さあ、AI に検索の力を授けましょう！

```python
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 言語モデルを初期化
llm = OpenAI()

# RAG の検索機能を設定
qa_chain = RetrievalQA(llm=llm, retriever=collection.as_retriever())
```

---

### **6. DeepSeek 1.3B を統合しよう！**

次に、DeepSeek 1.3B を使って、検索結果を元に回答を生成できるようにします。

```python
from deepseek import DeepSeek

# DeepSeek モデルを初期化
deepseek_model = DeepSeek('1.3B')

# DeepSeek を使った回答生成関数
def generate_response(query):
    # 関連するドキュメントを取得
    retrieved_docs = qa_chain.retrieve(query)
    
    # 取得したドキュメントを 1 つのコンテキストに結合
    context = ' '.join([doc.page_content for doc in retrieved_docs])
    
    # DeepSeek で回答を生成
    response = deepseek_model.generate(query, context)
    return response
```

これで、RAG システムが「調べてから回答する」賢い AI になりました！

---

### **7. ユーザーインターフェースを作ろう！**

最後に、Streamlit を使って Web インターフェースを作ります。

```python
import streamlit as st

# Streamlit アプリ
st.title('LangChain + DeepSeek 1.3B の RAG システム')

# ユーザーの入力
query = st.text_input('質問を入力してください:')

# 回答を生成
if query:
    response = generate_response(query)
    st.write('回答:', response)
```

---

### **まとめ**

お疲れ様でした！今回のステップを踏めば、LangChain と DeepSeek 1.3B を活用した RAG システムが完成します。

💡 **ポイントおさらい**
✅ ドキュメントを読み込んで分割
✅ 埋め込みを作成してベクトルストアに保存
✅ 検索機能を実装し、DeepSeek で回答生成
✅ Streamlit で楽しくインタラクティブな UI を作成

「おお、これなら AI も賢くなるし、なんかカッコいいぞ！」

是非、自分のプロジェクトにも活用してみてください！🎉