🊢

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を䜿甚するこずで、マルチ゚ヌゞェントシステムを簡単に構築できるようになりたす。

https://github.com/openai/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 デバッグモヌド

サンプルプログラム

公匏リポゞトリには、いく぀かの実装䟋が公開されおおり、これらを利甚するこずで理解を深めるこずができたす。

https://github.com/openai/swarm/tree/main/examples

実装サンプル 説明
basic セットアップ、関数の呌び出し、゚ヌゞェントの匕き継ぎ、コンテキスト倉数の利甚など、基本的な機胜をシンプルに玹介する䟋。
triage_agent 基本的なトリアヌゞ振り分け゚ヌゞェントの蚭定䟋。適切な゚ヌゞェントぞの匕き継ぎ方法を瀺したす。
weather_agent 関数呌び出しを䜿ったシンプルな倩気予報゚ヌゞェントの䟋。
airline 耇数の゚ヌゞェントを䜿っお、航空䌚瀟の様々なカスタマヌサヌビスリク゚ストに察応する䟋。
support_bot ナヌザヌむンタヌフェヌス゚ヌゞェントず、耇数のツヌルを持぀ヘルプセンタヌ゚ヌゞェントを含む、カスタマヌサヌビスボットの䟋。
personal_shopper 賌入のサポヌトや泚文の返金手続きを手助けする、パヌ゜ナルショッピング゚ヌゞェントの䟋。

ただし、これらの実装䟋の䞭にはそのたたでは動かないコヌドや、説明が䞍足しおいる箇所もありたす。以䞋の蚘事に、実装䟋の補足説明や修正コヌドがたずめおくださっおいる方がいらっしゃったので、こちらを参考にするず良いかず思いたす。

https://qiita.com/Maki-HamarukiLab/items/addeffc7ade848a4807a

営業支揎ボットの開発

今回は、実際に「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ファむルを䜜成しお環境倉数に蚘述したす。

.envs
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コヌルが可胜です。

https://tavily.com/

以䞋は、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゚ヌゞェントに関する最新動向は匕き続きキャッチアップしおいこうず思いたす。

DAL Tech Blog

Discussion