自治代理项目课程的总结和感悟| 豆包MarsCode AI刷题

113 阅读4分钟

前言

GitHub上已有好几个自治代理项目,如AutoGPT、BabyAGI和HuggingGPT,它们都代表了自治代理的初步尝试,且它们都是基于LangChain框架构建的。接下来的内容是我对实战课中的这部分内容的知识点总结和理解感悟。

AutoGPT

Auto-GPT 是一个自主AI代理,基于OpenAI的GPT-4语言模型。它的主要功能是自动链接多个任务,以实现用户设定的大目标。与传统的聊天机器人(如ChatGPT)不同,用户只需提供一个提示或一组自然语言指令,Auto-GPT 就会通过自动化多步提示过程,将目标分解为子任务,以达到其目标。

优点:
  1. 能够与互联网集成,提供实时数据访问。
  2. 使用短期记忆管理来保存上下文,可以处理文本和图像作为输入。
  3. 展示出了AI的边界和自主行动能力,凸显出了自主代理的潜力。
具体应用:

可以用于各种任务,例如生成文本、执行特定操作和进行网络搜索等,还可以作为研究助手,帮助用户进行科学研究、市场研究、内容创建、销售线索生成、业务计划创建、产品评论、播客大纲制定等。

Baby AGI

BabyAGI是一个自主任务驱动AI系统,使用OpenAI的GPT-4语言模型来理解和创建任务,利用Pinecone向量搜索来存储和检索特定任务的结果,提供执行任务的上下文,并采用LangChain框架进行决策。

优点:
  1. 能够根据目标生成任务列表,连续执行它们,并根据先前任务的输出适应性地创建更多任务。
  2. 可以根据设定的目标生成、组织、确定优先级以及执行任务。
  3. 不仅可以自动生成和执行任务,而且还可以根据完成的任务结果生成新任务,并且可以实时确定任务的优先级。
具体应用:

驱动任务的是三个不同作用的代理。分别是执行代理execution_agent,任务创建代理task_creation_agent,以及优先级设置代理prioritization_agent。

  1. 导入相关的库
# 设置API Key
import os
os.environ["OPENAI_API_KEY"] = 'Your OpenAI API Key

# 导入所需的库和模块
from collections import deque
from typing import Dict, List, Optional, Any
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import BaseLLM, OpenAI
from langchain.vectorstores.base import VectorStore
from pydantic import BaseModel, Field
from langchain.chains.base import Chain
from langchain.vectorstores import FAISS
import faiss
from langchain.docstore import InMemoryDocstore

2. 嵌入模型

# 定义嵌入模型
embeddings_model = OpenAIEmbeddings()
# 初始化向量存储
embedding_size = 1536
index = faiss.IndexFlatL2(embedding_size)
vectorstore = FAISS(embeddings_model.embed_query, index, InMemoryDocstore({}), {})

3. 定义任务生成链

# 任务生成链
class TaskCreationChain(LLMChain):
    """负责生成任务的链"""
    @classmethod
    def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:
        """从LLM获取响应解析器"""
        task_creation_template = (
            "You are a task creation AI that uses the result of an execution agent"
            " to create new tasks with the following objective: {objective},"
            " The last completed task has the result: {result}."
            " This result was based on this task description: {task_description}."
            " These are incomplete tasks: {incomplete_tasks}."
            " Based on the result, create new tasks to be completed"
            " by the AI system that do not overlap with incomplete tasks."
            " Return the tasks as an array."
        )
        prompt = PromptTemplate(
            template=task_creation_template,
            input_variables=[
                "result",
                "task_description",
                "incomplete_tasks",
                "objective",
            ],
        )
        return cls(prompt=prompt, llm=llm, verbose=verbose)

4. 定义任务优先级链 5. 定义任务执行链

# 任务执行链
class ExecutionChain(LLMChain):
    """负责执行任务的链"""

    @classmethod
    def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:
        """从LLM获取响应解析器"""
        execution_template = (
            "You are an AI who performs one task based on the following objective: {objective}."
            " Take into account these previously completed tasks: {context}."
            " Your task: {task}."
            " Response:"
        )
        prompt = PromptTemplate(
            template=execution_template,
            input_variables=["objective", "context", "task"],
        )
        return cls(prompt=prompt, llm=llm, verbose=verbose)

6. 定义一系列功能函数 7. 定义BabyAGI 8. 编写主执行部分

HuggingGPT

HuggingGPT的工作流程包括四个阶段:任务规划、模型选择、任务执行、响应生成。

优点:
  1. 能够使用不同的模型来执行特定的任务。
  2. 能够根据用户请求自动生成计划,并使用外部模型,从而整合多模态感知能力,并处理多个复杂的AI任务。
  3. 允许HuggingGPT持续从任务特定的专家模型中吸收能力,从而实现可增长和可扩展的AI能力。
具体应用:

使用不同的模型来执行特定的任务,如图像分类、对象检测、图像描述等。利用LLM的推理能力生成任务,确定任务优先级,然后执行任务,实现目标。

总结

image.png Auto-GPT、BabyAGI 以及 HuggingGPT,它们作为自主代理(Autonomous Agents)的代表,旨在创建更加普适和强大的算法,这些算法能够处理各种任务,并在没有明确编程指令的情况下自我改进。这节课程使我认识到了几个自主代理项目,万分感慨科技发展之迅速和科技的力量、AI的魅力。希望这个知识点的总结可以对你有所帮助!