先日から技術検証がてら
★ChatGPTを使って自分のはてなブログとチャットするツールを作った - $shibayu36->blog;(参照サイト)
これを動かしてみようと環境作りしていました。
★CentOS 7系列にgit 2系列をインストールする【2023年4月】(2023年04月11日 (火曜日))
★CentOS 7.9にpip(python-pip)をインストール(2023年04月16日 (日曜日))
途中で、動かしてみたいだけだったら他にいろいろ動いているLinux
★Intel Mac(x86)のmacOS 12のVirtualBOX(仮想環境)でLinux(CentOS 7)のインストールからサーバー環境構築(2022年11月08日 (火曜日))
に環境構築しないで
★Dockerで--mountしてたらそんなフラグ(オプション)はない、とエラー。yumで入れたCentOS 7のDockerのバージョンが古かった【なので最新?安定VerのDockerインストールした】(2023年02月04日 (土曜日))
Dockerでよくね?と思い、Dockerでこちらのプログラムを動かす環境構築してみる事に。
もうシンプルなもんです。
もうLinux本体にgitをインストールしていたのでgitで
★GitHub - shibayu36/chat-hatenablog
をgit clone。
参照サイトに書いてあるPythonのpipの環境はDockerのイメージ構築時にもうやってしまおうという事で「requirements.txt」ファイルは取り出しDockerfileと同じフォルダに置いておきます。
Dockerfileは
FROM python:3.11#作業用ディレクトリを変更
WORKDIR /tmp/mydir
#ファイルのコピー
COPY requirements.txt ${PWD}
#pip自体のアップデート
RUN pip install -U pip
#pythonのパッケージをインストールして、インストール終わったらrequirements.txt削除
RUN pip install -r requirements.txt && rm -rf /tmp/mydir/*
# 一時変数の定義(何もしないとrootでファイルが生成されちゃうので、コンテナ外からファイルいじるの面倒になるのでLinuxやファイル共有で使っているのと同じユーザー名作成)
ARG USERNAME=コンテナ内で使うユーザー名
ARG PASSWORD=└のパスワード
ARG GROUPNAME=コンテナ内で使うグループ名
ARG UID=1000←あくまで例
ARG GID=1000←あくまで例# 一般権限のユーザーを追加
RUN groupadd -g ${GID} ${GROUPNAME} \
&& useradd -u ${UID} -g ${GID} -G sudo -m -s /bin/bash ${USERNAME} \
&& echo ${USERNAME}:${PASSWORD} | chpasswd \
&& echo "%${USERNAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers# ユーザーの切替
USER ${USERNAME}
で
docker image build -t イメージ名/タグ .
でビルドします。
ビルド終わったら実行。
docker container run --name コンテナ名 -it --rm --mount type=bind,src=git cloneしたフォルダ(例:/home/ユーザー名/git/chat_hatenablog みたいな),dst=/tmp/mydir イメージ名/タグ /bin/bash
でコンテナ稼働しつつそのままコンテナ内に。
先に
★★API keys - OpenAI API
でAPI Keysを生成しておきます。
はてなブログは自分のテストで以前に作っていた奴を使います。
★YMT@blog はてなブログ支店(https://ymt.hatenablog.jp/)
こちらからMT形式のバックアップをエクスポートしておきます。
設定ファイルの
.env
の中身は参照サイトを参考に
OPENAI_API_KEY=自分のアカウントで生成したAPI Keys
BASE_URL=https://ymt.hatenablog.jp/entry/
と記載。
その後
python make_index.py --mt-file エクスポート.txt
としてインデックスを作成。
2エントリしかないブログなのですぐに終わりました。
あとは質問を投げます。
python ask.py --query 質問事項
私の上記のブログ内容で適当に質問してみると
python ask.py --query テスト
THINKING...ANSWER:
こんにちは!テストに関するお話ですね。テストは大切ですね。何かお力になれることがあればお伝えください。refs:
- ブログカードのテストだよ。: https://ymt.hatenablog.jp/entry/2014/09/06/125240
- はてなブログ導入テストです【YUU MEDIA TOWN@blog】: https://ymt.hatenablog.jp/entry/2011/11/24/234816
更に

python ask.py --query 天気について書いてるエントリ、あるかな?
THINKING...ANSWER:
はい、天気についてのエントリがあります。YUU MEDIA TOWN@blogの中に「今日の天気」 というタイトルで投稿しています。ぜひご覧ください。また、他にも様々なジャンルの情報を掲載していますので、お時間があればぜひ訪問してみてください。何かお役に立てる情報があるかもしれません。refs:
- はてなブログ導入テストです【YUU MEDIA TOWN@blog】: https://ymt.hatenablog.jp/entry/2011/11/24/234816
- ブログカードのテストだよ。: https://ymt.hatenablog.jp/entry/2014/09/06/125240
ひとまずどんなもんか実感できれば良かったのでひとまずこんなもんで。
・・・・・プログラム修正よりはてなブログと同じ書式のバックアップファイルをMovable Typeで生成してそれを食わせた方が早いか。
という事でMovable Typeではてなブログのバックアップファイルと同じ書式で生成するようにして.envファイルのURLを
http://www.yuumediatown.com/diary/mt001/archives/
に変更。
この辺の情報を参考に
★記事のインポートフォーマット | CMSプラットフォーム Movable Type ドキュメントサイト
★MTEntryID - テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
似たような書式で生成したバックアップファイルを生成。それを
python make_index.py --mt-file エクスポート.txt
とすると無事、読み込まれました。
python ask.py --query ChatGPTについて書いたエント リありますかね?
とすると
THINKING...ANSWER:
こんにちは!はい、ChatGPTについてのエントリがあります。YUU MEDIA TOWN@blogの中に「ChatGPTを使って自分のはてなブログとチャットするツールを作った」というタイトル で投稿しています。ぜひご覧ください。また、他にも様々なジャンルの情報を掲載していますので、お時間があればぜひ訪問してみてください。何かお役に立てる情報があるかもしれません。refs:
- 「ChatGPTを使って自分のはてなブログとチャットするツールを作った」をDocker環境 で動かして自分のはてなブログのデータで動かしてみた: BASE_URL=http://www.yuumediatown.com/diary/mt001/archives/027566.html
素晴らしい。
テストの為、この1エントリしか読み込ませてないのだけれど、全エントリ生成の奴で今度やってみよう・・・・・と全エントリの生成しようとしたらテンプレート生成では実行時間長すぎでエラーになっちゃって途中までしかバックアップファイル生成できない・・・・
「書き出し」なら最後までダウンロード出来るけど、こちらは書式の指定が出来ない・・・・・
なので全エントリを読み込ませたいならプログラムの方を変えなくては駄目ね。
とりあえず生成できた部分を読み込ませて、質問してみました。

いいですね。
まあ技術検証なのでここまででいいか・・・・・・時間に余裕あれば全エントリのバックアップを生成し、なおかつWebのインターフェイスをかぶせたりできれば面白いかな~と思うけれど。