0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Generative AI World Cup 2024 参加記録とREADME自動生成プログラム

Posted at

はじめに

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アプリとして提出できなかったのですが、限られた時間でよく頑張れたなぁと思います。

Databricks_demo_video_slide.png

README自動生成プログラム

提出アプリ作成にあたって、READMEの試作を自動生成するコードを作成したので紹介します。
流れは、全pythonファイルを一つのファイルへ集約して、LLMに入力、README生成となっています。小規模のプログラムであれば、問題なく動くと思うので適当に書き換えて使用して下さい。

readme_generator.py
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が一瞬で作れそうです

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?