Agent基本介绍
Agent是一个具备自主性、反应性、积极性和社交能力特征的智能体,它能够感知环境并做出决策以执行任务。在人工智能领域,尤其是在大型语言模型的背景下,Agent被设计为可以模仿人类的方式,从计划、组织、执行到学习等过程,最终完成一个任务。
-
Agent的基本定义
- 概念理解:Agent通常被视为一个具备自主智能的实体,它可以在给定的能力范围内自主地发现问题、设定目标、构思策略、挑选方案、执行任务并进行检查更新。这种自主性和动态响应能力是Agent区别于传统软件或机械的关键特征。
- 拟主体性:Agent不仅仅是执行任务的工具,它还具备了类似人类的“拟主体性”。这意味着Agent能够以模仿人类的方式,实现从计划到学习等一系列复杂的过程,直至完成任务。
-
Agent的类型
- 单体Agent:单体Agent是指独立运作的Agent,它不依赖于其他Agent的协作来完成任务。
- 多Agent协作:多Agent协作指的是多个Agent之间相互合作,通过协调各自的活动来解决复杂问题或完成大型任务。
- 与人交互的Agent:与人交互的Agent专注于与人类用户进行交互,它们可以理解人类的语言和需求,并根据这些信息执行相应的任务。
-
Agent的工作原理
- 任务规划与执行:Agent能够接收人类描述的目标,并自主地进行感知环境、形成记忆、完成规划、选择行动、观察和纠正错误等一系列以任务目标为导向的行动。这个过程体现了Agent的核心能力,即自主决策和执行。
- 思维链技术的应用:思维链(Chain of Thought, CoT)技术在Agent中的应用,使得Agent能够通过序列化的思考模式更有效地理解和处理输入信息。CoT帮助Agent增强决策的可靠性,将任务分解为一系列小步骤,并通过逻辑推理逐一解决这些小步骤,最终整合解决方案以完成整个任务。
-
Agent的挑战
- 落地难度:尽管Agent的概念和技术日益成熟,但将其实际应用于现实世界中仍面临诸多挑战。这包括如何确保Agent能够适应复杂的真实世界环境,以及如何处理与人类用户的交互等问题。
-
Agent的应用领域
- 自动化与RPA:结合如RPA(Robotic Process Automation)等技术,Agent可以实现更高级的自动化。例如,通过自然语言理解能力,Agent可以理解人类的语言指令,并指导RPA完成相应的任务,从而实现非侵入式的集成和执行。
-
Agent的未来展望
- 向通用人工智能迈进:Agent的发展被视为通往通用人工智能(AGI)的一条路径。研究人员希望通过不断堆叠人类特性到Agent上,最终创造出具有情感、思考能力和反思能力的硅基人。
实现细节
Step 1: 构造大模型
这一步我们可以选择很多通用的开源大模型,先构造一个可接入不同大模型的类:
class BaseModel:
def __init__(self, path: str = '') -> None:
self.path = path
def chat(self, prompt: str, history: List[dict]):
pass
def load_model(self):
pass
接下来以接入InternLM2为例:
class InternLM2Chat(BaseModel):
def __init__(self, path: str = '') -> None:
super().__init__(path)
self.load_model()
def load_model(self):
print('================ Loading model ================')
self.tokenizer = AutoTokenizer.from_pretrained(self.path, trust_remote_code=True)
self.model = AutoModelForCausalLM.from_pretrained(self.path, torch_dtype=torch.float16, trust_remote_code=True).cuda().eval()
print('================ Model loaded ================')
def chat(self, prompt: str, history: List[dict], meta_instruction:str ='') -> str:
response, history = self.model.chat(self.tokenizer, prompt, history, temperature=0.1, meta_instruction=meta_instruction)
return response, history
Step 2: 构造工具
这一步我们可以构造许多工具,工具会在调用智能体时提供很多帮助。我们需要构造一个Tools类,类中需要包含工具的描述信息和具体实现方式。例如最简单你可以调用一些搜索引擎。在更大的领域,你还可以通过接入一些平台的api,返回一些更有趣的信息。
Step 3: 构造Agent
在这一步我们需要在代码中调用之前构造的工具,并且提供一些引导的提示信息prompt。告诉大模型我们需要调用哪些工具,回答哪些信息,接受和输出什么类型的参数。简易的框架如下:
class Agent:
def __init__(self, path: str = '') -> None:
pass
def build_system_input(self):
# 构造上文中所说的系统提示词
pass
def parse_latest_plugin_call(self, text):
# 解析第一次大模型返回选择的工具和工具参数
pass
def call_plugin(self, plugin_name, plugin_args):
# 调用选择的工具
pass
def text_completion(self, text, history=[]):
# 整合两次调用
pass
Step 4: 运行Agent
在最后,我们需要将前面的代码串联起来,并且调用我们想要的大模型。