MetaGPT
MetaGPT copied to clipboard
忽略用户需求,转而产出game.py
Bug description 提出一个中等复杂的需求,无法产出对应需求,metagpt中间出现错误(warning或者error)后会转向输出game.py,main.py。
Bug solved method
我个人认为可能比较有用的信息:
- C:\project\MetaGPT\workspace\video_search\resources\data_api_design\20240221092626
信息: 用提供的模式无法找到文件。 - 2024-02-21 09:26:26.482 | WARNING | metagpt.utils.git_repository:rename_root:214 - Move C:\project\MetaGPT\workspace\20240221092607 to C:\project\MetaGPT\workspace\video_search error: [WinError 32] 另 一个程序正在使用此文件,进程无法访问。: 'C:\project\MetaGPT\workspace\20240221092607'(这个问题我用管理者模式启动pycharm或者删除生成的项目文件夹也不能避免,不过不是每次都会出现,在我初次调用是成功过一次,后面就再也没成功过了)
Environment information
- LLM type and model name:gemini
- System version:win10+metagpt 0.7
- Python version:3.11.8
- packages version:按照requirements安装
- installation method:git clone,然后以开发者模式install
Screenshots or logs
(MetaGPT_ENV) PS C:\project\MetaGPT> metagpt "Please help me complete a project, which is divided into front-end and back-end. The front-end uses the Vue framework, and the back-end uses java+springboo
t+springmvc+mybatis plus+mysql. Please carefully analyze the requirements and implement each function. The project requirements are as follows:{'Video Search ': {'Background Management End': {'Persona
l Center ': {'Login': {'Method ':' User Name+Password Login '},' Password Management ': {'Function ': ['Forgot Password ',' Send Verification Code to Modify via Email ',' Change Password '},' Logout ':
{}},' Permission Management System ': {'General Permission Management System': {}}, 'Attendance Ma nagement': {'Attendance Personnel Management ': {'Function': 'Add, Delete, Change'}, 'Attendance Reco
rds': {},' Attendance Machine Management ': {'Function': ['On ',' Off ']}, 'Personnel Search': {'Onl ine Personnel Monitoring ': {'Function': ['Single person monitoring ',' Multi person monitoring ','
View historical images']}, 'Offline Search': {'Function ':' Access videos and personnel images, batch search for the location of personnel in the video '},' Priority Implementation ': 2},' Congestion
Monitoring ': {'Online Video': {'Function ': ['Monitor traffic lights',' Monitor intersection vehicle conditions']}, 'Notification': {'Method ': ['Email', 'Topic', 'SMS',' Notification Strategy ']}, '
Call algorithm platform interface': {}}, 'Big screen, cockpit': {}, 'Data access': {' Bottom layer data access': {'Collected by': 'edge computing', 'Data': {'Video data': {'Type': 'Real time data'}, '
Other data': {}}}, 'Big data': {}}}"
2024-02-21 09:26:00.055 | INFO | metagpt.const:get_metagpt_package_root:29 - Package root set to c:\project\metagpt
2024-02-21 09:26:07.075 | INFO | metagpt.team:invest:90 - Investment: $3.0.
2024-02-21 09:26:07.084 | INFO | metagpt.roles.role:_act:399 - Alice(Product Manager): to do PrepareDocuments(PrepareDocuments)
2024-02-21 09:26:07.512 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\20240221092607\docs\requirement.txt
2024-02-21 09:26:07.520 | INFO | metagpt.roles.role:_act:399 - Alice(Product Manager): to do WritePRD(WritePRD)
2024-02-21 09:26:07.527 | INFO | metagpt.actions.write_prd:run:86 - New requirement detected: Please help me complete a project, which is divided into front-end and back-end. The front-end uses the
Vue framework, and the back-end uses java+springboot+springmvc+mybatis plus+mysql. Please carefully analyze the requirements and implement each function. The project requirements are as follows:{'Vid
eo Search ': {'Background Management End': {'Personal Center ': {'Login': {'Method ':' User Name+Password Login '},' Password Management ': {'Function ': ['Forgot Password ',' Send Verification Code to
Modify via Email ',' Change Password '},' Logout ': {}},' Permission Management System ': {'General Permission Management System': {}}, 'Attendance Ma nagement': {'Attendance Personnel Management ': {
'Function': 'Add, Delete, Change'}, 'Attendance Records': {},' Attendance Machine Management ': {'Function': ['On ',' Off ']}, 'Personnel Search': {'Onl ine Personnel Monitoring ': {'Function': ['Singl
e person monitoring ',' Multi person monitoring ',' View historical images']}, 'Offline Search': {'Function ':' Access videos and personnel images, batch search for the location of personnel in the vi
deo '},' Priority Implementation ': 2},' Congestion Monitoring ': {'Online Video': {'Function ': ['Monitor traffic lights',' Monitor intersection vehicle conditions']}, 'Notification': {'Method ': ['E
mail', 'Topic', 'SMS',' Notification Strategy ']}, 'Call algorithm platform interface': {}}, 'Big screen, cockpit': {}, 'Data access': {' Bottom layer data access': {'Collected by': 'edge computing',
'Data': {'Video data': {'Type': 'Real time data'}, 'Other data': {}}}, 'Big data': {}}}
[CONTENT]
{
"Language": "en_us",
"Programming Language": "Java",
"Original Requirements": "Please help me complete a project, which is divided into front-end and back-end. The front-end uses the Vue framework, and the back-end uses java+springboot+springmvc+myba
tis plus+mysql. Please carefully analyze the requirements and implement each function. The project requirements are as follows:{'Video Search ': {'Background Management End': {'Personal Center ': {'Lo
gin': {'Method ':' User Name+Password Login '},' Password Management ': {'Function ': ['Forgot Password ',' Send Verification Code to Modify via Email ',' Change Password '},' Logout ': {}},' Permissio
n Management System ': {'General Permission Management System': {}}, 'Attendance Ma nagement': {'Attendance Personnel Management ': {'Function': 'Add, Delete, Change'}, 'Attendance Records': {},' Atten
dance Machine Management ': {'Function': ['On ',' Off ']}, 'Personnel Search': {'Onl ine Personnel Monitoring ': {'Function': ['Single person monitoring ',' Multi person monitoring ',' View historical
images']}, 'Offline Search': {'Function ':' Access videos and personnel images, batch search for the location of personnel in the video '},' Priority Implementation ': 2},' Congestion Monitoring ': {'
Online Video': {'Function ': ['Monitor traffic lights',' Monitor intersection vehicle conditions']}, 'Notification': {'Method ': ['Email', 'Topic', 'SMS',' Notification Strategy ']}, 'Call algorithm p
latform interface': {}}, 'Big screen, cockpit': {}, 'Data access': {' Bottom layer data access': {'Collected by': 'edge computing', 'Data': {'Video data': {'Type': 'Real time data'}, 'Other data': {}}
}, 'Big data': {}}}",
"Project Name": "video_search",
"Product Goals": [
"Provide a comprehensive video search solution",
"Enhance security and access control",
"Improve operational efficiency"
],
"User Stories": [
"As a user, I want to be able to search for videos by multiple criteria",
"As a user, I want to be able to manage my personal information and permissions",
"As a user, I want to be able to monitor personnel and traffic conditions in real-time",
"As a user, I want to be able to receive notifications when there are important events",
"As a user, I want to be able to access data from multiple sources"
],
"Competitive Analysis": [
"Product A: Provides basic video search functionality, but lacks advanced features",
"Product B: Offers more advanced features, but is more expensive and complex to use",
"Product C: Focuses on security and access control, but has limited video search capabilities"
],
"Competitive Quadrant Chart": "quadrantChart\n title "Reach and engagement of campaigns"\n x-axis "Low Reach" --> "High Reach"\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 "Campaign A": [0.3, 0.6]\n "Campaign B": [0.45, 0.2
3]\n "Campaign C": [0.57, 0.69]\n "Campaign D": [0.78, 0.34]\n "Campaign E": [0.40, 0.34]\n "Campaign F": [0.35, 0.78]\n "Our Target Product": [0.5, 0.6]",
"Requirement Analysis": "The project requirements are comprehensive and cover a wide range of functionality. The system should be able to search for videos by multiple criteria, manage user permiss
ions, monitor personnel and traffic conditions in real-time, send notifications, and access data from multiple sources. The system should also be secure and easy to use.",
"Requirement Pool": [
[
"P0",
"Implement basic video search functionality"
],
[
"P1",
"Implement advanced video search features"
],
[
"P2",
"Implement user management and permission control"
],
[
"P3",
"Implement real-time monitoring of personnel and traffic conditions"
],
[
"P4",
"Implement notification system"
],
[
"P5",
"Implement data access from multiple sources"
]
],
"UI Design draft": "The UI should be clean and easy to use. The main features should be easily accessible from the home page. The search bar should be prominent and allow users to search for videos
by multiple criteria. The results page should display the videos in a clear and concise manner. The user management and permission control pages should be easy to navigate and allow administrators to
manage users and permissions effectively. The real-time monitoring page should display the personnel and traffic conditions in a clear and concise manner. The notification system should be easy to conf
igure and use.",
"Anything UNCLEAR": "There are no unclear aspects of the project requirements."
}
[/CONTENT]
2024-02-21 09:26:26.258 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.001 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 1312, completion_tokens: 1155
2024-02-21 09:26:26.272 | INFO | metagpt.utils.git_repository:rename_root:203 - Delete directory C:\project\MetaGPT\workspace\video_search
2024-02-21 09:26:26.482 | WARNING | metagpt.utils.git_repository:rename_root:214 - Move C:\project\MetaGPT\workspace\20240221092607 to C:\project\MetaGPT\workspace\video_search error: [WinError 32] 另
一个程序正在使用此文件,进程无法访问。: 'C:\project\MetaGPT\workspace\20240221092607'
2024-02-21 09:26:26.483 | INFO | metagpt.utils.git_repository:rename_root:219 - Rename directory C:\project\MetaGPT\workspace\20240221092607 to C:\project\MetaGPT\workspace\video_search
2024-02-21 09:26:26.847 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\video_search\docs\prd\20240221092626.json
信息: 用提供的模式无法找到文件。
2024-02-21 09:26:27.039 | WARNING | metagpt.utils.mermaid:mermaid_to_file:39 - RUN npm install -g @mermaid-js/mermaid-cli to install mmdc,or consider changing engine to playwright, pyppeteer, or
ink.
2024-02-21 09:26:27.044 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\video_search\resources\prd\20240221092626.md
2024-02-21 09:26:27.050 | INFO | metagpt.roles.role:_act:399 - Bob(Architect): to do WriteDesign(WriteDesign)
[CONTENT]
{
"Implementation approach": "We will use the Vue framework for the front-end and the Java+springboot+springmvc+mybatis plus+mysql stack for the back-end. We will use a modular approach to developmen
t, with each module responsible for a specific set of functionality. This will make it easier to maintain and update the system in the future.",
"File list": [
"main.py",
"game.py"
],
"Data structures and interfaces": "\nclassDiagram\n class User {\n - username: str\n - password: str\n - email: str\n - permissions: list\n +login()\n +
logout()\n +change_password()\n +reset_password()\n }\n class Permission {\n - name: str\n - description: str\n +check()\n }\n class Role {\n - nam
e: str\n - description: str\n - permissions: list\n +assign()\n +revoke()\n }\n class Attendance {\n - date: date\n - time: time\n - location: str
\n - employee: User\n +check_in()\n +check_out()\n }\n class Congestion {\n - date: date\n - time: time\n - location: str\n - severity: int\n
+report()\n }\n class Notification {\n - type: str\n - message: str\n - recipient: User\n +send()\n }\n class Video {\n - id: int\n - title: str
\n - description: str\n - url: str\n - tags: list\n +search()\n +view()\n +download()\n }\n class SearchEngine {\n - index: Index\n - ranki
ng: Ranking\n - summary: Summary\n +search(query: str) list\n }\n class Index {\n - data: dict\n +create_index(data: dict)\n +query_index(query: str) list\n
}\n class Ranking {\n +rank_results(results: list) list\n }\n class Summary {\n +summarize_results(results: list) str\n }\n User --> Attendance\n User --> Congestion\n
User --> Notification\n User --> Video\n SearchEngine --> Index\n SearchEngine --> Ranking\n SearchEngine --> Summary\n",
"Program call flow": "\nsequenceDiagram\n participant M as Main\n participant SE as SearchEngine\n participant I as Index\n participant R as Ranking\n participant S as Summary\n M
->>SE: search(query)\n SE->>I: query_index(query)\n I->>SE: return results\n SE->>R: rank_results(results)\n R-->>SE: return ranked_results\n SE->>S: summarize_results(ranked_results)\n
S-->>SE: return summary\n SE-->>M: return summary\n",
"Anything UNCLEAR": "Clarification needed on third-party API integration, ..."
}
[/CONTENT]
2024-02-21 09:26:49.444 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.001 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 1741, completion_tokens: 766
2024-02-21 09:26:49.453 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\video_search\docs\system_design\20240221092626.json
2024-02-21 09:26:49.458 | INFO | metagpt.utils.file_repository:save:65 - update dependency: C:\project\MetaGPT\workspace\video_search\docs\system_design\20240221092626.json:{'docs\prd\20240221092
626.json'}
信息: 用提供的模式无法找到文件。
2024-02-21 09:26:49.627 | WARNING | metagpt.utils.mermaid:mermaid_to_file:39 - RUN npm install -g @mermaid-js/mermaid-cli to install mmdc,or consider changing engine to playwright, pyppeteer, or
ink.
2024-02-21 09:26:49.629 | INFO | metagpt.actions.design_api:_save_data_api_design:107 - Save class view to C:\project\MetaGPT\workspace\video_search\resources\data_api_design\20240221092626
信息: 用提供的模式无法找到文件。
2024-02-21 09:26:49.808 | WARNING | metagpt.utils.mermaid:mermaid_to_file:39 - RUN npm install -g @mermaid-js/mermaid-cli to install mmdc,or consider changing engine to playwright, pyppeteer, or
ink.
2024-02-21 09:26:49.811 | INFO | metagpt.actions.design_api:_save_seq_flow:116 - Saving sequence flow to C:\project\MetaGPT\workspace\video_search\resources\seq_flow\20240221092626
2024-02-21 09:26:49.816 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\video_search\resources\system_design\20240221092626.md
2024-02-21 09:26:49.820 | INFO | metagpt.roles.role:_act:399 - Eve(Project Manager): to do WriteTasks(WriteTasks)
[CONTENT]
{
"Required Python packages": [
"flask==1.1.2",
"bcrypt==3.2.0"
],
"Required Other language third-party packages": [
"No third-party dependencies required"
],
"Logic Analysis": [
[
"game.py",
"Contains Game class and ... functions"
],
[
"main.py",
"Contains main function, from game import Game"
]
],
"Task list": [
"game.py",
"main.py"
],
"Shared Knowledge": "game.py contains functions shared across the project.",
"Anything UNCLEAR": "Clarification needed on how to start and initialize third-party libraries."
}
[/CONTENT]
2024-02-21 09:26:55.292 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.000 | Max budget: $10.000 | Current cost: $0.000, prompt_tokens: 1244, completion_tokens: 192
2024-02-21 09:26:55.300 | ERROR | metagpt.utils.common:log_it:476 - Finished call to 'metagpt.actions.action_node.ActionNode._aask_v1' after 5.110(s), this was the 1st time calling it. exp: 1 valida
tion error for PM_NODE_AN
Value error, Missing fields: {'Full API spec'} [type=value_error, input_value={'Required Python package...third-party libraries.'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.5/v/value_error
[CONTENT]
{
"Required Python packages": [],
"Required Other language third-party packages": [],
"Logic Analysis": [
[
"main.py",
"Contains main function, from game import Game"
],
[
"game.py",
"Contains Game class and ... functions"
]
],
"Task list": [
"main.py",
"game.py"
],
"Full API spec": "No API spec required",
"Shared Knowledge": "game.py contains functions shared across the project.",
"Anything UNCLEAR": "Clarification needed on how to start and initialize third-party libraries."
}
[/CONTENT]
2024-02-21 09:27:00.834 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.001 | Max budget: $10.000 | Current cost: $0.000, prompt_tokens: 1244, completion_tokens: 167
2024-02-21 09:27:00.846 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\video_search\docs\task\20240221092626.json
2024-02-21 09:27:00.852 | INFO | metagpt.utils.file_repository:save:65 - update dependency: C:\project\MetaGPT\workspace\video_search\docs\task\20240221092626.json:{'docs\system_design\2024022109
2626.json'}
2024-02-21 09:27:00.855 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\video_search\requirements.txt
2024-02-21 09:27:01.330 | INFO | metagpt.actions.write_code:run:147 - Writing main.py..
Code: main.py
from game import Game
def main():
"""
Main function.
"""
# Create a new game.
game = Game()
# Start the game.
game.start()
if __name__ == "__main__":
main()
2024-02-21 09:27:07.416 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.000 | Max budget: $10.000 | Current cost: $0.000, prompt_tokens: 1201, completion_tokens: 72 2024-02-21 09:27:07.420 | INFO | metagpt.actions.write_code_review:run:183 - Code review and rewrite main.py: 1/2 | len(iterative_code)=193, len(self.i_context.code_doc.content)=193
Code Review: main.py
- Yes.
- Yes.
- Yes.
- Yes.
- Yes.
- Yes.
Actions
pass
Code Review Result
LGTM
2024-02-21 09:27:11.272 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.001 | Max budget: $10.000 | Current cost: $0.000, prompt_tokens: 1654, completion_tokens: 51
2024-02-21 09:27:11.284 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\video_search\video_search\main.py
2024-02-21 09:27:11.289 | INFO | metagpt.utils.file_repository:save:65 - update dependency: C:\project\MetaGPT\workspace\video_search\video_search\main.py:{'docs\system_design\20240221092626.json
', 'docs\task\20240221092626.json'}
2024-02-21 09:27:11.293 | INFO | metagpt.actions.write_code:run:147 - Writing game.py..
,
2024-02-21 09:27:14.455 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.001 | Max budget: $10.000 | Current cost: $0.000, prompt_tokens: 1201, completion_tokens: 2
2024-02-21 09:27:14.458 | ERROR | metagpt.utils.common:parse_code:280 - .*?\s+(.*?) not match following text:
2024-02-21 09:27:14.459 | ERROR | metagpt.utils.common:parse_code:281 - ,
2024-02-21 09:27:14.462 | INFO | metagpt.actions.write_code_review:run:183 - Code review and rewrite game.py: 1/2 | len(iterative_code)=1, len(self.i_context.code_doc.content)=1
Code Review: game.py
- The code is not implemented as per the requirements. The
handle_eventsmethod should update the game state only if a move is successful.def handle_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: return False if event.type == pygame.KEYDOWN: moved = False if event.key == pygame.K_UP: moved = self.game.move('UP') elif event.key == pygame.K_DOWN: moved = self.game.move('DOWN') elif event.key == pygame.K_LEFT: moved = self.game.move('LEFT') elif event.key == pygame.K_RIGHT: moved = self.game.move('RIGHT') if moved: # Update the game state only if a move was successful self.render() return True - The code logic is not completely correct. The
movefunction is not implemented.def move(self, direction): # Implement the move logic here pass - The existing code does not follow the "Data structures and interfaces". The
Gameclass should have amovemethod that takes a direction as an argument and returns a boolean indicating whether th e move was successful. - The
movefunction is not implemented. - All necessary pre-dependencies have been imported.
- Methods from other files are not being reused.
Actions
- Implement the
movefunction in theGameclass. - Update the
handle_eventsmethod to update the game state only if a move is successful.
Code Review Result
LBTM 2024-02-21 09:27:24.155 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.002 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 1596, completion_tokens: 407
Rewrite Code: game.py
import pygame
class Game:
def __init__(self):
self.game_state = ... # Initialize the game state here
def move(self, direction):
# Implement the move logic here
# Return True if the move was successful, False otherwise
pass
def render(self):
# Implement the rendering logic here
pass
class GameEngine:
def __init__(self):
self.game = Game()
def handle_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
return False
if event.type == pygame.KEYDOWN:
moved = False
if event.key == pygame.K_UP:
moved = self.game.move('UP')
elif event.key == pygame.K_DOWN:
moved = self.game.move('DOWN')
elif event.key == pygame.K_LEFT:
moved = self.game.move('LEFT')
elif event.key == pygame.K_RIGHT:
moved = self.game.move('RIGHT')
if moved:
# Update the game state only if a move was successful
self.game.render()
return True
def run(self):
while self.handle_events():
# Update the game logic here
pass
if __name__ == '__main__':
engine = GameEngine()
engine.run()
2024-02-21 09:27:31.668 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.002 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 1466, completion_tokens: 347 2024-02-21 09:27:31.670 | INFO | metagpt.actions.write_code_review:run:183 - Code review and rewrite game.py: 2/2 | len(iterative_code)=1374, len(self.i_context.code_doc.content)=1
Code Review: Ordered List. Based on the "Code to be Reviewed", provide key, clear, concise, and specific answer. If any answer is no, explain how to fix it step by step.
- Yes.
- Yes.
- Yes.
- Yes.
- Yes.
- Yes.
Actions: Ordered List. Things that should be done after CR, such as implementing class A and function B
Code Review Result: str. If the code doesn't have bugs, we don't need to rewrite it, so answer LGTM and stop. ONLY ANSWER LGTM/LBTM.
LGTM 2024-02-21 09:27:36.275 | INFO | metagpt.utils.cost_manager:update_cost:52 - Total running cost: $0.003 | Max budget: $10.000 | Current cost: $0.001, prompt_tokens: 1928, completion_tokens: 141 2024-02-21 09:27:36.287 | INFO | metagpt.utils.file_repository:save:60 - save to: C:\project\MetaGPT\workspace\video_search\video_search\game.py 2024-02-21 09:27:36.292 | INFO | metagpt.utils.file_repository:save:65 - update dependency: C:\project\MetaGPT\workspace\video_search\video_search\game.py:{'docs\system_design\20240221092626.json ', 'docs\task\20240221092626.json'} 2024-02-21 09:27:36.497 | INFO | metagpt.utils.git_repository:archive:168 - Archive: ['.dependencies.json', 'docs/prd/20240221092626.json', 'docs/requirement.txt', 'docs/system_design/2024022109262 6.json', 'docs/task/20240221092626.json', 'requirements.txt', 'resources/competitive_analysis/20240221092626.mmd', 'resources/data_api_design/20240221092626.mmd', 'resources/prd/20240221092626.md', 're sources/seq_flow/20240221092626.mmd', 'resources/system_design/20240221092626.md', 'video_search/game.py', 'video_search/main.py']
2024-02-21 09:26:26.482 | WARNING | metagpt.utils.git_repository:rename_root:214 - Move C:\project\MetaGPT\workspace\20240221092607 to C:\project\MetaGPT\workspace\video_search error: [WinError 32] 另
一个程序正在使用此文件,进程无法访问。: 'C:\project\MetaGPT\workspace\20240221092607'
Windows下此处的异常只会导致C:\project\MetaGPT\workspace\20240221092607残留,不会影响C:\project\MetaGPT\workspace\video_search的生成。这是python mv windows文件夹已知的问题。你可以用过metagpt --project-name参数类绕过这个问题,人为指定project name可绕过这个rename操作。
2024-02-21 09:26:27.050 | INFO | metagpt.roles.role:_act:399 - Bob(Architect): to do WriteDesign(WriteDesign)
[CONTENT]
{
"Implementation approach": "We will use the Vue framework for the front-end and the Java+springboot+springmvc+mybatis plus+mysql stack for the back-end. We will use a modular approach to developmen
t, with each module responsible for a specific set of functionality. This will make it easier to maintain and update the system in the future.",
"File list": [
"main.py",
"game.py"
],
"Data structures and interfaces": "\nclassDiagram\n class User {\n - username: str\n - password: str\n - email: str\n - permissions: list\n +login()\n +
logout()\n +change_password()\n +reset_password()\n }\n class Permission {\n - name: str\n - description: str\n +check()\n }\n class Role {\n - nam
e: str\n - description: str\n - permissions: list\n +assign()\n +revoke()\n }\n class Attendance {\n - date: date\n - time: time\n - location: str
\n - employee: User\n +check_in()\n +check_out()\n }\n class Congestion {\n - date: date\n - time: time\n - location: str\n - severity: int\n
+report()\n }\n class Notification {\n - type: str\n - message: str\n - recipient: User\n +send()\n }\n class Video {\n - id: int\n - title: str
\n - description: str\n - url: str\n - tags: list\n +search()\n +view()\n +download()\n }\n class SearchEngine {\n - index: Index\n - ranki
ng: Ranking\n - summary: Summary\n +search(query: str) list\n }\n class Index {\n - data: dict\n +create_index(data: dict)\n +query_index(query: str) list\n
}\n class Ranking {\n +rank_results(results: list) list\n }\n class Summary {\n +summarize_results(results: list) str\n }\n User --> Attendance\n User --> Congestion\n
User --> Notification\n User --> Video\n SearchEngine --> Index\n SearchEngine --> Ranking\n SearchEngine --> Summary\n",
"Program call flow": "\nsequenceDiagram\n participant M as Main\n participant SE as SearchEngine\n participant I as Index\n participant R as Ranking\n participant S as Summary\n M
->>SE: search(query)\n SE->>I: query_index(query)\n I->>SE: return results\n SE->>R: rank_results(results)\n R-->>SE: return ranked_results\n SE->>S: summarize_results(ranked_results)\n
S-->>SE: return summary\n SE-->>M: return summary\n",
"Anything UNCLEAR": "Clarification needed on third-party API integration, ..."
}
[/CONTENT]
从上面的日志看,类视图和时序图都已经正常的生成,而且类视图与时序图是配套的。
{
"Implementation approach": "We will use the Vue framework for the front-end and the Java+springboot+springmvc+mybatis plus+mysql stack for the back-end. We will use a modular approach to development, with each module responsible for a specific set of functionality. This will make it easier to maintain and update the system in the future.",
"File list": [
"main.py",
"game.py"
],
"Data structures and interfaces": "\nclassDiagram\n class User {\n - username: str\n - password: str\n - email: str\n - permissions: list\n +login()\n +logout()\n +change_password()\n +reset_password()\n }\n class Permission {\n - name: str\n - description: str\n +check()\n }\n class Role {\n - name: str\n - description: str\n - permissions: list\n +assign()\n +revoke()\n }\n class Attendance {\n - date: date\n - time: time\n - location: str\n - employee: User\n +check_in()\n +check_out()\n }\n class Congestion {\n - date: date\n - time: time\n - location: str\n - severity: int\n+report()\n }\n class Notification {\n - type: str\n - message: str\n - recipient: User\n +send()\n }\n class Video {\n - id: int\n - title: str\n - description: str\n - url: str\n - tags: list\n +search()\n +view()\n +download()\n }\n class SearchEngine {\n - index: Index\n - ranking: Ranking\n - summary: Summary\n +search(query: str) list\n }\n class Index {\n - data: dict\n +create_index(data: dict)\n +query_index(query: str) list\n}\n class Ranking {\n +rank_results(results: list) list\n }\n class Summary {\n +summarize_results(results: list) str\n }\n User --> Attendance\n User --> Congestion\nUser --> Notification\n User --> Video\n SearchEngine --> Index\n SearchEngine --> Ranking\n SearchEngine --> Summary\n",
"Program call flow": "\nsequenceDiagram\n participant M as Main\n participant SE as SearchEngine\n participant I as Index\n participant R as Ranking\n participant S as Summary\n M->>SE: search(query)\n SE->>I: query_index(query)\n I->>SE: return results\n SE->>R: rank_results(results)\n R-->>SE: return ranked_results\n SE->>S: summarize_results(ranked_results)\nS-->>SE: return summary\n SE-->>M: return summary\n",
"Anything UNCLEAR": "Clarification needed on third-party API integration, ..."
}
classDiagram
class User {
- username: str
- password: str
- email: str
- permissions: list
+login()
+logout()
+change_password()
+reset_password()
}
class Permission {
- name: str
- description: str
+check()
}
class Role {
- name: str
- description: str
- permissions: list
+assign()
+revoke()
}
class Attendance {
- date: date
- time: time
- location: str
- employee: User
+check_in()
+check_out()
}
class Congestion {
- date: date
- time: time
- location: str
- severity: int
+report()
}
class Notification {
- type: str
- message: str
- recipient: User
+send()
}
class Video {
- id: int
- title: str
- description: str
- url: str
- tags: list
+search()
+view()
+download()
}
class SearchEngine {
- index: Index
- ranking: Ranking
- summary: Summary
+search(query: str) list
}
class Index {
- data: dict
+create_index(data: dict)
+query_index(query: str) list
}
class Ranking {
+rank_results(results: list) list
}
class Summary {
+summarize_results(results: list) str
}
User --> Attendance
User --> Congestion
User --> Notification
User --> Video
SearchEngine --> Index
SearchEngine --> Ranking
SearchEngine --> Summary
sequenceDiagram
participant M as Main
participant SE as SearchEngine
participant I as Index
participant R as Ranking
participant S as Summary
M->>SE: search(query)
SE->>I: query_index(query)
I->>SE: return results
SE->>R: rank_results(results)
R-->>SE: return ranked_results
SE->>S: summarize_results(ranked_results)
S-->>SE: return summary
SE-->>M: return summary
所以,真正的问题是File list的内容出错了。
LLM错误的将metagpt/actions/design_api_an.py中的示例作为回答填到了File list里:
FILE_LIST = ActionNode(
key="File list",
expected_type=List[str],
instruction="Only need relative paths. ALWAYS write a main.py or app.py here",
example=["main.py", "game.py"],
)
到了WriteTask阶段,大模型在抄示例的路上越走越远。
2024-02-21 09:26:49.820 | INFO | metagpt.roles.role:_act:399 - Eve(Project Manager): to do WriteTasks(WriteTasks)
[CONTENT]
{
"Required Python packages": [
"flask==1.1.2",
"bcrypt==3.2.0"
],
"Required Other language third-party packages": [
"No third-party dependencies required"
],
"Logic Analysis": [
[
"game.py",
"Contains Game class and ... functions"
],
[
"main.py",
"Contains main function, from game import Game"
]
],
"Task list": [
"game.py",
"main.py"
],
"Shared Knowledge": "game.py contains functions shared across the project.",
"Anything UNCLEAR": "Clarification needed on how to start and initialize third-party libraries."
}
[/CONTENT]
几乎是在照搬metagpt/actions/project_management_an.py示例部分的内容:
REQUIRED_PYTHON_PACKAGES = ActionNode(
key="Required Python packages",
expected_type=List[str],
instruction="Provide required Python packages in requirements.txt format.",
example=["flask==1.1.2", "bcrypt==3.2.0"],
)
REQUIRED_OTHER_LANGUAGE_PACKAGES = ActionNode(
key="Required Other language third-party packages",
expected_type=List[str],
instruction="List down the required packages for languages other than Python.",
example=["No third-party dependencies required"],
)
LOGIC_ANALYSIS = ActionNode(
key="Logic Analysis",
expected_type=List[List[str]],
instruction="Provide a list of files with the classes/methods/functions to be implemented, "
"including dependency analysis and imports.",
example=[
["game.py", "Contains Game class and ... functions"],
["main.py", "Contains main function, from game import Game"],
],
)
总结一下所有的问题:
- 大模型并未正确的理解输入的内容。建议换个版本或换个大模型试试。
- 另一个可能导致问题的因素是采用了类似json格式的输入参数。我没测过gemini,但openai在使用这种格式的上下文时,很容易出现被锁死在某个key-value里而丢失其他信息的现象。因此建议采用markdown格式做输入,采用json格式做输出。你可以试试看用markdown格式来描述需求,看看问题1是否会自动消失。
Please help me complete a project, which is divided into front-end and back-end. The front-end uses the Vue framework, and the back-end uses java+springboo
t+springmvc+mybatis plus+mysql. Please carefully analyze the requirements and implement each function. The project requirements are as follows:{'Video Search ': {'Background Management End': {'Persona
l Center ': {'Login': {'Method ':' User Name+Password Login '},' Password Management ': {'Function ': ['Forgot Password ',' Send Verification Code to Modify via Email ',' Change Password '},' Logout ':
{}},' Permission Management System ': {'General Permission Management System': {}}, 'Attendance Ma nagement': {'Attendance Personnel Management ': {'Function': 'Add, Delete, Change'}, 'Attendance Reco
rds': {},' Attendance Machine Management ': {'Function': ['On ',' Off ']}, 'Personnel Search': {'Onl ine Personnel Monitoring ': {'Function': ['Single person monitoring ',' Multi person monitoring ','
View historical images']}, 'Offline Search': {'Function ':' Access videos and personnel images, batch search for the location of personnel in the video '},' Priority Implementation ': 2},' Congestion
Monitoring ': {'Online Video': {'Function ': ['Monitor traffic lights',' Monitor intersection vehicle conditions']}, 'Notification': {'Method ': ['Email', 'Topic', 'SMS',' Notification Strategy ']}, '
Call algorithm platform interface': {}}, 'Big screen, cockpit': {}, 'Data access': {' Bottom layer data access': {'Collected by': 'edge computing', 'Data': {'Video data': {'Type': 'Real time data'}, '
Other data': {}}}, 'Big data': {}}}
TODO
- Prompt optimization
- Review & revise until the output meets expectations