現在の見出し:5.1節:ローカル環境用のRAG関数を作成する
見出し一覧
- 5.1節:ローカル環境用のRAG関数を作成する
- - ローカル環境とAzure環境で利用できるPythonのバージョンが異なる
- - Python 3.10でローカル環境を整える
- - 「function_app.py」の内容を一部変更する
- - 出力文字を日本語へ変換する
- - ragの内容をAzure環境用に変更する
- - プロジェクトフォルダの構造をデプロイ用に変更する
【PR】『Python』を学べる企業・個人向けのプログラミングコース
ローカル環境とAzure環境で利用できるPythonのバージョンが異なる
前節に引き続き、ローカル開発環境の構築を試みたところ、Pythonのバージョン互換性によるエラーが発生しました。
エラー内容と原因
エラー | 発生タイミング | 原因 |
---|---|---|
_SixMetaPathImporter の attribute error | func start 実行時 | pkg_resources と Python 3.12 の仕様変更が競合 |
setuptools 周りの ImportError | ローカル仮想環境で func 実行 | 古いランタイム依存 or ライブラリライブラリは再利用可能なソフトウェアの部品です。未更新 |
No suitable Python runtime found | py -3.10 -m venv 実行時 | Python ランチャーが 3.10 を認識していないか未インストール |
つまり、ローカル実行に使っているツールとPython 3.12の仕様が噛み合っていない
ことが根本原因です。
そのため、まずローカル環境に適しているPython 3.10をダウンロードし、「Python 3.10 + Azure Functions Core Tools v4」を使用してAzureと連携できることを確認します。
これにより、RAGチャットAPIAPIは、他のソフトやアプリが自分の機能を利用できるようにするためのインターフェースです。の処理やAzure OpenAI/Azure Cognitive Searchとの接続が正しく動作するかを検証します。
その後、本番環境用としてコードを必要に応じて書き替え、ZIPデプロイデプロイは開発したアプリケーションやWebサイトを実際に稼働させることです。方式 で Azure Functions(Python 3.12環境) に配置し、GitHubリポジトリと連携して運用できる体制へ移行する流れとなります。
ではさっそく始めていきましょう。
Python 3.10でローカル環境を整える
はじめにローカル環境でテストテストはプログラムが意図通りに動作するかを確認する作業です。するために、Python 3.10.8をインストールします。
Python 3.10.8:https://www.python.org/ftp/python/3.10.8/python-3.10.8-amd64.exe
インストールする前に「Add python.ext to PATH」へチェックボックスを入れてください。こちらにチェックボックスを入れることで、WindowsWindowsはマイクロソフト社が開発したオペレーティングシステムの名称です。の環境変数変数はデータを一時的に記憶しておく場所です。「PATH」に追加し、どこからでもPythonを実行できるようになります。
インストール後は以下のコマンドを実行し、Python 3.10.8が表示されるか確認してください。
python --version
「function_app.py」の内容を一部変更する
上記の「response =openai.ChatCompletion.create(」部分から「answer = response~」部分までを、以下のコードに書き換えてください。
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
api_version="2024-02-15-preview",
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"]
)
response = client.chat.completions.create(
model=deployment_name, # デプロイ名を指定
messages=[
{"role": "system", "content": "以下の情報に基づいて..."},
{"role": "user", "content": f"質問: {question}\n\n参照情報:\n{context}"}
],
temperature=0.3,
max_tokens=800
)
answer = response.choices[0].message.content
続いて「requirements.txt」ファイルの内容が上記のようになっているのか再確認しましょう。これまでの作業が完了したらプロジェクトプロジェクトは特定の目的や目標を達成するために行われる一連の開発作業です。フォルダまで移動し、「func start」コマンドを実行してください。
上記のように「Worker process started」と「ragchat:~」と表示されていれば無事起動しています。では実際に起動できるのか確認してみましょう。
まずはRAGの教師データの前に、LLM大規模言語モデルは膨大なテキストデータを学習し、人間のような自然言語処理能力を持つAIシステムです。と連携できているのか確認します。「func start」を実行しているターミナルとは別のターミナルやパワーシェルを開き、以下のコマンドを実行してください。
curl -X POST http://localhost:7071/api/ragchat -H "Content-Type: application/json" -d "{\"question\": \"Azureとは?\"}"
上記のように数字と英語の羅列が表示されていれば無事起動できています。日本語の表記ではない理由は、JSONに含まれる日本語がUnicodeエスケープ形式で出力されているためです。
実際の内容は正常な日本語ですが、エスケープされてこう見えているだけです。次はこちらを日本語表記になるよう変更を加えていきましょう。
出力文字を日本語へ変換する
まずはCursorを開き、新たに「decode_json.py」というファイルを作ります。そこに以下のコードを張り付けてください。
import sys
import json
data = sys.stdin.read()
parsed = json.loads(data)
print(json.dumps(parsed, indent=2, ensure_ascii=False))
これで出力結果が日本語で表示されます。今度はAzureにPDFデータとして設定した教師データから情報を出力できているのかテストしてみましょう。以下のコマンドを実行してください。
curl -X POST http://localhost:7071/api/ragchat ^
More? -H "Content-Type: application/json" ^
More? -d "{\"question\": \"CloudFlow Proのインストール手順を教えて下さい。\"}" | python decode_json.py
表示された情報と教師データを照らし合わせたところ、PDF内の情報を元に最適な結果を出力できていました。
これでローカル環境でのRAG動作チェックは完了です。
今の現状
- Python 3.10 仮想環境の作成:完了
- 「func start」で「Azure Functions」起動:完了
- curlでローカル関数関数は一定の処理をまとめたプログラムの塊です。のPOST実行:完了
- JSONパースと文字化け解消:完了
- RAGチャットボットのローカル動作確認:完了