はじめに
8月31日から10月31日の間に行われたDatabricksさん主催のハッカソン、Generative AI World Cup 2024 に実質ソロで参加してきました。そこで作成したものと副産物のREADME自動生成プログラムについて紹介します。
コンペについて興味がない方も、README自動生成プログラムは役に立ちそうなので見ていってください。
Generative AI World Cup 2024 概要
公式の文章から提出物のテーマについて引用しました。このテーマに沿いつつGenAIとdatabricksのサービスをしていればOKっぽかったです。
テーマ1:現実世界の問題を解決するGenAIアプリを作ろう!AI初心者でもPythonのプロでも、AIを使ったソリューションを作るデータ組織の参加者を歓迎します。
提出アプリ紹介
早速ですが、提出アプリの紹介です。
gmailに届いた会議招集メールの本文と添付ファイルを読み込み、会議開始日までのタスクを生成するアプリを作成しました。下図はタスク生成までのプロセスの概略図で、ロボットマークのところでLLM (DBRX) の使用をしています。
工夫点は、
- google driveから添付ファイルを引っ張ってきて要約 -> タスク生成プロンプトへ入力
- userからのfeedbackを要約して、タスク生成プロンプトを自動で改善
となっています。WEBアプリとして提出できなかったのですが、限られた時間でよく頑張れたなぁと思います。
README自動生成プログラム
提出アプリ作成にあたって、READMEの試作を自動生成するコードを作成したので紹介します。
流れは、全pythonファイルを一つのファイルへ集約して、LLMに入力、README生成となっています。小規模のプログラムであれば、問題なく動くと思うので適当に書き換えて使用して下さい。
import os
import google.generativeai as genai
from dotenv import load_dotenv
load_dotenv()
def export_all_py_files(all_code_output_path="output.txt"):
"""
現在のフォルダ以下の .py ファイルの中身を all_code_output_path に書き出す関数
このファイルは除外
"""
script_name = os.path.basename(__file__)
with open(all_code_output_path, mode="w", encoding="utf-8") as out_f:
for root, dirs, files in os.walk("."):
for filename in files:
# 今回は拡張子が .py のファイルを参照
if filename.endswith(".py") and filename != script_name:
full_path = os.path.join(root, filename)
# ファイル名をコードの先頭に記載
out_f.write(f"--- {filename} ---\n")
with open(full_path, mode="r", encoding="utf-8") as py_f:
content = py_f.read()
out_f.write(content)
out_f.write("\n\n")
def generate_readme_from_output(
all_code_input_path: str = "output.txt", readme_output_path: str = "README.md"
):
"""
all_code_input_path で指定されたファイルをもとに、README.md を自動生成する関数
"""
# API KEYとmodel nameは適宜書き換え
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
model = genai.GenerativeModel("gemini-2.0-flash-exp")
# 全コードが書きだされたファイル読み込み
with open(all_code_input_path, "r", encoding="utf-8") as f:
code_content = f.read()
prompt = f"""# 指示文
Pythonファイルのソースコードをもとに、プロジェクトの README に含めるべき情報をまとめて、
README.md のドラフトを出力してください。必要に応じて使い方や実行例なども作成してください。
# 注意点
- markdownで書いて下さい
# ソースコード
{code_content}
"""
# README生成
response = model.generate_content(prompt)
generated_readme = response.text
with open(readme_output_path, "w", encoding="utf-8") as f:
f.write(generated_readme)
if __name__ == "__main__":
export_all_py_files()
generate_readme_from_output()
実行例
下記githubレポジトリをcloneして動作確認してみました。
生成結果は下記URL
emojiのソースコードから生成したREADME
うまく生成できてそうですね。手を加えれば、READMEが一瞬で作れそうです