現在のシステム開発とアジャイル手法 本書では、変化の激しい市場環境に対応する現代のシステム開発手法に焦点を当て、リーンスタートアップ、アジャイル開発について解説します。これらの手法がどのようにしてプロダクトの価値を最大化し、顧客のニーズに応えるかを詳述します。従来型の固定スコープ開発については、別資料を参照してください。
システム開発の進化と現状 プロダクト開発とシステム開発の関係 プロダクトは顧客の課題を解決するための成果物です。プロダクトを構成する要素として、デジタル技術を利用したシステムは非常に重要です。現在のプロダクト開発では、迅速な対応が求められているため、システム開発にも同様のスピード感と柔軟性が必要とされています。
従来型システム開発のプロジェクトマネジメント基礎 本書では、スコープが固定され、予算や納期の達成が重視される従来型のシステム開発に焦点を当て、プロジェクトのプロセス概要とプロジェクトマネージャーの基本的な役割について解説します。新規事業開発や変化の激しい環境で要求されるリーンスタートアップ型のシステム開発については、別資料を参照してください。
プロジェクトマネジメントの基本概念 プロジェクトマネジメントとは プロジェクトマネジメントとは、目標達成のためにプロジェクトを計画、実行、管理する活動です。プロジェクトマネージャは、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 の挙動を一通り確認してみました。
AWSサービス一覧をNotionデータベースでまとめる TL;DR AWS公式のAWS クラウド製品からサービス一覧を取得し、NotionデータベースにAPIとして登録してみました。各サービスの簡単な説明は、AWS クラウド製品でも記載されていますが、Notion AIを利用することでもう少し長めの説明を追記しています。
機械学習プロジェクトで必要な役割 前提とするフェーズ POCフェーズを想定しています。本格的な構築の際には、DevOps、SRAなど追加の役割が必要です。必要な知識の一覧についても同様です。 システム開発プロジェクトで必要なロールに限定しています。マーケターやビジネスアナリストなど、主に企画段階で要求されるロールは含めていません。 前提とするプロジェクトコミュニティ
SeleniumをAWS Lambdaでサーバーレスに動かしてみる TL;DR APIが提供されていないなどの理由で、Seleniumを使ってWebサービスを操作する際に、サーバーレスで実行できると便利ですが、AWS Lambdaで実行するためには依存モジュールなどの調整が必要です。このあたりの面倒な作業については、有難いことに以下のリポジトリで開発されています。