ChatGPTを使って、禁断の「自分の人体錬成」にトライしてみた(1/2)
皆さんは「自分と話してみたい」なんて思ったことはありませんか?
こんにちは、しょこらです。幾つか前に書いたnoteへと頂いたコメントから、あたしゃGPTsをもっと使わないとな、と思うようになりました。難しそうだと敬遠していましたが、GPTsを使わないのは、ChatGPTパワーの半分ぐらいを使っていないようなものみたいです。
で、GPTsに関する本を読んでいたら、まさに「これだ!」と思うGPTsが見つかったのでやってみたのが今回のお話。ちなみに読んでいたのは以下の本です。様々なGPTsの活用方法が載っていて、読んでいるうちにやりたいことが沢山浮かびました。ナイス。
実は常々「自分と話せたら面白いのかなー?」なんて疑問に思っていたりします。私は日々刻々と数々のことを忘れてしまっているので、自分を理解する上でも、自分の限界を知る上でも、自分と話せたらめっちゃ面白いかもしれないなと思うのです。
そんなことを考えながら昔のnoteを読み返していると、「なるほど昔の自分はこう考えていたんだなぁ」と思わされることが多々あります。これを使わない手はありません。
そんなこんなで、今回はGPTsに「しょこらAI」を作るまでの奮闘記です。
ただ、結構テクニカルでして、プロセスも含めてお話すると長くなってしまうので、前後半でお送りさせて下さいませ。
自分のnoteをデータベースにする
昔の自分をChatGPTで再現するには、GPTsに備わっている『Knowledge』というシステム使う必要があります。『Knowledge』はアップロードしたファイルを基にして、ChatGPTが適切な答えを返してくれる機能です。ちなみにGPTsは、サブスクに入らないと作られないものの、無料で使うことはできます。
冒頭の本ではこの『Knowledge』に『走れメロス』を読み込ませて、メロスに回答させる方法が載っていました。なにそれ超面白い。読み込ませるファイルを変えれば異なる人格を再現できるってことじゃないですか。
そんなサンプルを見てから「『Knowledge』に自分が今まで書いてきたnoteを取り込ませて、自分と会話する」ことができたら面白いだろうなーと思っていたのです。
一方で、私はnoteを400本以上書いていて、その全部をPDF化して読み込ませるなんて気が遠くなる作業……と、重い腰となっていました。
なんて考えて検索していたら、note公式さんから「キミの書いたnote、全部エクスポートできるよ」なんて神機能がアナウンスされているではないですか。控えめに言って神だわ。素晴らしい。
ということで、意気揚々とエクスポートを依頼してみた(3営業日ぐらいかかる)のですが、そこから非ITエンジニアの私には試練が待っていたのです…
XMLファイルを「あーでこーで…」する
このエクスポートの結果「XMLファイルが出力される」という事実が、非ITエンジニアの私にとっては想定外の難問でした。出力されたファイル、何書いてあるのか分からんのよ…。
そんなこんなで、暫くの間XMLファイルから本文に関する情報を引っこ抜くのに四苦八苦していたのです。でね、いろいろなブログを見てみたのですが、結論ChatGPTに聞くのが一番良かったのです。
私はPythonで「pip xxxx install」が上手くいったら「ウェーイ、できたできたー!」と喜ぶぐらいのスーパー超初心者ですが、そのスーパ超初心者でもChatGPTにやりたいことを伝えて、コードを書いて欲しいとお願いしたらできてしまいました。ChatGPT君、やっぱりキミは天才だよ。
何が何だか分からないのですが、一応目的通りに動きました。すげぇ。一応、コードはnote末に貼っておきますね。このコードを実行すると、XMLファイルから本文のみが取得され、以下のように表示されました。
素晴らしい。とても綺麗。この文章たちを「しょこらの素」として、『Knowledge』に取り込んでGPTsを作っていきます。が、それは次回で。
ドッペルゲンガーを人体錬成する意義
皆さんはドッペルゲンガーを信じますか。ドッペルゲンガーはドイツ語に由来しており。「ドッペル」(二重・分身)と「ゲンガー」(歩く者)という2つの単語が組み合わさってできた言葉なのだそうです。
今回の話は自分でドッペルゲンガーを作っているようなものです。ちょっとコワいものの、ドッペルゲンガーが人口に膾炙しているということは、結構需要がある話なのではないかとも思っています。少し不思議な、面白体験なのでしょう。
では、面白いって何なのかと考えると、「未知と既存の交差点」なのだと思うのです。全く新しいものは理解できない一方で、既知とは退屈だからです。で、ドッペルゲンガーは、まさにこの未知と既知の間の存在な気がしています。
自分で自分を見直すことは難しく、一方で内省は退屈です。なんて言いながら、突然「自分」が目の前に現れたら、それはまさに未知との遭遇です。良く知っているハズなのに全く知らない。それが自分なのかもしれません。
なーんて考えながら、あーでこーで…うーでぱーで……と、知りもしないPythonを延々と触っていた昨今だったのでした。ホントもっと早くChatGPTに聞けば良かったです。
もしご興味沸きましたらお試し下さいませ。やり方が分かれば、そんなに時間は掛からないと思います。もちろん、もっと良い方法があると思いますので、ご存じの方はぜひ教えて下さいませ。
次回はGPTsを使って自分と向き合っていきますぜ!
ではでは。
<ChatGPTに書いてもらったPythonコード>
*事前にBeautifulSoupパッケージをインストールする必要があります
**動いても動かなくても私には仕組みが分かりません…
import os
import xml.etree.ElementTree as ET
from bs4 import BeautifulSoup
import re
def extract_and_clean_content_encoded(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
# Namespaceを含むタグ名を指定する
content_encoded = root.findall(".//{http://purl.org/rss/1.0/modules/content/}encoded")
# 抽出したcontent:encodedタグの内容からHTMLタグとリンクを除去してリストとして返す
clean_content_list = []
for elem in content_encoded:
if elem.text:
# BeautifulSoupでHTMLタグを除去
soup = BeautifulSoup(elem.text, "html.parser")
clean_text = soup.get_text()
# URLのパターンを使ってリンクを除去
clean_text = re.sub(r'http\S+|www.\S+', '', clean_text)
clean_content_list.append(clean_text)
return clean_content_list
def save_to_text_file(content_list, output_file):
with open(output_file, 'w', encoding='utf-8') as file:
for content in content_list:
file.write(content + "\n\n") # 各コンテンツの間に空行を追加
# デスクトップのパスを取得
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
output_file = os.path.join(desktop_path, 'cleaned_content.txt')
# 使用例
xml_file = 'example.xml' # 解析するXMLファイルのパスを指定
clean_content_list = extract_and_clean_content_encoded(xml_file)
save_to_text_file(clean_content_list, output_file)
print(f"Cleaned content has been saved to {output_file}.")