Hanah

Hanah

wow agent day08 初識zigent

參考:Datawhale wow agent day08
Zigent 是一個基於 Agentlite 框架改進的智能代理開發框架。Agentlite 最初由 Salesforce AI Research 團隊開發,是一個強大的 Agent 開發框架。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("什麼是 agent")
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 = "你可以通過使用 duck duck go 搜索內容來回答問題。"
        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()

我們得到如下:

Agent duck_search_agent receives the following TaskPackage:
[
	Task ID: e3a62788-ee7b-4495-9822-9530c5fdd799
	Instruction: 微軟的成立日期是什麼
]
====duck_search_agent starts execution on TaskPackage e3a62788-ee7b-4495-9822-9530c5fdd799====
Agent duck_search_agent takes 0-step Action:
{
	name: DuckDuckGo_Search
	params: {'query': 'Microsoft founding date'}
}
Observation: 微軟成立於1975年4月4日。
Agent duck_search_agent takes 1-step Action:
{
	name: Finish
	params: {'response': '微軟成立於1975年4月4日。'}
}
Observation: 任務完成。
=========duck_search_agent finish execution. TaskPackage[ID:e3a62788-ee7b-4495-9822-9530c5fdd799] status:
[
	completion: completed
	answer: 微軟成立於1975年4月4日。
]
==========
response: 微軟成立於1975年4月4日。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。