通过角色扮演生成鲜花营销方案实践选题| 豆包MarsCode AI刷题

29 阅读5分钟

解题笔记:通过角色扮演生成鲜花营销方案

一、问题背景

在现代营销策略中,角色扮演是一种常见的创意思维方法。本任务的目标是通过角色扮演的方式,利用LangChain与OpenAI的语言模型,帮助生成一个鲜花营销方案。我们将模拟“花店老板”和“花店营销专员”之间的对话,逐步设计出一个夏季玫瑰之夜的营销活动策略。

二、解题思路

  1. 角色设定:我们定义两个角色:花店老板(需要提出需求)和花店营销专员(根据需求提供创意和方案)。通过两者的对话来生成营销方案。
  2. 任务拆解:将大致的营销目标拆解成具体的创意、活动方案、营销渠道等内容,逐步迭代与完善。
  3. 多轮对话:通过与AI的多轮对话,逐步细化任务、生成创意,最终输出一个完整的营销方案。

三、解题步骤

1. 环境配置与库导入

首先,导入必要的库和工具,确保环境正确配置并能够与OpenAI的API进行交互。

1.1 导入所需的库
import os
from typing import List
from langchain_openai import ChatOpenAI
from langchain.prompts.chat import (
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage,
    BaseMessage,
)
  • os:用于管理环境变量和API密钥。
  • langchain_openai:用于连接并与OpenAI模型进行交互。
  • langchain.prompts.chat:提供对话生成模板。
  • langchain.schema:定义对话中消息的格式和结构。
1.2 设置API密钥

确保OpenAI API密钥已设置在环境变量中,以便可以与模型进行交互。

os.environ["OPENAI_API_KEY"] = "your-api-key-here"

2. 创建CAMELAgent类

CAMELAgent类用于管理对话中的消息并与模型进行交互。我们通过该类封装了消息管理、对话更新和交互逻辑。

2.1 定义CAMELAgent类
class CAMELAgent:
    def __init__(self, system_message: SystemMessage, model: ChatOpenAI) -> None:
        self.system_message = system_message
        self.model = model
        self.init_messages()

    def reset(self) -> None:
        """重置对话消息"""
        self.init_messages()

    def init_messages(self) -> None:
        """初始化对话消息"""
        self.stored_messages = [self.system_message]

    def update_messages(self, message: BaseMessage) -> List[BaseMessage]:
        """更新对话消息"""
        self.stored_messages.append(message)
        return self.stored_messages

    def step(self, input_message: HumanMessage) -> AIMessage:
        """进行一步交互并获取模型的响应"""
        messages = self.update_messages(input_message)
        output_message = self.model(messages)
        self.update_messages(output_message)
        return output_message
2.2 解释CAMELAgent类的功能
  • reset():重置对话消息,清空历史记录。
  • init_messages():初始化系统消息,开始一轮新的对话。
  • update_messages():将新的消息添加到对话历史中。
  • step():与模型进行一次交互并更新消息历史。

3. 任务细化

为了让AI更好地理解任务,首先需要将大概的营销目标具体化。通过与模型的初次交互,细化任务的具体要求。

3.1 任务细化的系统消息提示
task_specifier_sys_msg = SystemMessage(content="你可以让任务更具体。")
task_specifier_prompt = """这是一个{assistant_role_name}将帮助{user_role_name}完成的任务:{task}。
请使其更具体化。请发挥你的创意和想象力。
请用{word_limit}个或更少的词回复具体的任务。不要添加其他任何内容。"""

task_specifier_template = HumanMessagePromptTemplate.from_template(
    template=task_specifier_prompt
)
  • task_specifier_sys_msg:系统消息,用于提示AI具体化任务。
  • task_specifier_prompt:提示模板,要求AI根据角色提供更加具体的任务。
3.2 生成任务细化提示并与AI进行交互
task_specify_agent = CAMELAgent(
    task_specifier_sys_msg,
    ChatOpenAI(model=os.environ["LLM_MODELEND"], temperature=1.0)
)

