L♾️pGPT
模块化Auto-GPT框架
L♾️pGPT是流行项目Auto-GPT的重新实现,作为一个合适的Python包编写,具有模块化和可扩展性。
🚀 特点 🚀
- "即插即用" API - 可扩展和模块化的 "Pythonic" 框架,不只是一个命令行工具。可以轻松添加新功能、集成和定制代理功能,全部通过Python代码,无需复杂的配置文件!
- 支持 GPT 3.5 - 对于尚未获得GPT-4访问权限的用户,比Auto-GPT表现更佳!
- 最小提示开销 - 每一个Token都很重要。我们不断努力以最少的Token数量获得最佳结果。
- 人类在环 - 通过人类反馈能力 "修正" 走歪的代理。
- 完整状态序列化 - 可以从中断处继续;L♾️pGPT可以将代理的完整状态,包括内存及其工具状态,保存到文件或Python对象中。无需外部数据库或向量存储(但仍支持它们)!
🧑💻 安装
从PyPI安装
📗 这将安装最新的L♾️pGPT稳定版本。推荐大多数用户使用:
pip install loopgpt
📕 以下两种方法安装最新的L♾️pGPT开发版本。请注意,这个版本可能不稳定:
源码安装
pip install git+https://www.github.com/farizrahman4u/loopgpt.git@main
源码安装(开发)
git clone https://www.github.com/farizrahman4u/loopgpt.git
cd loopgpt
pip install -e .
使用Docker源码安装(开发)
git clone https://www.github.com/farizrahman4u/loopgpt.git
cd loopgpt
docker build -t loopgpt:local-dev .
🏎️ 快速上手
设置OpenAI API密钥 🔑
选项1️⃣:通过 .env
文件
在你当前的工作目录中创建一个 .env
文件(你要运行L♾️pGPT的任何地方),并添加以下内容:
OPENAI_API_KEY="<your-openai-api-key>"
🛑 重要提示 🛑
Windows用户,请确保在文件资源管理器中启用了 “显示文件扩展名”。否则,你的文件将被命名为 .env.txt
而不是 .env
。
选项2️⃣:通过环境变量
设置一个名为 OPENAI_API_KEY
的环境变量为你的OpenAI API密钥。
如何设置环境变量:
创建一个新的L♾️pGPT代理🕵️:
让我们在一个新的Python脚本中创建一个代理。
from loopgpt.agent import Agent
agent = Agent()
L♾️pGPT默认使用 gpt-3.5-turbo
,这里展示的所有输出都是由它生成的。GPT-4用户可以设置 model="gpt-4"
来代替:
agent = Agent(model="gpt-4")
设置代理🕵️的属性:
agent.name = "ResearchGPT"
agent.description = "一个研究并找到最佳科技产品的AI助手"
agent.goals = [
"在谷歌上搜索最佳耳机",
"分析规格、价格和评论,找到前五名最佳耳机",
"将前五名最佳耳机及其价格写到文件中",
"总结每款耳机的优缺点,并将其写到名为 'summary.txt' 的另一个文件中",
]
准备好了!让我们运行代理🕵️的CLI:
agent.cli()
将你的Python文件保存为 research_gpt.py
并运行:
python research_gpt.py
你可以通过输入 "exit" 退出CLI。
🔁 连续模式 🔁
如果 continuous
设置为 True
,代理将不会请求用户的执行命令权限。它可能会进入无限循环,因此请自行承担风险使用!
agent.cli(continuous=True)
💻 仅命令行模式
你可以直接从命令行运行L♾️pGPT,无需编写任何Python代码:
loopgpt run
运行 loopgpt --help
查看所有可用选项。
🐋 Docker模式
你可以使用Docker在前述模式下运行L♾️pGPT:
# CLI 模式
docker run -i --rm loopgpt:local-dev loopgpt run
# 脚本模式示例
docker run -i --rm -v "$(pwd)/scripts:/scripts" loopgpt:local-dev python /scripts/myscript.py
⚒️ 添加自定义工具 ⚒️
L♾️pGPT代理配备了一组内置工具,允许它们执行各种基本任务,例如搜索网络、文件系统操作等。你可以使用 print(agent.tools)
查看这些工具。
除了这些内置工具外,你还可以向代理的工具箱添加自己的工具。
示例:WeatherGPT 🌦️
让我们创建WeatherGPT,一个关于天气的AI助手。
一个工具继承自 BaseTool
,你只需要编写一个docstring来启动和运行你的工具!
from loopgpt.tools import BaseTool
class GetWeather(BaseTool):
"""快速获取给定城市的天气
参数:
city (str): 城市名称
返回:
dict: 城市的天气报告
"""
def run(self, city):
...
L♾️pGPT为你的工具提供了默认ID,但你可以覆盖它们:
class GetWeather(BaseTool):
"""快速获取给定城市的天气
参数:
city (str): 城市名称
返回:
dict: 城市的天气报告
"""
@property
def id(self):
return "get_weather_command"
现在让我们定义工具在 run
方法中将做的事情:
import requests
# 定义你的自定义工具
class GetWeather(BaseTool):
"""快速获取给定城市的天气
参数:
city (str): 城市名称
返回:
dict: 城市的天气报告
"""
def run(self, city):
try:
url = "https://wttr.in/{}?format=%l+%C+%h+%t+%w+%p+%P".format(city)
data = requests.get(url).text.split(" ")
keys = ("location", "condition", "humidity", "temperature", "wind", "precipitation", "pressure")
data = dict(zip(keys, data))
return data
except Exception as e:
return f"获取天气时发生错误:{e}。"
就是这样!你已经构建了第一个自定义工具。让我们注册它并运行一个新的代理:
from loopgpt.tools import WriteToFile
import loopgpt
# 注册自定义工具类型
# 这在这里其实不是必须的,但在加载具有自定义工具的已保存代理时是必须的。
loopgpt.tools.register_tool_type(GetWeather)
# 创建代理
agent = loopgpt.Agent(tools=[GetWeather, WriteToFile])
agent.name = "WeatherGPT"
agent.description = "一个告诉你天气的AI助手"
agent.goals = [
"获取纽约和北京的天气",
"给用户提供天气穿衣建议",
"将建议写到名为 'dressing_tips.txt' 的文件中"
]
# 运行代理的CLI
agent.cli()
我们看看WeatherGPT为我们写的 dressing_tips.txt
文件:
dressing_tips.txt
- 北京天气晴朗,温度为+10°C。推荐穿轻便夹克和长裤。
- 纽约天气阴云密布,温度为+11°C。推荐穿轻便夹克、长裤,并带伞。
🚢 课程修正
与Auto-GPT不同,当用户拒绝执行命令时,代理不会终止。相反,它会询问用户的反馈以纠正其路线。
要修正代理的路线,只需拒绝执行并提供反馈:
代理已经更新了它的行动计划:
💾 保存和加载代理状态 💾
你可以将代理状态保存到一个json文件中:
agent.save("ResearchGPT.json")
这将保存代理的配置(模型、名称、描述等)以及其内部状态(对话状态、内存、工具状态等)。你也可以通过传递 include_state=False
到 agent.save()
来仅保存配置:
agent.save("ResearchGPT.json", include_state=False)
然后用以下命令从中断的地方继续:
import loopgpt
agent = loopgpt.Agent.load("ResearchGPT.json")
agent.cli()
或通过命令行运行已保存的代理:
loopgpt run ResearchGPT.json
你可以将代理状态转换为json兼容的Python字典,而不是写入到文件:
agent_config = agent.config()
要获取不包含内部状态的配置:
agent_config = agent.config(include_state=False)
要从配置中重新加载代理,请使用:
import loopgpt
agent = loopgpt.Agent.from_config(agent_config)
📋 要求
- Python 3.8+
- 一个OpenAI API密钥
- 谷歌浏览器
可选要求
要获得官方支持的Google搜索,你需要设置两个环境变量键 GOOGLE_API_KEY
和 CUSTOM_SEARCH_ENGINE_ID
,以下是获取它们的方法:
- 在Google开发者控制台创建一个应用。
- 使用Google Custom Search创建你的自定义搜索引擎。
- 一旦你的自定义搜索引擎创建完成,选择它并进入搜索引擎的详细页面。
- 在“基本”部分,你会找到“搜索引擎ID”字段,该值用于
CUSTOM_SEARCH_ENGINE_ID
环境变量。 - 现在前往页面底部的“程序化访问”部分。
- 创建一个“自定义搜索 JSON API”
- 按步骤选择你在步骤#1中创建的应用,获得API密钥并用于填充
GOOGLE_API_KEY
环境变量。
- 在“基本”部分,你会找到“搜索引擎ID”字段,该值用于
ℹ️ 如无这些变量,L♾️pGPT将回退使用DuckDuckGo搜索。
💌 贡献
我们需要大量帮助!如果你愿意贡献,请打开一个问题或PR。
🌳 社区
需要帮助?加入我们的Discord。