サービス実運用から学んだ ChatGPT 活用の8つのコツ

こんにちは!くりぷとべあーです!

海外仮想通貨ニュースのAI要約サービスを運用し始めて、ちょうど1ヶ月が経ちました!皆様のご意見をいただきつつ、大なり小なり改善を繰り返して、記事の品質などは結構安定してきたと思います。

当初はやばいのとかありましたが、こう言うのは最近ほぼなくせていると思います笑。

そんなこんなでChatGPT周りの改善を結構やってきたので、コツを少しづつ掴めてきました。少し前に会社で軽いLTを行ったので、それを増補改定する形で、掴んだコツを書き下してみます。


前置き

  • ChatGPT APIのGPT3.5 ver.を使うことを前提としています。今の最新バージョンはGPT4ですが、僕がメインで使ってる&試行錯誤を繰り返したのはGPT3.5なので、それをベースに書きます。

  • GPT4では関係のないTipsもあるかもですが、GPT4はべらぼうに高いので以下の内容は知っておいて損はないと思います。

それでは、本編に入ります。


1. LLMは魔法じゃない

  • まず最初に知っておくべきコツはこれかなと思います。ChatGPT はとても賢いです。感動するほど賢いです。でも "魔法" からは程遠いものです。

  • 魔法ではないので「ニュースを要約して」といった大雑把な指示では、満足のいくクオリティのアウトプットを安定して出すことはできません。ちなみにこれはGPT4を使っても同じです。

  • 冗長だなぁと思うぐらい長い Prompt を積極的に使いましょう。ChatGPTはとても頭が良いので、書けば書くだけあなたの要望を理解してくれます。

  • ただしいくつかの指示を忘れることもあるので、次節に述べるようにやりとりを行なって、アウトプットのチェックを行ったり、満足のいく品質になるようにガイドをしてあげましょう。

  • 自分が最近使っているPromptの例はこんな感じです(長い & なぜ全て英語なのかは後で説明します)

Please summarize the following news article in English.

In this summary, you must not explain the entire content of the news story.
No matter how long the original sentence is, please finish your story in three paragraphs.

Please follow the format below for your summary.
- We will post your response on our site without any edit.
  Therefore, please start writing your summary statement immediately, without any greeting.
- End each paragraph with "\n\n".

You must follow the two items regarding compliance with laws and regulations.
Failure to do this will put our company on the verge of bankruptcy.
1. Translating the full text of longer article is a serious violation of copyright
   and will invariably lead to litigation issues.
   Please summarize the main points of the news in a concise manner.
   (For brief news items that can be completed in one paragraph or so,
    this rule does not need to be followed.)
2. Writing speculation other than what is written in the article constitutes
   spreading rumors and will lead to a lawsuit. Never write anything other than
   what is written in the news article.

Rule of length.
- Write more than {min_tokens} tokens.
  (This is because a summary that is too short makes it difficult to grasp the entire article.)
- Write less than {max_tokens} tokens.
  (This is because a summary that is too long takes time to read.)
- No more than 50 tokens should be written in a single paragraph.

In doing so, please be sure to comply with ALL of the following rules.
- Since this is financial news, the amounts in the news article should never be wrong.
- If the year is not specified in the article, please do not speculate and add it arbitrarily.
- Do not mention in your article that you use the following rules
- Don't write the same sentence / paragraphs many times.
- Please separate paragraphs frequently.
- No need to give a link to the reference article.
- No need to give add your opinion about this article.
- No need to give information about the reference article.
- No need to give a paragraph number.

=========

title:
{news_title}

text:
{news_text}

=========
  • また、以下の記事でも実際に使っている(使っていた)Promptを紹介しています。

サービス運用での事例

  • 僕のニュース要約サービスの例では、ChatGPTが自分の意見・感想・妄想を要約によく書き加えてしまうという致命的な問題がたまに発生していました。具体的には「Binanceは破産のリスクが高まってきました!」とか嬉々として言っちゃう的なやつです。これは風説の流布にもなるのでサービス運営者として非常に困っちゃうやつです笑

  • そこで、以下のように対処しました

    • 風説の流布が法的違反であることをChatGPTに教える

    • 「要約やし短くてもええんやで」とChatGPTに教える

      • 元のニュースが短くて要約が短かった場合、ChatGPTは「何か足りない」と感じて勝手に文章を足していた挙動を感じたのでこのような指示を与えてみました


