プロンプトを工夫
説明し忘れてたけど、VSCode+Clineで実験中。
昨日はどうしようかと寝て考えたら一つのアイデアを思いつきました。
それはプロンプトを少し工夫すれば、ダイアグラム作成に使えるかもってことで以下のようになりました。
その結果はこちら。
単純な話で、ソースコードの書き方を少し工夫したのとプロンプトを工夫しました。
例えばソースコードは以下のようにしました。
from framework.llm_lapper import llm_lapper
from prompt_toolkit import prompt
# 【1.0】RAGメイン処理
def run_rag_system(Train_flag: bool = True):
"""RAGシステムの実行処理
Args:
Train_flag (bool): 取込オプション。Trueが指定されているとDocs下のファイルからデータをベクトルデータベースに取り込む.
Falseを指定すると取り込まないで実行する.ディフォルトはTrue
"""
docs_directory = "Docs"
model_path = "models/ELYZA-japanese-Llama-2-7b-instruct-q4_K_M.gguf"
try:
# 【1.1】LLMを初期化処理
rag_lib = llm_lapper(model_path=model_path)
except Exception as e:
# 【1.2】LLM初期化失敗ログ記載
print(f"LLMの初期化に失敗:{e}")
return
# 【1.3】ベクトルデータベース取込が指定されている場合
if Train_flag:
# 【1.3.1】指定されたフォルダ以下からベクトルデータベース取込
rag_lib.train_text_files(docs_directory=docs_directory)
# 【1.6】メインループ処理
while True:
# 【1.7】プロンプト入力
user_input = prompt("質問('exit'と入力すると終了):")
# 【1.8】終了が指定されているか?
if user_input.lower() == 'exit':
# 【1.8.1】ルインループ終了
break
try:
# 【1.9】RAGの実行
score, result_text = rag_lib.query(query_text=user_input,
n_results=1,
threshold_distance=0.19)
# 【1.10】スコアとLLMの回答表示
print(f"[スコア {score:.2f}] 回答: {result_text}")
except Exception as e:
# 【1.11】例外エラー情報表示
print(f"例外エラー発生{e}")
# 処理開始
if __name__ == "__main__":
# RAGシステムの実行
run_rag_system(Train_flag=False)
出したいダイアグラムのところに簡単な処理の内容を記載します。
次にプロンプトの書き方をこうしました。
rag_test.pyの処理を確認し、フローチャートをrag_test_flow.mdに保存して欲しい。
その時、ダイアグロムの内容などはコメントに記載されている内容を記載して欲しい。
コメントが記載ない場合は、処理概要を記載して欲しい。
また、呼び出している関数の先のフローも纏めて記載して欲しい。
こんな感じで。
するといい感じに書き出してくれて人間の手を煩わせることなくダイアグラムが描画できるようになった
というわけです。
といってもソースコードのコメント作成は結局人の手が入る感じになりますが、どのみちコードレビュー
する際に確認しながらみると思うので、そう手間ではないはず。