2.metagpt中的软件公司智能体 (ProductManager 角色)

1. 代码

ProductManager 类

python 复制代码
from metagpt.actions import UserRequirement, WritePRD
from metagpt.actions.prepare_documents import PrepareDocuments
from metagpt.roles.role import Role, RoleReactMode
from metagpt.utils.common import any_to_name


class ProductManager(Role):
    """
    Represents a Product Manager role responsible for product development and management.

    Attributes:
        name (str): Name of the product manager.
        profile (str): Role profile, default is 'Product Manager'.
        goal (str): Goal of the product manager.
        constraints (str): Constraints or limitations for the product manager.
    """

    name: str = "Alice"
    profile: str = "Product Manager"
    goal: str = "efficiently create a successful product that meets market demands and user expectations"
    constraints: str = "utilize the same language as the user requirements for seamless communication"
    todo_action: str = ""

    def __init__(self, **kwargs) -> None:
        super().__init__(**kwargs)

        self.set_actions([PrepareDocuments, WritePRD])
        self._watch([UserRequirement, PrepareDocuments])
        self.rc.react_mode = RoleReactMode.BY_ORDER
        self.todo_action = any_to_name(WritePRD)

    async def _observe(self, ignore_memory=False) -> int:
        return await super()._observe(ignore_memory=True)

context上下文,即数据结构

python 复制代码
# 初始化 Context
context = Context()

断言

python 复制代码
assert context.git_repo is None
assert context.repo is None

2. 示例:

python 复制代码
from metagpt.schema import Message
USER_REQUIREMENT = """开发一个贪吃蛇游戏"""

user_msg = Message(role="User", content=USER_REQUIREMENT, cause_by=UserRequirement)
product_manager = ProductManager(context=context)
rsp = await product_manager.run(user_msg)

输出:

2024-12-16 21:37:30.446 | INFO     | metagpt.roles.role:_act:403 - Alice(Product Manager): to do PrepareDocuments(PrepareDocuments)
2024-12-16 21:37:31.897 | INFO     | metagpt.utils.file_repository:save:57 - save to: D:\llm\MetaGPT\workspace\20241216213730\docs\requirement.txt
2024-12-16 21:37:31.898 | INFO     | metagpt.roles.role:_act:403 - Alice(Product Manager): to do WritePRD(WritePRD)
2024-12-16 21:37:31.900 | INFO     | metagpt.actions.write_prd:run:86 - New requirement detected: 开发一个贪吃蛇游戏


[CONTENT]
{
    "Language": "en_us",
    "Programming Language": "Python",
    "Original Requirements": "开发一个贪吃蛇游戏",
    "Project Name": "snake_game",
    "Product Goals": [
        "Create an engaging and intuitive user experience",
        "Ensure the game is scalable and performs well on various devices",
        "Implement a high-quality UI/UX design"
    ],
    "User Stories": [
        "As a player, I want to easily navigate the game controls to play the game",
        "As a player, I want to see my score and high scores displayed clearly on the screen",
        "As a player, I want the ability to pause and resume the game at any time",
        "As a player, I want to have the option to restart the game from the beginning",
        "As a player, I want the game to be visually appealing and responsive on different screen sizes"
    ],
    "Competitive Analysis": [
        "Snake Game A: Basic gameplay, lacks advanced features and customization",
        "Snake Game B: Offers a variety of themes and power-ups, but can be slow on older devices",
        "Snake Game C: Features a simple and clean UI, but lacks multiplayer functionality"
    ],
    "Competitive Quadrant Chart": "quadrantChart\n    title \"Performance and User Engagement\"\n    x-axis \"Low Performance\" --> \"High Performance\"\n    y-axis \"Low Engagement\" --> \"High Engagement\"\n    quadrant-1 \"We should expand\"\n    quadrant-2 \"Need to promote\"\n    quadrant-3 \"Re-evaluate\"\n    quadrant-4 \"May be improved\"\n    \"Game A\": [0.2, 0.4]\n    \"Game B\": [0.5, 0.6]\n    \"Game C\": [0.3, 0.5]\n    \"Our Target Product\": [0.7, 0.7]",
    "Requirement Analysis": "The game should be designed to be accessible to players of all skill levels, with a focus on ease of use and a high-quality visual experience. The game should also be optimized for performance on a range of devices, from low-end to high-end.",
    "Requirement Pool": [
        [
            "P0",
            "Develop the core gameplay logic for the snake movement and food generation"
        ],
        [
            "P0",
            "Implement a user-friendly interface with clear score tracking and game controls"
        ],
        [
            "P1",
            "Add features such as pause, resume, and restart functionality"
        ],
        [
            "P1",
            "Optimize the game for performance on various devices"
        ],
        [
            "P2",
            "Design and implement a high-quality UI/UX"
        ]
    ],
    "UI Design draft": "A simple and intuitive UI with a clear score display, easy-to-use controls, and a responsive design that adapts to different screen sizes.",
    "Anything UNCLEAR": "It is unclear whether there are specific design preferences or branding requirements for the game."
}
[/CONTENT]

