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()
次のような結果が得られます:
エージェント [94mduck_search_agent[0m は次の [4mTaskPackage[0m を受け取ります:
[96m[
タスク ID: e3a62788-ee7b-4495-9822-9530c5fdd799
指示: マイクロソフトの設立日はいつですか
][0m
====[94mduck_search_agent[0m が TaskPackage e3a62788-ee7b-4495-9822-9530c5fdd799 の実行を開始します====
エージェント [94mduck_search_agent[0m は 0 ステップの [4mAction[0m を実行します:
[94m{
name: DuckDuckGo_Search
params: {'query': 'Microsoft founding date'}
}[0m
観察: [92mマイクロソフトは1975年4月4日に設立されました。[0m
エージェント [94mduck_search_agent[0m は 1 ステップの [4mAction[0m を実行します:
[94m{
name: Finish
params: {'response': 'マイクロソフトは1975年4月4日に設立されました。'}
}[0m
観察: [92mタスク完了。[0m
=========[94mduck_search_agent[0m が実行を終了します。 TaskPackage[ID:e3a62788-ee7b-4495-9822-9530c5fdd799] ステータス:
[96m[
完了: 完了
回答: マイクロソフトは1975年4月4日に設立されました。
][0m
==========
response: マイクロソフトは1975年4月4日に設立されました。