LangChain实战课:CAMEL框架与AI角色扮演
大模型的成功很大程度上依赖于用户输入的质量,以引导生成准确且高质量的对话内容。如果用户能够详细描述任务需求,并与ChatGPT建立连贯的上下文,模型通常可以提供更精准的回答。然而,为模型提供这种详细的引导文本往往费时费力。
这就引发了一个关键问题:能否让ChatGPT自主生成这些引导文本?
基于此思路,阿卜杜拉国王科技大学(KAUST)的研究团队提出了一个名为CAMEL的框架。该框架利用多AI角色扮演的方式,通过代理间的交互合作完成复杂任务。
CAMEL框架概述
CAMEL(Communicative Agents for "Mind" Exploration of Large-Scale Language Model Society)是一个多代理交互框架。其名称由以下关键词的首字母组合而成:Communicative(交流) 、Agents(代理) 、Mind(心智) 、Exploration(探索)以及LLM(大语言模型) 。
CAMEL的核心理念是通过角色扮演和启示式提示(Inception Prompting)来引导代理完成任务。框架特点包括:
- 交流式代理:能够与人类或其他代理进行交互的计算程序。
- 角色扮演:代理扮演特定角色以实现更高效的交互。
- 启示式提示:通过初始提示明确任务目标,为后续代理间的自主合作奠定基础。
这种方法为研究多代理系统中的合作行为提供了可扩展的工具。
应用案例:股票交易场景设计
论文中提出了一个典型应用场景:开发一个具有情感分析能力的股票交易机器人。以下是任务分解及角色设定的过程:
-
用户角色:提供目标需求,例如“开发一个交易机器人”。
-
任务指定代理:根据模糊需求生成具体任务,例如“开发一个能分析社交媒体情绪并据此交易的机器人”。
-
AI助手和AI用户角色:
- AI助手:以“Python程序员”的身份为交易机器人开发代码。
- AI用户:以“股票交易员”的身份为任务提供策略指导。
代理通过多轮对话合作完成任务,直到用户确认任务完成。
提示工程与角色设定
在CAMEL框架中,提示设计(Prompt Engineering)是关键步骤之一。通过明确的角色指令和任务定义,代理可以更高效地完成任务。以下是两种提示模板的核心思路:
- AI Society:研究AI在多领域角色中的合作能力。
- AI Code:研究AI在编程和技术任务中的应用能力。
提示工程包括:
- 任务明确提示:明确任务目标及角色职责。
- AI助手提示:指导助手如何响应任务指令。
- AI用户提示:指导用户如何提出有效的任务指令。
通过这些提示,代理能够在后续交互中自动进行高效的对话。
案例实战:易速鲜花营销策划
以下是基于“易速鲜花”场景的CAMEL框架应用示例。任务是为“夏季玫瑰之夜”制定营销活动策略。
1. 准备工作
设置API密钥并导入所需的库:
python
复制代码
import os
os.environ["OPENAI_API_KEY"] = 'Your Key'
from typing import List
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import SystemMessagePromptTemplate, HumanMessagePromptTemplate
from langchain.schema import AIMessage, HumanMessage, SystemMessage, BaseMessage
2. 定义CAMELAgent类
CAMELAgent类用于管理语言模型的交互,支持对话消息的初始化、更新和响应生成:
python
复制代码
class CAMELAgent:
...
3. 任务指定与细化
通过任务指定代理将模糊的任务需求细化为具体目标:
python
复制代码
task_specifier_sys_msg = SystemMessage(content="你可以让任务更具体。")
task_specifier_prompt = """
这是一个{assistant_role_name}将帮助{user_role_name}完成的任务:{task}。
请使其更具体化。请用{word_limit}个或更少的词回复具体的任务。
"""
...
specified_task = task_specify_agent.step(task_specifier_msg).content
细化后的任务描述示例:
- 原始任务:整理出一个夏季玫瑰之夜营销活动的策略。
- 细化任务:为夏季玫瑰之夜策划主题装饰、特价活动、广告推广、娱乐活动及合作伙伴赞助方案。
4. 角色设定与提示模板
定义AI助手和AI用户的角色及初始提示:
python
复制代码
assistant_inception_prompt = """
永远不要忘记你是{assistant_role_name},我是{user_role_name}...
"""
user_inception_prompt = """
永远不要忘记你是{user_role_name},我是{assistant_role_name}...
"""
5. 多轮对话与任务完成
通过AI用户和AI助手的多轮对话完成营销策划任务:
python
复制代码
chat_turn_limit, n = 30, 0
while n < chat_turn_limit:
...
if "<CAMEL_TASK_DONE>" in user_msg.content:
break