2. 公式 Prompt Engineering Guideは必ず見よう

  • 1.のような内容を読むと「じゃあ、どうすればいいpromptかけるの?」って思いますよね。

  • OpenAIが簡単なまとめを出してくれてるからちゃんと読みましょう。日本語で紹介してくださってるQiita記事もあるので、ありがたく拝読しましょう。

  • ChatGPTに難しい課題を依頼するときは「ステップバイステップで思考過程を共有してね」と指示する、などはもはや必須のテクニックではないかと思います。

  • 実は僕はこの存在を知らずに試行錯誤したのですが、自分が苦労して辿り着いた内容とかがごく普通に載ってて時間を無駄に溶かしました😇

  • ドヤァって感じで書いてるけど、界隈では常識だったらしい。(ちょっと恥ずかしい笑)

  • この note 記事を書いてる時に見つけたんだけど、GPT4にpromptを組み立ててもらうという手もあるらしい。なるほどなぁw


3. 対話しよう

  • みっつめのコツはこれです。ChatGPTはその名の通り、Chat向けに調整されています。ChatGPT APIを使用する場合は、会話のキャッチボールを行なって、必要なアウトプットを得るようにしましょう。

  • 一発で狙ったアウトプットを出すためにPromptをひたすら改善するよりも、何度かやりとりをする前提でChatGPTにタスクを依頼する方が、はるかに簡単です。

  • 自分は一発でアウトプットを出せるようにPromptをひたすら改善している時期もありましたが、やりとり前提でプログラムを組むようにしたらあっけなく片付いた問題もちらほらありました。

実際の例

  • 何度も「XXXX単語以内で文章書いて」と言ってるのにいうこと聞いてくれず、全文を直訳したり、要約とは言えないような超長文を書いてくることが稀によくありました🤮

  • 一発でアウトプットを出す前提のPrompt改善ではなかなか直りませんでしたが、諦めて対話をちゃんとすれば望み通りのアウトプットが得られるようになりました。(長い文章書いてきたら短くしてと言ったり、またその逆だったり。)

  • 指摘すればちゃんと直してくれるので、指摘をする前提で使いましょう。


4. ChatGPTは基本的にアメリカ人

  • ChatGPTは基本的に「他の言語も話せるアメリカ人」だと思っています。日本語も話せるのですが、難しいタスクになると英語のほうが圧倒的にうまくこなしてくれます。

  • 本当?と思われたなら、日本語と英語のアウトプットを見比べてみるといいと思います。英語だと上手く答えられるのに、日本語だと微妙、というパターンもよくあるはずです。

  • なんなら中国語と日本語を混同している挙動もあったりするので、指示はできる限り英語で行いましょう。

  • アウトプットの品質が期待以下の時は回答を英語でさせて、日本語に翻訳するというのを基本路線にされるのが良いかと思います。ちなみにChatGPTの翻訳は結構いい感じなのでめっちゃ使えます。

余談

  • ChatGPTの翻訳がかなりいい感じなので、DeepL翻訳はもう無用の長物になっていくかもしれません。正直、ChatGPTの翻訳の方が賢いと思うシーンが増えてきている気がします。

  • 個人的にはChromeのExtensionが結構使いやすいのでまだDeepL Proを契約していますが、1年後に契約を続けているかどうかは正直分かりません。

  • ただ、ChatGPT APIはたまに落ちるので、そういう時のバックアップとしてDeepL APIを利用するのはいいと思います。(実際に自分のサービスでもバックアップとして利用しています)


5. GPT3.5でも十分賢い

  • GPT4が颯爽と登場したため、GPT4を使いたがる人も多いのですが、個人的には多くのタスクではGPT3.5で十分だと思っています。

  • 自分はサービスに使ってる以下のタスクは全てGPT3.5で行なっています。ちゃんとPrompt書いたら素晴らしい品質のアウトプット出してくれますよ。

    • 文書要約

    • ツイート文作成

    • 翻訳 (中国語→英語, 英語→日本語 など)


