3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Dify×Notionで作るレシピ管理システム】レシピ登録編

Posted at

Power Platformとは全く関係ないですが、たまには他のツールも触ってみようということで生成AIを用いたワークフローが簡単に作れるDifyと、神タスク管理ツールであるNotionを連携させてレシピ管理システムを一日で作成したので備忘的に内容を説明します。

前回の概要&セットアップ編に続いて、今回はレシピ管理システムの核心部分であるレシピ登録機能について解説します。

実行結果

こんな感じでURLを入力するだけで自動でレシピDBが完成します。便利です。

image.png

レシピ登録機能の概要

最初の質問分類で、レシピを含むURLかレシピのテキストが入力された場合に実行される処理を説明します。

image.png

クラス1としてURLが入力された場合はURL内のテキストを、クラス2としてレシピが入力された場合はそのテキストを解析してNotionのAPIで登録できる形式に整形します。

image.png

ちなみにこの機能だけならiPhoneアプリのRecipinというアプリでもできます。
買うものリスト機能はないのでDifyで作りました。
Recipin シンプルなお料理レシピ保存・管理アプリ - App Store

レシピ登録プロセス

ユーザー入力・質問分類

先述の通りユーザー入力をクラス1~4に分類して条件分岐します。

image.png

クラス2としてレシピのテキストが入力された場合は中間処理をスキップして変数集約器にぶち込みます。

image.png

URL解析

再度質問分類器を使用してYouTubeのURLかどうかで分岐しています。
Transcripts APIがあまり正常に動作しないので、空の場合はJinaReaderで処理されるようにフローを組んでいます。

image.png

JinaReaderはURLの中のテキストを読み取ってくれるAPIで、無料で使えます。クオリティもいいです。
Reader API

パラメータ抽出

image.png

YouTube Transcript, Jinaまたはユーザー入力を変数集約器でまとめ、そのうち有効なものをレシピ抽出LLMでレシピを抽出します。

image.png

image.png

HTTPリクエストのボディは文字エスケープが面倒なのでLLMで成形してから入力します。

image.png

いくらプロンプトを工夫しても頭に'''jsonとついてしまうので、正しい形式になっていない場合は修正されるようにしています。現状エラー処理はIf/Elseで対応するしかなさそう。

image.png

Notion APIでレシピ登録

ここまででJSONを整形できたので、Notion APIでNotionにレシピを登録します。

image.png

POST https://api.notion.com/v1/pages/
Authorization: Bearer [NOTION_API_KEY]
Content-Type: application/json
Notion-Version: 2022-06-28

ボディは以下の通りです。

{
  "parent": { "database_id": "NOTION_DATABASE_ID" },
  "properties": {
    "名前": {
      "title": [
        {
          "text": {
            "content": "レシピ名"
          }
        }
      ]
    },
    "手順": {
      "rich_text": [
        {
          "text": {
            "content": "手順の詳細"
          }
        }
      ]
    },
    "材料": {
      "rich_text": [
        {
          "text": {
            "content": "材料の詳細"
          }
        }
      ]
    },
    "タグ": {
      "multi_select": [
        { "name": "タグ1" },
        { "name": "タグ2" }
      ]
    },
    "時間": {
      "number": 30
    },
    "URL": {
      "url": "https://example.com/recipe"
    }
  }
}

プロパティ別の記法は以下を参考にしました。

その他Notion APIを使用するにあたって参考にさせていただいた記事です。

つづき

需要とやる気があれば機能ごとに記事を書くかも…

Claudeなど生成AIチャットボットに聞きながらではありましたが、Difyを通じて前から使いたいと思っていたGeminiやNotionのAPIを勉強できたのでよかったです。

元記事

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?