{"cells":[{"cell_type":"markdown","id":"14f8b67b","metadata":{},"source":["# AutoGPT\n","\n","使用 LangChain 原语(LLMs、PromptTemplates、VectorStores、Embeddings、Tools)实现 https://github.com/Significant-Gravitas/Auto-GPT。"]},{"cell_type":"markdown","id":"192496a7","metadata":{},"source":["## 设置工具\n","\n","我们将设置一个带有搜索工具、写入文件工具和读取文件工具的AutoGPT。"]},{"cell_type":"code","execution_count":2,"id":"7c2c9b54","metadata":{},"outputs":[],"source":["# 导入所需的模块\n","from langchain.agents import Tool\n","from langchain_community.tools.file_management.read import ReadFileTool\n","from langchain_community.tools.file_management.write import WriteFileTool\n","from langchain_community.utilities import SerpAPIWrapper\n","\n","# 创建一个SerpAPIWrapper对象\n","search = SerpAPIWrapper()\n","\n","# 创建一个工具列表\n","tools = [\n"," Tool(\n"," name=\"search\",\n"," func=search.run,\n"," description=\"useful for when you need to answer questions about current events. You should ask targeted questions\",\n"," ),\n"," WriteFileTool(), # 写入文件的工具\n"," ReadFileTool(), # 读取文件的工具\n","]"]},{"cell_type":"markdown","id":"8e39ee28","metadata":{},"source":["## 设置内存\n","\n","这里的内存用于存储代理的中间步骤。"]},{"cell_type":"code","execution_count":3,"id":"72bc204d","metadata":{},"outputs":[],"source":["# 导入必要的库\n","from langchain.docstore import InMemoryDocstore\n","from langchain_community.vectorstores import FAISS\n","from langchain_openai import OpenAIEmbeddings"]},{"cell_type":"code","execution_count":4,"id":"1df7b724","metadata":{},"outputs":[],"source":["# 定义嵌入模型\n","embeddings_model = OpenAIEmbeddings()\n","\n","# 初始化向量存储为空\n","import faiss\n","\n","embedding_size = 1536\n","index = faiss.IndexFlatL2(embedding_size)\n","vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})\n","\n","# 注释:\n","# - `OpenAIEmbeddings()` 是一个嵌入模型的类,用于生成文本的嵌入向量。\n","# - `faiss` 是一个用于高效相似度搜索的库。\n","# - `IndexFlatL2()` 是一个用于构建L2距离度量的索引结构。\n","# - `FAISS()` 是一个用于管理嵌入向量的类,它接受一个嵌入查询函数、一个索引结构、一个文档存储和一个配置字典作为参数。\n","# - `embeddings_model.embed_query` 是一个函数,用于将查询文本转换为嵌入向量。\n","# - `InMemoryDocstore({})` 是一个空的文档存储对象,用于存储嵌入向量的文档。\n","# - `{}` 是一个空的配置字典,用于配置嵌入向量管理类。"]},{"cell_type":"markdown","id":"e40fd657","metadata":{},"source":["## 设置模型和AutoGPT\n","\n","初始化一切!我们将使用ChatOpenAI模型。"]},{"cell_type":"code","execution_count":5,"id":"3393bc23","metadata":{},"outputs":[],"source":["from langchain_experimental.autonomous_agents import AutoGPT\n","from langchain_openai import ChatOpenAI"]},{"cell_type":"code","execution_count":6,"id":"709c08c2","metadata":{},"outputs":[],"source":["\n","# 创建AutoGPT实例agent,使用from_llm_and_tools方法\n","agent = AutoGPT.from_llm_and_tools(\n"," ai_name=\"Tom\", # 设置AI名称为Tom\n"," ai_role=\"Assistant\", # 设置AI角色为Assistant\n"," tools=tools, # 使用tools作为工具\n"," llm=ChatOpenAI(temperature=0), # 使用ChatOpenAI作为llm,并设置temperature为0\n"," memory=vectorstore.as_retriever(), # 使用vectorstore模块中的as_retriever方法作为memory\n",")\n","\n","# 将agent的verbose属性设置为True\n","agent.chain.verbose = True"]},{"cell_type":"markdown","id":"f0f208d9","metadata":{"collapsed":false},"source":["## 运行示例\n","\n","在这里,我们将使其编写一个关于旧金山的天气报告。"]},{"cell_type":"code","execution_count":null,"id":"d119d788","metadata":{"collapsed":false},"outputs":[],"source":["\n","# 调用 agent 的 run 方法,并传入参数 [\"write a weather report for SF today\"]\n","agent.run([\"write a weather report for SF today\"])\n","\n"]},{"cell_type":"markdown","id":"f13f8322","metadata":{"collapsed":false},"source":["## 聊天历史记忆\n","\n","除了保存代理程序即时步骤的记忆外,我们还有一个聊天历史记忆。默认情况下,代理程序将使用'ChatMessageHistory',但可以进行更改。当您希望使用不同类型的记忆时,例如'FileChatHistoryMemory',这将非常有用。"]},{"cell_type":"code","execution_count":null,"id":"2a81f5ad","metadata":{"collapsed":false},"outputs":[],"source":["from langchain_community.chat_message_histories import FileChatMessageHistory\n","\n","agent = AutoGPT.from_llm_and_tools(\n"," ai_name=\"Tom\",\n"," ai_role=\"Assistant\",\n"," tools=tools,\n"," llm=ChatOpenAI(temperature=0),\n"," memory=vectorstore.as_retriever(),\n"," chat_history_memory=FileChatMessageHistory(\"chat_history.txt\"),\n",")"]},{"cell_type":"markdown","id":"b1403008","metadata":{"collapsed":false},"source":[]}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.9.1"}},"nbformat":4,"nbformat_minor":5}