Chatten mit PDF in Azure#
Dies ist ein einfacher Flow, mit dem Sie Fragen zum Inhalt einer PDF-Datei stellen und Antworten erhalten können. Sie können den Flow mit einer URL zu einer PDF-Datei und einer Frage als Argument ausführen. Nach dem Start wird die PDF-Datei heruntergeladen und ein Index des Inhalts erstellt. Wenn Sie dann eine Frage stellen, wird der Index abgefragt, um relevante Inhalte abzurufen, und die Frage zusammen mit den relevanten Inhalten an das OpenAI Chat-Modell (gpt-3.5-turbo oder gpt4) gesendet, um eine Antwort zu erhalten.
0. Abhängigkeiten installieren#
%pip install -r requirements.txt
1. Verbindung zum Azure Machine Learning-Arbeitsbereich herstellen#
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
try:
credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
credential = InteractiveBrowserCredential()
1.1 Machen Sie sich mit der primären Benutzeroberfläche vertraut - PFClient#
import promptflow.azure as azure
# Get a handle to workspace
pf = azure.PFClient.from_config(credential=credential)
1.2 Notwendige Verbindungen erstellen#
Verbindungen in Prompt Flow dienen zur Verwaltung der Einstellungen für das Verhalten Ihrer Anwendung, einschließlich der Art und Weise, wie mit verschiedenen Diensten kommuniziert wird (z. B. Azure OpenAI).
Bereiten Sie Ihre Azure OpenAI-Ressource gemäß dieser Anleitung vor und besorgen Sie sich Ihren api_key, falls Sie noch keinen haben.
Bitte gehen Sie zum Arbeitsbereich-Portal, klicken Sie auf Prompt Flow -> Verbindungen -> Erstellen und folgen Sie dann der Anleitung, um Ihre eigenen Verbindungen zu erstellen. Mehr erfahren Sie unter Verbindungen.
conn_name = "open_ai_connection"
# TODO integrate with azure.ai sdk
# currently we only support create connection in Azure ML Studio UI
# raise Exception(f"Please create {conn_name} connection in Azure ML Studio.")
2. Flow mit Einstellungen ausführen (Kontextgröße 2K)#
flow_path = "."
data_path = "./data/bert-paper-qna-3-line.jsonl"
config_2k_context = {
"EMBEDDING_MODEL_DEPLOYMENT_NAME": "text-embedding-ada-002",
"CHAT_MODEL_DEPLOYMENT_NAME": "gpt-35-turbo",
"PROMPT_TOKEN_LIMIT": 2000,
"MAX_COMPLETION_TOKENS": 256,
"VERBOSE": True,
"CHUNK_SIZE": 1024,
"CHUNK_OVERLAP": 32,
}
column_mapping = {
"question": "${data.question}",
"pdf_url": "${data.pdf_url}",
"chat_history": "${data.chat_history}",
"config": config_2k_context,
}
run_2k_context = pf.run(
flow=flow_path,
data=data_path,
column_mapping=column_mapping,
display_name="chat_with_pdf_2k_context",
tags={"chat_with_pdf": "", "1st_round": ""},
)
pf.stream(run_2k_context)
print(run_2k_context)
detail = pf.get_details(run_2k_context)
detail
3. Die „Groundedness“ bewerten#
Der Flow `eval-groundedness flow` verwendet das ChatGPT/GPT4-Modell, um die vom Chat-mit-PDF-Flow generierten Antworten zu bewerten.
eval_groundedness_flow_path = "../../evaluation/eval-groundedness/"
eval_groundedness_2k_context = pf.run(
flow=eval_groundedness_flow_path,
run=run_2k_context,
column_mapping={
"question": "${run.inputs.question}",
"answer": "${run.outputs.answer}",
"context": "${run.outputs.context}",
},
display_name="eval_groundedness_2k_context",
)
pf.stream(eval_groundedness_2k_context)
print(eval_groundedness_2k_context)
4. Eine andere Konfiguration ausprobieren und erneut bewerten - Experimentieren#
flow_path = "."
data_path = "./data/bert-paper-qna-3-line.jsonl"
config_3k_context = {
"EMBEDDING_MODEL_DEPLOYMENT_NAME": "text-embedding-ada-002",
"CHAT_MODEL_DEPLOYMENT_NAME": "gpt-35-turbo",
"PROMPT_TOKEN_LIMIT": 3000, # different from 2k context
"MAX_COMPLETION_TOKENS": 256,
"VERBOSE": True,
"CHUNK_SIZE": 1024,
"CHUNK_OVERLAP": 32,
}
column_mapping = {
"question": "${data.question}",
"pdf_url": "${data.pdf_url}",
"chat_history": "${data.chat_history}",
"config": config_3k_context,
}
run_3k_context = pf.run(
flow=flow_path,
data=data_path,
column_mapping=column_mapping,
display_name="chat_with_pdf_3k_context",
tags={"chat_with_pdf": "", "2nd_round": ""},
)
pf.stream(run_3k_context)
print(run_3k_context)
detail = pf.get_details(run_3k_context)
detail
eval_groundedness_3k_context = pf.run(
flow=eval_groundedness_flow_path,
run=run_3k_context,
column_mapping={
"question": "${run.inputs.question}",
"answer": "${run.outputs.answer}",
"context": "${run.outputs.context}",
},
display_name="eval_groundedness_3k_context",
)
pf.stream(eval_groundedness_3k_context)
print(eval_groundedness_3k_context)
pf.get_details(eval_groundedness_3k_context)
pf.visualize([eval_groundedness_2k_context, eval_groundedness_3k_context])

