[LLM] LangChain docs

LangChain Docs を “分かりやすく体系化” するとこうなる
LangChain のドキュメントは大きく次の 5 つの領域に分かれています:

1. Models(モデル)
LLM や Embedding、画像モデルなど 外部AIモデル を扱うためのモジュール。
含まれる内容
Large Language Models(OpenAI, Anthropic, Azure, HuggingFace など)
ChatModels(チャット用インターフェース)
Embeddings(ベクトル化)
Text-to-Speech / Speech-to-Text
Vision Models

学べること
「複雑な API 呼び出しを、統一的なインターフェースで扱える」
例えば OpenAI と HuggingFace のモデルを同じコードスタイルで使えるようになる。
from langchain_community.llms import HuggingFaceHub
llm = HuggingFaceHub(repo_id=”mistralai/Mistral-7B-Instruct-v0.2″)

2. Prompts(プロンプト)
LLM に渡す指示文を構築・生成・管理する部分。
できること
Prompt Templates(テンプレート化)
Few-shot の自動選択
パラメータ差し込み
出力フォーマット強制(JSON化など)

学べること
「プロンプトをコードとして管理する仕組み」
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template(“要約して: {text}”)
prompt.format(text=”これはテスト文です”)

3. Chains(チェーン)
LLM・ツール・データ処理を パイプラインとしてつなぐ仕組み。
代表例
LLMChain
SequentialChain(複数ステップ実行)
SimpleSequentialChain

学べること
LLM → 加工 → LLM という流れを組み立てる。
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
chain.run(“こんにちは”)

4. Agents(エージェント)
LLM が “自分でツールを選んで使う” 仕組み。
LangChain の最も特徴的な部分。

エージェントでできること
ツール使用(検索、計算、API呼び出し)
思考の分岐(ReAct)
マルチステップ問題解決

学べること
AI に “行動する力” を与える方法。

agent = initialize_agent(
tools=[search_tool, calculator],
llm=llm,
agent=”zero-shot-react-description”,
)
agent.run(“東京の天気を調べて摂氏で教えて”)

5. Retrieval(RAG:検索 + LLM)
外部データを読み込んで検索させる仕組み。
企業で一番使われるのがこれ。

主な機能
VectorStores(Chroma, Pinecone, Qdrant, FAISS)
Document loader(PDF, HTML, Notion, URL)
Retriever(検索器)
RAG チェーン全般

学べること
大量の社内文書を元に答えるチャットボットの実装方法。

from langchain.vectorstores import Chroma
db = Chroma.from_texts(texts, embeddings)
retriever = db.as_retriever()

🌟 補足モジュール
■ Memory(記憶)
チャットの文脈保持の仕組み。
会話履歴の保持
要約ベースのメモリ
永続化

■ Tools(ツール)
Python実行
Google検索
Database Query
API呼び出し

■ Output Parsers
JSON抽出
自然言語 → 構造化データ化

[LLM] Hugging FaceのSpaceにuploadする

Hugging Face Spaces に Llama / Mistral のチャットデモを公開する最小構成

import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
import torch

# ここを Llama / Mistral など好きなモデルに変更
MODEL_NAME = "mistralai/Mistral-7B-Instruct-v0.2"
# MODEL_NAME = "meta-llama/Llama-3.1-8B-Instruct"  # ← Llama に変更したい場合

# モデルとトークナイザのロード
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    torch_dtype=torch.float16,
    device_map="auto"
)

def chat_fn(message, history):
    # 過去履歴を LLM のプロンプト形式に変換
    prompt = ""
    for user, assistant in history:
        prompt += f"<s>[ユーザー]: {user}\n[アシスタント]: {assistant}</s>\n"
    prompt += f"<s>[ユーザー]: {message}\n[アシスタント]:"

    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

    output_ids = model.generate(
        **inputs,
        max_new_tokens=200,
        temperature=0.7,
        do_sample=True,
        top_p=0.9
    )

    response = tokenizer.decode(output_ids[0], skip_special_tokens=True)

    # 最後のアシスタント発言だけ抽出
    if "[アシスタント]:" in response:
        response = response.split("[アシスタント]:")[-1].strip()

    history.append((message, response))
    return response, history


# Gradio UI
with gr.Blocks() as demo:
    gr.Markdown("# 🦙💬 Simple Llama / Mistral Chatbot")
    chatbot = gr.Chatbot()
    msg = gr.Textbox(label="Message")

    def user_send(user_message, chat_history):
        return "", chat_history + [[user_message, None]]

    msg.submit(user_send, [msg, chatbot], [msg, chatbot]).then(
        chat_fn, [msg, chatbot], [chatbot]
    )

demo.launch()

===== Application Startup at 2025-11-16 11:06:22 =====

tokenizer_config.json: 0%| | 0.00/2.10k [00:00

[LLM] Hugging Face で出来ること

Hugging Face は オープンソースLLMのプラットフォーム & コミュニティ
世界中のAIモデル・データセット・サンプルコードが集まるGitHub+App Store+AI研究コミュニティ

## Hugging Faceで何が出来る?
🤖 モデルHub Llama・Mistral・Gemma など数万のLLMをダウンロードして試せる
📚 データセットHub 研究用の巨大データセットが公開されていて利用可能
🚀 Transformers ライブラリ Python でLLMを簡単に使える神ライブラリ
🧪 Inference API / Endpoints GPUいらずでモデルをAPIとして利用できる
🧱 PEFT / LoRA サポート 軽量ファインチューニングが簡単
📊 Spaces(デモアプリ) Streamlit / Gradio でAIアプリをホスティング
🫂 AIコミュニティ モデル公開や議論・PRが活発で世界最大級

① Model Hub
世界中のLLMがここに集まっています。

例:
meta-llama/Llama-3.1-8B
mistralai/Mistral-7B
google/gemma-2-9b
EleutherAI/gpt-j-6b
GitHubと同じように、モデルごとにページがあり

説明
推奨ハイパーパラメータ
サンプルコード
重み(weights)
が公開されています。
→ とりあえず Hugging Face の中心はコレ と覚えればOK。

e.g.
https://huggingface.co/meta-llama/Llama-3.1-8B

### Transformer library

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct")

inputs = tokenizer("こんにちは!自己紹介してください。", return_tensors="pt")
outputs = model.generate(**inputs, max_length=100)

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

### Space(AIアプリ)
Gradio や Streamlit を使って、ブラウザで動くデモアプリを無料で公開できるサービス。

Mistral (ミストラル)
Mistralは、フランスのAIスタートアップ企業Mistral AIによって開発されているLLMのシリーズです。
開発元: Mistral AI (フランス)
主な特徴:
オープンソース/オープンウェイト: 多くのモデルがオープンソースまたはオープンウェイト(モデルの重み/パラメータが公開されている)で提供されており、研究者や開発者が自由に利用、改変、再配布しやすいのが大きな特徴です。

### Gradio、Streamlit
GradioとStreamlitは、どちらもPythonのコードのみで、機械学習モデルのデモやデータ分析のためのインタラクティブなWebアプリケーションを簡単に作成するためのライブラリ(フレームワーク)です。

Hugging Faceは、特にGradioの開発元を傘下に収めており、そのプラットフォーム「Hugging Face Spaces」でGradioとStreamlitのアプリケーションをホスティング(公開)できるようにしています。

[LLM] 世界を揺るがす中国発の高性能LLM! DeepSeekとQwenの衝撃

## はじめに:AIの勢力図が変わる?

大規模言語モデル(LLM)の世界は、これまでOpenAIの**GPT**やGoogleの**Gemini**といったアメリカの巨大テック企業が牽引してきました。しかし今、この勢力図を大きく塗り替えようとしているのが、中国から登場した二大巨頭、**DeepSeek**と**Qwen(通義千問)**です。

両モデルは、国際的なベンチマークでトップクラスの性能を発揮するだけでなく、その**提供戦略**においても大きな特徴を持っています。本記事では、この二つの高性能LLMの特徴と、従来のGPT・Geminiとの決定的な違いを解説します。

## 🚀 DeepSeekとは?:効率と推論力のスペシャリスト

DeepSeekは、中国のAIスタートアップによって開発されました。その最大の特徴は、**「効率性」**と**「高性能な推論能力」**の両立です。

### 💡 主な特徴

* **低コストでの開発:** 大量のデータと計算リソースを必要とするLLM開発において、DeepSeekは**非常に効率的な学習プロセス**を採用していることで知られています。
* **推論能力の特化:** 特に**コーディング(プログラミング)**や**数学**といった論理的な推論を要するタスクで、非常に高いスコアを叩き出します。
* **MoE(Mixture-of-Experts)の活用:** 効率的なモデル構造であるMoEアーキテクチャを採用し、より高速な推論と少ない計算コストでの運用を実現しています。

## 🌟 Qwen(通義千問)とは?:アリババ発の多言語対応モデル

Qwen(通義千問)は、中国の巨大テック企業**Alibaba Cloud(アリババクラウド)**によって開発されました。商用利用を強く意識しており、グローバルな展開を視野に入れています。

### 💡 主な特徴

* **驚異的な多言語対応:** **日本語を含む119言語以上**に対応する強力な多言語処理能力を持ち、世界中のユーザーやビジネスでの利用を想定しています。
* **長いコンテキストウィンドウ:** **長文の理解・処理**に優れており、大量のドキュメントを一度に処理する能力が高いです。
* **マルチモーダル機能:** テキストだけでなく、画像や音声なども理解できる**マルチモーダル機能**も強化されており、より複雑なタスクに対応できます。

## 🆚 DeepSeek・QwenとGPT・Geminiの決定的な違い

DeepSeekとQwenが、GPTやGeminiと最も大きく異なる点は、その**モデル提供戦略**と**利用のしやすさ**にあります。

### 1. オープンソース戦略

| モデル群 | 提供形態の傾向 | 開発・利用のしやすさ |
| :— | :— | :— |
| **GPT / Gemini** | 主に**クローズドソース**(API経由での提供が中心) | 高度な機能は提供されますが、モデルの内部構造は非公開で、**カスタマイズに制限**がある。 |
| **DeepSeek / Qwen** | 多くの高性能モデルを**オープンソース**として公開 | モデルを**無料でダウンロード**し、自由に**カスタマイズ**して商用利用が可能。スタートアップや研究機関が導入しやすい。 |

このオープンソース戦略により、DeepSeekとQwenは世界の開発者コミュニティに急速に浸透し、LLMの**コモディティ化(汎用化)**を加速させています。

### 2. コストとアクセシビリティ

オープンソース版のDeepSeekやQwenは、利用にAPI料金などがかからないため、**コストを大幅に抑える**ことができます。これは、資金力の限られたスタートアップや、AI導入の実験段階にある企業にとって非常に大きなメリットです。

### 3. 特化分野

| モデル | 強みとする分野 |
| :— | :— |
| **GPT** | 汎用的な対話、創造性、幅広い知識。 |
| **Gemini** | Google検索との連携による最新情報、マルチモーダル(画像、動画の理解)。 |
| **DeepSeek** | **コーディング**、**数学**、**効率的な推論**。 |
| **Qwen** | **多言語対応**、**長文処理**、アリババクラウドとの連携。 |

## 📌 まとめ:AIの未来は多様化へ

DeepSeekとQwenの登場は、AIの高性能化が特定の地域や企業に独占される時代が終わりつつあることを示しています。

* **コストを抑えて独自のAIを開発したい**
* **特定のタスク(例:コーディングや多言語対応)に特化したモデルが欲しい**

というニーズを持つ企業や開発者にとって、DeepSeekとQwenはGPTやGeminiの**強力な代替選択肢**となります。

AIの未来は、特定のモデルに依存するのではなく、それぞれの目的に応じて最適なモデルを選択する**多様化**の時代へと移行していると言えるでしょう。

**あなたもぜひ、DeepSeekやQwenのオープンソースモデルを試して、その力を体験してみてはいかがでしょうか。**

llm メール返信bot

📨 受信メール

🧠 LLM(GPT / Gemini / Claude)
├── メールの要約
├── 返信意図の理解
└── 自動返信文の生成

✉️ 返信メール送信(Gmail API / Outlook API)

import os
import base64
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
from openai import OpenAI

# --- LLM設定 ---
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

# --- Gmail設定 ---
creds = Credentials.from_authorized_user_file("token.json", ["https://www.googleapis.com/auth/gmail.modify"])
service = build("gmail", "v1", credentials=creds)

# 直近メール取得
results = service.users().messages().list(userId="me", maxResults=1, q="in:inbox").execute()
message = service.users().messages().get(userId="me", id=results["messages"][0]["id"], format="full").execute()
email_data = base64.urlsafe_b64decode(message["payload"]["parts"][0]["body"]["data"]).decode()

# LLMに返信文生成を依頼
prompt = f"""
以下のメールに対して、丁寧で簡潔な返信を日本語で作成してください。

--- メール本文 ---
{email_data}
"""
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": prompt}]
)

