Agent Zero
个人化和有机的AI框架
- Agent Zero不是预定义的代理框架。它旨在随着使用而动态成长和学习。
- Agent Zero完全透明、可读、易懂、可定制且交互性强。
- Agent Zero将计算机作为工具来完成其(您的)任务。
核心概念
- 通用助手
- Agent Zero不是针对特定任务预编程的(但可以被定制)。它旨在成为一个通用的个人助手。给它一个任务,它就会收集信息、执行命令和代码、与其他代理实例合作,尽最大努力完成任务。
- 它具有持久记忆,能够记住先前的解决方案、代码、事实、指令等,以便将来更快、更可靠地解决任务。
- 计算机作为工具
- Agent Zero将操作系统作为工具来完成任务。它没有预编程的单一用途工具。相反,它可以编写自己的代码并使用终端根据需要创建和使用自己的工具。
- 它的默认工具箱中只有在线搜索、记忆功能、通信(与用户和其他代理)以及代码/终端执行。其他一切都由代理自己创建或可由用户扩展。
- 工具使用功能是从头开发的,以确保与非常小的模型最兼容和可靠。
- 多代理合作
- 每个代理都有一个上级代理给它分配任务和指令。每个代理然后向其上级报告。
- 对于第一个代理来说,上级是人类用户;代理看不出有什么区别。
- 每个代理都可以创建自己的下级代理来帮助分解和解决子任务。这有助于所有代理保持其上下文清晰和专注。
- 完全可定制和可扩展
- 这个框架中几乎没有硬编码的内容。没有隐藏的东西。用户可以扩展或更改一切。
- 整个行为由prompts/agent.system.md文件中的系统提示定义。更改此提示就可以显著改变框架。
- 框架不以任何方式引导或限制代理。没有代理必须遵循的硬编码规则。
- 在代理通信循环中发送的每个提示、每个小消息模板都可以在**prompts/**文件夹中找到并更改。
- 每个默认工具都可以在**python/tools/**文件夹中找到,并可以更改或复制以创建新的预定义工具。
- 当然,它是开源的(除了一些工具如Perplexity,但将来也会被开源替代品取代)。
- 沟通至关重要
- 给你的代理一个适当的系统提示和指令,它就能创造奇迹。
- 代理可以与其上级和下级通信,提出问题、给出指令和提供指导。在系统提示中指导你的代理如何有效沟通。
- 终端界面是实时流式传输和交互式的。你可以在任何时候停止并干预。如果你看到你的代理走错方向,只需立即停止并告诉它。
- 这个框架有很大的自由度。你可以指示你的代理定期向上级报告并请求继续的许可。你可以指示它们在决定何时委派子任务时使用评分系统。上级可以复查下级的结果并提出异议。可能性是无穷无尽的。
不错的功能
- 输出非常清晰、色彩丰富、易读且具有交互性;没有隐藏的内容。
- 您在终端中看到的相同彩色输出会自动保存为每个会话的 HTML 文件在 logs/ 文件夹中。
- 代理输出实时流式传输,让用户可以随时阅读和干预。
- 不需要编码,只需提示和沟通技巧。
- 有了坚实的系统提示,即使是小型模型,该框架也很可靠,包括精确的工具使用。
请注意
-
Agent Zero 可能很危险! 经过适当的指示,Agent Zero 能够做很多事情,甚至可能对您的计算机、数据或账户造成危险。始终在隔离环境中运行 Agent Zero(如内置的 docker 容器),并小心您的要求。
-
Agent Zero 不是预编程的;它是基于提示的。 整个框架只包含最少量的代码,不会以任何方式引导代理。 一切都在 prompts/ 文件夹中的系统提示中。在这里,您可以根据需要重写整个框架行为。 如果您的代理无法正确沟通、使用工具、推理、使用记忆、找到答案 - 只需给它更好的指示。
-
如果您无法提供理想环境,请告知您的代理。 Agent Zero 旨在用于隔离的虚拟环境(为安全起见),预装和配置了一些工具。 如果您无法提供所有必要的条件或 API 密钥,只需更改系统提示并告诉您的代理它可以使用的操作系统和工具。没有硬编码的内容;如果您不告诉代理某个特定工具,它就不会知道也不会尝试使用它。
已知问题
- 系统提示很糟糕。你可以做得更好。如果你做到了,请帮助我 :)
- docker 容器中代理与终端通过 SSH 的通信有时会中断并停止产生输出。有时是因为代理运行了类似 "server.serve_forever()" 的东西导致终端挂起,有时可能会发生随机错误。重启代理和/或 docker 容器有助于解决问题。
- 代理可能会破坏其操作系统。有时代理可能会停用虚拟环境、卸载软件包、更改配置等。同样,删除 docker 容器并清理 work_dir/ 就足以修复这个问题。
理想环境
- Docker 容器:运行 Agent Zero 的完美环境是内置的 docker 容器。代理可以自行下载镜像 frdel/agent-zero-exe 并启动容器,您只需要运行 docker(如 Docker Desktop 应用程序)。
- Python:系统必须安装 Python 才能运行框架。
- 互联网访问:代理需要互联网访问以使用其在线知识工具并执行需要连接的命令和脚本。如果您不需要代理在线,可以更改 prompts/ 文件夹中的提示,使其完全本地化。
设置
- 所需的 API 密钥:
- 目前,唯一推荐的 API 密钥是用于 https://www.perplexity.ai/ API。Perplexity 被用作便捷的网络搜索工具,尚未被开源替代品取代。如果您没有 Perplexity 的 API 密钥,请在 .env 文件中留空,Perplexity 将不会被使用。
- 聊天模型和嵌入模型可以通过 Ollama 和 HuggingFace 在本地执行,也可以通过 API 执行。
- 输入您的 API 密钥:
- 您可以将 API 密钥输入到 .env 文件中,您可以从 example.env 复制该文件
- 或者您可以在终端会话中导出 API 密钥:
export API_KEY_PERPLEXITY="your-api-key-here"
export API_KEY_OPENAI="your-api-key-here"
- 使用以下终端命令安装依赖项:
pip install -r requirements.txt
- 选择您的聊天、实用程序和嵌入模型:
- 在 main.py 文件中,在 chat() 函数的开始处,您可以看到如何设置聊天模型和嵌入模型。
- 您可以为两者选择在线模型(OpenAI、Anthropic、Groq)或离线模型(Ollama、HuggingFace)。
- 运行Docker:
- 最简单的方法是安装Docker Desktop应用程序并运行它。剩下的工作将由框架自动处理。
运行程序
- 只需在Python中运行main.py文件:
python main.py
- 或者在VS Code中使用编辑器右上角的调试按钮以调试模式运行。我已经为此目的提供了VS Code的配置文件。