AzureOpenAiを使った新旧対比表の作成について、まとめてみました。
社内文書は新旧対比表を作成して説明していることが少なくありません。情報漏洩防止の観点から社内向けGPTを利用する際にはこんな感じで作れるという試行になります。
目次[非表示]
AzureOpenAiの基本
AzureOpenAiとは
Azure OpenAI Serviceは、Microsoft Azureのクラウドプラットフォーム上で提供される、OpenAI社の人工知能(AI)サービスです。OpenAI社が開発したGPT-4やChatGPTなど、自然言語処理モデルを使用できます1。Azure OpenAI Serviceは、ビジネスのあらゆる側面を効果的にサポートする革新的なサービスであり、高度な言語モデルをREST APIとして利用できます。
AzureOpenAiを利用するには
Azure上でサービスを構成するところから始めますが、以下のサイトが参考になります。非常にわかりやすいです。
Pythonでの実装方法
GoogleColabo上でライブラリをインストールし、処理を実行していきます。
pipでインストール
import os
import sys
from openai import AzureOpenAI
from docx import Document
import PyPDF2
import fitz # PyMuPDF
from google.colab import userdata
Azure OpenAI ServiceのAPIキーを環境変数から設定
client = AzureOpenAI(
azure_endpoint = os.environ["OPENAI_API_BASE"],
api_key=os.environ["OPENAI_API_KEY"],
api_version=os.environ["OPENAI_API_VERSION"]
)
ファイルの読み込み関数の定義
def read_docx(file_path):
doc = Document(file_path)
full_text = []
for para in doc.paragraphs:
full_text.append(para.text)
return "\n".join(full_text)
def read_pdf(file_path):
pdf_document = fitz.open(file_path)
full_text = ""
for page_num in range(pdf_document.page_count):
page = pdf_document.load_page(page_num)
full_text += page.get_text("text")
return full_text
# def ファイルよりテキスト抽出する
def create_doctext(file_path,docname):
if file_path.endswith(".docx"):
text = read_docx(file_path)
elif file_path.endswith(".pdf"):
text = read_pdf(file_path)
else:
raise ValueError("Unsupported file format. Please provide a .docx or .pdf file.")
return f"\n### {docname} \n {text} \n"
# def Azure OpenAI Serviceのモデル定義
def generate_response(messages):
response = client.chat.completions.create(
model="", # model = "deployment_name"
messages = messages,
temperature=0.7,
max_tokens=4096,
top_p=0.95,
frequency_penalty=0,
presence_penalty=0,
stop=None
)
return response
事前準備
ファイル 入力
file_path1="old.docx"
file_path2="new.docx"
doc = ""
if file_path1 != "" :
doc += create_doctext(file_path1,"ファイル1")
if file_path2 != "" :
doc += create_doctext(file_path2,"ファイル2")
プロンプト 入力
messages = [
{"role": "system", "content": "You are a helpful assistant in Japanese."}
]
user_input = """入力ファイル1と2の違いについて、対比表を作成してください。
文章の相違箇所を並べて出力してください。
単語の相違箇所も出力してください。
対比した中で、存在しない場合は、「対象なし」と表示してください。
出力はHTMLとしてください。\n"""
if doc == "":
user_message = {"role": "user", "content": f"{user_input}"}
else:
user_message = {"role": "user", "content": f"{user_input} \n {doc} \n "}
print(f"{user_input} \"\"\" {doc} \"\"\"")
GPT 呼び出し
# GPT 呼び出し
messages.append(user_message)
response = generate_response(messages)
# 回答を表示
from IPython.display import HTML
HTML(response.choices[0].message.content)
結果としては以下の通りになります。
まとめ
非常に簡単に作成できますね。今回利用したプロンプトはBingChatなどでも利用できますので、ご活用ください。