ð ADK培åºè§£èª¬ïœStateãšArtifactã䜿ã£ãåçããã³ããã®äœãæ¹
ä»åã¯ãGoogleã®Agent Development KitïŒADKïŒ ã䜿ãéã«è¶
䟿å©ãªã
ãã€ã³ã¹ãã©ã¯ã·ã§ã³ïŒããã³ããïŒå
ã§ã®ãã¬ãŒã¹ãã«ããŒçœ®æã æ©èœã«ã€ããŠç޹ä»ããŸãã
å
¬åŒããã¥ã¡ã³ãã§ã¯ããŸã匷調ãããŠããªãã§ããã
å®ã¯ããªã䜿ããæ©èœã ã£ãã®ã§ã詳ããæãäžããŠãããŸãïŒ
ð¯ ããããã®èª²é¡ïœã³ã³ããã¹ãã«å¿ããããã³ãããäœããã
AIãšãŒãžã§ã³ããäœããšãããããªããšãããããªããŸãããïŒ
- ãŠãŒã¶ãŒãåã«å ¥åããããŒã¿ãåç §ããã
- éå»ã®ããŒã«ã®åºåçµæãããã³ããã«å ¥ããã
- ä¿åããŠãããããã¥ã¡ã³ããèŠçŽãããã
ãã®ããã«ADKã«ã¯ã
â
session.state
ïŒã»ãã·ã§ã³äžã®ç¶æ
ä¿åïŒ
â
ArtifactService
ïŒãã¡ã€ã«ãªã©ã®ç®¡çïŒ
ãšãã£ãä»çµã¿ããããŸãã
ã§ããæ¯å倧éã®ããŒã¿ãçŽæ¥ããã³ããã«ãã¿æžãããã®ã¯å€§å€ã ãã
LLMã®ã³ã³ããã¹ããŠã£ã³ããŠïŒå
¥åã§ããæå€§ããŒã¯ã³æ°ïŒã«ãåŒã£ããããããâŠâŠã
ãã£ãšã¹ããŒããªæ¹æ³ã欲ããã§ãããã
𧩠解決çïœã€ã³ã¹ãã©ã¯ã·ã§ã³å ã®ãã¬ãŒã¹ãã«ããŒçœ®æ
ADKã®ãœãŒã¹ã³ãŒããèªã¿èŸŒãã ãšããã
å®ã¯ instruction
æååã®äžã« {}
ã§å²ãã ãã¬ãŒã¹ãã«ããŒãæžããšã
èªåã§çœ®æããŠãããä»çµã¿ãããããšã倿ããŸããïŒ
⚠䜿ãããã¬ãŒã¹ãã«ããŒäžèЧ
-
Session Stateãåç §
-
{key}
ãŸãã¯{state.key}
âsession.state['key']
-
{app:key}
â ã¢ããªã¹ã³ãŒãã®state -
{user:key}
â ãŠãŒã¶ãŒã¹ã³ãŒãã®state -
{key?}
â çç¥å¯èœãªãã¬ãŒã¹ãã«ããŒïŒç¡ããšãã¯ç©ºæåã«ãªãïŒ
-
-
Artifactãåç §
-
{artifact.filename}
â æå®ããã¢ãŒãã£ãã¡ã¯ããã¡ã€ã«ã®äžèº«ã«çœ®æ
-
眮ææã«ã¯å€ãèªåã§æåååãããã®ã§ãåãæ°ã«ããªããŠOKã§ãã
ð ïž å®éã®äœ¿ãæ¹ïœãµã³ãã«ã³ãŒã玹ä»
ããããã¯å®éã«ãã©ããã£ãŠäœ¿ãããèŠãŠãããŸãããïŒ
ð äŸâ ïŒStateã®å€ãåç §ããïŒGenerator-Criticãã¿ãŒã³ïŒ
from google.adk.agents import Agent
# GeneratorãšãŒãžã§ã³ãïŒäžæžããäœæããŠstateã«ä¿å
generator = Agent(
name="generator_agent",
model="gemini-2.0-flash",
instruction="Write a short paragraph about subject X.",
output_key="draft_text"
)
# ReviewerãšãŒãžã§ã³ãïŒstateããäžæžããèªã¿èŸŒãã§ã¬ãã¥ãŒ
reviewer = Agent(
name="reviewer_agent",
model="gemini-2.0-flash",
instruction="Please review the following draft: {draft_text}. Check for factual accuracy and provide feedback."
)
ãããªæãã§ãèªç¶ãªåœ¢ã§ããŒã¿ãããã³ã¿ããã§ããŸãïŒ
(ãã®äŸãããã¥ã¡ã³ãã«ã¯éã圢åŒã§èšèŒãããŠããã®ã§æ··ä¹±ãã...)
ð äŸâ¡ïŒArtifactã®ãã¡ã€ã«ãåç §ãã
from google.adk.agents import Agent
# meeting_notes.txtãšãããã¡ã€ã«ãããšã«èŠçŽ
summarizer = Agent(
name="summarizer_agent",
model="gemini-2.0-flash",
instruction="Summarize the document provided in the artifact named 'meeting_notes.txt': {artifact.meeting_notes.txt}"
)
Artifactã䜿ãã°ãããã¥ã¡ã³ããäžžããšããã³ããã«èŒããããšãå¯èœã§ãïŒ
ð ïžãå¿çšãã³ãŒãåŽã§ã€ã³ã¹ãã©ã¯ã·ã§ã³ãçµã¿ç«ãŠãæ¹æ³ã
ã¡ãªã¿ã«ããã¬ãŒã¹ãã«ããŒã䜿ããã
Pythonã³ãŒãå
ã§åçã«instruction
ãçµã¿ç«ãŠãæ¹æ³ããããŸãã
# ã³ãŒã«ããã¯é¢æ°ã§ã€ã³ã¹ãã©ã¯ã·ã§ã³ãåçã«ã»ãã
def update_instruction_before_call(callback_context: CallbackContext, llm_request: LlmRequest):
draft = callback_context.state.get('draft_text', '')
llm_request.config.system_instruction = f"Please review the following draft: {draft}. Check for factual accuracy."
return None
reviewer = Agent(
name="reviewer_agent",
model="gemini-2.0-flash",
instruction=None,
before_model_callback=update_instruction_before_call
)
ãã¡ãã¯æè»æ§éèŠã§ããã
ã·ã³ãã«ãªçœ®æã ããªããã¬ãŒã¹ãã«ããŒã®æ¹ãå§åçã«ãããã§ããïŒ
ð ãŸãšã
ãŸãšãããšâŠ
-
{key}
{artifact.filename}
ã®ãã㪠ãã¬ãŒã¹ãã«ã㌠ã䜿ãã° -
session.state
ãArtifactService
ã®ããŒã¿ã - ç°¡åïŒå®å šã«ã€ã³ã¹ãã©ã¯ã·ã§ã³ã«åã蟌ããïŒ
ãã ãã
çŸæç¹ã§ã¯å
¬åŒããã¥ã¡ã³ãã§æç¢ºã«ç޹ä»ãããŠããªãå
éšä»æ§ã£ãœãã®ã§ã
ä»åŸã®ããŒãžã§ã³ã¢ããã§ä»æ§å€æŽããããªã¹ã¯ã¯ãŒãã§ã¯ãããŸããâ ïž
ãšã¯ããã
ãœãŒã¹ã³ãŒãããŠããããã¹ãã«ããã£ããå®è£
ãããŠããã®ã§ã
ãçŸè¡ããŒãžã§ã³ã§ã¯å®å¿ããŠäœ¿ããæ©èœããšèããŠåé¡ãªãã§ãããïŒ
ð ADKã䜿ã£ããšãŒãžã§ã³ãéçºããã£ãšã¹ã ãŒãºã«ãããæ¹ã¯ã
ãã²ãã®ãã¬ãŒã¹ãã«ããŒçœ®æã掻çšããŠã¿ãŠãã ããïŒ
Discussion