Agent基础

Agnets 定义为:LLM+mermory+planning skills+tools use 即大语言模型、记忆、任务规划、工具使用的集合。

架构 AI Agents设计模式


感知(perception)

Agent通过感知系统从环境中收集信息,这些信息可以是文本、图像、声音等多种形式。

感知是Agent理解周遭世界的第一道工序。


规划(Planning)

对问题进行拆解得到解决路径,即执行任务规划,类似于思维链,分解复杂任务,找到路径


使用工具(Tool Use)

评估自己所需的工具,进行工具选择,并生成调用工具的请求

这些行为可能是物理上的,也可以是虚幻的


协作(Multiagent Collaboration)

多Agent,不同类型的助理(agent),可以通过协作组成一个团队或者一家公司


记忆(memory)

短期记忆包括提示词上下文,工具的返回值,已经完成的推理路径;长期记忆包括可访问的外部长期存储,例如RAG知识库


任务规划

1、子目标&拆解

处理问题时可以采用"分治"的思想,将复杂的任务拆解成一个个小任务进行处理

2、反思&完善

Agent能够对过去的行动决策进行自我反思,完善过去的行动决策和纠正以前的错误来迭代改进

ReAct提示词技术检视很经典的反思与完善的过程。

结合ReAct提示词技术的Agent会在执行下一步action的时候,加上LLM自己的思考过程,并且将思考过程、执行的工具及参数、执行的结果放到prompt中,让LLM对当前和先前的任务完成度有更好的反思能力,从而提升模型的问题解决能力。

ReAct的提示模板:

Thought:.......

Action:......

observation:.....

....(重复上面的流程)


工具使用

Agent对于工具的使用就是弥补了大模型只说不做的缺陷。

Agent可以调用外部API来获取模型权重中缺失的额外信息,包括当前时间、地理位置信息、代码执行能力、对专有知识库的访问等。

Agent的工作机制

【接收任务】用户提交任务给Agent

【组装提示词】Agent收到用户提交的任务之后,对输入的信息进行架构处理合并为最终的prompt

【与大模型交互】Agent将处理后的prompt提交给LLM,拿到下一步需要执行的动作和思考过程

【循环执行】Agent回执行LLM返回的Action、观察评估结果、获取下一步Action。执行的工程中回自主的判断是否需要使用工具来处理Action或者获取额外的信息


提示词工程(prompt)

提示词工程,也称为上下文提示,是一种通过不断更新模型的权重/参数来引导LLM行为朝着特定结果的方法。

提示词工程可以用于各种任务,从回答问题到算术推理乃至各种应用领域,理解提示工程,能够帮助我们了解LLM的限制和能力。


硬提示词

传统提示是以自然语言的形式手动设计的

例如,想让模型完成一个任务时,你可能会输入一句话,"今天的天气如何?"。这种提示直接使用了自然语言,是固定不变的。


软提示词

软提示并不一定是自然语言,而是通过再模型训练过程中学习得到的一种向量标识。

它可能不具有任何语言意义,但能够通过改变模型内部的激活模式来影响模型的输出。

软提示不需要由人显式的编写,而是通过训练数据来学习最有效的提示。

在web端的大模型界面使用不到,一般编程做大模型任务时可以用到缩减成本。

Prompt Tuning是一种参数高效的微调方法,它属于软提示的一种实现方式。

在promptTuning中,模型的权重被固定,只有提示的参数会被更新。

软提示的使用通常分为两个主要部分:生成软提示向量和将软提示应用于模型推理

软提示使用的例子

1、准备数据 将语言与标签进行分类 打标注

2、生成软提示

(1)初始化软提示向量

(2)联合训练软提示和模型 软提示向量前缀【参数权重】+数据

(3)固定预训练模型,仅调整软提示

初始前缀向量 p

准备数据、输入 = p+文本、前向传播、计算损失、反向传播+优化、重复训练(注意过拟合)


提示工程基本方式


Zero-shot Prompt

用户输入的问题直接被传入大模型中,并将大模型的结果直接返回给用户


Few-shot Prompt(会消耗更多的token)

few-shot prompt则是通过提供模型少量高质量的示例,这些示例包括目标任务的输入和期望输出。

通过观察这些示例,模型可以更好的理解人的意图和生成准确输出的标准

在处理长文本出入或者输出的时候可能会遇到上下文长度限制的问题,在Few-shot prompt中,提示包含少量示例成为shots,向摩西展示期望输出的样子,通常使用2~5个示例,这个过程被称为上下文学习。

Few-shot prompt的工作原理包括一下几个步骤:

查询定制:用户通过包含清晰的任务描述和相关示例来制定提示

示例提示:在提示中提供几个示例,这些示例展示任务的输入和期望输出

模型学习:模型通过这些示例学习任务的模式和结构,然后能够对新的输入生成准确的响应


思维链Chain-of-Thought Prompting

Few-shot CoT

允许模型查看一些高质量推理链的延时,在问LLM之前,手工在prompt中加入一些包含思维过程(Chain of thoufht)的问答示例,就可以让LLM在推理任务上大幅度提升。


Zero-shot CoT

无需任何标注数据即可激发大语言模型进行复杂推理的技术,这种方法的核心在于使用特定的提示语,如"Let's think step by step",来引导模型生成推理步骤,并基于步骤给出答案。


自一致性(Self-Consistency)

通过独立生成多条解题思路并对最终答案进行多数表决,增强了推理过程的鲁棒性(少数服从多数)


思维树(Tree of Thought)

新型语言模型推理框架,模拟人的决策过程来解决复杂问题,这种方法允许大型语言模型通过考虑不同的推理路径和自我评估来选择决定下一步行动,并在必要的时候向前看或者回溯做出全局选择,从而进行深思熟虑的思考,实则是创建了一个树形结构,搜索过程可以是深度优先或者广度优先的过程

提示词:

假设三位不同的专家来回答这个问题。

所有专家都写下他们思考这个问题的第一个步骤,然后和大家分享

然后所有专家都写下他们思考的下一个步骤并分享

以此类推,知道所有专家写完他们思考的所有步骤,只要大家发现有专家的步骤出错了就让这位专家离开。

请问.......


CO-STAR提示词框架

C:表示上下文,你可以在这里给出任何相关的背景信息或者你希望它完成的任务信息

O:表示目标,你需要给出非常明确的知识告诉ChatGpt你需要它干什么

S:表示风格,我们需要告诉GPT我们想要的写作风格

T:表示语调,你希望挥发的语调是什么样子的

A:表示我们需要告诉GPT的听众是谁

R:表示回应类型,需要一个具体的什么形式