Skip to main content

AutoGPT

实现了 https://github.com/Significant-Gravitas/Auto-GPT ,但使用了LangChain原语(LLMs、PromptTemplates、VectorStores、Embeddings、Tools)

设置工具

我们将设置一个带有搜索工具、写文件工具和读文件工具的AutoGPT

from langchain.utilities import SerpAPIWrapper
from langchain.agents import Tool
from langchain.tools.file_management.write import WriteFileTool
from langchain.tools.file_management.read import ReadFileTool

search = SerpAPIWrapper()
tools = [
Tool(
name="search",
func=search.run,
description="在需要回答有关当前事件的问题时非常有用。您应该提出有针对性的问题",
),
WriteFileTool(),
ReadFileTool(),
]

设置内存

这里的内存用于代理的中间步骤

from langchain.vectorstores import FAISS
from langchain.docstore import InMemoryDocstore
from langchain.embeddings import OpenAIEmbeddings
# 定义您的嵌入模型
embeddings_model = OpenAIEmbeddings()
# 将向量存储初始化为空
import faiss

embedding_size = 1536
index = faiss.IndexFlatL2(embedding_size)
vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})

设置模型和AutoGPT

初始化一切!我们将使用ChatOpenAI模型

from langchain_experimental.autonomous_agents import AutoGPT
from langchain.chat_models import ChatOpenAI
agent = AutoGPT.from_llm_and_tools(
ai_name="Tom",
ai_role="Assistant",
tools=tools,
llm=ChatOpenAI(temperature=0),
memory=vectorstore.as_retriever(),
)
# 将verbose设置为True
agent.chain.verbose = True

运行示例

在这里,我们将让它为旧金山写一份天气报告

agent.run(["为旧金山今天写一份天气报告"])

聊天历史记忆

除了保存代理的中间步骤的内存外,我们还有一个聊天历史记忆。默认情况下,代理将使用 'ChatMessageHistory',但可以更改。当您想要使用不同类型的记忆时,例如 'FileChatHistoryMemory',这将非常有用

from langchain.memory.chat_message_histories import FileChatMessageHistory

agent = AutoGPT.from_llm_and_tools(
ai_name="Tom",
ai_role="Assistant",
tools=tools,
llm=ChatOpenAI(temperature=0),
memory=vectorstore.as_retriever(),
chat_history_memory=FileChatMessageHistory("chat_history.txt"),
)