Upgrade to Pro — share decks privately, control downloads, hide ads and more …

生成AIとソフトウェア開発(toRuby 2023版)

生成AIとソフトウェア開発(toRuby 2023版)

2023/08/05に「とちぎRubyの勉強会 拡大版」でお話した内容

概要
1.Generative AI の現状
2.ソフトウェア開発に直接役立つプロンプト
3.翻訳作業とChatGPT
4.「伝えること」と「翻訳すること」
5.より開発上流で役立つプロンプト
6.形式仕様と文書化
7.さらなる自動化
8.プロンプトエンジニアリング

SAKO Hiroshi

August 07, 2023
Tweet

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 1/3 • 1980年代 – ワークステーション、ソフトウェアツール、CASE の開発 • 到達したのは統合プロダクトライン開発⽀援環境 –

    統合データ辞書、画⾯/帳票設計、トランザクション処理設 計、ストレージ設計、実装⽣成(COBOL)、利⽤者/開 発者⽂書⽣成 – データベース、ウィンドウシステムも⾃作 • ⼀年強で35万ステップのCプログラムを開発し、しばし 廃⼈状態に – B. Meyer の「オブジェクト指向⼊⾨」(アスキー) を翻訳し、オブジェクト指向とソフトウェア⼯学に ⽬覚める • 契約による設計、開放閉鎖原則 2023/07/13 © 2023, Sako Hiroshi, all rights reserved. 3 ツールの時代
  2. ⾃⼰紹介 2/3 • 1990年代 – オブジェクト指向に胸までつかる • ⼤規模プロジェクトの混乱が、仕様の不徹底と曖昧さ、⾮定量 的なプロジェクト管理に起因することを思い知る –

    ⼤規模分散オブジェクト指向プロジェクト • 医療系、物流系(どちらも 〜3000⼈⽉) – 様々な組込機器ソフトのリエンジニアリング(構造整備) • ATM、⾃動精算機、POS端末、⾃動改札、交通管制、プリンタ、 スキャナ、携帯電話などの既存の実装、設計を⾒直して構造化 (フレームワーク化) – 80年代の経験からドメイン指向開発環境の重要性を痛感 • M.Jackson の「ソフトウェア要求と仕様」を訳し、その思いを更 に深める • 運賃精算機開発のための専⽤記述⾔語と検証環境 2023/07/13 © 2023, Sako Hiroshi, all rights reserved. 4 オブジェクト指向の時代
  3. ⾃⼰紹介 3/3 • 2000年代 • 問題領域を直接構成する⼿法に興味(仕様記述 è 実装解の導出) • 技術/⼯程を「対象問題領域」に沿って最適化する過程

    • ex. プリンタエンジンのプロダクトライン化 • フレームワークと開発(分析、設計、実装、資産化)ガイドライン • アーキテクチャ、フレームワーク中⼼のソフトウェア構成法に興味 を覚える • ex. Gofo (good-old fashioned office) • 形式⼿法(VDM++, モデル検査等)をこれらの試みに組み込んで使いた いと思っている • ケアレスミスの排除、仕様書品質の向上、検証品質の向上、よりよい⽂書化、 V&V • 形式仕様記述⾔語の利⽤ • オンライン証券システムの仕様記述 à オプション、マル優システム • ⾮接触ICカードチップの仕様記述 à モバイルフェリカ(仕様バグ0) • FAプログラミング⾔語の意味定義 → ⾔語意味定義 • 国内某チップメーカーの仕様記述 → 外部IF・ハードウェアIF 2023/07/13 © 2023, Sako Hiroshi, all rights reserved. 5 形式⼿法の時代 この頃一番 Ruby をヘビーに使っていた:ETLツール、動くフレームワーク仕様書、etc…
  4. 関⼼・動機の変遷 2023/07/13 © 2023, Sako Hiroshi, all rights reserved. 6

    ツール モジュラリティ 形式⼿法 ⽣産性の向上 柔軟性の向上 抽象化による再利⽤性の向上 信頼性の向上 保守性の向上 コミュニケーションの向上 next ..? Unix / WS Object-Oriented Formal Method GAI 再びツールに回帰しようかと考えていたとこ ろにGAIの⼤波🌊が
  5. 内容 • Generative AI の現状 • ソフトウェア開発に直接役⽴つプロンプト • 翻訳作業とChatGPT •

    「伝えること」と「翻訳すること」 • より開発上流で役⽴つプロンプト • 形式仕様と⽂書化 • さらなる⾃動化 • プロンプトエンジニアリング • 考察 • まとめ © 2023, Sako Hiroshi 11 2023/08/05
  6. Generative AI の現状 • 新しい⾔語モデル • 昨年末に OpenAI が ChatGPT

    を発表、⽂脈を意識した⾼度な対 話を可能にした。無料で提供されていることもあり⼀気にブ レーク • API (ChatGPT API)も発表されて、さまざまなアプリケー ションへの組み込みが始まった • テック企業各社はそれぞれの取り組みを⾏っている • Microsoft:検索エンジン Bing への OpenAI の GPTの取り込み • Google:独⾃の⾔語モデル LaMDA (PaLM2)を組み込んだ チャット Bard • DeepMind:チャットAI の Sparrow を開発中であると報じられ る • Facebook:⾔語モデル LLaMA を研究者向けに提供 © 2023, Sako Hiroshi 12 2023/08/05
  7. Generative AI を使った様々なツール例(1) • ChatGPT • 単純にインタラクティブに使う以外に、ツールに組み込んで 使うこともできる。Generative AIブームの⽴役者。 •

    これまで2021年9⽉までの知識しか使えなかったが、新しいプ ラグイン機能によって最新知識にもアクセスできるように なった(しかし遅いし不安定) • Bing Chat • Microsoft が Edge ブラウザに組み込んだ Generative AI チャット。 ChatGPT相当の能⼒にリアルタイムネット検索機能を持ってい る • Bard • Google が作成したチャットボット、動作は軽快。ChatGPTとほ ぼ同様の能⼒を持つ予定だが、公開されてまだ⽇が浅いため かいろいろと不都合がみうけられる 2023/08/05 © 2023, Sako Hiroshi 13
  8. Generative AI を使った様々なツール例(2) • GitHub Copilot • VSCodeに組み込んで利⽤する。 • 様々なコーディングアシスタント機能を提供する

    • NotionAI • 多機能メモツール Notion に AI (OpenAI, Anthropic)を 使った執筆、要約、翻訳機能などが付け加わったもの • Perplexity • AI 付き検索ツール、検索結果をコンパクトにサマリーし て答えてくれる。同時にその検索結果に関する証拠を⽰ すためのリンクも⽰されるので事実を検索する際には ChatGPT よりも有⽤。 • Etc … ⾬後の筍のようにたくさんのツールが⽣まれ ている 2023/08/05 © 2023, Sako Hiroshi 14
  9. コーディングアシスト(1/3) 【⼈間】指定したURLにアクセスして、そのページのタイトルを出⼒する Python のコードを作成 -------(ここから下↓がGenerative AIの出⼒。以下同じ) 以下はPythonのrequestsとbeautifulsoup4ライブラリを使⽤して、指定したURLにアクセスし、そのページの タイトルを出⼒するコードです。 ```python import

    requests from bs4 import BeautifulSoup url = "https://www.example.com" response = requests.get(url) soup = BeautifulSoup(response.content, "html.parser") title = soup.title.string print(title) ``` まず、requestsライブラリをインポートしてURLにアクセスします。そして、beautifulsoup4ライブラリを使っ てHTMLページから情報を抽出します。ここで、response変数にHTMLページの内容が格納され、BeautifulSoup オブジェクトのsoupを作成して、そのタイトルを取得し、最後に出⼒します。 © 2023, Sako Hiroshi 16 ChatGPTにコード⽣成を依頼 2023/08/05 コードが⽣成されるだけでなく、その説明も同時に⽣成されている この「サービス精神の旺盛さ」が ChatGPT の特徴の⼀つ
  10. 2023/08/05 © 2023, Sako Hiroshi 17 Rubyで⽣成 – getTitle01.rb require

    'net/http' require 'uri' require 'nokogiri' def get_title(url) # URLをパース uri = URI.parse(url) # 指定したURLにアクセス response = Net::HTTP.get_response(uri) # レスポンスボディをNokogiriでパース doc = Nokogiri::HTML.parse(response.body) # titleタグのテキストを取得 title = doc.title return title end puts get_title("http://example.com")
  11. コーディングアシスト(2/3) 【⼈間】url をコマンドラインから取得できるようにして下さい ------- 以下は、Python の requests ライブラリを使⽤して、指定された URL からページタイトルを取得し、出⼒するコード例です。また、sys

    ライブラリを使⽤して、 コマンドラインから url を受け取ります。 ```python import sys import requests from bs4 import BeautifulSoup # コマンドラインから url を受け取る url = sys.argv[1] # requests ライブラリを使⽤して、HTML ページを取得する response = requests.get(url) # BeautifulSoup ライブラリを使⽤して、HTML ページからタイトルを抽出する soup = BeautifulSoup(response.text, 'html.parser') title = soup.find('title').text # タイトルを出⼒する print(title) ``` このコードを `get_title.py` という名前で保存し、コマンドラインから次のように実⾏できます。 ``` python get_title.py https://www.google.com/ © 2023, Sako Hiroshi 18 URLが固定だったので、引数として与えられるように依頼 引数の取り込みが追加された 2023/08/05
  12. 2023/08/05 © 2023, Sako Hiroshi 19 Rubyで⽣成 – getTitle02.rb require

    'net/http' require 'uri' require 'nokogiri' def get_title(url) # URLをパース uri = URI.parse(url) # 指定したURLにアクセス response = Net::HTTP.get_response(uri) # レスポンスボディをNokogiriでパース doc = Nokogiri::HTML.parse(response.body) # titleタグのテキストを取得 title = doc.title return title end if ARGV.length != 1 puts "Usage: ruby #{__FILE__} <url>" exit end puts get_title(ARGV[0])
  13. コーディングアシスト(3/3) 【⼈間】指定した URL が存在しないときにはエラーメッセージを出して終了するようにして下さい。 ------- 以下に、指定した URL からタイトルを取得する Python コードを⽰します。

    ```python import sys import requests from bs4 import BeautifulSoup # コマンドライン引数から URL を取得する url = sys.argv[1] # URL にアクセスして HTML を取得する response = requests.get(url) # ステータスコードが 200 以外の場合はエラーメッセージを出⼒して終了する if response.status_code != 200: print(f"Error: {response.status_code}") sys.exit() # BeautifulSoup を使って HTML からタイトルを取得する soup = BeautifulSoup(response.content, 'html.parser') title = soup.title.string # タイトルを出⼒する print(title) ``` このコードでは、まず `sys.argv[1]` を使ってコマンドラインから URL を取得し、`requests.get()` を使ってその URL にアクセスして HTML を取得します。 次に、`response.status_code` をチェックして、ステータスコードが 200 でない場合にはエラーメッセージを出⼒してプログラムを終了します。最後に、 `BeautifulSoup` を使って HTML からタイトルを取得し、それを出⼒します。 引数が⾜りない場合は考えていない URLが存在しないときという指定を拡⼤解 釈して対処している © 2023, Sako Hiroshi 20 URLがないときはエラーで終了するように依頼 2023/08/05
  14. 2023/08/05 © 2023, Sako Hiroshi 21 Rubyで⽣成 – getTitle03.rb require

    'net/http' require 'uri' require 'nokogiri' def get_title(url) # URLをパース uri = URI.parse(url) # 指定したURLにアクセス response = Net::HTTP.get_response(uri) # レスポンスが成功でない場合、エラーメッセージを出⼒して終了 unless response.is_a?(Net::HTTPSuccess) puts "Failed to access the URL: #{url}" exit end # レスポンスボディをNokogiriでパース doc = Nokogiri::HTML.parse(response.body) # titleタグのテキストを取得 title = doc.title return title end if ARGV.length != 1 puts "Usage: ruby #{__FILE__} <url>" exit end puts get_title(ARGV[0]) 実はここで例外が出てしまう
  15. 2023/08/05 © 2023, Sako Hiroshi 22 Rubyで⽣成 – getTitle04.rb require

    'net/http' require 'uri' require 'nokogiri' def get_title(url) # URLをパース uri = URI.parse(url) response = nil begin # 指定したURLにアクセス response = Net::HTTP.get_response(uri) rescue puts "Failed to access the URL: #{url}" exit end # レスポンスが成功でない場合、エラーメッセージを出⼒ して終了 unless response.is_a?(Net::HTTPSuccess) puts "Failed to access the URL: #{url}" exit end # レスポンスボディをNokogiriでパース doc = Nokogiri::HTML.parse(response.body) # titleタグのテキストを取得 title = doc.title return title end if ARGV.length != 1 puts "Usage: ruby #{__FILE__} <url>" exit end puts get_title(ARGV[0])
  16. レビューアシスト 【⼈間】Find problems with the following code ------- このコードにはいくつかの問題があります。エラー処理や例外処理が不⾜してい ます。

    以下は、修正したコードです。修正点についてはコメントで説明しています。 ```python import sys import requests from bs4 import BeautifulSoup # コマンドライン引数から URL を取得する try: url = sys.argv[1] except IndexError: print("Error: URL not specified") sys.exit() # URL にアクセスして HTML を取得する try: response = requests.get(url) except requests.exceptions.RequestException as e: print(f"Error: {e}") sys.exit() # ステータスコードが 200 以外の場合はエラーメッセージを出⼒して終了する if response.status_code != 200: print(f"Error: {response.status_code}") sys.exit() # BeautifulSoup を使って HTML からタイトルを取得する soup = BeautifulSoup(response.content, 'html.parser') title = soup.title.string # タイトルを出⼒する print(title) ``` 変更内容: * `url` の取得部分で `IndexError` が発⽣する可能性があるため、`try- except` ⽂で例外処理を追加しています。 * `requests.get()` の例外処理を追加しています。 * ステータスコードが200以外の場合はエラーメッセージを表⽰し、 `sys.exit()` を使⽤してプログラムを終了するようにしました。 © 2023, Sako Hiroshi 23 先のコードに問題がないかレビューを依頼、問題があれば指摘し修正案を出す 2023/08/05
  17. 2023/08/05 © 2023, Sako Hiroshi 25 Rubyで⽣成 – getTitle05.rb(2) require

    'net/http' require 'uri' require 'nokogiri' def get_title(url) uri = nil response = nil begin # URLをパース uri = URI.parse(url) # 指定したURLにアクセス response = Net::HTTP.get_response(uri) rescue URI::InvalidURIError puts "Invalid URL: #{url}" exit rescue puts "Failed to access the URL: #{url}" exit end # レスポンスが成功でない場合、エラー メッセージを出⼒して終了 unless response.is_a?(Net::HTTPSuccess) puts "The URL responded with an error: #{url}" exit end # レスポンスボディをNokogiriでパース doc = Nokogiri::HTML.parse(response.body) # titleタグのテキストを取得 title = doc.title return title end if ARGV.length != 1 puts "Usage: ruby #{__FILE__} <url>" exit end puts get_title(ARGV[0])
  18. ここまでの⼿順 • 仕事を依頼 • ここではプログラムの⽣成を依頼 • 仕事の仕様変更を依頼 • 引数の追加 •

    仕事の仕様変更を依頼 • 例外処理の追加 • 結果のレビューを依頼 • 問題点を指摘しさらに処理を追加 2023/08/05 © 2023, Sako Hiroshi 26 ⽣成 内省 ChatGPTの優れ ている(⾯⽩ い)点は、対話 を重ねて答を⽣ 成していけるこ と ⽣成した結果を 評価させること もできる 分かってるなら最初 からやれと⾔いたい ところだが …
  19. 解析アシスト(1) 【⼈間】以下の VDM-SL のコードを説明して下さい。 types ⾦額型 = int; 商品券型 ::

    商品券媒体 : 商品券媒体型 商品券額⾯ : ⾦額型; 商品券媒体型 = <電⼦>|<紙>; 商品券セット型 :: 商品券媒体 : 商品券媒体型 商品券構成 : set of 商品券型 inv ts == ts.商品券媒体 = <電⼦> => forall t in set ts.商品券構成 & t.商品券媒体 = <電⼦> and ts.商品券媒体 = <紙> => forall t in set ts.商品券構成 & t.商品券媒体 = <紙>; © 2023, Sako Hiroshi 28 形式仕様記述⾔語VDM-SL のコードの解析を依頼 2023/08/05
  20. 解析アシスト(2) このコードは、商品券に関する情報を整理するためのルールを定義しています。以下の4つの要素が 含まれています。 • ⾦額: これは、お⾦の⾦額を表します。 • 商品券: これは、商品券に関する情報を表すための要素で、2つの部分から構成されています。 •

    商品券のタイプ: 電⼦タイプの商品券か、紙のタイプの商品券かを⽰します。 • 商品券の⾦額: 商品券の価値(お⾦の⾦額)を⽰します。 • 商品券のタイプ: これは、商品券が電⼦タイプか紙タイプかを⽰す要素です。 • 商品券のグループ: これは、同じタイプの商品券をまとめたもので、2つの部分から構成されてい ます。 • 商品券のタイプ: グループ内のすべての商品券のタイプを⽰します(電⼦か紙か)。 • 商品券のリスト: グループに含まれる商品券の⼀覧を⽰します。 このコードには、商品券のグループに関する特別なルールが定義されています。このルールは、商 品券のグループ内のすべての商品券が同じタイプであることを保証します。例えば、商品券のグ ループが電⼦タイプの場合、そのグループ内のすべての商品券は電⼦タイプでなければならないと いうことです。同様に、商品券のグループが紙タイプの場合、そのグループ内のすべての商品券は 紙タイプでなければならないということです。 【⼈間】プログラミングに関する知識がない業務専⾨家にわかるように、説明して下さい。 © 2023, Sako Hiroshi 29 2023/08/05
  21. 解析アシスト(3) このVDM-SL形式仕様は、商品券に関するデータ構造を定義しています。プログラマーとして、この仕様を実際のプロ グラムに変換する際に、以下のデータ構造と制約を考慮する必要があります。 • ⾦額型: これは整数型で、⾦額を表します。プログラムで⾦額を扱う際に、整数型を使⽤してください。 • 商品券型: これは構造体で、商品券の情報を表します。プログラムでは、クラスや構造体を使⽤して、以下の2つの プロパティを持つオブジェクトを定義します。

    • 商品券媒体: 商品券が電⼦媒体か紙媒体かを表す列挙型を定義します。例えば、C++ではenum class、Javaでは enum、PythonではEnumを使⽤します。 • 商品券額⾯: ⾦額型(整数型)を使⽤して、商品券の額⾯⾦額を表します。 • 商品券セット型: これは構造体で、同じ媒体の商品券のセットを格納します。プログラムでは、クラスや構造体を 使⽤して、以下の2つのプロパティを持つオブジェクトを定義します。 • 商品券媒体: 商品券媒体型を使⽤して、商品券セット内のすべての商品券の媒体を表します。 • 商品券構成: 商品券型のコレクション(リスト、セット、配列など)を使⽤して、商品券セットに含まれる商 品券のリストを表します。 この仕様には、商品券セット型に対する制約(不変条件)が定義されています。この制約を遵守するために、商品券 セットに商品券を追加する際には、追加しようとする商品券の媒体がセットの媒体と⼀致することをチェックするメ ソッドや関数を実装してください。例えば、クラスのメソッドやコンストラクタ内でチェックを⾏い、不⼀致があれ ば例外を投げるようにします。 実際にプログラムを実装する際は、使⽤するプログラミング⾔語の機能や慣習に従って、これらのデータ構造と制約 をコードに反映させてください。 【⼈間】この VDM-SL を形式仕様として受け取って実際のプログラミングを⾏うエンジニア向けの解説を⾏って下さい。 © 2023, Sako Hiroshi 30 2023/08/05 前のスライドでは「商品券のグループに関する特別なルール」と書かれていた
  22. 解析アシスト(4) import sys import requests from bs4 import BeautifulSoup from

    urllib.parse import urlparse def is_valid_url(url): try: result = urlparse(url) return all([result.scheme, result.netloc]) except ValueError: return False def get_page_title(url): try: response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.content, "html.parser") title = soup.title.string if soup.title else "No title found" return title else: return f"Error: {response.status_code}" except requests.RequestException as e: return f"Error: {str(e)}" if __name__ == "__main__": if len(sys.argv) > 1: url = sys.argv[1] if is_valid_url(url): title = get_page_title(url) print(title) else: print("Error: Invalid URL") else: print("Usage: python get_page_title.py <URL>") 2023/08/05 © 2023, Sako Hiroshi 31 リバースエンジニアリング
  23. 解析アシスト(5) 2023/08/05 © 2023, Sako Hiroshi 32 https://zenn.dev/hashcc/books/0d76aee40d04d0/viewer/6cbcde より with

    recipes_count as ( select ユーザーID, count(レシピID) as レシピ投稿数 from recipes group by ユーザーID order by レシピ投稿数 desc ), tsukurepos_count as ( select ユーザーID, count(つくれぽID) as つくれぽ投稿数 from tsukurepos group by ユーザーID order by つくれぽ投稿数 desc ), publications_count as ( select recipes_count.ユーザーID, recipes_count.レシピ投稿数, tsukurepos_count.つくれぽ投稿数 from recipes_count full join tsukurepos_count as recipes_count.ユーザーID = tsukurepos_count.ユー ザーID order by ユーザーID ) select users.ユーザーID, ニックネーム, 登録⽇時, レシピ投稿数, つくれぽ投稿数 from publications_count right join users as publications_count.ユーザーID = users.ユーザーID order by ユーザーID 解析を依頼
  24. 解析アシスト(6) 2023/08/05 © 2023, Sako Hiroshi 33 このSQLは、ユーザーごとのレシピと「つくれぽ」(おそらくユーザーによる作成報 告やレビューなどの意味)の投稿数を取得し、それをユーザー情報と結合して出⼒す るという処理をしています。各部分の詳細な解説は以下の通りです:

    1.recipes_countという名前のCTE(Common Table Expression: 共通テーブル式):recipes テーブルから各ユーザーのレシピ投稿数をカウントしています。ユーザーIDごとにレ シピIDをカウントし、その結果をレシピ投稿数としています。 2.tsukurepos_countという名前のCTE:tsukureposテーブルから各ユーザーのつくれぽ投 稿数をカウントしています。ユーザーIDごとにつくれぽIDをカウントし、その結果を つくれぽ投稿数としています。 3.publications_countという名前のCTE:前の2つのCTEをユーザーIDでfull joinしています。 これにより、レシピ投稿とつくれぽ投稿の両⽅が存在するユーザーだけでなく、⽚⽅ だけ存在するユーザーの情報も網羅されます。 4.最後のselect⽂:publications_count(レシピ投稿数とつくれぽ投稿数を持つテーブ ル)とusersテーブルをユーザーIDでright joinしています。このright joinにより、users テーブルに存在する全ユーザーの情報が出⼒され、対応するレシピ投稿数とつくれぽ 投稿数が存在する場合はそれが結合されます。存在しない場合はNULLになります。 出⼒される列は、ユーザーID、ニックネーム、登録⽇時、レシピ投稿数、つくれぽ投 稿数で、結果はユーザーIDでソートされます。この結果は、全ユーザーのレシピ投稿 数とつくれぽ投稿数を⼀覧できるリストとなります。
  25. 翻訳を⽀援する⽣成型AIの使⽤例 • 単純な翻訳 • ⽂体の模索 • 推敲・⽂章校正 • ⽤語の展開 •

    表現の探索 • 背景知識の補⾜ 2023/08/05 © 2023, Sako Hiroshi 35 以下主に ChatGPT(GPT-4)を使⽤します
  26. 単純な翻訳 2023/08/05 © 2023, Sako Hiroshi 36 Tesla may be

    a relative newcomer compared to legacy companies like GM and Ford, but it has adopted an age-old tactic in the industry: price wars. The automaker has lowered the sticker price on its vehicles in the U.S. and China numerous times since last fall. And any speculation that the cuts would stop in 2023 ended in January when Tesla drastically slashed prices by as much as 20%. テスラは、GMやフォードといったレガシー企業に⽐べれば⽐較的新しい企業かもし れないが、業界では古くからある戦術、価格競争を採⽤している。 テスラは昨年秋以降、⽶国と中国で何度も⾞の本体価格を引き下げてきた。そして、 2023年には値下げをやめるという憶測は、1⽉にテスラが20%もの⼤幅な値下げを ⾏ったことで終わりました。 テスラは、GMやフォードのような歴史ある企業と⽐較して⽐較的新参者かもしれま せんが、業界で古くからある戦術、つまり価格競争を採⽤しています。 昨年秋以降、⾃動⾞メーカーはアメリカと中国で⾃社の⾞両のステッカー価格を何 度も下げています。そして、2023年に値下げが⽌まるという憶測は、1⽉にテスラが 価格を最⼤20%も⼤幅に引き下げたことで終わりました。 https://techcrunch.com/2023/04/07/teslas-strategy-to-fuel- ev-sales-keep-cutting-prices/ 冒頭⽂章 DeepL ChatGPT (GPT-4) ⼈間 素のままだとあまり「性能」は良くない
  27. ⽂体の模索(⽂脈の設定) 2023/08/05 © 2023, Sako Hiroshi 37 あなたはニュース翻訳者です。⼀般的な経済新聞読者層を相⼿の和訳を⾏ います。直訳体はなるべく避けて読みやすい⽂体で訳出して下さい。訳⽂ の語尾は「です、ます」ではなく「だ、である」にしてください。

    英⽂:Tesla may be a relative newcomer compared to legacy companies like GM and Ford, but it has adopted an age-old tactic in the industry: price wars. The automaker has lowered the sticker price on its vehicles in the U.S. and China numerous times since last fall. And any speculation that the cuts would stop in 2023 ended in January when Tesla drastically slashed prices by as much as 20%. テスラは、GMやフォードといった歴史ある企業に⽐べると⽐較的新しい存 在だが、業界で古くからある戦術である価格競争を採⽤している。 昨年の秋以降、同社はアメリカと中国で⾃社製⾞両の価格を幾度も引き下 げてきた。そして、今年2023年には値下げが⽌まるのではないかという憶 測は、1⽉にテスラが価格を最⼤20%も⼤幅に引き下げたことで終わりを告 げた。 ChatGPT (GPT-4) ⼈間 ⽂脈 制約 形式
  28. 推敲・⽂章校正 2023/08/05 © 2023, Sako Hiroshi 38 「そして、」という接続詞を「だが、」に変えるとどのような効果がありますか? 「そして、」から「だが、」への変更は、接続詞のニュアンスが変わり、⽂のつなが り⽅や⽂の意味合いが異なります。具体的には以下のような効果があります。

    「そして、」は、前の⽂と後の⽂が時間的・論理的に続いていることを⽰す接続詞で す。これにより、話の流れが⾃然で順序⽴てられたものになります。 ⼀⽅、「だが、」は、前の⽂と後の⽂が対照的な内容や、予想外の結果を⽰す場合に 使⽤される接続詞です。これにより、読者は前の⽂とは違う⽅向性を期待し、サプラ イズやコントラストが強調される効果があります。 この場合、「だが、」に変更することで、値下げが⽌まるという憶測と、実際に値下 げが続いたという事実とのギャップや対照性を強調することができます。 テスラは、GMやフォードといった歴史ある企業に⽐べると⽐較的新しい存在だが、業界で古くからある戦術である 価格競争を採⽤している。 昨年の秋以降、同社はアメリカと中国で⾃社製⾞両の価格を幾度も引き下げてきた。そして、今年2023年には値下 げが⽌まるのではないかという憶測は、1⽉にテスラが価格を最⼤20%も⼤幅に引き下げたことで終わりを告げた。 ChatGPT (GPT-4) ⼈間 ChatGPT (GPT-4) 前⾴より 「そして」ではなく、別の接続詞「だが」を使っ たらどうだろうか?と聞いてみた
  29. ⽤語の展開(1) 2023/08/05 © 2023, Sako Hiroshi 42 英⽂:Last year’s techwide

    reckoning continues. In 2023, layoffs have yet again cost tens of thousands of tech workers their jobs; this time, the workforce reductions have been driven by the biggest names in tech like Google, Amazon, Microsoft, Yahoo and Zoom. Startups, too, have announced cuts across all sectors, from crypto to enterprise SaaS. 昨年のテック業界全体の状況が続いている。2023年も、再び数万⼈のテック労働者が失 業することになり、今回はGoogle、Amazon、Microsoft、Yahoo、Zoomといったテック業 界の⼤⼿企業が⼈員削減を主導している。また、スタートアップ企業も、クリプトから エンタープライズSaaSまで、あらゆる分野で⼈員削減を発表している。 特殊な⽤語、専⾨⽤語には簡単な説明を加えて下さい。 昨年のテック業界全体の状況が続いている。2023年も、再び数万⼈のテック労働者が失 業することになり、今回はGoogle、Amazon、Microsoft、Yahoo、Zoomといったテック業 界の⼤⼿企業が⼈員削減を主導している。また、スタートアップ企業も、クリプト(仮 想通貨)からエンタープライズSaaS(企業向けのクラウドソフトウェアサービス)まで、 あらゆる分野で⼈員削減を発表している。 ChatGPT (GPT-4) ⼈間 ChatGPT (GPT-4) ⼈間 https://techcrunch.com/2023/04/07/tech-industry-layoffs/ 冒頭⽂章
  30. ⽤語の展開(2) 2023/08/05 © 2023, Sako Hiroshi 43 あなたはニュース翻訳者です。⼀般的な経済新聞読者層を相⼿の和訳を⾏いま す。直訳体はなるべく避けて読みやすい⽂体で訳出して下さい。特殊な⽤語、 専⾨⽤語は残しつつ簡単な説明を加えて下さい。訳⽂の語尾は「です、ます」

    ではなく「だ、である」にしてください。 英⽂:Last year’s techwide reckoning continues. In 2023, layoffs have yet again cost tens of thousands of tech workers their jobs; this time, the workforce reductions have been driven by the biggest names in tech like Google, Amazon, Microsoft, Yahoo and Zoom. Startups, too, have announced cuts across all sectors, from crypto to enterprise SaaS. 昨年のテック業界全体の厳しい状況が続いている。2023年も、再び数万⼈のテック労働 者が職を失っており、今回はGoogle、Amazon、Microsoft、Yahoo、Zoomといった業界の ⼤⼿企業が⼈員削減を牽引している。また、仮想通貨から企業向けクラウドソフトウェ アサービス(エンタープライズSaaS)まで、あらゆる分野でスタートアップ企業も⼈員 削減を発表している。 ChatGPT (GPT-4) ⼈間 最初のプロンプトと合体させてみた結果
  31. 表現の探索 2023/08/05 © 2023, Sako Hiroshi 44 英⽂:The reasoning behind

    these workforce reductions follows a common script, citing the macroeconomic environment and a need to find discipline on a tumultuous path to profitability. Still, tracking the layoffs helps us to understand the impact on innovation, which companies are facing tough pressures and who is available to hire for the businesses lucky to be growing right now. It also, unfortunately, serves as a reminder of the human impact of layoffs and how risk profiles may be changing from here. これらの⼈員削減の背後にある理由は、⼀般的に景気環境や利益を追求する波乱含みの 道筋で規律を⾒出す必要性を訴えている。それでも、リストラの動向を追跡することで、 イノベーションへの影響や、厳しいプレッシャーに直⾯している企業、そして現在成⻑ している幸運な企業が採⽤できる⼈材の動向を理解することができる。同時に、リスト ラの⼈的影響や、今後のリスクプロファイルがどのように変わっていくのかを思い起こ させる効果もある。 “unfortunately” に込められた気持ちをもう少しうまく反映して下さい。 これらの⼈員削減の背後にある理由は、⼀般的に景気環境や利益を追求する波乱含みの 道筋で規律を⾒出す必要性を訴えている。それでも、リストラの動向を追跡することで、 イノベーションへの影響や、厳しいプレッシャーに直⾯している企業、そして現在成⻑ している幸運な企業が採⽤できる⼈材の動向を理解することができる。しかしこの事実 は、リストラの⼈的影響や、今後のリスクプロファイルがどのように変わっていくのか を痛感させるものでもある。 ChatGPT (GPT-4) ⼈間 ChatGPT (GPT-4) ⼈間
  32. 背景知識の補⾜ 2023/08/05 © 2023, Sako Hiroshi 45 But at the

    same time, it’s a lot to sort through over a beer or coffee when someone asks “what about all this GPT stuff, kind of scary how smart AI is getting, right?” Where do you start — with Aristotle, the mechanical Turk, the perceptron or “Attention is all you need”? だが同時に、ビールやコーヒーを飲みながら誰かが「GPT関連の話って、AIがどんど ん賢くなっていくのって怖いよね?」と聞いてくるとき、どこから話を始めればいい のだろうか――アリストテレス、機械式トルコ⼈、パーセプトロン、それとも「注意 は必要だけど⼗分」からだろうか? ここで⾔う “Attention is all you need” というのは何かの引⽤ですか? はい、それはニューラルネットワークの設計における重要な進歩を⽰す研究論⽂のタイトルです。"Attention is All You Need"という論⽂は、Googleの研究者によって2017年に発表され、Transformerという新しいモデルを紹介しま した。 このモデルは、ニューラルネットワークが情報を処理する⽅法を変⾰し、特に⾃然⾔語処理(NLP)におけるタス ク、例えば⽂章の翻訳や要約などに⼤きな影響を与えました。"Attention"とは、モデルが⼊⼒データの中で特定の 部分に重点を置く能⼒を指します。Transformerモデルはこの"Attention"メカニズムを⽤いて、⼀部の情報に重点を 置きつつ全体の⽂脈を理解することができます。 この論⽂とその中で提案されたアイデアは、後のGPT(Generative Pre-training Transformer)のような⼤規模な⾔語 モデルの開発に重要な役割を果たしました。これらのモデルは現在、多くのAIアプリケーションで広く利⽤されて います。 ChatGPT (GPT-4) ⼈間 ChatGPT (GPT-4) ⼈間 https://techcrunch.com/2023/04/03/the-great- pretender/ の⼀部を引⽤ とはいえこうした事実の最終確認はまだ⼈間が 確認する必要がある
  33. 背景知識の補⾜(2) 2023/08/05 © 2023, Sako Hiroshi 46 これが Google の論⽂の引⽤だということを知らない⼈に向けての解説も追

    加して訳出して下さい。 だが同時に、ビールやコーヒーを飲みながら誰かが「GPT関連の話ってさあ、 AIがどんどん賢くなっていくのって怖いよね?」と聞いてくるとき、どこか ら話を始めればいいのだろうか――アリストテレス、機械式トルコ⼈、パー セプトロン、それとも「Attention Is All You Need」からだろうか?(この 「Attention Is All You Need」とは、Google Brainチームが発表した有名な論⽂ のことで、Transformerと呼ばれる新しいニューラルネットワークアーキテク チャが紹介されており、GPTなどの現代のAIモデルにも⼤きな影響を与えて いる)。 ChatGPT (GPT-4) ⼈間 ⼈間が少し⼿を⼊れています
  34. 背景知識の補⾜(3) 2023/08/05 © 2023, Sako Hiroshi 47 最新モデルは GPT-4 ではありませんか?

    ChatGPT (GPT-4) ⼈間 最新の ChatGPT(GPT-4)ではウェブをブラウジングできるよう になったので最新情報に関しては検証がしやすくなりました この"attention"メカニズムの導⼊は、NLPの分野におけるパフォーマンスの⼤ 幅な改善をもたらし、多くの最新のNLPモデル(GPT-3など)で使われていま す。 ChatGPT (GPT-4)
  35. ふりかえり(AI⾃⾝の) 2023/08/05 © 2023, Sako Hiroshi 48 1. ⽂脈の理解: ChatGPTは、⽂脈を正確に理解することが難しい場合があります。

    そのため、ユーザーは、AIが⽂脈を正確に把握しているか確認する必要があ ります。 2. 専⾨⽤語と説明: ChatGPTは専⾨⽤語や特殊な表現を適切に扱うことが難しい 場合があります。ユーザーは、AIが適切な訳語や説明を提供しているかどう か注意深く確認する必要があります。 3. ⽂体や表現: ChatGPTは時々、要求された⽂体や表現を適切に提供しないこと があります。ユーザーは、翻訳が要求された⽂体や表現に従っているかを確 認し、必要に応じて修正する必要があります。 4. 誤解や誤訳: ChatGPTは、特定の表現や意味を誤って解釈することがあります。 ユーザーは、翻訳が原⽂の意味を正確に捉えているかを確認し、誤訳があれ ば修正する必要があります。 5. 反復的なフィードバック: ChatGPTは完璧なAIではありませんが、ユーザーが 繰り返しフィードバックを提供することで改善される可能性があります。 ユーザーは、問題がある場合にはAIに対して指摘し、改善を促すことが重要 です。 さて、ここまでのやり取りを振り返って、ChatGPTを翻訳アシスタント として使う場合の留意点を5つ挙げて下さい。 ChatGPT (GPT-4) ⼈間
  36. 別の視点:何のための「翻訳」? 2023/08/05 © 2023, Sako Hiroshi 50 やりたいのは「翻訳」?それとも「伝達」? もしやりたい事が「伝達」ならChatGPT に「翻訳」

    を頼むのではなく「伝えたい事」を教えて作⽂し てもらうという戦略も。 → Generative の特性を最⼤に活かす⽅向性へ
  37. 2023/08/05 © 2023, Sako Hiroshi 51 以下の内容を伝える⽂章を英語で作って下さい。 出⼒形式はマークダウン形式とします。 多くの応募を促す⽂⾔も⼊れてください。 -----

    ⻘空キャンプ場予約開始 受付は4⽉21⽇10時から 応募資格は18歳以上なら誰でも ウェブページ(aozora-camp.com)のみで受付 第三希望まで⼊⼒して、応募書多数の場合は抽選 お問い合わせはメールアドレス xxx@yyy まで もちろん最終チェックは必要 だが、⽇本語の原稿を「翻 訳」するよりは⾃然な⽂章が ⽣成される可能性が⼤きい?
  38. 2023/08/05 © 2023, Sako Hiroshi 53 もちろん⽇本語でも … 以下の内容を伝える⽂章を英語で作って下さい。 出⼒形式はマークダウン形式とします。

    多くの応募を促す⽂⾔も⼊れてください。 ----- ⻘空キャンプ場予約開始 受付は4⽉21⽇10時から 応募資格は18歳以上なら誰でも ウェブページ(aozora-camp.com)のみで受付 第三希望まで⼊⼒して、応募書多数の場合は抽選 お問い合わせはメールアドレス xxx@yyy まで
  39. 他の例:沖縄の医師である⾼⼭義浩⽒の投稿より • ⽇本の公⽴病院が提供する⾷事が⼝に合わない 外国⼈患者のため、ウーバーイーツを注⽂する ことを容認する英語の説明⽂書を作ってくださ い。⽂書に盛り込むべき点は以下です。 • 注⽂できるのは昼⾷のみです。⾷中毒のリスク があるので、⽣ものはダメです。お菓⼦類は注 ⽂しないでください。

    • 注⽂するときは、必ず看護師に事前に⾔ってく ださい。何を注⽂するのかも⼝頭で教えてくだ さい。 • 注⽂はクレジット決済としてください。病院は 現⾦による⽀払いを代⾏しません。 • ⼊院中に体調の変化があるとき、検査を予定し ているときなど、注⽂しないようにお願いする ことがあります。従ってください。 Title: Ordering Uber Eats for Foreign Patients at Japanese Public Hospitals In response to foreign patients who may find the meals provided by Japanese public hospitals not to their liking, we have decided to allow ordering from Uber Eats under certain conditions. Please take note of the following points when placing an order: You may only order lunch. To minimize the risk of food poisoning, please avoid ordering any raw food items. Additionally, please refrain from ordering sweets and snacks. Before placing your order, please inform the nurse in charge. Verbally communicate your intended order to the nurse as well. Please use a credit card for payment. The hospital will not handle cash payments on your behalf. There may be instances when we ask you not to place an order, such as when you experience changes in your physical condition during your hospital stay or when tests are scheduled. In these cases, please comply with our request. 2023/08/05 © 2023, Sako Hiroshi 54 翻訳そのものではなく、伝達内容に基いた成果物
  40. 翻訳 vs ⽣成 • 「翻訳」は何も英語から⽇本語への変換だけを 指しているわけではない • ある記述を別の記述へ、⽬的に応じて書き換え る⾏為も「翻訳」の⼀種と考えて良い •

    たとえば • 要約もパラフレーズも翻訳の⼀種 • 箇条書きを⽂章にするのも翻訳の⼀種 • 常識で⾏間を埋めるのも翻訳の⼀種 … • Etc … • これらの作業に Generative AI は⼤きく関わって くる 2023/08/05 © 2023, Sako Hiroshi 55
  41. Model から Representation へ 2023/08/05 © 2023, Sako Hiroshi 56

    伝えたいこと プログラム その他 model 表現1 (⾔語1) 表現2 (⾔語2) 執筆 翻訳 ⽣成 representation representation New! model の世界は常に変化している。 だが、これまでは model の世界に変化が 起きてから representation の世界に反映さ れるまでにコストと時間がかかっていた 作成 + 実は今⽇⼀番強調 したいスライド
  42. 業務⼿順の策定 (1) あなたは業務定義を考える専⾨家です。 以下の記述を読んで販売員のための業 務⼿順書を作成して下さい。 • こがね弁当は持ち帰り弁当屋です • お客さんは店頭で販売員に⼝頭で注⽂します •

    販売員はお客さんの注⽂をタブレットに⼊⼒します • タブレットに⼊⼒する時点でリアルタイムに合計額が計算されます • 店頭に窓⼝があるだけで客席はありません • 注⽂はキッチンに伝達され調理員が作ります • 弁当ができたら販売員がお客さんに弁当を⼿渡し代⾦を受け取ります • 代⾦の決済は、現⾦、クレジットカード、ICカード、バーコード決済が利⽤ できます • お客さんがクーポンを持参していたら会計前にクーポンを受け取って情報を ⼊⼒し割引を⾏います これは全部⼈間の⼊⼒ © 2023, Sako Hiroshi 58 思いついたことを五⽉⾬式に書いている 2023/08/05
  43. 業務⼿順の策定 (2) © 2023, Sako Hiroshi 59 こがね弁当 販売員業務⼿順書 1.お客様の出迎え

    店頭にお客様が来られたら、丁寧に挨拶をして注⽂を受け付けます。 2.注⽂の受付 お客様から⼝頭で注⽂を受け、タブレットに注⽂内容を⼊⼒します。 3.合計額の確認 タブレットに⼊⼒した時点でリアルタイムに合計額が計算されるので、お客様に合計⾦額をお伝 えします。 4.クーポンの確認 お客様がクーポンを持参している場合は、会計前にクーポンを受け取り、タブレットに情報を ⼊⼒して割引を適⽤します。 5.注⽂内容のキッチンへの伝達 タブレットを使って、注⽂内容をキッチンに伝達します。調理員が弁当の調理を 開始します。 6.弁当の受け取りとお客様への⼿渡し 弁当が調理されたら、キッチンから弁当を受け取り、お客様に⼿渡します。 7.代⾦の受取 お客様から代⾦を受け取ります。現⾦、クレジットカード、ICカード、バーコード決済が利⽤できま す。お客様の希望に応じた決済⽅法を選択してください。 8.お客様への感謝の⾔葉 代⾦の受取が完了したら、お客様に感謝の⾔葉を述べ、丁寧にお⾒送りをします。 9.次のお客様の対応 お⾒送りが終わったら、次のお客様の対応に移ります。 以上がこがね弁当の販売員業務の⼿順です。注意深く対応し、お客様に満⾜いただけるサービスを⼼がけてくだ さい。 これは全部 ChatGPT の出⼒ 2023/08/05 販売員の業務を「常識」から推論している
  44. 業務⼿順の策定 (3) © 2023, Sako Hiroshi 60 【⼈間】販売員が使うタブレット端末上のウェブアプリのプロトタイプを作成します。クライアント側はHTML、 埋め込みCSS、埋め込みJavaScript、サーバー側はPythonで⽣成してください。 •

    Python の Flask を使ったプロトタイプを ⽣成してきた。 • 上のプロンプトのままでは動作しな かったが、追加の指⽰を2回⾏った結 果動作するプロトタイプが⽣成された。 数量を変えると合計⾦額が計算される 注⽂を確定すると、サーバー側に注⽂内 容が python の Dict 形式で出⼒される {'items': [{'name': '弁当A', 'price': 500, 'quantity': 1}, {'name': ' 弁当B', 'price': 600, 'quantity': 1}, {'name': '弁当C', 'price': 700, 'quantity': 2}], 'coupon': None, 'paymentMethod': 'cash'} 2023/08/05 ここで想定された業務に利⽤するアプリのプロトタイプ作成を依頼
  45. 業務⼿順の改善 1. オンライン注⽂システムの導⼊ お客様が事前にオ ンラインで注⽂できるシステムを導⼊し、来店時 には待ち時間を短縮させることができます。 2. デジタルメニューの導⼊ デジタルメニューを導⼊ し、お客様が注⽂する際に直接タブレットに注⽂

    を⼊⼒できるようにすることで、注⽂ミスを減ら し、効率を向上させます。 3. セルフレジの設置 セルフレジを設置し、お客様⾃ ⾝が決済を⾏えるようにすることで、販売員の負 担を軽減し、効率を向上させます。 4. 弁当の受け渡し⽅法の改善 弁当の受け渡し時に、 専⽤のトレイや袋を使⽤することで、お客様が持 ち帰りやすくなります。 5. クーポンのデジタル化 デジタルクーポンを導⼊ し、お客様がスマートフォンやタブレットで クーポンを提⽰できるようにすることで、紙の クーポンの管理が不要になり、環境にも優しい です。 6. メニューの変更やキャンペーンの告知 店頭にメ ニューの変更やキャンペーン情報を掲⽰し、お客 様に情報提供を⾏い、リピーターを増やす努⼒を しましょう。 7. 顧客満⾜度調査の実施 お客様からフィードバック を受け取ることができる顧客満⾜度調査を定期的 に実施し、改善点を⾒つけてサービスの質を向上 させましょう。 8. 販売員の研修・教育 販売員が円滑なコミュニケー ションを⾏い、お客様に適切なサービスを提供で きるように、定期的な研修や教育を⾏いましょう。 © 2023, Sako Hiroshi 61 【⼈間】この業務⼿順を改善するアイデアをいくつか出して下さい ⼿順とは直接関係ない話も出てきている 2023/08/05
  46. ⼤きなソフトウェア開発フ ローと Generative AI © 2023, Sako Hiroshi 62 要件定義

    仕様策定 設計 実装 プロンプトエンジニアリングを使った要件抽出 インタビュー案⽣成、疑問点抽出 etc … インタラクティブな設計・実装⽣成 テストケース、テストデータ⽣成 etc … 読者属性に応じたドキュメント⽣成 形式記述を核に知識を効果的に蓄積できるか? 2023/08/05 個⼈的テーマ
  47. 典型的開発フローとGAI(予告編) 2023/08/05 © 2023, Sako Hiroshi 63 アイデア 業務制約 システム制約

    仕様 設計・実装 Business Model Canvas Trace Index Diagram (⼈、物、場所、機能、情報) Formal Spec. (構造、機能、状態) Generated どのステップ もGAIによる⽀ 援が可能
  48. 2023/07/13 © 2023, Sako Hiroshi, all rights reserved. 68 テストケース

    ID ⼊⼒ inbox ⼊⼒ mail isSafeの仮定の結 果 期待される結果 1 [] ("message1", []) 全ての添付ファ イル(0個)が安 全 [("message1", [])] 2 [("message1", [])] ("message2", ["attachment1"]) 全ての添付ファ イル(1個)が安 全 [("message1", []), ("message2", ["attachment1"])] 3 [("message1", []), ("message2", ["attachment1"])] ("message3", ["attachment2", "attachment3"]) 全ての添付ファ イル(2個)が安 全 [("message1", []), ("message2", ["attachment1"]), ("message3", ["attachment2", "attachment3"])] 4 [("message1", []), ("message2", ["attachment1"])] ("message3", ["attachment2", "attachment3"]) 1つの添付ファイ ルが安全でない [("message1", []), ("message2", ["attachment1"])] 5 [] ("message1", ["attachment1"]) 全ての添付ファ イル(1個)が安 全でない [] 6 [] ("message1", []) N/A(添付ファ イルが無いた め) [("message1", [])]
  49. Code Interpreter • ChatGPT Plus ユーザーに開放 • GPT-4 の機能 •

    これまでの ChatGPT は • 情報の整理、要約、変換などを⾏ってくれ るものだったが … • この Code Interpreter の開放によって • データを使った分析や作業がさらに依頼し やすくなった 2023/08/02 © 2023, Sako Hiroshi, all rights reserved 70
  50. Code Interpreter : 例1-1 2023/08/02 © 2023, Sako Hiroshi, all

    rights reserved 71 TOEIC の頻出単語をリストにした TSL(TOEIC Service list 1.2) https://www.newgeneralservicelist.com/toeic-service-list 今回はここからリストをダウンロード 出現頻度順に並べられた TSL_1.2_stats.csv を取得
  51. Code Interpreter : 例2-1 2023/08/02 © 2023, Sako Hiroshi, all

    rights reserved 76 https://catalog.data.gov/dataset/electric-vehicle-population-data Data.gov のカタログより
  52. プロンプトを書く際の2原則 • 原則1 • 明瞭で具体的な指⽰を書くこと • 何が欲しいのかをはっきりさせる • 原則2 •

    モデルに「考える」余裕を与えること • 複数のことをいっぺんに考えさせると混 乱する 2023/08/05 © 2023, Sako Hiroshi 81
  53. (現在)有名な⼿法 • ゼロショット(Zero-shot) • フューショット(Few-shot) • チェインオブソート(Chain of thought) •

    プロンプトプライミング(Prompt priming) • インストラクション(Instruction) • アンカリング(Anchoring) • ネガティブプロンプト(Negative Prompt) • … etc … 2023/08/05 © 2023, Sako Hiroshi 82 細かいテクニックはいろいろあるが⼀所懸命覚えてもあまり意味はない
  54. Memo:Chain of Thought の別例 2023/08/05 © 2023, Sako Hiroshi 86

    GPT とある施設の運営 に必要な職員の種 類はどのようなも の? 職員 ⼀覧 GPT それぞれの職員の タスクはどのよう なもの? タスク ⼀覧 GPT それぞれのタスク の定義(材料、成 果、制約)はどの ようなもの? タスク 定義 ⼀覧 ⼀度にタスク定義⼀覧を出そうとしてもなかなか うまく⾏かないので、段階的に詳細化して⾏く
  55. (現在)有名な⼿法をいくつか4 • プロンプトプライミング(Prompt priming): モデルが特定の⽅式で応答 するように、プロンプトを⼯夫する⽅法です。例えば、モデルに「教科 書のように説明してください」と指⽰すると、モデルはよりフォーマル で詳細な応答を⽣成する可能性があります。 • インストラクション:

    モデルに具体的な指⽰を与える⽅法です。例えば、 「200語以内で説明してください」や「簡単な⾔葉で説明してください」 といった指⽰があります。 • アンカリング(Anchoring): モデルが指定されたパラメータ内で答えを ⽣成するようにするテクニックです。たとえば、ある問題に対する答え を1から10の範囲で求めるといった具体的な指⽰を出すことができます。 • ネガティブプロンプト(Negative Prompt): モデルには、何をすべきでは ないかを明⽰的に指⽰するテクニックもあります。これは、モデルの出 ⼒が期待外れのものだった場合や、特定の形式やトピックを避ける必要 がある場合に有⽤です。 2023/08/05 © 2023, Sako Hiroshi 87
  56. プロンプトエンジニアリング(0) 2023/08/05 © 2023, Sako Hiroshi 88 プロンプト構成要素 • ⽂脈(ロール)の設定

    • ⾏ってほしい内容(⽬的、制約、⼿段) • 出⼒形式 • 詳細化への促し
  57. プロンプトエンジニアリング(1) © 2023, Sako Hiroshi 89 あなたは要件定義アシスタントです。相⼿の書く⽂章を 解析して、アクター、アクターが最終的に⾏うこと、そ のために満たされているべき前提条件に分解し、それぞ れを箇条書きにして下さい。

    もし不明な点ある場合は 何でも質問して下さい。 ⽂章「唐津市は景気浮揚策として商品券を販売しようと しています。販売対象は市⺠です。販売される商品券は 額⾯5000円、販売価格4000円で、プレミアが1000円分乗 せられています。商品券の販売数には限りがあり上限 10000枚が予定されています。⼈気が予想されるため、 事前申請と抽選を⾏い当選者に商品券を販売することに します。事前申請で申し込めるのは最⼤4枚までです。 この業務を⾏うために必要な⼿続きを挙げて下さい」 (1) AIにロールを割り当てる (2) ⾏って欲しいこと (3) 出⼒形式 (4) 詳細化への促し プロンプトの⼯夫の基本 2023/08/05
  58. プロンプトエンジニアリング(2) 分解: アクター: • 唐津市 • 市⺠ アクターが最終的に⾏うこと: • 商品券の販売(唐津市)

    • 商品券の購⼊(市⺠) • 満たされているべき前提条件: • 販売される商品券は額⾯5000円、販売価格4000 円 • 商品券のプレミアは1000円分 • 商品券の販売上限は10000枚 • 事前申請と抽選を⾏う • 当選者に商品券を販売する • 事前申請で申し込めるのは最⼤4枚まで この業務を⾏うために必要な⼿続き: • 商品券の販売計画を⽴案(唐津市) • 事前申請⽅法と抽選⽅法を決定(唐津市) • 事前申請期間を設定(唐津市) • 市⺠に事前申請⽅法と抽選⽅法を周知(唐 津市) • 市⺠が事前申請を⾏う(市⺠) • 抽選を実施(唐津市) • 当選者に連絡(唐津市) • 商品券の販売と配布(唐津市) • 市⺠が商品券を利⽤(市⺠) • 不明な点: • 事前申請の⽅法は何ですか? • 抽選⽅法にはどのような基準があります か? 不明な点: • 事前申請の⽅法は何ですか? • 抽選⽅法にはどのような基準があります か? © 2023, Sako Hiroshi 90 要求に従った出⼒が得られている 2023/08/05
  59. プロンプトエンジニアリング(3) • アクター: 1. 唐津市 2. 市⺠ • アクターが最終的に⾏うこと: 1.

    商品券の販売(唐津市) 2. 商品券の購⼊(市⺠) • 満たされているべき前提条件: 1. 販売される商品券は額⾯5000円、販売価格4000円 2. 商品券のプレミアは1000円分 3. 商品券の販売上限は10000枚 4. 事前申請と抽選を⾏う 5. 当選者に商品券を販売する 6. 事前申請で申し込めるのは最⼤4枚まで 7. 事前申請はウェブを使った申込み 8. 申込時に市⺠は⾃分のアカウントを作成 9. 抽選⽅法は申請からランダムに申込商品券数が10000枚になるまで選び続 ける • この業務を⾏うために必要な⼿続き: 1. 商品券の販売計画を⽴案(唐津市) 2. 事前申請⽅法と抽選⽅法を決定(唐津市) 3. 事前申請期間を設定(唐津市) 4. ウェブ申請システムを開発・準備(唐津市) 5. 市⺠に事前申請⽅法と抽選⽅法を周知(唐津市) 6. 市⺠がウェブ上でアカウントを作成(市⺠) 7. 市⺠がウェブ上で事前申請を⾏う(市⺠) 8. 抽選を実施(唐津市) 9. 当選者に連絡(唐津市) 10. 商品券の販売と配布(唐津市) 11. 市⺠が商品券を利⽤(市⺠) © 2023, Sako Hiroshi 91 質問に答えた結果 【⼈間】事前申請はウェブを使った申込みとします。申込時に市⺠は⾃分のアカウントを作成します。 抽選⽅法は申請からランダムに申込商品券数が10000枚になるまで選び続けます。 2023/08/05
  60. プロンプトエンジニアリング 2023/08/05 © 2023, Sako Hiroshi 92 https://www.promptingguide.ai/jp (英語版の翻訳) まだ始まったばかり

    競争相⼿が少ない 今始めると第⼀⼈者❓ 細かいテクニックはこの辺を読ん で試してみるのも良い しかし細かいテクニックそのものを⼀所懸命覚えても 意味がない。原理原則から組み⽴てることが⼤切
  61. Generative AI のメリットとデメリット • メリット • 豊富なバリエーションの中から検討できる • クリエイティブな提案ができる •

    上⼿く使えばコストの削減につながる • デメリット • 倫理的な問題や法的な問題が⽣じる可能性がある • ⽣成されたデータの品質や信頼性を保証できない場 合がある • ⼈間の感性や価値観を置き換えることはできない © 2023, Sako Hiroshi 94 これは実は AI ⽣成。⼀般的な問いかけには⼀般的な答えしか返ってこない 2023/08/05
  62. 効果的プロンプト作成のために(1) • 漠然とした質問に対しては漠然とした答えしか 返ってこない • どのような前提条件の下でどのような結果が (どのような形式で)欲しいのかをある程度⽅ 向付けてやると役に⽴つ出⼒が⽣まれやすい • 対話的

    AI に対して役割(ロール、⽂脈)を与 えることも重要 • ⼀度⽣成した出⼒に対して制約条件を付け加え て改善案を問いかけるという使い⽅も有⽤ 2023/08/05 © 2023, Sako Hiroshi 95
  63. 効果的プロンプト作成のために(3) • プロンプトライブラリの蓄積 • ⾃分の仕事に必要な前提条件、制約条件、出⼒ 形式を蓄積しておくと便利 • 画像⽣成系のAIのためのプロンプトなどもス トックできる •

    要求定義、仕様策定、設計、テストケース⽣成、 テストデータ⽣成などにふさわしいプロンプト を⼯夫して、ライブラリ化しておけば様々な局 ⾯で作業が楽にできるかもしれない 2023/08/05 © 2023, Sako Hiroshi 97
  64. おまけ • Generative AI は強⼒で危険 • 使い⽅を間違えるとゴミのような出⼒を⼤量に⽣成する • AI の役割、求めている出⼒(基準)、求めている形式などをうまく整理してガイ

    ドしてやると有⽤な出⼒を得られる → プロンプトエンジニアリングの重要性、有 ⽤なプロンプトのライブラリ化と共有 • ちょっとした作業には極めて便利 • 簡単な環境設定、ちょっとしたシェルスクリプト、簡単な正規表現、ちょっとし たユーティリティ、Excel のマクロ、基準にあったデータ⽣成 etc … 決して難しく はないが、それでも調べながら⾃分でやると 30分とか1時間とかの時間を使ってし まうものは、あっと⾔う間に終わるようになる。 • ノーコード、ローコードにも影響 • クローズドなノーコード、ローコードを使うくらいなら、オープンなライブラリ を組合せてアプリケーションを⽣成できる Generative AI の⽅が良いかも?(⽣成 したコードの解析や改善もできる) • What と 実践を優先 • 細かいプロンプトテクニックを覚えようとするよりも(細かいテクニックは無効 になりがち)、実際に使って、できることできないことを⾃分で体感して⾏くこ とがおすすめ。あくまでも「問題」に注⽬したい © 2023, Sako Hiroshi 99 2023/08/05
  65. おまけ3’:画像⽣成プロンプトの⽣成 2023/08/05 © 2023, Sako Hiroshi 103 お伽噺の中に出てくる ような⼭の中のお城 ⾼い⼭の頂に位置する城は、周囲の森によっ

    て⾃然の要塞となっていました。その城は古 く、歴史と伝説が混ざり合い、いつしかお伽 噺の⼀部となりました。城の塔は天空に向 かって伸びており、その上からは周囲の⾵景 が⼀望できるようになっていました。 城壁は厚く、その壁は、まるで古代の巨⼈が 築いたかのような存在感を放っています。 城の⾨は鉄と古⽊で作られており、それを守 るように深い堀が掘られています。この堀に は⼭から流れてきた清らかな⽔が満たされて おり、その⽔⾯は太陽の光を反射して輝いて います。 「もっと詳しく描写して」