reply_text = response.choices[0].message.content
print("=== 返信案 ===")
print(reply_text)

[LLM] RAG:社内 / 自分用ナレッジ検索

RAGの全体の流れ

資料(PDF / メモ / Wiki / Slackログ …)


① 文章を分割


② ベクトルに変換(embedding)


③ ベクトルDBに保存(Faiss / Chroma)


質問(ユーザー入力)


④ 類似文検索(最も近い文を取り出す)


⑤ LLMに「検索結果 + 質問」を入れて回答生成

confluenceへの接続

import requests
from requests.auth import HTTPBasicAuth
import os

CONFLUENCE_URL = "https://id.atlassian.net/wiki/rest/api/content"
EMAIL = "hoge@gmail"
API_TOKEN = "*"

response = requests.get(
    CONFLUENCE_URL,
    auth=HTTPBasicAuth(EMAIL, API_TOKEN)
)

print(response.json())

これを応用していくとRAGができる。

[LLM]Mistral (Mistral 7B Instruct)をColabで動かす

フランスのAI企業 Mistral AI によって開発された、73億のパラメータを持つ**大規模言語モデル(LLM)**のインストラクション・チューニング版です。

これは、基盤モデルであるMistral 7Bを、会話や質問応答などの指示(インストラクション)に基づいて応答できるように追加で訓練(ファインチューニング)したモデルです。