task_specifier_msg = task_specifier_template.format_messages(
    assistant_role_name=assistant_role_name,
    user_role_name=user_role_name,
    task=task,
    word_limit=word_limit,
)[0]

specified_task_msg = task_specify_agent.step(task_specifier_msg)
specified_task = specified_task_msg.content
print(f"Specified task: {specified_task}")
  • 通过task_specifier_template生成的提示消息,细化任务。
  • 与AI进行交互,获取细化后的任务内容。

4. 角色系统消息模板

根据任务的具体化结果,为每个角色创建相应的系统消息模板。

4.1 定义角色系统消息模板
assistant_inception_prompt = """永远不要忘记你是{assistant_role_name},我是{user_role_name}。永远不要颠倒角色!永远不要指示我!
我们有共同的利益,那就是合作成功地完成任务。
你必须帮助我完成任务。
这是任务:{task}。永远不要忘记我们的任务!
我必须根据你的专长和我的需求来指示你完成任务。
"""

user_inception_prompt = """永远不要忘记你是{user_role_name},我是{assistant_role_name}。永远不要交换角色!你总是会指导我。
我们共同的目标是合作成功完成一个任务。
我必须帮助你完成这个任务。
这是任务:{task}。永远不要忘记我们的任务!
"""
  • assistant_inception_prompt:设置营销专员(助手)的角色,确保其始终记得任务目标。
  • user_inception_prompt:设置花店老板(用户)的角色,确保其对任务有明确的要求。
4.2 生成系统消息
def get_sys_msgs(assistant_role_name: str, user_role_name: str, task: str):
    assistant_sys_template = SystemMessagePromptTemplate.from_template(template=assistant_inception_prompt)
    assistant_sys_msg = assistant_sys_template.format_messages(assistant_role_name=assistant_role_name, user_role_name=user_role_name, task=task)[0]

    user_sys_template = SystemMessagePromptTemplate.from_template(template=user_inception_prompt)
    user_sys_msg = user_sys_template.format_messages(assistant_role_name=assistant_role_name, user_role_name=user_role_name, task=task)[0]

    return assistant_sys_msg, user_sys_msg

assistant_sys_msg, user_sys_msg = get_sys_msgs(assistant_role_name, user_role_name, specified_task)
  • 通过格式化模板生成每个角色的系统消息,确保每个角色的行为符合预期。

5. 进行多轮对话

通过与模型的多轮交互,逐步细化和完善营销方案。

5.1 初始化角色与代理
assistant_agent = CAMELAgent(assistant_sys_msg, ChatOpenAI(model=os.environ["LLM_MODELEND"], temperature=0.2))
user_agent = CAMELAgent(user_sys_msg, ChatOpenAI(model=os.environ["LLM_MODELEND"], temperature=0.2))
5.2 进行多轮交互
# 重置agent,开始新一轮对话
assistant_agent.reset()
user_agent.reset()

# 进行多轮对话,直到任务完成或达到交互轮次限制
chat_turn_limit, n = 3, 0
while n < chat_turn_limit:
    n += 1
    user_ai_msg = user_agent.step(assistant_msg)
    user_msg = HumanMessage(content=user_ai_msg.content)
    print(f"AI User ({user_role_name}):\n\n{user_msg.content}\n\n")

    assistant_ai_msg = assistant_agent.step(user_msg)
    assistant_msg = HumanMessage(content=assistant_ai_msg.content)
    print(f"AI Assistant ({assistant_role_name}):\n\n{assistant_msg.content}\n\n")

    # 结束条件
    if "<CAMEL_TASK_DONE>" in user_msg.content:
        break
  • 在每轮对话中,营销专员和花店老板会交替发言,不断细化和完善营销活动方案。
  • 每轮对话后,根据AI的回复进行下一轮交互,直到达到目标。

四、总结

通过细化任务、分步交互和角色扮演,我们成功生成了一个鲜花营销方案。在这个过程中,AI通过多轮对话不断完善方案,最后形成了一个完整的、可执行的营销活动。该方法不仅展示了LangChain框架在自动化任务生成中的潜力,也为营销创意设计提供了新的思路和方法。