Llama 3 で無料の英会話練習アプリを作って、ロールプレイし放題

![llama3-english.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1356465/784ffc0d-83a0-d11f-40bc-76c8cd4bf23a.png)

# 本稿の概要

- 本稿は、3 本の記事によるシリーズ投稿の 1 つ目です。
- 下記の 3 本目の記事の準備として、本稿では、はじめに **Llama 3** と **Ollama**、および **Streamlit** について説明します。

  - [crewAI で Llama 3, DALL-E, Gemini Pro Vision による、シチュエーション英会話練習アプリを作る](https://qiita.com/hiroki_okuhata_int/items/657a415d3b63310df667)

# Llama 3 とは

- Meta 社が 2024 年 4 月 18 日にリリースした、オープンソース LLM の最新版です。
- モデルをダウンロードでき、ローカル実行することができます。
- 本稿作成時点では、ローカル実行に適したサイズの `8B` モデルと、より高い能力を持つ `70B` モデルがあります。

 **Meta Llama 3**
 
 https://llama.meta.com/llama3/
 
# Llama 3 をローカルで動かすには、Ollama が簡単で便利

Llama 3 をローカル実行するのはとても簡単です。

下記から Ollama をダウンロードして、

https://ollama.com/

下記のコマンドを実行するだけです。

```sh
$ ollama run llama3
```

## Ollama とは

CLIツールです。Ollama とローカル実行可能な LLM との関係は、docker コマンドと docker イメージの関係に似ています。

このため、例えば Llama 3 モデルをローカルにダウンロードするだけであれば、下記のコマンドになります。

```sh
$ ollama pull llama3
```

また、`Dockerfile` に似た `Modelfile` という仕組みもあります。`Modelfile` を作って、ベースとなるモデルに `temperture` などのパラメータや `SYSTEM` メッセージなどを与え、プロンプトをカスタマイズしたモデルを定義することができます。

[Customize a prompt](https://github.com/ollama/ollama?tab=readme-ov-file#customize-a-prompt)

また、Llama 3 の他にも、**Ollama** がローカル実行できる LLM については下記に一覧があります。

https://ollama.com/library

# Streamlit でチャット用の UI を付ける

本シリーズの目的は、英会話練習アプリを作ることですので、ChatGPT 風の UI を付けることにしましょう。

## Streamlit とは

LLM アプリケーションに簡易な UI を付ける際によく用いられる Python ライブラリには、Gradio や Streamlit などがありますが、本稿では Streamlit を用いることとします。

Streamlit

https://github.com/streamlit/streamlit

下記で Streamlit をインストールします。

```sh
$ pip install streamlit
```

## Python コードの例

下記が Llama 3 を ollama でローカル実行し、Streamlit で ChatGPT 風の UI を付けた場合の Python コードの例です。

```sh
$ pip install ollama
```

本シリーズの [３本目の記事](https://qiita.com/hiroki_okuhata_int/items/657a415d3b63310df667) に登場する下記の AI アバターの画像を使うこととします。

[asian-women-in-ny.png](https://camo.qiitausercontent.com/b47410a0de113a5e400a840b85408cd4bf8f28a8/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313335363436352f39633039333866362d653761302d316566382d353466642d3437316236636439643165662e706e67)

```python
import ollama
import streamlit as st

st.title("Your Personal English Coach")

# Add a header image
header_image = 'asian-women-in-ny.png'
st.image(header_image, caption='Lisa', use_column_width=True)

if "messages" not in st.session_state:
    st.session_state["messages"] = [{"role": "assistant", "content": "How can I help you?"}]

### Write Message History
for msg in st.session_state.messages:
    if msg["role"] == "user":
        st.chat_message(msg["role"], avatar="🧑‍💻").write(msg["content"])
    else:
        st.chat_message(msg["role"], avatar="👩").write(msg["content"])

## Generator for Streaming Tokens
def generate_response():
    response = ollama.chat(model='llama3', stream=True, messages=st.session_state.messages)
    for partial_resp in response:
        token = partial_resp["message"]["content"]
        st.session_state["full_message"] += token
        yield token

if prompt := st.chat_input():
    st.session_state.messages.append({"role": "user", "content": prompt})
    st.chat_message("user", avatar="🧑‍💻").write(prompt)
    st.session_state["full_message"] = ""
    st.chat_message("assistant", avatar="👩").write_stream(generate_response)
    st.session_state.messages.append({"role": "assistant", "content": st.session_state["full_message"]})
```

#### 実行方法

下記のように、Streamlit アプリケーションは streamlit コマンドを使って実行します。

```
$ streamlit run llama3-chat.py
```

# 英会話練習アプリのイメージ

前述の streamlit コマンドを実行すると、下記のようなチャット風インターフェースがローカルのブラウザで起動します。

![llama3-streamlit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1356465/fa2533ab-5921-2ebf-8f62-16c8b0c6eeee.png)


上記に何かメッセージを入力すると、下記のように Llama 3 がチャットに返信してくれています。

![llama3-chats.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1356465/98a5f39a-661f-0c79-0b14-277f06f84aac.png)

前述のコードでは、特に背景となるアバター設定をしていないにも関わらず、空気を読んで返答してくれていますね。十分に実用的です。

# まとめ

いかがでしたでしょうか？

LLama 3 をローカル実行させるのは非常に簡単です。また、ChatGPT 風の UI を付けた LLM アプリケーションを作成するのも非常に簡単です。

次回以降の記事では、上記の英会話練習アプリをさらに充実させていきましょう。

# 続編はこちら

- [LLM も 3 人寄れば文殊の知恵⁉️ crewAI で Gemini と DALL-E と Llama を組み合わせる](https://qiita.com/hiroki_okuhata_int/items/e40d627e5d2b1e55acfa)

- [crewAI で Llama 3, DALL-E, Gemini Pro Vision による、シチュエーション英会話練習アプリを作る](https://qiita.com/hiroki_okuhata_int/items/657a415d3b63310df667)