AI实践: 自主代理 | 豆包MarsCode AI刷题

309 阅读6分钟

本文将分别介绍 AutoGPTHuggingGPT 的基本原理,并提供基于 LangChain 的示例代码。这些代码会涵盖代理的基本框架和逻辑,能快速实现类似功能的基础系统。

AutoGPT 简介

AutoGPT 是一种基于 GPT 模型的自主代理框架。其核心思想是利用 GPT 模型构建一种能自我驱动的系统:代理不仅可以基于用户输入执行任务,还可以通过生成输出文本来触发自身的下一步行动。它通常具有以下特点:

  1. 自动化任务链:自动生成完成任务所需的步骤,并依次执行这些步骤。
  2. 环境交互:具备访问互联网、读取文件、管理文件等能力。
  3. 反馈机制:在执行每个步骤后,能够评估其效果,并根据反馈来决定接下来的操作。

AutoGPT 基础代码实现

LangChain 中,我们可以使用 AgentChain 的组合实现一个基本的 AutoGPT 框架。

以下是一个简单的 AutoGPT 代理的代码实现:

from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.agents import initialize_agent, AgentType
import os

llm = ChatOpenAI(
    model=os.environ["LLM_MODELEND"],
    temperature=0,
)

task_prompt = PromptTemplate.from_template(
    "你是一名AI助手,负责完成任务。当前任务是:{task}。请列出详细的步骤。"
)

task_chain = LLMChain(llm=llm, prompt=task_prompt)

class AutoGPTAgent:
    def __init__(self, llm, task_chain):
        self.llm = llm
        self.task_chain = task_chain
        self.history = []

    def run_task(self, task):
        task_steps = self.task_chain.run(task=task)
        print(f"Task Steps: {task_steps}")
        
        for step in task_steps.split("\n"):
            result = self.task_chain.run(task=step)
            self.history.append({"step": step, "result": result})
            print(f"Executing Step: {step}")
            print(f"Result: {result}")
            
            if "完成" in result:
                print("任务完成!")
                break
        return self.history

# 初始化代理并执行
auto_gpt_agent = AutoGPTAgent(llm=llm, task_chain=task_chain)
result = auto_gpt_agent.run_task("制定一个学习LangChain的计划")
print("Task Execution History:", result)

代码解析

  1. AutoGPTAgent 是一个简单的自动任务执行代理。它的设计目的是分解任务,生成步骤,并按照步骤顺序执行,模拟一种自主的任务代理。使用 LangChainLLMChain(LLM链)和 PromptTemplate(提示模板)来帮助构建生成和执行任务链的逻辑。
  2. AutoGPTAgent 代理的核心逻辑为:基于 task_chain 生成的步骤,逐步执行每个任务并记录结果。
  3. 执行的结果被保存在 history 中,便于后续查询和分析。

HuggingGPT 简介

HuggingGPT 是一个将 Hugging Face 中的模型生态系统与 GPT 模型结合的框架。HuggingGPT 使用 GPT 模型作为控制器,根据用户的需求确定使用何种模型或工具,然后利用 Hugging Face 提供的模型进行具体任务的执行。这种方法可以适合多种任务,比如图像处理、文本生成等。

HuggingGPT 基础代码实现

在这个例子中,将构建一个简单的 HuggingGPT 代理。这个代理能够解析用户的请求并选择适当的 Hugging Face 模型执行任务。

from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from transformers import pipeline

import os

llm = ChatOpenAI(
    model=os.environ["LLM_MODELEND"],
    temperature=0,
)
task_selector_prompt = PromptTemplate.from_template(
    "你是一名AI助手。用户的请求是:'{task}'。请选择适合的Hugging Face模型并解释原因。"
)
task_chain = LLMChain(llm=llm, prompt=task_selector_prompt)

class HuggingGPTAgent:
    def __init__(self, llm, task_chain):
        self.llm = llm
        self.task_chain = task_chain
        self.model_registry = {
            "text-generation": pipeline("text-generation", model="gpt2"),
            "text-classification": pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english"),
            "image-classification": pipeline("image-classification", model="google/vit-base-patch16-224"),
        }

    def select_model(self, task_description):
        response = self.task_chain.run(task=task_description)
        print(f"LLM Model Selection Response: {response}")
        
        if "生成文本" in response:
            return self.model_registry["text-generation"]
        elif "情感分析" in response:
            return self.model_registry["text-classification"]
        elif "图像分类" in response:
            return self.model_registry["image-classification"]
        else:
            return None

    def run_task(self, task_description, input_data):
        model = self.select_model(task_description)
        if model:
            # 使用选定的模型处理输入数据
            result = model(input_data)
            print(f"Task Result: {result}")
            return result
        else:
            print("未找到适合的模型")
            return None

hugging_gpt_agent = HuggingGPTAgent(llm=llm, task_chain=task_chain)

# 示例任务执行
result = hugging_gpt_agent.run_task("对这段文字进行情感分析", "I love using AI agents!")
print("Task Result:", result)

代码解析

  1. HuggingGPTAgent 使用 GPT 模型作为控制器,接收用户的需求,选择合适的 Hugging Face 模型来完成任务。它可以执行多种任务,如文本生成、情感分析、图像分类等。
  2. HuggingGPTAgent 类包含一个 model_registry,用于存储不同任务类型的 Hugging Face 模型。
  3. 通过 task_chain,代理先使用 LLM 控制器生成任务描述,来选择适合的 Hugging Face 模型。
  4. 根据选择的模型,对输入数据进行相应处理,并返回结果。

总结

AutoGPT 中这种自动代理框架可以分解复杂任务并执行多个子步骤。此代码的亮点在于自动步骤生成和执行逻辑,但局限在没有额外的错误处理或环境交互能力。要实现更完善的 AutoGPT,可以进一步增强执行逻辑,例如引入判断机制和反馈机制,让代理可以根据任务反馈来决定接下来的操作。

HuggingGPTAgent 的优势在于整合了 LLM 和多种 Hugging Face 模型,以实现通用的多模态 AI 系统。通过 LLM 选择模型的方法增加了代理的灵活性,避免了硬编码指定模型的局限。不过此代码中没有加入丰富的错误处理和判断逻辑,因而在复杂的任务需求下会略显单一。此外,实际应用中可以进一步扩展模型库和判断逻辑,使得代理可以在更多任务类型下有效地选择最佳模型。

这两个代理的核心逻辑在于:

  1. 任务分解与执行AutoGPTAgent 利用 LLM 分解任务为多个步骤,并逐步执行每个步骤,适合执行流程较为明确的任务。
  2. 任务分类与模型选择HuggingGPTAgent 则是通过 LLM 解析任务,动态选择模型,适合需要处理多种任务类型的场景。

虽然两者设计理念有所不同,但都展示了如何结合 LangChain 和其他模型框架来构建智能代理。将 AutoGPTHuggingGPT 的功能结合起来,可能可以构建出一个更复杂、更智能的通用型 AI 代理。例如,使用 AutoGPT 的任务分解逻辑生成步骤,结合 HuggingGPT 的模型选择能力来执行多种任务类型,从而达到更加灵活的代理系统。

在实际应用中,完善的代理设计还需要加入更多功能,如:

  • 错误处理:在每一步执行中加入对异常情况的判断与处理。
  • 反馈循环:根据每个步骤的结果调整后续任务计划,提高任务执行的自主性。
  • 外部环境交互:例如访问文件系统、浏览器等,增加代理的应用场景和实用性。

这些改进可以让 AI 代理不仅具备通用的任务执行能力,还能够处理更为复杂的工作流。