欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 2.metagpt中的软件公司智能体 (ProductManager 角色)

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

2024/12/21 23:36:03 来源:https://blog.csdn.net/qq_41472205/article/details/144519033  浏览:    关键词:2.metagpt中的软件公司智能体 (ProductManager 角色)

1. 代码

ProductManager 类

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_nameclass 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_ORDERself.todo_action = any_to_name(WritePRD)async def _observe(self, ignore_memory=False) -> int:return await super()._observe(ignore_memory=True)

context上下文,即数据结构

# 初始化 Context
context = Context()

断言

assert context.git_repo is None
assert context.repo is None

2. 示例:

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_game2024-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文件中添加内容

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,表示是否忽略记忆。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com