🌟 主な特徴と性能
高性能: パラメータ数がより大きい他のモデル(例: Llama 2 13B)と比較しても、様々なベンチマークで上回る性能を示すことが報告されています。
効率的な構造:
Grouped-Query Attention (GQA): 推論速度の高速化に貢献しています。
Sliding Window Attention (SWA): 少ないコストでより長いテキストシーケンスを処理できます。

用途: 会話、質問応答、コード生成などのタスクに適しています。特にコード関連のタスクで高い能力を発揮します。
オープンソース: ベースモデルのMistral 7Bと同様に、オープンソースとして公開されており、誰でも利用やカスタマイズが可能です。

### Google Colab
!pip install transformers accelerate sentencepiece

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_name = "mistralai/Mistral-7B-Instruct-v0.2"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.float16,
    device_map="auto"
)

# 入力プロンプト
prompt = "大規模言語モデルとは何ですか? わかりやすく説明してください。"

inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
output = model.generate(**inputs, max_new_tokens=200)

print(tokenizer.decode(output[0], skip_special_tokens=True))

大規模言語モデルとは何ですか? わかりやすく説明してください。

大規模言語モデル(Large Language Model)は、人類の言語を理解することを目的とした深層学習モデルです。これらのモデルは、大量の文書や文章データを学習し、それらのデータから言語の統計的な規則やパターンを学び、新しい文章や質問に対して、それらの規則やパターンを適用して、人類の言語に近い答えを返すことができます。

大規模言語モデルは、自然言語処理(NLP)や情報 retrieval、チャットボット、文章生成など

結構時間かかりますね。

[LLM] Google ColabでLLaMA 系モデルを動かす

Google Colabの「ランタイムのタイプを変更」でCPUからGPUに変更する

!pip install transformers accelerate bitsandbytes sentencepiece -q
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_name = "mistralai/Mistral-7B-Instruct-v0.2"

# トークナイザ
tokenizer = AutoTokenizer.from_pretrained(model_name)

# モデル読み込み(8bitで軽量ロード)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    torch_dtype=torch.float16,
    load_in_8bit=True,
)

def chat(prompt):
    tokens = tokenizer(prompt, return_tensors="pt").to("cuda")
    output = model.generate(**tokens, max_new_tokens=200)
    return tokenizer.decode(output[0], skip_special_tokens=True)

print(chat("こんにちは!あなたは何ができますか?"))

こんにちは!あなたは何ができますか?

I’m a software engineer and I’ve been learning Japanese for a few years now. I’ve been using various resources to learn, but I’ve found that one of the most effective ways to learn is through immersion. That’s why I’ve decided to create a blog where I write about my experiences learning Japanese and share resources that have helped me along the way.

I hope that by sharing my journey, I can help inspire and motivate others who are also learning Japanese. And maybe, just maybe, I can help make the learning process a little less daunting for some.