6. GPT4は超賢い (でも高い)

  • とはいえGPT4はやっぱり賢いです。個人的には、論理的思考能力が非常に秀でている印象があり、驚くようなアウトプットを出してくれるシーンもたまにあります。

  • 僕のサービスの中では「新しいニュースが既存の記事と重複しているか?新しく報道する価値はあるか?」という判断を行うタスクに使用しています。

  • でも正直べらぼうに費用がかさむなという印象です。GPT3.5の20倍ぐらいのコストがかかるため、実運用ではGPT4を使う必要があるのかを慎重に検討する必要があると思います。(元々かなりのコストが掛かっているタスクじゃないと、GPT3.5ではなくGPT4に解かせる追加コストを回収できないんじゃないかなぁ?)

実際に使っている例 

# 新しい記事
Sui Networkが開発者向けプラットフォームのための永続的なテストネットをローンチ...

# 類似記事
Sui Networkがいくつかの機能アップデートを伴う永続的なテストネットをローンチ...

# 重複チェック
{
  "is_duplicate": false,
  "duplicate_reason": "
    この記事と類似記事を比較すると、両方ともSui Networkの永続的なテストネットのローンチと、
    メインネットローンチ後の継続的な運用について言及しています。

    また、動的なバリデーターセット、プロトコルソフトウェアおよびSuiフレームワークの
    アップグレードへのサポート、データベーススナップショットからのフルノードの回復など、
    機能アップデートについても説明しています。

    しかし、この記事では、プログラム可能なトランザクションブロック、キオスクスタンダード、
    RPC変換といった、類似記事では言及されていない追加情報が提供されています。
  "
}


7. JSONで回答させると便利

  • 自由に解答を書かせると、冒頭に挨拶を入れてきたりして、そのままアウトプットとして使えないタスクもあったりしますよね。その場合は 「json で回答して」って言って、回答形式を指定してあげると良いです。

  • ただし、json形式にするとなぜか回答が簡潔になる、と言う癖があるっぽいので、その辺りのケアは必要です。(定量的に実験してないけど、間違いなく回答が短くなってると思う)

  • あとは、json形式できっちり答えた後に「以上がjson形式での回答になります」とか余計な一言を足してjson形式をぶち壊してくることもあるので、エラー処理は必須かと思います笑。

自分が使ってるイメージ

# jsonで答えるまで帰れま10
res = self.ask(prompt)
while True:
    try:
        res_json = json.loads(res)
        break
    except:
        res = self.ask('please answer with json format')


8. 機械学習はまだまだ使える

注記: 自分が機械学習エンジニアなので、半分願望かもしれません笑

  • ChatGPTがとても賢く、非常に有用であることに疑いはないのですが、「4000トークン(*)以内の自然言語で指示を出す」という制約があるため、事実上、実行が不可能なタスクもたくさんあります。(* GPT4では8000 / 32000のハイレベルVer.もあるらしいが未公開)

  • 自分のサービスで言うと、過去の膨大なニュースデータベースから似ているニュースを抽出してきて、新しいニュースと比較対象を行う、と言うタスクは、こちらがMLなり何なりでサポートしてあげないと解き始めることすらできません。

  • GPTをサポートするために、ML、NLP、画像といった知識が不要になることは当面ないと思います。(思いたい)

自分の例

  • 過去の膨大なニュースデータベースから似ているニュースを抽出

    • 過去のニュース記事はembeddingをBigQueryに保存してある

    • 新しいニュース記事がきたら、Embedding化し、その後、そのEmbeddingを用いてBigQueryから過去の類似ニュースを取ってくる

    • 類似ニュースと新しいニュースの記事の内容をChatGPTに読ませてあれこれその後の処理を行う

  • ChatGPTがなぜか翻訳を行わず、英語のまま回答を返すことがある。

    • そう言った場合に備えて、回答はlangidライブラリで簡易的な言語判定をおこなって、英語の場合は再提出を求める。

import langid

title_lang = langid.classify(chatgpt_response)[0]
assert title_lang == "ja":


おわり

  • 以前の記事とかぶってるところもありましたが、参考になりましたでしょうか?

  • 実際にサービスを運用して数多くのトライをすると見えてくる点や身につく肌感覚もあると思っていて、その一端を少しでもお伝えできていれば幸いです。

  • それではまた!


この記事が気に入ったらサポートをしてみませんか?