2024-12-16 21:37:53.890 | WARNING  | metagpt.utils.cost_manager:update_cost:49 - Model GLM-4-flash not found in TOKEN_COSTS.
2024-12-16 21:37:53.951 | WARNING  | metagpt.utils.git_repository:rename_root:214 - Move D:\llm\MetaGPT\workspace\20241216213730 to D:\llm\MetaGPT\workspace\snake_game error: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'D:\\llm\\MetaGPT\\workspace\\20241216213730'
2024-12-16 21:37:53.952 | INFO     | metagpt.utils.git_repository:rename_root:219 - Rename directory D:\llm\MetaGPT\workspace\20241216213730 to D:\llm\MetaGPT\workspace\snake_game

2024-12-16 21:37:54.134 | INFO     | metagpt.utils.file_repository:save:57 - save to: D:\llm\MetaGPT\workspace\snake_game\docs\prd\20241216213754.json
2024-12-16 21:37:54.191 | WARNING  | metagpt.utils.mermaid:mermaid_to_file:35 - RUN `npm install -g @mermaid-js/mermaid-cli` to install mmdc,or consider changing engine to `playwright`, `pyppeteer`, or `ink`.
2024-12-16 21:37:54.193 | INFO     | metagpt.utils.file_repository:save:57 - save to: D:\llm\MetaGPT\workspace\snake_game\resources\prd\20241216213754.md

解释:

  • 根据用户消息生成项目结构,并在requirement文件中添加用户消息

  • 在项目结构的prd文件中添加内容

python 复制代码
print(rsp)
Alice(Product Manager): {'docs': {'20241216213754.json': {'root_path': 'docs\\prd', 'filename': '20241216213754.json', 'content': '{"Language":"en_us","Programming Language":"Python","Original Requirements":"开发一个贪吃蛇游戏","Project Name":"snake_game","Product Goals":["Create an engaging and intuitive user experience","Ensure the game is scalable and performs well on various devices","Implement a high-quality UI/UX design"],"User Stories":["As a player, I want to easily navigate the game controls to play the game","As a player, I want to see my score and high scores displayed clearly on the screen","As a player, I want the ability to pause and resume the game at any time","As a player, I want to have the option to restart the game from the beginning","As a player, I want the game to be visually appealing and responsive on different screen sizes"],"Competitive Analysis":["Snake Game A: Basic gameplay, lacks advanced features and customization","Snake Game B: Offers a variety of themes and power-ups, but can be slow on older devices","Snake Game C: Features a simple and clean UI, but lacks multiplayer functionality"],"Competitive Quadrant Chart":"quadrantChart\\n    title \\"Performance and User Engagement\\"\\n    x-axis \\"Low Performance\\" --> \\"High Performance\\"\\n    y-axis \\"Low Engagement\\" --> \\"High Engagement\\"\\n    quadrant-1 \\"We should expand\\"\\n    quadrant-2 \\"Need to promote\\"\\n    quadrant-3 \\"Re-evaluate\\"\\n    quadrant-4 \\"May be improved\\"\\n    \\"Game A\\": [0.2, 0.4]\\n    \\"Game B\\": [0.5, 0.6]\\n    \\"Game C\\": [0.3, 0.5]\\n    \\"Our Target Product\\": [0.7, 0.7]","Requirement Analysis":"The game should be designed to be accessible to players of all skill levels, with a focus on ease of use and a high-quality visual experience. The game should also be optimized for performance on a range of devices, from low-end to high-end.","Requirement Pool":[["P0","Develop the core gameplay logic for the snake movement and food generation"],["P0","Implement a user-friendly interface with clear score tracking and game controls"],["P1","Add features such as pause, resume, and restart functionality"],["P1","Optimize the game for performance on various devices"],["P2","Design and implement a high-quality UI/UX"]],"UI Design draft":"A simple and intuitive UI with a clear score display, easy-to-use controls, and a responsive design that adapts to different screen sizes.","Anything UNCLEAR":"It is unclear whether there are specific design preferences or branding requirements for the game."}'}}}

