提示工程(Prompt Engineering)是与大语言模型交互的一项关键技术,作为以大语言模型为大脑的智能体,提示工程同样扮演着重要角色。
本文为小伙伴们介绍AgentScope中的提示工程。
1.提示工程
1.1.提示工程在智能体中的作用
在智能体中,提示工程用于帮助大模型理解复杂问题,给出准确的答案,以支撑智能体完成各类任务。
提示工程的主要作用可归纳为以下几点:
- 明确任务和指令:针对具体任务,将用户需求和预期输出转化为明确的任务描述和指令。
- 上下文提供:提供必要的上下文信息,帮忙模型理解和处理复杂问题。
- 思维链推理:对于复杂问题,可以通过提示词进行逐步推理(Chain-of-Thought Prompting),即通过逐步生成中间推理步骤来解决问题。
- 控制输出格式:提示可以规定输出的具体格式,如列表、表格、段落等,使得生成的内容更加规范、易于理解和使用。
1.2.多智能体构建提示工程的难点
在多智能体系统中,由于任务的复杂性和需要基础的模型的多样性,构建提示工程面临挑战:
- 复杂多样:在多智能体系统中,每个智能体可能具有不同的特性、能力和目标。需要考虑到每个智能体的独特性和差异性,增加了提示工程的复杂性。
- 部分模型不支持角色扮演:大多数语言模型都是为聊天场景设计的,角色只支持
"user"
和"assistant"
,不支持角色扮演。 - 对话管理差异:某些模型规定发言必须在
"user"
和"assistant"
之间交替进行,且序列的首尾都应由"user"
发言。这导致当单一代理需要连续扮演多个角色时,构建对话变得困难。
1.3.AgentScope的提示工程构建策略
针对上述难点,是否有统一的提示工程构建方案来普适不同模型呢?根据工程实践,答案是没有,不存在"适用于所有模型API"的提示词构建方案。
AgentScope的解决方案是,针对不同的模型API,提供对应的内置提示构建策略。这些策略在对应Model Wrapper类的format
函数中实现的,它接受Msg
对象的列表作为输入,并重新组织成一个Msg
对象的列表。AgentScope为以下模型API提供了内置的提示构建策略:
- OpenAIChatWrapper
- DashScopeChatWrapper
- DashScopeMultiModalWrapper
- OllamaChatWrapper
- OllamaGenerationWrapper
- GeminiChatWrapper
- ZhipuAIChatWrapper
这些策略可以帮助开发者快速开始使用AgentScope,简化了多智能体对话的构建过程。
2.AgentScope提示工程构建策略详解
下面,我们以OpenAI聊天模型API为例,详细看下AgentScope的提示构建策略。
2.1.内置策略-OpenAIChatWrapper
AgentScope针对OpenAI聊天模型封装的提示构建接口是OpenAIChatWrapper
。
OpenAIChatWrapper
封装了OpenAI聊天API,它以字典列表作为输入,其中字典必须遵循以下规则:
- 需要
role
和content
字段,以及一个可选的name
字段。 role
字段必须是"system"
、"user"
或"assistant"
之一。
2.1.1.非视觉模型的提示构建
OpenAIChatWrapper
提供format
方法来构建多角色的对话提示。
- 要点1:
format
方法的参数很简单:- System角色:Msg对象,要求是包含
role
、content
和name
三个字段的字典。 - 非System角色:Msg对象的列表,即上述格式字典的列表。
- System角色:Msg对象,要求是包含
- 要点2:使用
name
字段区分对话中的不同发言者。
示例代码如下:
|
|
2.1.2.视觉模型的提示构建策略
对于支持视觉的模型(如gpt-4o),同样还是用format
方法来构建提示,使用url字段承载图片信息。
- 要点1:
format
方法的参数:- System角色:Msg对象,要求是包含
role
、content
和name
三个字段的字典。 - 非System角色:Msg对象的列表,每个Msg对象的要求是包含
role
、content
、name
和url
四个字段的字典。
- System角色:Msg对象,要求是包含
- 要点2:
url
可以是图片网络地址或本地地址的字符串,也可以是多个图片的地址字符串的列表。- 如果是网络图片url,将直接传递给OpenAI Chat API;
- 如果本地图片url,将被转换为base64格式。
示例代码如下:
|
|
|
|
3.总结
本文要点如下:
智能体系统中提示工程的作用和构建难点:
AgentScope的提示工程构建策略:
- 不存在"适用于所有模型API"的提示词构建方案。
- AgentScope针对不同的模型API,提供对应的内置提示构建策略。
参考:https://arxiv.org/pdf/2402.14034