Azure Machine Learning Prompt Flow の歩き方

[MLOps Advent Calendar 2023](https://qiita.com/advent-calendar/2023/mlops) の21日目です。
遅れても年末にやるぞ、年始にやるぞ、と言いつつぬくぬくスルーし続けてしまいそうだったのでここで気合をいれて書きたいと思います。

最初は Azure Machine Learning (AzureML) と最近登場した Azure AI Studio (AI Studio)(プレビュー) で利用可能になっている Prompt Flow について書こうと思っていましたが、ネットを検索したところ既に様々な方が記事を投稿されていました。今まで Azure のプロダクトでここまで反響のあった機能はあったでしょうか。大変喜ばしい事です。

ということで(！？) Prompt Flow は、既にかなりの内容が記事化、動画化されていていて改めて私が語ることはあんまりないかなという気持ちになってしまったので、本記事はこれから学ぶ方向けに歩き方的なリンク集をサラッと共有させて頂くぐらいに留めさせて頂き、
代わりに実案件でかじった AzureML のモデル監視について、[13日目の記事](https://qiita.com/ptatecom/items/d32f272f5f385d8f9e08)でちょっと深く語らせて頂こうと思います。

# 宣伝

Azure OpenAI ServiceではじめるChatGPT/LLMシステム構築入門という書籍を、1/24 に技術評論社より出版いたします。ChatGPT/LLM システムを構築するのに必要な要素を初級者～上級者レベルまでカバーしていますので、本格的な活用を目指していらっしゃる方はぜひお手に取って頂けると幸いです。

https://amzn.asia/d/36nxqfA

# 告知

生成AI MLOps LT大会！！！が 1/18 に開催されます。ぜひご参加ください。

https://mlops.connpass.com/event/305093/

prompt flow Deep Dive リベンジも 1/7 にあります！

https://katte.connpass.com/event/306788/


# Prompt Flow とは

AzureML と AI Studio (プレビュー) で提供されるLLMアプリケーション作成のための開発ツールで、AzureML では既に一般提供開始しています。LLM への入力となるプロンプトの設計や文章検索ツールなどの外部ツールとの連携を含め、AI アプリケーションのプロトタイプ作成から、試行錯誤、完成後のデプロイまで包括的にサポートしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2238189/dab86845-a62f-37f0-ab2c-1f8ae09edbec.png)


Webブラウザから AzureML と AI Studio のスタジオにアクセスして利用することができます。また、CLI/SDK や Visual Studio Code (VS Code) の拡張機能からも利用可能です。

## サクッと一通りできることを知りたい/試したい方向け

まずはサクッと一通りできることを試したい/知りたい方向けには、こちらの記事がおすすめです。

[Prompt Flowが使えるようになったから、もうLangChainとか自分でホストしなくていい世界になったのかもしれない。](https://dev.classmethod.jp/articles/azureml-prompt-flow-ktkr/)
[世界一わかりみの深いAzure OpenAI Service/統合開発環境Promplt flow](https://tech-lab.sios.jp/archives/36497#Promplt_flow)

Azure 今すぐ使えないよという方に向けては、お手元の PC で VSCodeやCLI で Prompt Flow 動かすことができますので是非試してみてください！

[Prompt Flowをローカルで動かす＆コードで管理する](https://future-architect.github.io/articles/20231011a/)
[Prompt flowをCLIから使ってみる](https://zenn.dev/microsoft/articles/promptflow-cli)

## 動画でサクッと知りたい方向け

英語ですが動画も出ています！YouTubeの翻訳字幕で日本語字幕で見ることもできます。

[End-to-End AI App Development: Prompt Engineering to LLMOps | BRK203](https://www.youtube.com/watch?v=DdOylyrTOWg)
[Getting Started with Azure AI Studio's Prompt Flow - Part 4](https://www.youtube.com/watch?v=8h7OXfdUEhA)

ちょっとマニアックですが、Semantic Kernel を Prompt Flow 上で利用する方法も動画で公開されています。

[Semantic Kernel in Azure Prompt Flow For Your Plugins](https://www.youtube.com/watch?v=rUfTaZDL_z8)


## LLM アプリのテスト/評価

LLM をアプリに組み込んだら、回答内容の正確性を評価したくなりますよね。こちらで詳しく解説しています。

[Azure Machine Learning Prompt flow 評価メトリクス解説](https://speakerdeck.com/nohanaga/azure-machine-learning-prompt-flow-ping-jia-metorikusujie-shuo)
[OpenAIのモデルアップデートに備えてPrompt Flowでモデルの評価フローを作る](https://zenn.dev/microsoft/articles/llm-testing-using-prompt-flow)
[Prompt Flowで評価Flowを自作してRAGのイケてるLLMOpsを実現してみた](https://nttdocomo-developers.jp/entry/20231211_1)


## LLMOps 文脈での prompt flow

機械学習のライフサイクル管理を行うためのベストプラクティスである MLOps (Machine Learning Operations) の大規模言語モデル版である LLMOps (Large Language Model Operations) という考え方が生まれています。
データ準備、モデル検討・ファインチューニング、検索拡張生成 (RAG: Retrieval Augmented Generation) 開発、デプロイ、モデルの監視と管理といった一連のライフサイクルをどのように管理すればよいか整理されています。

[An Introduction to LLMOps: Operationalizing and Managing Large Language Models using Azure ML](https://techcommunity.microsoft.com/t5/ai-machine-learning-blog/an-introduction-to-llmops-operationalizing-and-managing-large/ba-p/3910996)

公式から豊富なサンプルコードも提供されています。

[LLMOps with Prompt Flow (preview)](https://github.com/microsoft/llmops-promptflow-template)

## ユースケース

使い方が分かったら具体的なユースケースで試してみたくなりますよね。既にいくつかのユースケースでの開発方法を解説した記事も公開されています。ありがたや。

[ChatGPTで社内ナレッジの回答をするLINEボットを作ってみた](https://qiita.com/fsd_maclala/items/0ebbaf60bacad2975768)
[Prompt flowでブログ記事の紹介をXにポストする](https://tech-lab.sios.jp/archives/38030)

## MS公式情報

最後に公式情報を記して締めたいと思います。利用した方からの評判もかなりよい開発ツールとなっていますので、ぜひ使てみてください！

[[公式ドキュメント]Azure Machine Learning プロンプト フローとは](https://learn.microsoft.com/ja-jp/azure/machine-learning/prompt-flow/overview-what-is-prompt-flow?view=azureml-api-2)
[[公式サンプルコード]Prompt flow](https://github.com/microsoft/promptflow)