Notion Database で管理しているリーディングリストをホームページに掲載する Notion Database で管理しているリーディングリストを定期的かつ自動的にホームページに掲載する仕組みです。以下の運用を想定しています。
Notion に記録した Web サイトのリーディングリストを Markdown 形式で出力するスクリプト Notion に記録した Web サイトのリーディングリストを Markdown 形式で出力するスクリプトを作成しました。以下のような運用を想定しています。
DifyをAmazon Lightsailで動かす DifyをLightsailで動かす方法です。絶対に失敗しないDifyデプロイの手順、AWS Lightsail編で紹介されているままですが、起動スクリプトを貼り付けるだけでDifyまで起動するようにしているため、必要な操作はLightsailの初期設定のみです。
⚠️ 本手順を実行すると、インターネット上に公開された状態でDifyサービスが動作します。別途、Lightsail のファイアウォールでインスタンストラフィックを制御するなどを参考に、アクセス元を制限するなどのセキュリティは適切に設定してください。また、本手順のみでは平文での通信となるため、あくまで動作確認用としてご利用ください。 Lightsailインスタンスを作成する Amazon Lightsailにて以下のようにインスタンスを作成します。インスタンスのサイズは2GBのものを選択してください。1GBだとメモリ不足で起動しないことがあります。
現在のシステム開発とアジャイル手法 本書では、変化の激しい市場環境に対応する現代のシステム開発手法に焦点を当て、リーンスタートアップ、アジャイル開発について解説します。これらの手法がどのようにしてプロダクトの価値を最大化し、顧客のニーズに応えるかを詳述します。従来型の固定スコープ開発については、別資料を参照してください。
システム開発の進化と現状 プロダクト開発とシステム開発の関係 プロダクトは顧客の課題を解決するための成果物です。プロダクトを構成する要素として、デジタル技術を利用したシステムは非常に重要です。現在のプロダクト開発では、迅速な対応が求められているため、システム開発にも同様のスピード感と柔軟性が必要とされています。
従来型システム開発のプロジェクトマネジメント基礎 本書では、スコープが固定され、予算や納期の達成が重視される従来型のシステム開発に焦点を当て、プロジェクトのプロセス概要とプロジェクトマネージャーの基本的な役割について解説します。新規事業開発や変化の激しい環境で要求されるリーンスタートアップ型のシステム開発については、別資料を参照してください。
プロジェクトマネジメントの基本概念 プロジェクトマネジメントとは プロジェクトマネジメントとは、目標達成のためにプロジェクトを計画、実行、管理する活動です。プロジェクトマネージャは、QCD(品質: Quality、コスト: Cost、納期: Delivery)の観点からリソース割当の優先度を調整し、プロジェクトの目的と成果物の達成に向けてリソースを効果的に配分する役割を果たすことが期待されます。
Notion に記録した議事録をデータベースに変換するスクリプト Notion に記録した議事録をデータベースに変換するスクリプトを作成しました。以下のように普通のページとして Notion に議事録を記録しているとします。
PandasのDataFrameに対して、Amazon Bedrockを利用した処理を並列で呼び出す方法 PandasのDataFrameに対して、Amazon Bedrockを利用した処理を並列で呼び出す方法を調べてみました。PandasのDataFrameに対して、OpenAI APIを利用した処理を並列で呼び出す方法のAmazon Bedrockバージョンです。こちらも端的にはpandarallelを使いましょう、です。
PandasのDataFrameに対して、OpenAI APIを利用した処理を並列で呼び出す方法 PandasのDataFrameに対して、OpenAI APIを利用した処理を並列で呼び出す方法を調べてみました。結論としては、pandarallelを使うのが最も簡単だろうという感じです。
from pandarallel import pandarallel pandarallel.initialize() summary_df["summary"] = summary_df["url"].parallel_apply(get_summary) display(summary_df) 前提条件 openai==1.16.2 pandarallel==1.6.5 事前準備 from __future__ import annotations import openai import urllib import pandas as pd urls = [ "https://www.inoue-kobo.com/llm/openai-reduce-embedding-dim/", "https://www.inoue-kobo.com/aws/selenium-serverless/", "https://www.inoue-kobo.com/aws/aws-service-summary/", "https://www.inoue-kobo.com/ai_ml/duckduckgo-langchain-langsmith/", "https://www.inoue-kobo.com/ai_ml/llamaindex-pdf-gradio/", ] summary_df = pd.DataFrame(urls, columns=["url"]) pd.set_option("display.max_colwidth", None) 単純に apply するだけ def get_summary(url: str) -> str | None: res_web = urllib.request.urlopen(url) # type: ignore content = res_web.read().decode("utf-8") res_openai = openai.chat.completions.create( model="gpt-3.5-turbo", temperature=0, messages=[ { "role": "system", "content": "以下はWebサイトの内容です。HTMLタグを削除した上で、150文字以内で要約してください。", }, {"role": "user", "content": content}, ], ) return res_openai.choices[0].message.content summary_df["summary"] = summary_df["url"].apply(get_summary) display(summary_df) 実行時間は12.3sでした。applyしただけでは並列処理は行われないため、この処理時間が基準になります。
OpenAI API Embeddings の dim 指定の実装方法を確認した OpenAI API として新しくリリースされたベクトル表現取得用モデルである text-embedding-3 では、出力の次元数を指定できるようになりました。どうやってるのかな?と気になったので、実装方法を確認してみました。結論から言うと、以下の公式ドキュメントに書いてある実装方法のショートカットでした(その旨がドキュメントに書いてあります)。
LangChain Evaluation の String Evaluators のまとめ LangChain Evaluation の String Evaluators について、提供されている EvaluatorType の挙動を一通り確認してみました。