2023-11-28
個別最適化された学習環境構築を目指すGIGAスクール。実現の要は一人一台のコンピューターとAI。


AIとの付き合い方を考えてもらうきっかけとして、小学4年生の「はじめてのプログラミング」に続く、小学5年生向けのプログラミング教育「ITブートキャンプ - はじめてのAIプログラミング」を鯖江市立鯖江東小学校、5年生年生全2クラスにて実施。


そもそも知能って何?検索してみよう!答はひとつではないことの体感することも大事な学び。


iPadにキーボードをつないで「IchigoJam web」でプログラミング!
AIづくり入門としてとして「じゃんけんAI」をみんなで実装!

10 A=RND(3) 20 INPUT N 30 ?A,N

数にすれば、なんとでもできるのがコンピューター。
ぐー、ちょき、ぱー、3種類を0、1、2と読み替えて、じゃんけんぽん!

10 A=N 20 INPUT N 30 ?A,N 40 GOTO 10

ちょっと改造、出した手を学習するコンピューター。必勝法は分かるかな?


福井県庁、鯖江市役所、福井新聞さんも授業参観。


鯖江市長、佐々木さんも!


画像も数にしてしまえば学習可能!
鯖江市のGIGA端末、iPadでAI体験「顔の形認識


AIとお話してみよう!
まずは限界が低い、70億パラメーター級のLlama 2 7Bベースの生成系AI、Youri 7Bとお話してもらいました。ハルシネーション(もっともらしい嘘)を言わせてみようチャレンジ!(参考、8GB RTX3060TiでOK、PythonでローカルLLMのCORS対応APIサーバー&JSクライアント


限界が低いAIチャット、ローカルLLM版にゲーム、ぷよぷよの作り方を聞いてみましたが、そっけない回答・・・


でも、高性能AI、GPT4を使えば、ちゃんと回答が返ってきます。


ss.sabae.cc で、動かしてみた様子です。フィールドに何もなしが寂しかったので、「grid[y][x] = (x + y) % 2;」というコードだけ追加。複雑なプログラムも分解すれば、ひとつひとつはシンプルです。プログラムはGitHubを筆頭に多量にオープンデータがあるので回答も割りと正確です。


「創造的な人材の育成に向けて ~求められる教育改革と企業の行動~ 1996年3月26日(社)経済団体連合会」

経団連による提言を改めて紹介。(参考、創造的IT人材の創る鍵、砂場

このままでは、来るべき21世紀において、豊かで魅力ある日本を築くことは不可能といわざるをえない。今後は、個人の創造力が最大限発揮できる社会に転換しなければならない。
確立しよう、コンピューター、AIを活用した学習新スタイル!


「資料、はじめてのAIプログラミング」

links
- 創造的な人材の育成に向けて ~求められる教育改革と企業の行動~ 1996年3月26日(社)経済団体連合会

2023-11-27
#AI #js 
スゴイAIはたくさんあるので、手軽に使える気軽なデモを準備します。


「MobileNet 画像分類 / TensorFlow.js」
src on GitHub / ss.sabae.cc / ES-Jam
ブラウザ上で使えるAIライブラリ「TensorFlow.js」を使ったシンプルな画像分類デモを動かしてみました。外カメラがあれば外カメラを使うように設定してあるので、AIの目で見せてみましょう。

リモコンを携帯電話と認識するなど、学習データが古く、精度もそんなに高くありませんが、AIによって何かを識別する可能性は感じられると思います。

シンプルなソースコードなので、ぜひいろいろと改造して遊んでみましょう!


「MOBILENET.js」

英語で出てもピンとこないので、日本語化するファイルを追加しています。一部足りないものがあったり、訳がうまくなかったりするので、要改善です。

Webアプリ、人にも渡してあげたいとき、QRコードがあると便利です。
画面の一番下にQRコードをつける1行プログラムがこちら! <script type="module" src="https://js.sabae.cc/QRCode.js"></script><qr-code></qr-code> QRコード生成ライブラリ「qr-code.js」を読み込んで qr-code タグを書くだけ簡単!

2023-11-26
パーソナルなコンピューター同様、パーソナルなAI、PAI(ピーエーアイ)を持つと便利そう。

家のデスクトップパソコンでLLMが動いたので、スマホからでも使えるように中継サービス「llm_proxy」を作成。心置きなく自分の情報をいれたサービスをローカルLLM経由で、取り出して活用する準備ができました。


「llm_proxy/static/index.html」

ひとまず簡単なチャットインターフェイスを用意。5つ前の会話を送って回答を受け取る設定としています。自由に改造して、自分だけのPAIづくりにご活用ください。

福井大学にて開催中のチャレンジする人向けプログラム、DX(現代社会のデジタル化)の最終日のハッカソン!


bg関数で使える、かんたんアプリフレームワーク、egadv.jsの地図表示機能。await bg("E91") で日本地図が出ます。任意の場所に拡大し、左下に表示されるGeo3x3をクリックしてコピーした文字列で地図表示可能です。例えば、福井大学、今日の会場「E91387367444543314」を表示するサンプル


ペルソナになってもらってバーチャルインタビュー、プログラミングのヒントをもらう、ビジョンの良い言い回しを作ってもらうなど、いろいろと活用できる生成系AI。サービスのネーミングをローカルLLMでやってもらったらこの結果。5つ全部同じじゃんw


さすがGPT4ではちゃんとした回答。パーソナルAIと高性能な外部AI、いいとこ取りしましょう。

15人、4チーム。それぞれターゲット、課題、アイデア、ビジョン、名前、プロトタイピングにチャレンジ!新規事業としての展開可能性もあるので今回の内容は非公開。福井発の新しいビジネス創出にご期待ください!続きは、Code for FUKUIで!ハッカソンにご興味ある方、2023/12/16開催、観光ハッカソンへどうぞ!


紅葉きれいな福井大学!こういう地味な写真オープンデータがハッカソンで役立つことが分かりました。


この3Dスキャンした切り株は・・・。


福井大学学食隣、学生交流拠点建設予定地にあったもの。今しか撮れない記録です。

2023-11-25
LLM、大規模言語モデルを使った文章生成系AIは大掛かりなコンピューターが必要ですが、VRAMが8GBと比較的コンパクトなGPUでもそこそこ動作するモノもあります!
rinna、Llama 2の日本語継続事前学習モデル「Youri 7B」を公開|rinna株式会社

Meta社が2023年7月に公開した大規模言語モデル「Llama 2」をベースに日本語に特化させ学習させた「Youri 7B」が登場。

PythonのWebフレームワークFlaskを使ってAPIサーバーにして、JavaScriptから簡単に使えるようにしました。 import { llm } from "./llm.js"; const prompt = `ユーザー: 神はいますか?\nシステム: `; const res = await llm(prompt); console.log(res); 回答が数秒で、短い回答だと1秒程度で返ってきます。

それは素晴らしい質問です。神は存在するという考え方をする人もいれば、神は存在しないという考え方をする人もいます。私は、これらの考え方を説明し、どちらが正しいかを考えることができます。

API使用料や使用制限を気にせず使えるのはステキ!

先日購入したGPU、VRAMが8GBのNVIDIA RTX 3060Ti on Windows 10。Pythonが入った環境で、下記のコマンドで「rinna/youri-7b-gptq」をダウンロード。(参考、rinnaの新AI「youri-7b-chat-gptq」の魅力 | ジコログ

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install auto-gptq --extra-index-url https://huggingface.github.io/autogptq-index/whl/cu118/


「llm_server」

llm_serverをcloneして、サーバーを起動。

py llm_server.py 5050

APIサーバーのコード llm_server.py はこのようにシンプル!
(with プロンプトから回答生成する generate_reply

import sys from flask import Flask, request from generate_reply import generate_reply port = 5050 if len(sys.argv) > 1: port = sys.argv[1] app = Flask(__name__) @app.after_request def after_request(response): response.headers.add('Access-Control-Allow-Origin', '*') return response @app.route('/', methods=['GET']) def get(): prompt = request.args.get('p') reply = generate_reply(prompt) return reply if __name__ == '__main__': app.run(debug=False, host='::', port=port)

あとはこのホストとポート番号に対してリクエストを送ればOK!

http://[::]:5050/?p=who


「llm_client」

JavaScriptによるクライアントAPI ESモジュール llm.js を作成。冒頭のサンプルのように、promptを投げて、返答を受け取れます。(importを使って、endpoint.jsを使って任意のホスト&ポートをエンドポイントとして設定できるようにしてあります)

簡単なWebアプリにしてみました。

HTML1つで1問1答するWebアプリの例です。 <h1>llm_client for llm_server</h1> <input id="comment" type="text" size=50><button id="btn">send</button> <div id="response"></div> <hr> <a href=http://github.com/code4fukui/llm_client>src on GitHub</a><br> <script type="module"> import { llm } from "./llm.js"; const add = (p, s) => { const div = document.createElement("div"); div.textContent = p + ": " + s; response.appendChild(div); }; btn.onclick = async () => { const s = comment.value; comment.value = ""; const prompt = `ユーザー: ${s}\nシステム: `; add("ユーザー", s); const text = await llm(prompt); add("システム", text); }; </script>

有料APIと違って、気軽に使い放題なのはうれしい!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS