OpenAIã®ãSwarmãã§AIãšãŒãžã§ã³ããéçºããŠã¿ã
ã¯ããã«
ã¯ãããŸããŠãããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€Ÿ ããŒã¿ãœãªã¥ãŒã·ã§ã³äºæ¥éšã®å岡ãšç³ããŸããæ®æ®µã¯ããŒã¿ãµã€ãšã³ãã£ã¹ããšããŠãããŒã¿åæãæ©æ¢°åŠç¿ã¢ãã«ã®æ§ç¯ãçæAIã¢ããªã®éçºãªã©ãè¡ã£ãŠããŸãã
è¿å¹ŽãAIã®çºå±ã«äŒŽããèªåŸçã«ããŸããŸãªã¿ã¹ã¯ãéè¡ããAIãšãŒãžã§ã³ããæ³šç®ãéããŠããŸããçæAIã«é¢ããã·ã³ããžãŠã ãã»ãããŒã«åå ãããšããã®ãAIãšãŒãžã§ã³ãããšããèšèãèãæ©äŒãå¢ããŠãããRAGã«ç¶ããŠæ¬¡ã«ããºãæè¡ã«ãªãã®ã§ã¯ãªãããšæããä»åãã£ããã¢ããããŠã¿ãããšã«ããŸããã
AIãšãŒãžã§ã³ããšã¯
AIãšãŒãžã§ã³ãã¯æè¡åéã«ãã£ãŠå®çŸ©ãå€å°ç°ãªãããšããããŸãããäžè¬çã«ã¯ãç°å¢ãšå¯Ÿè©±ããããŒã¿ãåéãããã®ããŒã¿ãããšã«èªåŸçã«ã¿ã¹ã¯ãå®è¡ããããšã§ãç¹å®ã®ç®æšãéæããããã®ãœãããŠã§ã¢ãæããŸããç¹ã«ãä»åçŠç¹ãšããã®ã¯ãLLMïŒå€§èŠæš¡èšèªã¢ãã«ïŒãããŒã¹ã«ããAIãšãŒãžã§ã³ããšãªããŸãã

åºå
ž: Azure OpenAI Service Dev Day / LLMã§ã§ããïŒäœ¿ããïŒçæAIãšãŒãžã§ã³ã
AIãšãŒãžã§ã³ãã®é²åã«äŒŽããè€æ°ã®ãšãŒãžã§ã³ããååããŠè€éãªã¿ã¹ã¯ãå®è¡ãããã«ããšãŒãžã§ã³ãã·ã¹ãã ã®éçºãå éããŠããŸããä»å玹ä»ãããSwarmãã¯ããã®ãããªãã«ããšãŒãžã§ã³ãã·ã¹ãã ã®æ§ç¯ã容æã«ããããã®ãã¬ãŒã ã¯ãŒã¯ã§ãã
Swarmãšã¯
Swarmã¯ã2024幎10æ12æ¥ã«OpenAIãå ¬éããããã«ããšãŒãžã§ã³ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®ããã®ãã¬ãŒã ã¯ãŒã¯ã§ãããã®ãã¬ãŒã ã¯ãŒã¯ã¯Pythonã䜿çšããŠãããAIãšãŒãžã§ã³ãå士ã飿ºããèªåŸçã«è€éãªã¿ã¹ã¯ãé²è¡ã§ããããã«èšèšãããŠããŸããSwarmã䜿çšããããšã§ããã«ããšãŒãžã§ã³ãã·ã¹ãã ãç°¡åã«æ§ç¯ã§ããããã«ãªããŸãã
ä»ã«ãAIãšãŒãžã§ã³ããæ§ç¯ããããã®ã©ã€ãã©ãªãšããŠãLangGraphããããŸããLangGraphã¯å€æ©èœã§æè»æ§ãé«ãäžæ¹ãå®è£ ãè€éã«ãªãåŸåããããŸããããã«å¯ŸããŠãSwarmã¯æ©èœãå°ãªããªããããå®è£ ãéåžžã«ç°¡åã§ããããšãç¹åŸŽã§ãã
ã¯ã©ã¹ãšé¢æ°
Swarmã§AIãšãŒãžã§ã³ããäœæã»å®è¡ããéã«äœ¿ãäž»ãªã¯ã©ã¹ãšé¢æ°ã«ã€ããŠèª¬æããŸãã
Agent
AIãšãŒãžã§ã³ããäœæããããã®ã¯ã©ã¹ã§ãããšãŒãžã§ã³ãã®ååãåäœãå©çšããã¢ãã«ãªã©ãèšå®ããŸãã
| ãã£ãŒã«ãå | å | åæå€ | 説æ |
|---|---|---|---|
| name | str | "Agent" | ãšãŒãžã§ã³ãã®åå |
| model | str | "gpt-4o" | 䜿çšããAIã¢ãã« |
| instruction | str | "You are a helpful agent." | ãšãŒãžã§ã³ããžã®æç€º |
| functions | List | [] | ãšãŒãžã§ã³ããå©çšã§ãã颿°ã®ãªã¹ã |
| tool_choice | str | None | ãšãŒãžã§ã³ãã䜿ãç¹å®ã®ããŒã«ã®æå® |
client.run()
äœæãããšãŒãžã§ã³ããå®è¡ããããã®é¢æ°ã§ãããšãŒãžã§ã³ãã«å¯Ÿããã¡ãã»ãŒãžãåŠçããäŒè©±ãé²ããŸãã
| åŒæ°å | å | åæå€ | 説æ |
|---|---|---|---|
| agent | Agent | å¿ é | åŒã³åºãããåæãšãŒãžã§ã³ã |
| messages | List | å¿ é | ã¡ãã»ãŒãžãªããžã§ã¯ãã®ãªã¹ã |
| context_variables | dict | {} | 远å ã®æ å ±ãå«ãã³ã³ããã¹ã |
| max_turns | int | float("inf") | äŒè©±ã®æå€§ã¿ãŒã³æ° |
| model_override | str | None | ã¢ãã«ã倿Žãããªãã·ã§ã³ |
| stream | bool | False | å¿çãã¹ããªãŒãã³ã°è¡šç€ºãããã©ãã |
| debug | bool | False | ãããã°ã¢ãŒã |
run_demo_loop()
äœæãããšãŒãžã§ã³ããã³ã³ãœãŒã«äžã§ç¹°ãè¿ãå®è¡ããããã®é¢æ°ã§ããå
éšã§client.run()ã䜿ã£ãŠãšãŒãžã§ã³ããåãããŠããŸãã
| åŒæ°å | å | åæå€ | 説æ |
|---|---|---|---|
| starting_agent | Agent | å¿ é | åŒã³åºãããåæãšãŒãžã§ã³ã |
| context_variables | dict | {} | 远å ã®æ å ±ãå«ãã³ã³ããã¹ã |
| stream | bool | False | å¿çãã¹ããªãŒãã³ã°è¡šç€ºãããã©ãã |
| debug | bool | False | ãããã°ã¢ãŒã |
ãµã³ãã«ããã°ã©ã
å ¬åŒãªããžããªã«ã¯ãããã€ãã®å®è£ äŸãå ¬éãããŠãããããããå©çšããããšã§çè§£ãæ·±ããããšãã§ããŸãã
| å®è£ ãµã³ãã« | 説æ |
|---|---|
| basic | ã»ããã¢ããã颿°ã®åŒã³åºãããšãŒãžã§ã³ãã®åŒãç¶ããã³ã³ããã¹ã倿°ã®å©çšãªã©ãåºæ¬çãªæ©èœãã·ã³ãã«ã«ç޹ä»ããäŸã |
| triage_agent | åºæ¬çãªããªã¢ãŒãžïŒæ¯ãåãïŒãšãŒãžã§ã³ãã®èšå®äŸãé©åãªãšãŒãžã§ã³ããžã®åŒãç¶ãæ¹æ³ã瀺ããŸãã |
| weather_agent | 颿°åŒã³åºãã䜿ã£ãã·ã³ãã«ãªå€©æ°äºå ±ãšãŒãžã§ã³ãã®äŸã |
| airline | è€æ°ã®ãšãŒãžã§ã³ãã䜿ã£ãŠãèªç©ºäŒç€Ÿã®æ§ã ãªã«ã¹ã¿ããŒãµãŒãã¹ãªã¯ãšã¹ãã«å¯Ÿå¿ããäŸã |
| support_bot | ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãšãŒãžã§ã³ããšãè€æ°ã®ããŒã«ãæã€ãã«ãã»ã³ã¿ãŒãšãŒãžã§ã³ããå«ããã«ã¹ã¿ããŒãµãŒãã¹ãããã®äŸã |
| personal_shopper | è³Œå ¥ã®ãµããŒããæ³šæã®è¿éæç¶ããæå©ããããããŒãœãã«ã·ã§ããã³ã°ãšãŒãžã§ã³ãã®äŸã |
ãã ãããããã®å®è£ äŸã®äžã«ã¯ãã®ãŸãŸã§ã¯åããªãã³ãŒããã説æãäžè¶³ããŠããç®æããããŸãã以äžã®èšäºã«ãå®è£ äŸã®è£è¶³èª¬æãä¿®æ£ã³ãŒãããŸãšããŠãã ãã£ãŠããæ¹ãããã£ããã£ãã®ã§ããã¡ããåèã«ãããšè¯ãããšæããŸãã
å¶æ¥æ¯æŽãããã®éçº
ä»åã¯ãå®éã«ãSwarmããå©çšããŠãç°¡æçãªå¶æ¥æ¯æŽããããéçºããŠã¿ãŸããã
ã³ã³ã»ãã
ããŒã¿åæãæ¯æŽããäŒæ¥åãã®å¶æ¥æ¯æŽãããã§ããå¶æ¥æ
åœè
ãã¯ã©ã€ã¢ã³ãããããŒã¿åæã«é¢ããçžè«ãåããéã«ã广çãªåè«ã¹ããŒãªãŒãçµã¿ç«ãŠããµããŒããè¡ããŸãã
åè«ã§ã¯ãã¯ã©ã€ã¢ã³ãã®çŸç¶ã課é¡ãçè§£ããèªç€Ÿã®ã¹ã¿ãããã©ã®ããã«ãã®èª²é¡ã«å¯Ÿå¿ã§ãããã广çã«äŒããããšãéèŠã§ããããã§ããããã®ãã€ã³ããæŒãããåè«ã¹ããŒãªãŒãèªåã§ãŸãšããããããšãç®æããŠãéçºãè¡ããŸããã
å šäœå
ä»åäœæããå¶æ¥æ¯æŽãããã¯ã4ã€ã®ãšãŒãžã§ã³ããååããŠæ©èœããŸããããªã¢ãŒãžãšãŒãžã§ã³ããWebæ€çŽ¢ãšãŒãžã§ã³ããç€Ÿå¡æ å ±æ€çŽ¢ãšãŒãžã§ã³ãããããŠåè«ã¹ããŒãªãŒçæãšãŒãžã§ã³ãã飿ºããåè«ã®æ¯æŽãè¡ããŸãã

