AutoGPT是一個相對全面精巧可以構建AI Agent的框架,包含了AI代理的創建、部署和持續管理。
AI agent的結構被設計成很像人類,具有個性、記憶、思維過程和能力等不同組件。
AI agent的組件
Forge
對于AI代理的創建,AutoGPT提供了一個叫Forge的工具模版,自動生成Agent的代碼,配置和運行腳本,甚至還包括了基準測試系統和前端。
創建Agent:
./run agent create YOUR_AGENT_NAME
運行Agent:
./run agent start YOUR_AGENT_NAME
Agent運行起來
Forge的核心代碼結構包含:
- agent: Forge的核心,包含Agent的主要邏輯
- agent_protocol: Agent協議,Forge的一個特點,為了兼容各種Agent以及Agent市場
-
config: agent的配置,包含
BaseConfig
,AIProfile
,AIDirectives
-
component: 構建agent的能力組件,繼承自
AgentComponent
或者實現Protocols
接口,代表agent的某種能力 - llm/prompting: 提示詞模版
component
from forge.agent import BaseAgent
from forge.agent.components import AgentComponent
class HelloComponent(AgentComponent):
pass
class SomeComponent(AgentComponent):
def __init__(self, hello_component: HelloComponent):
self.hello_component = hello_component
class MyAgent(BaseAgent):
def __init__(self):
# These components will be automatically discovered and used
self.hello_component = HelloComponent()
# We pass HelloComponent to SomeComponent
self.some_component = SomeComponent(self.hello_component)
按順序指定component:
class MyAgent(Agent):
def __init__(self):
self.hello_component = HelloComponent()
self.calculator_component = CalculatorComponent()
# Explicitly set components list
self.components = [self.hello_component, self.calculator_component]
可以從配置文件導入components:
{
"CodeExecutorConfiguration": {
"execute_local_commands": false,
"shell_command_control": "allowlist",
"shell_allowlist": ["cat", "echo"],
"shell_denylist": [],
"docker_container_name": "agent_sandbox"
},
"FileManagerConfiguration": {
"storage_path": "agents/AutoGPT/",
"workspace_path": "agents/AutoGPT/workspace"
},
"GitOperationsConfiguration": {
"github_username": null
},
"ActionHistoryConfiguration": {
"llm_name": "gpt-3.5-turbo",
"max_tokens": 1024,
"spacy_language_model": "en_core_web_sm"
},
"ImageGeneratorConfiguration": {
"image_provider": "dalle",
"huggingface_image_model": "CompVis/stable-diffusion-v1-4",
"sd_webui_url": "http://localhost:7860"
},
"WebSearchConfiguration": {
"duckduckgo_max_attempts": 3
},
"WebSeleniumConfiguration": {
"llm_name": "gpt-3.5-turbo",
"web_browser": "chrome",
"headless": true,
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
"browse_spacy_language_model": "en_core_web_sm"
}
}
Agent Protocol
定義了Agent接口,方便統一構建各種Agent。
Agent Protocol主要定義了Task 任務、Step 步驟、Artifact 生成文件,以及對應的API定義:
-
/ap/v1/agent/tasks [POST]
- This endpoint is used to create a new task for the agent. -
/ap/v1/agent/tasks/{task_id}/steps [POST]
- This endpoint is used to trigger next step of the task.
Protocol還包括記憶模塊db.py
,核心類是AgentDB
,在Agent初始化時傳入db的配置信息。
Agent
BaseAgent
提供了兩個Agent工作需要的抽象方法:
-
propose_action
: 這個方法負責思考,提供思考結果對應的action, 返回ThoughtProcessOutput
. -
execute
: 這個方法負責執行action, 返回ActionResult
.
Agent
是AutoGPT實現的繼承自BaseAgent
并實現了上面兩個抽象方法,包含所有內建的components。這樣最簡單的創建自己的Agent的方法就是繼承這個Agent
,然后添加自己額外的component。當然也可以直接繼承BaseAgent
可以做更多的定制化。
class MyComponent(AgentComponent):
pass
class MyAgent(Agent):
def __init__(
self,
settings: AgentSettings,
llm_provider: MultiProvider
file_storage: FileStorage,
app_config: AppConfig,
):
# Call the parent constructor to bring in the default components
super().__init__(settings, llm_provider, file_storage, app_config)
# Add your custom component
self.my_component = MyComponent()
重構
最近AutoGPT做了一次全新的重構,把Forge等組件都移動到classic
文件夾,新的核心目錄變成autogpt_platform
,包含如下等模塊:
backend
frontend
infra
-
market
AutoGPT新架構使用了一些企業級的框架工具: - Supabase : 一個開源框架,一鍵集成了一些企業級基礎設施,例如認證授權,Postgres數據庫訪問,文件存儲等,號稱讓你用一個周末即可開發一個百萬并發應用。
Supabase架構
-
Prisma:基于Node.js的ORM工具,很好的平衡SQL生產力和控制力。
Prisma