AWS Bedrock Agentcoreの勉強のためにいくつかAIエージェント作ってた中で、Memory機能がめっちゃ面白かったので共有する。
Memory機能のLong Term MemoryってAgentCoreが自動的に作るので、投入したメッセージを元に、どういったデータが蓄積されるのか、実際の事例を共有するので、それも参考になると思う。
作ったもの
- プロジェクトマネジメントのサポートBotを作ってみた
- Long Term Memoryにプロジェクト中の事実や、得た学びなどを記録して、効率的にプロジェクトを記録していきたい
Long Term Memoryの定義
- いったん、既存のStrategies3種類を使って作る
- ナレッジをPREFERENCEでいいのかは謎
strategies = [
{
# プロジェクト事実(Semantic)
StrategyType.SEMANTIC.value: {
"name": "ProjectFactsStrategy",
"description": "プロジェクト中に発生した事実・イベントを記録",
"namespaces": ["project_management/facts/{actorId}/{sessionId}"]
}
},
{
# ナレッジ・ノウハウ(User Preference)
StrategyType.USER_PREFERENCE.value: {
"name": "ProjectKnowledgeStrategy",
"description": "プロジェクトを通じて得られた知見・ノウハウを長期的に保存",
"namespaces": ["project_management/knowledge/{actorId}"]
}
},
{
# サマリー(Summary)
StrategyType.SUMMARY.value: {
"name": "ProjectSummaryStrategy",
"description": "プロジェクトの進行経過・フェーズ概要を自動サマリ化",
"namespaces": ["project_management/summaries/{actorId}/{sessionId}"]
}
}
]
# 取り出し
facts = retrieve_longterm(MEMORY_ID, facts_namespace, "進捗 状況")
knowledge = retrieve_longterm(MEMORY_ID, knowledge_namespace, "学び 改善")
summaries = retrieve_longterm(MEMORY_ID, summary_namespace, "要約 サマリー")
で、実際どう動いたのか
事前のネタ注入
- とりあえず、プロジェクトのキックオフMtgでの内容っぽいものを入れた
{"prompt": "プロジェクトの定例会は毎週木曜15時から16時まで。今週のタスクは、開発部はPDFの取り込みツールの作成、事業部は画像取り込みプロンプトの作成"}
{"prompt": "定例会は12月まで継続する。12月までの目標は、資料のレビューAIのPoC開発"}
{"prompt": "事業部の主要メンバーは、渋谷さん、新宿さん、高田さん"}
試験結果
{"prompt": "12月までの目標ってなんだっけ"}
- アウトプット
- Long Term Memoryに5件、4件、1件の保存が確認できた!
- 「project alpha」ってのは、ActorIdのダミー値として入れたのでそれが使われている
{
"response": "プロジェクト「project_alpha」の12月までの目標は以下の通りです:
1. **事業部タスク:画像取り込みのプロンプト作成**
- タスクの完了期限は、次回の定例会までです。
- 主要メンバー:渋谷さん、新宿さん、高田さん
- これらのメンバーが率先して取り組んでいただければ幸いです。
2. **開発部のタスク:PDF取り込みツールの作成**
- 開発部チームメンバーには、早めに着手し、次回定例会までに完了するようお願いいたします。
定例会では、各チームの進捗状況を共有し、必要に応じて課題やリソースの調整を行います。
定例会への参加をお願いいたします。
何か他にお手伝いできることがあれば、遠慮なくお知らせください。",
"facts_found": 5,
"knowledge_found": 4,
"summary_found": 1
}
Long Term Memoryには何が格納されたのか
Fact:プロジェクト事実。プロジェクトの進捗やイベントを記録
# |
Fact |
1 |
プロジェクト「project_alpha」の事業部のメインタスクは画像取り込みのプロンプト作成であり、これは12月までの目標である。 |
2 |
プロジェクト「project_alpha」では、開発部のアクションアイテムはPDF取り込みツール作成であり、次回定例会までに完了する必要がある。 |
3 |
事業部のアクションアイテムは画像取り込みのプロンプト作成であり、次回の定例会までに完了する必要がある。 |
4 |
定例会を毎週木曜15時から16時に設定し、12月末まで継続する。 |
5 |
事業部の主要メンバーは渋谷さん、新宿さん、高田さんである。 |
Preference:プロジェクトで得たナレッジを蓄積
- Factとだいぶ重複しているように見受けられる
- 「開発部のタスクなんだっけ?」と試験のために何回か聞いたので、「継続的にこのタスクについて問い合わせており、内容に関心を示している」と要約されているのは特徴的
- プロジェクトの主要メンバーはPreferenceじゃなくてただの事実なんだけどなー
# |
Context (context) |
Preference (preference) |
Categories |
1 |
ユーザーは12月までのプロジェクト目標として、資料レビューのAI自動化PoCを実施すると述べた。12月末までにPoCの成果を共有し、レビューすることを目指している。 |
有識者会議レビューのAI自動化に関心があり、AIテクノロジーを用いた業務プロセスの自動化に興味がある。12月末までにPoCの成果を共有しレビューすることを希望している。 |
プロジェクト管理, AI技術, 業務改善, テクノロジー, project goals, timeline |
2 |
ユーザーが定例会の開催時間と参加部署のアクションアイテムを明確に指定しており、12月まで毎週木曜15時から16時に継続することを決定した。 |
毎週木曜日15時から16時に定例会を開催することを希望し、定期的な定例会による進捗管理を好む。 |
業務管理, 会議, スケジュール管理, 会議運営, プロジェクト管理, project management, meeting schedule |
3 |
ユーザーが具体的な部署別のタスクを設定しており、開発部にはPDF取り込みツール作成が割り当てられている。ユーザーは継続的にこのタスクについて問い合わせており、内容に関心を示している。 また、事業部のタスクについても確認している。 |
プロジェクト管理において、部署ごとに明確なアクションアイテムを設定し、PDF取り込みツールの開発に関心があり、その進捗や詳細について知りたがっている。プロジェクト全体の管理と進捗状況の把握に興味がある。 |
プロジェクト管理, 業務分担, テクノロジー, ツール開発, 技術タスク, コミュニケーション |
4 |
ユーザーが事業部の主要メンバーを明確に述べた。 |
品質管理室の主要メンバーは渋谷さん、新宿さん、高田さん。
|
organization, team structure |
Summary:プロジェクトの経緯サマリ
- やや冗長な感はあるが、しっかりサマライズできている
Topic |
Summary |
定例会のスケジュール |
毎週木曜日15時から16時にプロジェクト「project_alpha」の定例会が開催されることが決定された。 |
今週のアクションアイテム |
開発部:PDF取り込みツールの作成/事業部:画像取り込みのプロンプト作成。各タスクは次回定例会までに完了。 |
定例会の目的 |
各チームの進捗状況を共有し、必要に応じて課題やリソースの調整を行う。 |
プロジェクト期間と目標 |
定例会は12月末まで継続。目標は「資料レビューをAIで自動化するPoCの実施」。 |
担当チーム |
PoC実施において、AIチームとレビューチームが密接に連携しデータ・リソース準備を進める。 |
事業部のメンバー |
渋谷さん、新宿さん、高田さんの3名が主要メンバー。 |
事業部のタスク再確認 |
画像取り込みのプロンプト作成タスクを次回定例会までに完了。 |
定例会の目的再確認 |
定例会では進捗共有とリソース調整を行う。 |
12月までの目標 |
事業部と開発部のタスク、および12月PoC実施を含む目標。 |
開発部のタスク詳細 |
PDF取り込みツール作成タスク。進捗報告が求められている。 |
さいごに
- FactなのかPreferenceなのかは、悩ましい部分もあるが、ちょっと試した限りではかなり期待が持てる機能だと感じた
- プロジェクトごとに複数作って、もっと長期での運用実用性について、これから見ていきたい