3. 代码解释

ProductManager(产品经理)角色类,继承自 Role 类,主要用于模拟产品经理在一个工作流中的行为,尤其是在产品开发过程中。

以下是对代码的逐部分解释:

类 ProductManager 说明

ProductManager 代表一个产品经理角色,负责产品开发和管理。

类中定义了几个主要属性:name、profile、goal 和 constraints,用来描述产品经理的基本信息和角色目标。

属性

  • name: str = "Alice":定义了产品经理的名字为 Alice。
  • profile: str = "Product Manager":定义了角色的身份为"产品经理"。
  • goal: str = "efficiently create a successful product that meets market demands and user expectations":定义了产品经理的目标,即"有效地创建一个符合市场需求和用户期望的成功产品"。
  • constraints: str = "utilize the same language as the user requirements for seamless communication":定义了产品经理的约束条件,即"使用与用户需求一致的语言进行无缝沟通"。
  • todo_action: str = "":初始化了待执行的任务动作为空字符串。

init 方法

该方法初始化 ProductManager 类的实例。

  • super().init(**kwargs):调用父类 Role 的初始化方法,以确保继承的属性得到正确初始化。
  • self.set_actions([PrepareDocuments, WritePRD]):设置该角色可以执行的动作。这里设置了两个动作,分别是 PrepareDocuments(准备文档)和 WritePRD(撰写产品需求文档)。
  • self._watch([UserRequirement, PrepareDocuments]):使角色"观察" UserRequirement 和 PrepareDocuments 这两个事件或动作。观察是为了跟踪某些条件或状态的变化。
  • self.rc.react_mode = RoleReactMode.BY_ORDER:设置角色的反应模式为"按顺序反应",意味着角色将按照顺序执行动作。
  • self.todo_action = any_to_name(WritePRD):将 WritePRD 动作的名称赋值给 todo_action,可能是为了后续跟踪或执行。

async def _observe(self, ignore_memory=False) -> int 方法

  • 这是一个异步方法,用于观察并执行某些操作。该方法通过调用父类的 _observe 方法来实现观察,并返回一个整数值,表示观察结果。ignore_memory 参数默认设置为 False,表示是否忽略记忆。
相关推荐
佛州小李哥2 小时前
在亚马逊云科技上高效蒸馏低成本、高精度的Llama 3.1 405B模型(上篇)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技
qq_513398983 小时前
深度学习学习笔记(第30周)
人工智能·深度学习
殷丿grd_志鹏3 小时前
SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——主目录(持续更新)
vue.js·人工智能·python·spring cloud·fastapi
L-含光承影6 小时前
【第二十周】U-Net:用于生物图像分割的卷积神经网络
人工智能·神经网络·cnn
--fancy6 小时前
提示词的艺术----AI Prompt撰写指南(个人用)
人工智能·chatgpt·prompt
视觉语言导航7 小时前
IJCAI-2024 | 具身导航的花样Prompts!VLN-MP:利用多模态Prompts增强视觉语言导航能力
人工智能·深度学习·具身智能
bohu837 小时前
opencv笔记2
人工智能·笔记·opencv
万事可爱^7 小时前
算法入门(九)—— 无监督学习介绍与K-Means实战(内附Kaggle实战源码与数据集)
人工智能·学习·算法·机器学习·kmeans
董董灿是个攻城狮8 小时前
019:什么是 Resnet50 神经网络
人工智能·计算机视觉·cnn
Allen200008 小时前
wow-agent---task2使用llama-index创建Agent
人工智能·llama