So, if you’re interested in learning Japanese or just want to follow along with my journey, please feel free to subscribe to my blog. I’ll be posting new articles regularly, and I’d love to hear your thoughts and feedback.

ありがとうございます!(Arigatou go

サーバ側でGPU用意しなくて良いのは良いですね。

Google Colab で pip の前に ! がつく理由は、「Colab のセルは Python で実行されているが、pip は Python コマンドではなくシェルコマンドだから」

Python セルの中で「これはシェルコマンドだよ」と知らせる必要があります。
そのために 先頭に ! をつける:
!pip install transformers
!apt-get update
!ls

[LLM] LlamaIndex

LlamaIndex = RAG(検索拡張生成)を簡単に作るためのフレームワーク
ChatGPT だけでは社内データを知らないので、社内ドキュメント・Wiki・PDF・DB などを検索できるようにしてから回答する必要がある。この仕組みがRAGで、RAGを作りやすくするのがLlamaIndex。

LlamaIndex は次を自動化する

ステップ 役割
文書の取り込み PDF / Word / Google Docs / Confluence などから情報を読み込む
分割 長い文書を LLM が扱いやすいサイズに切る
ベクトル化 埋め込み(embedding)に変換
検索 質問に近い文を取り出す
回答生成 LLM に「文+質問」を渡して回答

似ているものと比較
フレームワーク 主な用途
LangChain LLMアプリ全般(チャット、エージェントなど何でも型)
LlamaIndex RAG特化(社内検索・QAに強い)

from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.llms.openai import OpenAI

# LLM設定(例:GPT)
llm = OpenAI(model="gpt-4o-mini")

# PDFやtxtを読み込む
documents = SimpleDirectoryReader("docs").load_data()

# ベクトル検索用インデックスを作る
index = VectorStoreIndex.from_documents(documents)

# 質問
query_engine = index.as_query_engine(llm=llm)
response = query_engine.query("経費精算の締め日は?")

print(response)

[LLM] Hugging Face Hub

Hugging Face Hub は、LLM(大規模言語モデル)や画像モデルを扱う人が、モデル・データ・コードを共有したり、実験環境を一元管理できる「AIのGitHub」みたいな場所

### Hugging Face Hub
1. モデルを探す・使う
世界中の研究機関・企業・個人が公開したモデルが 10万以上ある

モデル 説明
LLaMA / Gemma / Mistral 最新のオープンLLM
Stable Diffusion 画像生成モデル
Whisper 音声→テキスト変換

from transformers import pipeline
qa = pipeline("question-answering", model="deepset/roberta-base-squad2")

2. 自分のモデルをアップロード・共有できる

huggingface-cli login
git clone https://huggingface.co/your-model-name

3. Spaces でWebアプリを作って公開できる
Web UIを簡単に作れるサービス。
Streamlit / Gradio が標準対応。

import gradio as gr
gr.ChatInterface(lambda msg: "You said: " + msg).launch()

4. ファインチューニングが簡単にできる
特に PEFT / LoRA と相性が良く、
巨大モデルでも VRAM 8〜16GB で微調整可能。

from peft import LoraConfig, get_peft_model

from datasets import load_dataset
ds = load_dataset("squad")

5. ベクトルDBやRAG基盤も提供している
機能 説明
Inference API モデルをクラウドで実行
Inference Endpoints 企業向けセキュア推論
Embeddings RAG用のベクトル埋め込み
Text-Generation-Inference (TGI) 高速推論サーバー

サービス 例えると できること
Hugging Face Hub GitHub モデル・データ・コード共有
Spaces Netlify / Heroku AIアプリを公開できる
Transformers フレームワーク LLMを1行で使える
PEFT / LoRA 学習技術 モデルを安くチューニング
Inference API GPUクラウド 推論をホスティング

「必要な部分だけ学習する技術」の総称が PEFT
PEFT とは?
PEFT = Parameter-Efficient Fine-Tuning

その中でも特に有名なのが LoRA
LoRA = Low-Rank Adaptation

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model

model_name = "meta-llama/Llama-3-8b"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

config = LoraConfig(
    r=8,
    lora_alpha=32,
    target_modules=["q_proj","v_proj"],
)

model = get_peft_model(model, config)
model.print_trainable_parameters()

学習対象は全体ではなく数%に減る