參考: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 [94mduck_search_agent[0m receives the following [4mTaskPackage[0m:
[96m[
Task ID: e3a62788-ee7b-4495-9822-9530c5fdd799
Instruction: 微軟的成立日期是什麼
][0m
====[94mduck_search_agent[0m starts execution on TaskPackage e3a62788-ee7b-4495-9822-9530c5fdd799====
Agent [94mduck_search_agent[0m takes 0-step [4mAction[0m:
[94m{
name: DuckDuckGo_Search
params: {'query': 'Microsoft founding date'}
}[0m
Observation: [92m微軟成立於1975年4月4日。[0m
Agent [94mduck_search_agent[0m takes 1-step [4mAction[0m:
[94m{
name: Finish
params: {'response': '微軟成立於1975年4月4日。'}
}[0m
Observation: [92m任務完成。[0m
=========[94mduck_search_agent[0m finish execution. TaskPackage[ID:e3a62788-ee7b-4495-9822-9530c5fdd799] status:
[96m[
completion: completed
answer: 微軟成立於1975年4月4日。
][0m
==========
response: 微軟成立於1975年4月4日。