以äžã«ãéçºããã³ãŒãã®å šäœãèšèŒããŸãã
å®è£ ã³ãŒã
from swarm import Swarm, Agent
from swarm.repl import run_demo_loop
from tavily import TavilyClient
from loguru import logger
# ç°å¢å€æ°ã®èªã¿èŸŒã¿
from dotenv import load_dotenv
load_dotenv()
client = Swarm()
tavily_client = TavilyClient()
def websearch_functions(search_query: str):
"""Webæ€çŽ¢ãå®è¡ãã颿°"""
result = tavily_client.qna_search(query=search_query)
return result
def employee_search_functions(tech_stack: str):
"""ç€Ÿå¡æ
å ±æ€çŽ¢ãå®è¡ãã颿°"""
logger.info(f"ç€Ÿå¡æ
å ±æ€çŽ¢ãå®è¡ããŸã: {tech_stack}")
# æ¬æ¥ã¯æ€çŽ¢æ©èœãå®è£
ããã¹ãã ããããã§ã¯ãããŒããŒã¿ãè¿ã
result = """Aãã
- 瀟å
åãAIã¢ããªã±ãŒã·ã§ã³ã®éçº
- ã¯ã©ãŠããµãŒãã¹ã掻çšããå®å
šæ§ã®é«ãã·ã¹ãã èšèš
- ãã¬ãŒã ã¯ãŒã¯ãçšããAIã¢ããªã®æŠå¿µå®èšŒïŒPoCïŒã®æšé²
- RAGã«ãã瀟å
ããŒã¿ã掻çšããæ€çŽ¢æ©èœãè³æçææ©èœã®éçº
Bãã
- å¶æ¥æ¯æŽããŒã«ã®æŠå¿µå®èšŒïŒPoCïŒã®æšé²
- å¶æ¥æ
åœè
åãã®æ¬¡ã®ã¢ã¯ã·ã§ã³ãæ¯æŽããããŒã«ã®PoC
- RAGã«ããå¶æ¥ããŒã¿ã掻çšããæ€çŽ¢æ©èœã®èª¿æ»ã»æ§ç¯
Cãã
- ç»åçæAIã®ããžãã¹æŽ»çšã«é¢ããPoC
- ç»åçæããŒã«ã®ç°å¢æ§ç¯ïŒããŒã«ã«ãã¯ã©ãŠããªã©ïŒ
- æ¡åŒµæ©èœã®æè¡çãªæ€èšŒ
- ç®çã«å¿ããç»åçæã«åããããã³ãã調æŽ"""
return result
websearch_agent = Agent(
name="Webæ€çŽ¢ãšãŒãžã§ã³ã",
instructions="""ãŠãŒã¶ãŒã®è³ªåã«åºã¥ããŠWebæ€çŽ¢ãè¡ãããã®çµæãæäŸããŠãã ããã
Webæ€çŽ¢ãå¿
èŠãªãå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã
ç€Ÿå¡æ
å ±æ€çŽ¢ãåè«ã¹ããŒãªãŒçæãå¿
èŠãªå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã""",
functions=[websearch_functions],
model="gpt-4o"
)
employee_search_agent = Agent(
name="ç€Ÿå¡æ
å ±æ€çŽ¢ãšãŒãžã§ã³ã",
instructions="""該åœã®æè¡ã¹ã¿ãã¯ã«ç²Ÿéãã瀟å¡ãæ€çŽ¢ãããã®æ
å ±ãæäŸããŠãã ããã
ç€Ÿå¡æ
å ±ã®æ€çŽ¢ãå¿
èŠãªãå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã
Webæ€çŽ¢ãåè«ã¹ããŒãªãŒçæãå¿
èŠãªå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã""",
functions=[employee_search_functions],
model="gpt-4o",
)
negotiation_story_agent = Agent(
name="åè«ã¹ããŒãªãŒçæãšãŒãžã§ã³ã",
instructions="""ããŒã¿åæãæ¯æŽããäŒæ¥ã«æå±ããå¶æ¥ç€Ÿå¡ãšããŠãåè«ã¹ããŒãªãŒãçæããŠãã ããã
åè«ã¹ããŒãªãŒã®çæãå¿
èŠãªãå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã
Webæ€çŽ¢ãç€Ÿå¡æ
å ±æ€çŽ¢ãå¿
èŠãªå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã""",
model="gpt-4o",
)
triage_agent = Agent(
name="ããªã¢ãŒãžãšãŒãžã§ã³ã",
instructions="""ãŠãŒã¶ãŒã®èŠæ±ãæé©ã«åŠçã§ãããšãŒãžã§ã³ãã倿ãããã®äŒè©±ããã®ãšãŒãžã§ã³ãã«è»¢éããŸãã
ãªã¯ãšã¹ãããšãŒãžã§ã³ãã«ããªã¢ãŒãžããããã«ãã£ãšæ
å ±ãå¿
èŠãªå Žåã¯ãçç±ã説æããã«çŽæ¥è³ªåããŠãã ããã""",
)
def transfer_to_websearch():
logger.info("Webæ€çŽ¢ãšãŒãžã§ã³ãã«è»¢éããŸã")
return websearch_agent
def transfer_to_employee_search():
logger.info("ç€Ÿå¡æ
å ±æ€çŽ¢ãšãŒãžã§ã³ãã«è»¢éããŸã")
return employee_search_agent
def transfer_to_negotiation_story():
logger.info("åè«ã¹ããŒãªãŒçæãšãŒãžã§ã³ãã«è»¢éããŸã")
return negotiation_story_agent
def transfer_back_to_triage():
"""çŸåšã®ãšãŒãžã§ã³ããåŠçã§ããªããããã¯ã«ã€ããŠãŠãŒã¶ãŒã質åããŠããå Žåããã®é¢æ°ãåŒã³åºããŸãã"""
logger.info("ããªã¢ãŒãžãšãŒãžã§ã³ãã«è»¢éããŸã")
return triage_agent
triage_agent.functions = [transfer_to_websearch, transfer_to_employee_search, transfer_to_negotiation_story]
websearch_agent.functions.append(transfer_back_to_triage)
employee_search_agent.functions.append(transfer_back_to_triage)
negotiation_story_agent.functions.append(transfer_back_to_triage)
# å®è¡
run_demo_loop(triage_agent, debug=False)
ã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«
ãŸãã¯å¿ èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã
pip install git+https://github.com/openai/swarm.git
pip install openai python-dotenv tavily-python loguru
ç°å¢èšå®ãã¡ã€ã«ã®äœæ
次ã«ç°å¢èšå®ãã¡ã€ã«ãäœæããŸããä»åã¯ãOpenAIãšTavilyã®ãµãŒãã¹ãå©çšããã®ã§ããããã®APIããŒã.envãã¡ã€ã«ãäœæããŠç°å¢å€æ°ã«èšè¿°ããŸãã
OPENAI_APY_KEY=your_openai_api_key
TAVILY_API_KEY=your_tavily_api_key
ãšãŒãžã§ã³ãã®å®è£
åãšãŒãžã§ã³ãã®å®è£ ãè¡ããŸãã
ããªã¢ãŒãžãšãŒãžã§ã³ã
ãã®ãšãŒãžã§ã³ãã¯ããŠãŒã¶ãŒã®ãªã¯ãšã¹ããé©åãªãšãŒãžã§ã³ãã«æ¯ãåããæ©èœãæã£ãŠããŸãããŠãŒã¶ãŒã®ãªã¯ãšã¹ããWebæ€çŽ¢ãªã®ããç€Ÿå¡æ å ±æ€çŽ¢ãªã®ããåè«ã¹ããŒãªãŒã®çæãªã®ãã倿ããå¿ èŠãªãšãŒãžã§ã³ãã«è»¢éããŸãã
triage_agent = Agent(
name="ããªã¢ãŒãžãšãŒãžã§ã³ã",
instructions="""ãŠãŒã¶ãŒã®èŠæ±ãæé©ã«åŠçã§ãããšãŒãžã§ã³ãã倿ãããã®äŒè©±ããã®ãšãŒãžã§ã³ãã«è»¢éããŸãã
ãªã¯ãšã¹ãããšãŒãžã§ã³ãã«ããªã¢ãŒãžããããã«ãã£ãšæ
å ±ãå¿
èŠãªå Žåã¯ãçç±ã説æããã«çŽæ¥è³ªåããŠãã ããã""",
)
Webæ€çŽ¢ãšãŒãžã§ã³ã
ãã®ãšãŒãžã§ã³ãã¯ãWebæ€çŽ¢ã宿œããããã®ãšãŒãžã§ã³ãã§ããWebæ€çŽ¢æ©èœã¯ãTavilyãšãããµãŒãã¹ãå©çšããŠãAPIãéããŠWebæ€çŽ¢çµæãååŸããŸãã
def websearch_functions(search_query: str):
"""Webæ€çŽ¢ãå®è¡ãã颿°"""
result = tavily_client.qna_search(query=search_query)
return result
websearch_agent = Agent(
name="Webæ€çŽ¢ãšãŒãžã§ã³ã",
instructions="""ãŠãŒã¶ãŒã®è³ªåã«åºã¥ããŠWebæ€çŽ¢ãè¡ãããã®çµæãæäŸããŠãã ããã
Webæ€çŽ¢ãå¿
èŠãªãå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã
ç€Ÿå¡æ
å ±æ€çŽ¢ãåè«ã¹ããŒãªãŒçæãå¿
èŠãªå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã""",
functions=[websearch_functions],
model="gpt-4o"
)
Tavilyã¯ãAIãšãŒãžã§ã³ãå°çšã«æ§ç¯ãããæ€çŽ¢ãšã³ãžã³ã§ãSearch APIãå©çšããŠãªã¢ã«ã¿ã€ã ã«Webæ å ±ãæ€çŽ¢ã§ããŸããç¡æãã©ã³ã§ã¯æ¯æ1,000åã®APIã³ãŒã«ãå¯èœã§ãã
以äžã¯ãTavily APIã®å®è£ ãµã³ãã«ã§ããææ°ã®æ å ±ãæ£ç¢ºã«ååŸã§ããŠããããšãåããããšæããŸãã
from tavily import TavilyClient
tavily_client = TavilyClient(api_key=your_tavily_api_key)
answer = tavily_client.qna_search(query="çŸåšã®æ¥æ¬ã®ç·ç倧è£ã¯èª°ã§ããïŒ")
print(answer)
çŸåšã®æ¥æ¬ã®ç·ç倧è£ã¯ç³ç Žèç·è£ã§ãã圌ã¯ç¬¬102代ã®ç·ç倧è£ã«éžåºãããç³ç Žå é£ãçºè¶³ãããŠããŸãã
ç€Ÿå¡æ å ±æ€çŽ¢ãšãŒãžã§ã³ã
ãã®ãšãŒãžã§ã³ãã¯ãæè¡ã¹ã¿ãã¯ãã¹ãã«ã«åºã¥ããŠãç¹å®ã®ç€Ÿå¡æ
å ±ãæ€çŽ¢ããããã®ãšãŒãžã§ã³ãã§ãããã®ãšãŒãžã§ã³ããæŽ»çšããããšã§ãç¹å®ã®ãããžã§ã¯ãã顧客ã®ããŒãºã«åã£ã瀟å¡ãèŠã€ããããšãå¯èœã«ãªããŸãã
ä»åã¯æéã®éœåäžããããŒããŒã¿ã䜿çšããŠããŸãããå®éã®éçšã§ã¯ç€Ÿå
ã®ããŒã¿ããŒã¹ã人æç®¡çã·ã¹ãã ãšé£æºãããªã¢ã«ã¿ã€ã ã§ç€Ÿå¡æ
å ±ãååŸããããšãçæ³ãšãªããŸãã
def employee_search_functions(tech_stack: str):
"""ç€Ÿå¡æ
å ±æ€çŽ¢ãå®è¡ãã颿°"""
logger.info(f"ç€Ÿå¡æ
å ±æ€çŽ¢ãå®è¡ããŸã: {tech_stack}")
# æ¬æ¥ã¯æ€çŽ¢æ©èœãå®è£
ããã¹ãã ããããã§ã¯ãããŒããŒã¿ãè¿ã
result = """Aãã
- 瀟å
åãAIã¢ããªã±ãŒã·ã§ã³ã®éçº
- ã¯ã©ãŠããµãŒãã¹ã掻çšããå®å
šæ§ã®é«ãã·ã¹ãã èšèš
- ãã¬ãŒã ã¯ãŒã¯ãçšããAIã¢ããªã®æŠå¿µå®èšŒïŒPoCïŒã®æšé²
- RAGã«ãã瀟å
ããŒã¿ã掻çšããæ€çŽ¢æ©èœãè³æçææ©èœã®éçº
Bãã
- å¶æ¥æ¯æŽããŒã«ã®æŠå¿µå®èšŒïŒPoCïŒã®æšé²
- å¶æ¥æ
åœè
åãã®æ¬¡ã®ã¢ã¯ã·ã§ã³ãæ¯æŽããããŒã«ã®PoC
- RAGã«ããå¶æ¥ããŒã¿ã掻çšããæ€çŽ¢æ©èœã®èª¿æ»ã»æ§ç¯
Cãã
- ç»åçæAIã®ããžãã¹æŽ»çšã«é¢ããPoC
- ç»åçæããŒã«ã®ç°å¢æ§ç¯ïŒããŒã«ã«ãã¯ã©ãŠããªã©ïŒ
- æ¡åŒµæ©èœã®æè¡çãªæ€èšŒ
- ç®çã«å¿ããç»åçæã«åããããã³ãã調æŽ"""
return result
employee_search_agent = Agent(
name="ç€Ÿå¡æ
å ±æ€çŽ¢ãšãŒãžã§ã³ã",
instructions="""該åœã®æè¡ã¹ã¿ãã¯ã«ç²Ÿéãã瀟å¡ãæ€çŽ¢ãããã®æ
å ±ãæäŸããŠãã ããã
ç€Ÿå¡æ
å ±ã®æ€çŽ¢ãå¿
èŠãªãå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã
Webæ€çŽ¢ãåè«ã¹ããŒãªãŒçæãå¿
èŠãªå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã""",
functions=[employee_search_functions],
model="gpt-4o",
)
åè«ã¹ããŒãªãŒçæãšãŒãžã§ã³ã
ãã®ãšãŒãžã§ã³ãã¯ãåè«ã®ã·ããªãªãã¹ããŒãªãŒãçæããããã®ãšãŒãžã§ã³ãã§ããå¶æ¥æ åœè ãã¯ã©ã€ã¢ã³ãã«å¯ŸããŠå¹æçãªææ¡ãè¡ãããã®ã¹ããŒãªãŒãèªåçæããŸãã
negotiation_story_agent = Agent(
name="åè«ã¹ããŒãªãŒçæãšãŒãžã§ã³ã",
instructions="""ããŒã¿åæãæ¯æŽããäŒæ¥ã«æå±ããå¶æ¥ç€Ÿå¡ãšããŠãåè«ã¹ããŒãªãŒãçæããŠãã ããã
åè«ã¹ããŒãªãŒã®çæãå¿
èŠãªãå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã
Webæ€çŽ¢ãç€Ÿå¡æ
å ±æ€çŽ¢ãå¿
èŠãªå Žåã¯ãããªã¢ãŒãžãšãŒãžã§ã³ãã«äŒè©±ã転éããŠãã ããã""",
model="gpt-4o",
)
ãšãŒãžã§ã³ãè»¢éæ©èœ
æåŸã«ãšãŒãžã§ã³ãã®è»¢éæ©èœãå®è£ ããŸãããã®é¢æ°ããªããšããšãŒãžã§ã³ãéã®ç§»åãã§ããªãã®ã§ãå¿ããã«å®è£ ããŠãã ããã
def transfer_to_websearch():
logger.info("Webæ€çŽ¢ãšãŒãžã§ã³ãã«è»¢éããŸã")
return websearch_agent
def transfer_to_employee_search():
logger.info("ç€Ÿå¡æ
å ±æ€çŽ¢ãšãŒãžã§ã³ãã«è»¢éããŸã")
return employee_search_agent
def transfer_to_negotiation_story():
logger.info("åè«ã¹ããŒãªãŒçæãšãŒãžã§ã³ãã«è»¢éããŸã")
return negotiation_story_agent
def transfer_back_to_triage():
"""çŸåšã®ãšãŒãžã§ã³ããåŠçã§ããªããããã¯ã«ã€ããŠãŠãŒã¶ãŒã質åããŠããå Žåããã®é¢æ°ãåŒã³åºããŸãã"""
logger.info("ããªã¢ãŒãžãšãŒãžã§ã³ãã«è»¢éããŸã")
return triage_agent
triage_agent.functions = [transfer_to_websearch, transfer_to_employee_search, transfer_to_negotiation_story]
websearch_agent.functions.append(transfer_back_to_triage)
employee_search_agent.functions.append(transfer_back_to_triage)
negotiation_story_agent.functions.append(transfer_back_to_triage)
å®è¡äŸ
以äžãæ¬ããã°ã©ã ã®å®è¡äŸã§ããããŒã¿ã¢ããªãã£ã¯ã¹ã©ã瀟ããRAGã®å°å ¥ã«é¢ããçžè«ãåãããšããã·ããªãªãæ³å®ããŠããŸããäŒç€ŸæŠèŠã®æ€çŽ¢ãRAGã«è©³ãã瀟å¡ã®æ€çŽ¢ãåè«ã¹ããŒãªãŒã®äœæãšããäžé£ã®æµããã¹ã ãŒãºã«å®è¡ãããŠããããšã確èªã§ããŸãã
User: Webæ€çŽ¢ããããã§ããããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€Ÿã®äºæ¥æŠèŠã«ã€ããŠæããŠäžããã
Webæ€çŽ¢ãšãŒãžã§ã³ã: ããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€ŸïŒDALïŒã¯ãããŒã¿åæåèšäºæ¥ãè¡ãäŒæ¥ã§ã2019幎4æã«èšç«ãããŸãããããŒã¿ãµã€ãšã³ã¹ã«ç¹åãã倧æäŒæ¥ãäžå ŽäŒæ¥ãã¯ã©ã€ã¢ã³ãã«æã€ãªã©æé·ãéããŠããŸããæ¬ç€Ÿã¯æ±äº¬éœæž¯åºã«ãããä»ã«ãå€§éªæ¯ç€ŸïŒæ¢
ç°ïŒãšåå€å±æ¯ç€Ÿãå±éããŠããŸãã嵿¥è
ã®è°·å·æéæ°ã¯èµ·æ¥å®¶ãšããŠãè€æ°ã®äŒç€Ÿãçµå¶ããŠããŸãã
User: ç€Ÿå¡æ
å ±æ€çŽ¢ããããã§ããããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€Ÿã«RAGã®å°å
¥æ¯æŽãäŸé ŒãããŠããŸããåŒç€Ÿã«å¯Ÿå¿ã§ãã瀟å¡ãäºäŸãªã©ã¯ãããŸããã
ç€Ÿå¡æ
å ±æ€çŽ¢ãšãŒãžã§ã³ã: ããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€Ÿããã®RAGå°å
¥æ¯æŽã®äŸé Œã«å¯Ÿå¿ã§ããããªç€Ÿå¡ã¯æ¬¡ã®éãã§ãïŒ
1. **Aãã**
- 瀟å
åãAIã¢ããªã±ãŒã·ã§ã³ã®éçºçµéšããããŸãã
- ã¯ã©ãŠããµãŒãã¹ã掻çšããå®å
šæ§ã®é«ãã·ã¹ãã èšèšãè¡ã£ãŠããŸãã
- RAGãå©çšããŠç€Ÿå
ããŒã¿ã掻çšããæ€çŽ¢æ©èœãè³æçææ©èœã®éçºã«æºãã£ãŠããŸãã
2. **Bãã**
- å¶æ¥æ¯æŽããŒã«ã®æŠå¿µå®èšŒïŒPoCïŒã®æšé²ãæ
åœããŠããŸãã
- RAGãæŽ»çšããå¶æ¥ããŒã¿ãå©çšããæ€çŽ¢æ©èœã®èª¿æ»ã»æ§ç¯çµéšããããŸãã
ãããã®æ
å ±ãããšã«ãæ¯æŽå¯èœãªç€Ÿå¡ãéžå®ããããšãã§ããŸãã
User: åè«ã¹ããŒãªãŒãäœæãããã§ããããŒã¿ã¢ããªãã£ã¯ã¹ã©ãäŒç€Ÿã«RAGå°å
¥ã®æ¯æŽãææ¡ããããã«ããããŸã§ã®æ
å ±ãå
ã«åè«ã¹ããŒãªãŒãäœæããŠãã ããã
åè«ã¹ããŒãªãŒçæãšãŒãžã§ã³ã: åè«ã¹ããŒãªãŒã®ææ¡äŸã以äžã«ç€ºããŸããããã¯ãããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€Ÿã«RAGïŒRetrieval-Augmented GenerationïŒæè¡ã®å°å
¥æ¯æŽãææ¡ããããã®ãã®ã§ãã
---
**ã¿ã€ãã«ïŒããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€Ÿãžã®RAGå°å
¥æ¯æŽææ¡åè«**
**äŒå ŽïŒããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€Ÿ æ¬ç€ŸïŒæ±äº¬éœæž¯åºïŒ
åå è
ïŒDALã®ãããžã§ã¯ããããŒãžã£ãŒãAIã·ã¹ãã æ
åœãšã³ãžãã¢ãè²Žç€Ÿå¶æ¥æ
åœïŒAãããBããïŒ**
---
**1. ãªãŒããã³ã°**
- æšæ¶ãšèªå·±ç޹ä»
- ãæ¬æ¥ã¯ãæéãããã ãããããšãããããŸããç§ã¯[ããªãã®åå]ã§ãããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ§ã®æ¥åå¹çåã«åããAIãœãªã¥ãŒã·ã§ã³ãæ
åœããŠãããŸããã
- åè«ã®ç®ç説æ
- ãæ¬æ¥ã¯ãRAGæè¡ã掻çšããããšã§ã貎瀟ã®ããŒã¿æŽ»çšèœåãããã«åŒ·åãããææ¡ããããŠããã ããã°ãšæããŸããã
**2. ããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ§ã®ããŒãºç¢ºèª**
- çŸåšã®æ¥åããã»ã¹ãããŒã¿æŽ»çšã®èª²é¡
- ã貎瀟ãæã€è±å¯ãªããŒã¿ã¯ãããã«ã©ããã£ãåœ¢ã§æŽ»çšããããå
·äœçãªããžã§ã³ããèããããã ããŸããïŒã
- æ¢åã·ã¹ãã ã®å°å
¥ç¶æ³ãšæºè¶³åºŠ
- ãRAGå°å
¥åã«çŸåšã䜿ãã®ã·ã¹ãã ãããŒã«ã«å¯ŸããççŽãªãæèŠã䌺ããããšæããŸããã
**3. ãœãªã¥ãŒã·ã§ã³ææ¡**
- RAGæè¡ã®æŠèŠèª¬æ
- ãRAGã¯ãªã¢ã«ã¿ã€ã ã«ããŒã¿ãåŒãåºãã€ã€ããããåºã«æ°ãã䟡å€ãçæããæè¡ã§ããç¹ã«æ€çŽ¢æ©èœã®å¹çåãã¯ãªãšã€ãã£ããªè³æäœæã«åœ¹ç«ã¡ãŸããã
- å®çžŸãäºäŸã®ç޹ä»
- ãåŒç€Ÿã®AãããBããã¯è²Žç€Ÿã®ããŒãºã«æé©ãªåœ¢ã§RAGãå°å
¥ããè±å¯ãªçµéšããããŸããå
·äœçã«ã¯ã瀟å
ããŒã¿ã掻çšããé«åºŠãªæ€çŽ¢æ©èœãå®çŸããŠããŸãããã
**4. å
·äœçãªå°å
¥ãã©ã³**
- å°å
¥ã¹ãããã®ææ¡
- ããŸãã貎瀟ã®çŸç¶ã·ã¹ãã ãšã®èŠªåæ§ç¢ºèªããPoCãéå§ããæ¬¡ã«æ®µéçã«æ¬æ Œå°å
¥ãé²ããŠãããã©ã³ã§ããã
- èŠç©ãããšROIã®æç€º
- ãå°å
¥ã«ãããã³ã¹ããšãããã«ããåŸããã广ã«ã€ããŠå
·äœçãªæ°å€ãæç€ºãããŠããã ããŸããã
**5. 質çå¿ç**
- 貎瀟ããã®ã質åãåããèª å®ã«åçã
**6. 次ã®ã¢ã¯ã·ã§ã³**
- ææ¡å
容ã®ãã£ãŒãããã¯åé
- ããã²ããã®ææ¡ã«ã€ããŠãæèŠããèããããã ããæ¬¡ã«é²ããã¹ãæ¹åæ§ãæ€èšããŠããã ããã°ãšæããŸããã
- 次åã®ããŒãã£ã³ã°æ¥çšèª¿æŽ
- ãæ¬¡åã¯ãå®éã«ãã©ã³ã®çްéšãè©°ããŠããæ®µéã«é²ã¿ãããšæããŸããããéœåã¯ãããã§ããããïŒã
**ã¯ããŒãº**
- åè«ãçµäºããé¢ä¿æ§ç¯ã®ç¶ç¶ãåžæããŸãã
---
ãã®ãããªæµãã§åè«ãé²ãããšãããŒã¿ã¢ããªãã£ã¯ã¹ã©ãæ ªåŒäŒç€Ÿã«å¯ŸããRAGå°å
¥æ¯æŽã®ææ¡ãæç¢ºã«ãªããå®çŸã«åããå
·äœçãªäžæ©ãšãªãã§ãããã
ãããã«
SwarmãæŽ»çšããŠå¶æ¥æ¯æŽããããéçºããŠã¿ãŸãããå®éã«äœ¿ã£ãŠã¿ãå°è±¡ãšããŠã¯ãããã³ããã®åé ã§ã©ã®ãšãŒãžã§ã³ãã«æ¥ç¶ããããæç€ºããªããšãæå³ãããšãŒãžã§ã³ãã«ããŸãã€ãªãããªãããšãå€ããæŽ»çšã«ã¯å°ã工倫ãå¿ èŠã ãšæããŸããããã ããããã³ããèšèšã工倫ããã°ãããããžããããŸãè¡ãããšãã§ããã®ãããããŸããã
ä»åŸããããªãæ©èœãæã£ããšãŒãžã§ã³ãããRAGãå®è¡ããéã«åç §ãªãœãŒã¹ãéžæãããšãŒãžã§ã³ããªã©ãæ§ã ãªåéã§ãšãŒãžã§ã³ãæè¡ã掻çšãããŠããããšãæåŸ ãããŸããAIãšãŒãžã§ã³ãã«é¢ããææ°ååã¯åŒãç¶ããã£ããã¢ããããŠããããšæããŸãã
Discussion