CAMEL框架概述
CAMEL是一个多AI通过角色扮演进行交互的框架,旨在促进交流代理之间的自主合作,并为其“认知”过程提供洞察。
核心概念
- 交流式代理(Communicative Agents):与人类或其他代理交流的计算机程序。
- 角色扮演(role-playing):代理扮演不同角色,以更好地与人类或其他代理交流。
- 启示式提示(inception prompting):通过给代理提供提示或指示,帮助代理理解如何行动。
股票交易场景设计
- 人类用户角色:提供要实现的想法,如开发交易机器人。
- 任务指定代理:根据输入的想法为AI助手和AI用户确定具体任务。
提示模板设计
- AI Society:关注AI助手在多种角色中的表现。
- AI Code:关注与编程相关的任务。
LangChain中的CAMEL实现
定义CAMELAgent类
class CAMELAgent:
def __init__(self, system_message: SystemMessage, model: ChatOpenAI):
self.system_message = system_message
self.model = model
self.init_messages()
def reset(self):
self.init_messages()
return self.stored_messages
def init_messages(self):
self.stored_messages = [self.system_message]
def update_messages(self, message: BaseMessage):
self.stored_messages.append(message)
return self.stored_messages
def step(self, input_message: HumanMessage):
messages = self.update_messages(input_message)
output_message = self.model(messages)
self.update_messages(output_message)
return output_message
预设角色和任务提示
assistant_role_name = "花店营销专员"
user_role_name = "花店老板"
task = "整理出一个夏季玫瑰之夜的营销活动的策略"
word_limit = 50
任务指定代理
task_specifier_sys_msg = SystemMessage(content="你可以让任务更具体。")
task_specifier_prompt = """这是一个{assistant_role_name}将帮助{user_role_name}完成的任务:{task}。
请使其更具体化。请发挥你的创意和想象力。
请用{word_limit}个或更少的词回复具体的任务。不要添加其他任何内容。"""
系统消息模板
assistant_inception_prompt = """永远不要忘记你是{assistant_role_name},我是{user_role_name}。永远不要颠倒角色!永远不要指示我!
我们有共同的利益,那就是合作成功地完成任务。
你必须帮助我完成任务。
这是任务:{task}。永远不要忘记我们的任务!
我必须根据你的专长和我的需求来指示你完成任务。
我每次只能给你一个指示。
你必须写一个适当地完成所请求指示的具体解决方案。
如果由于物理、道德、法律原因或你的能力你无法执行指示,你必须诚实地拒绝我的指示并解释原因。
除了对我的指示的解决方案之外,不要添加任何其他内容。
你永远不应该问我任何问题,你只回答问题。
你永远不应该回复一个不明确的解决方案。解释你的解决方案。
你的解决方案必须是陈述句并使用简单的现在时。
除非我说任务完成,否则你应该总是从以下开始:
解决方案:<YOUR_SOLUTION>
<YOUR_SOLUTION>应该是具体的,并为解决任务提供首选的实现和例子。
始终以“下一个请求”结束<YOUR_SOLUTION>。"""
user_inception_prompt = """永远不要忘记你是{user_role_name},我是{assistant_role_name}。永远不要交换角色!你总是会指导我。
我们共同的目标是合作成功完成一个任务。
我必须帮助你完成这个任务。
这是任务:{task}。永远不要忘记我们的任务!
你只能通过以下两种方式基于我的专长和你的需求来指导我:
1. 提供必要的输入来指导:
指令:<YOUR_INSTRUCTION>
输入:<YOUR_INPUT>
2. 不提供任何输入来指导:
指令:<YOUR_INSTRUCTION>
输入:无
“指令”描述了一个任务或问题。与其配对的“输入”为请求的“指令”提供了进一步的背景或信息。
你必须一次给我一个指令。
我必须写一个适当地完成请求指令的回复。
如果由于物理、道德、法律原因或我的能力而无法执行你的指令,我必须诚实地拒绝你的指令并解释原因。
你应该指导我,而不是问我问题。
现在你必须开始按照上述两种方式指导我。
除了你的指令和可选的相应输入之外,不要添加任何其他内容!
继续给我指令和必要的输入,直到你认为任务已经完成。
当任务完成时,你只需回复一个单词<CAMEL_TASK_DONE>。
除非我的回答已经解决了你的任务,否则永远不要说<CAMEL_TASK_DONE>。"""
总结
CAMEL框架通过角色扮演和启示式提示,提高了AI代理的交流能力和任务执行效率。这种框架为研究多代理系统的合作行为和能力提供了一种可扩展的方法。
思考题
- 在你的业务需求中,有什么需要细化、具体化的业务场景吗?
- 对于这个AI交流代理指导框架和提示模板的设计,你能否说说其优劣之处?有没有能进一步改进的地方?
延伸阅读
- CAMEL项目官网 GitHub论文
- 新闻「零人工含量」的「游戏公司」- Chen, Q., Cong, X., Yang, C., Chen, W., Su, Y., Xu, J., Liu, Z., & Sun, M. (2023). Communicative Agents for Software Development. arXiv preprint arXiv:2307.07924 [cs.SE].