Hanah

Hanah

wow agent day08 初めてのzigent

Reference:Datawhale wow agent day08
Zigent は Agentlite フレームワークを基に改良されたインテリジェントエージェント開発フレームワークです。Agentlite はもともと Salesforce AI Research チームによって開発されており、強力なエージェント開発フレームワークです。Zigent はその基盤の上にカスタマイズされた改良を行い、特定のシーンでのアプリケーションにより適したものにしています。
このレッスンでは、Zigent フレームワークを使用してシンプルでありながら機能的な検索エージェントを作成する方法を学びます。このエージェントは DuckDuckGo 検索エンジンを通じて情報を検索し、質問に答えることができます。

環境準備#

import os
from dotenv import load_dotenv

# 環境変数を読み込む
load_dotenv()
# 環境変数から api_key を読み取る
api_key = os.getenv('ZISHU_API_KEY')
base_url = "http://43.200.7.56:8008/v1"
chat_model = "glm-4-flash"

from typing import List
from zigent.agents import ABCAgent, BaseAgent
from zigent.llm.agent_llms import LLM
from zigent.commons import TaskPackage
from zigent.actions.BaseAction import BaseAction
from zigent.logging.multi_agent_log import AgentLogger
from duckduckgo_search import DDGS

LLM の設定#

ここでは zigent によってラップされた LLM を使用して LLM サービスを読み込み、設定します:

llm = LLM(api_key=api_key, base_url=base_url, model_name=chat_model)
response = llm.run("あなたは誰ですか?")
print(response)

検索アクションの作成#

class DuckSearchAction(BaseAction):
    def __init__(self) -> None:
        action_name = "DuckDuckGo_Search"
        action_desc = "このアクションを使用してオンラインコンテンツを検索します。"
        params_doc = {"query": "検索文字列。シンプルにしてください。"}
        self.ddgs = DDGS()
        super().__init__(
            action_name=action_name, 
            action_desc=action_desc, 
            params_doc=params_doc,
        )

    def __call__(self, query):
        results = self.ddgs.chat(query)
        return results

call メソッドを通じて実際の検索操作を実行する使用例:

search_action = DuckSearchAction()
results = search_action("エージェントとは何ですか")
print(results)

検索エージェントの作成#

BaseAgent を継承した検索エージェントクラスを作成します。これは大規模言語モデル (llm)、アクションのセット(デフォルトは DuckSearchAction)、エージェント名、および役割の説明を必要とします:

class DuckSearchAgent(BaseAgent):
    def __init__(
        self,
        llm: LLM,
        actions: List[BaseAction] = [DuckSearchAction()],
        manager: ABCAgent = None,
        **kwargs
    ):
        name = "duck_search_agent"
        role = "DuckDuckGo 検索コンテンツを使用して質問に答えることができます。"
        super().__init__(
            name=name,
            role=role,
            llm=llm,
            actions=actions,
            manager=manager
        )

エージェントの実行#

def do_search_agent():
    # エージェントインスタンスを作成
    search_agent = DuckSearchAgent(llm=llm)

    # タスクを作成
    task = "マイクロソフトの設立日はいつですか"
    task_pack = TaskPackage(instruction=task)

    # タスクを実行し、応答を取得
    response = search_agent(task_pack)
    print("response:", response)

if __name__ == "__main__":
    do_search_agent()

次のような結果が得られます:

エージェント duck_search_agent は次の TaskPackage を受け取ります:
[
	タスク ID: e3a62788-ee7b-4495-9822-9530c5fdd799
	指示: マイクロソフトの設立日はいつですか
]
====duck_search_agent が TaskPackage e3a62788-ee7b-4495-9822-9530c5fdd799 の実行を開始します====
エージェント duck_search_agent は 0 ステップの Action を実行します:
{
	name: DuckDuckGo_Search
	params: {'query': 'Microsoft founding date'}
}
観察: マイクロソフトは1975年4月4日に設立されました。
エージェント duck_search_agent は 1 ステップの Action を実行します:
{
	name: Finish
	params: {'response': 'マイクロソフトは1975年4月4日に設立されました。'}
}
観察: タスク完了。
=========duck_search_agent が実行を終了します。 TaskPackage[ID:e3a62788-ee7b-4495-9822-9530c5fdd799] ステータス:
[
	完了: 完了
	回答: マイクロソフトは1975年4月4日に設立されました。
]
==========
response: マイクロソフトは1975年4月4日に設立されました。
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。