mirror of
https://github.com/FoundationAgents/MetaGPT.git
synced 2026-05-10 16:22:37 +02:00
fixbug: write software framework, rfc243
This commit is contained in:
parent
5911d3ce70
commit
cf8efc9f67
8 changed files with 211 additions and 74 deletions
|
|
@ -79,11 +79,189 @@ async def extract_external_interfaces(acknowledge: str) -> str:
|
|||
return await compress_acknowledge.run(acknowledge=acknowledge)
|
||||
|
||||
|
||||
async def mock_asearch_acknowledgement(use_case_actors: str):
|
||||
return """
|
||||
## Interfaces
|
||||
- 用户登录
|
||||
- Description: 用户从小程序/微应用发起请求,需要验证用户的合法身份才能正常处理。
|
||||
- ID: 1
|
||||
- Input Parameters:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|authCode|用户临时免登授权码|String(64)|√||
|
||||
|loginTypeEnum|登录类型|String(20)|√||
|
||||
|authCorpId|用户所在企业/组织id|String(64)||微应用免登时传递|
|
||||
|app|应用标识|String(3)|√||
|
||||
- Returns:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|success|业务处理成功与否,成功true,否则false|boolean|√|只判断这个属性即可|
|
||||
|message|错误信息,可以用来提示|string|√||
|
||||
|code|返回状态码|string|√||
|
||||
|data|用户的sessionId|string|√||
|
||||
- 根据sessionId查询用户详细信息
|
||||
- Description: 查询当前用户的详细信息,如 staffId,unionId,name,avatar等信息
|
||||
- ID: 2
|
||||
- Input Parameters:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|NDA_SESSION|用户sessionId|String(64)|√||
|
||||
- Returns:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|success|业务处理成功与否,成功true,否则false|boolean|√|只判断这个属性即可|
|
||||
|message|错误信息,可以用来提示|string|√||
|
||||
|code|返回状态码|string|√||
|
||||
|data|用户的详细信息|object|√||
|
||||
|-> corpId|当前用户企业 钉钉ID(小程序端会拿不到该信息)|string|√||
|
||||
|-> corpName|当前用户企业名称(小程序端会拿不到该信息)|string|√||
|
||||
|-> staffId|员工在当前企业内的唯一标识,也称staffId(小程序端会拿不到该信息)|string|√||
|
||||
|-> unionId|员工在当前开发者企业账号范围内的唯一标识,系统生成,固定值,不会改变。|string|√||
|
||||
|-> name|当前用户的名称(小程序端会拿不到该信息)|string|√||
|
||||
|-> avatar|头像图片URL|string|√||
|
||||
- 查询国家情况描述
|
||||
- Description: 根据国家code查询国家情况描述
|
||||
- ID: 3
|
||||
- Input Parameters:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|countryCode|国家code|string|√||
|
||||
- Returns:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|success|业务处理成功true,否则false|boolean|√|只判断这个属性即可|
|
||||
|message|错误信息,可以用来提示|string|√||
|
||||
|code|返回状态码|string|√||
|
||||
|data|国家情况描述|object|√||
|
||||
|-> id|id|integer|√||
|
||||
|-> countryName|国家名称|string|√||
|
||||
|-> countryCode|国家code|string|√||
|
||||
|-> detail|产品法规分析|string|√||
|
||||
- 查询产品法规分析(法律意见详情)
|
||||
- Description: 根据国家和业务线查询产品法规分析
|
||||
- ID: 4
|
||||
- Input Parameters:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|countryCode|国家code|string|√||
|
||||
|businessCode|业务线code|string|√||
|
||||
- Returns:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|success|业务处理成功true,否则false|boolean|√|只判断这个属性即可|
|
||||
|message|错误信息,可以用来提示|string|√||
|
||||
|code|返回状态码|string|√||
|
||||
|data|法律意见详情|object|√||
|
||||
|-> id|id|integer|√||
|
||||
|-> countryName|国家名称|string|√||
|
||||
|-> countryCode|国家code|string|√||
|
||||
|-> businessLine|业务线|string|√||
|
||||
|-> businessCode|业务线code|string|√||
|
||||
|-> detail|产品法规分析|string|√||
|
||||
|-> signEntity|签约主体|string|√||
|
||||
- 查询法律意见总数
|
||||
- Description: 法律意见总数查询
|
||||
- ID: 5
|
||||
- Input Parameters:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
- Returns:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|success|业务处理成功true,否则false|boolean|√|只判断这个属性即可|
|
||||
|message|错误信息,可以用来提示|string|√||
|
||||
|code|返回状态码|string|√||
|
||||
|data|总数|integer|√||
|
||||
- 查询所有国家和业务线信息列表
|
||||
- Description: 查询所有国家和业务线信息列表
|
||||
- ID: 6
|
||||
- Input Parameters:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
- Returns:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|success|业务处理成功true,否则false|boolean|√|只判断这个属性即可|
|
||||
|message|错误信息,可以用来提示|string|√||
|
||||
|code|返回状态码|string|√||
|
||||
|data|所有数据列表|list of object|√||
|
||||
|-> country|国家code|string|√||
|
||||
|-> business|业务线code|string|√||
|
||||
|-> dataType|数据类型|string|√||
|
||||
|-> businessName|业务线名|string|√||
|
||||
|-> countryName|国家名|string|√||
|
||||
|-> businessNameEn|业务线名(英文)|string|√||
|
||||
- 调用法务中台antlaw接口
|
||||
- ID: 7
|
||||
- 国家/区域导游详情 & 法律意见详情 查询
|
||||
- Description:根据国家code查询国家/区域导游信息详情
|
||||
- ID: 8
|
||||
- Input Parameters:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|countryCode|国家code|string|√||
|
||||
- Returns:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|success|业务处理成功true,否则false|boolean|√|只判断这个属性即可|
|
||||
|message|错误信息,可以用来提示|string|√||
|
||||
|code|返回状态码|string|√||
|
||||
|data|国家/区域导游详情|object|√||
|
||||
|-> country|||||
|
||||
|-> -> id|id|integer|√||
|
||||
|-> -> country|国家code|string|√||
|
||||
|-> -> countryName|国家中文名称|string|√||
|
||||
|-> -> countryNameEn|国家英文名称|string|√||
|
||||
|-> -> content|国家导游中文详情json数组,具体格式见下示例|list of object|√||
|
||||
|-> -> -> title|标题|object|√||
|
||||
|-> -> -> -> title|中文标题|string|||
|
||||
|-> -> -> -> titleEn|英文标题|string|||
|
||||
|-> -> -> contentList|标题下面的文字描述列表|list of object|√||
|
||||
|-> -> -> -> detail|内容中文详情|string|√||
|
||||
|-> -> -> -> detailEn|内容英文详情|string|√||
|
||||
|-> -> -> -> url|超链接|string|||
|
||||
|-> legal|法务信息|object|||
|
||||
|-> -> country|国家code|string|√||
|
||||
|-> -> businessList|业务线列表|list of object|||
|
||||
|-> -> -> id|id|integer||新增时不传,修改时传递|
|
||||
|-> -> -> business|业务线code|string|√||
|
||||
|-> -> -> businessName|业务线中文名称|string|√||
|
||||
|-> -> -> businessNameEn|业务线英文名称|string|√||
|
||||
|-> -> -> content|业务线json,具体如下|object|√||
|
||||
|-> -> -> -> detailEn|具体的详情英文内容|string|√||
|
||||
|-> -> -> -> detail|具体的详情内容|string|√||
|
||||
- 国家/区域导游列表分页查询
|
||||
- Description: 分页查询国家/区域列表
|
||||
- ID: 9
|
||||
- Input Parameters:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|pageSize|分页大小|integer|√|>=1|
|
||||
|pageNum|分页大小|integer|√|>=1|
|
||||
|country|国家code|string|||
|
||||
|business|业务线code|string|||
|
||||
- Returns:
|
||||
|名称|描述|类型(长度)|必选|备注|
|
||||
| :- | :- | :-: | :- | :- |
|
||||
|success|业务处理成功true,否则false|boolean|√|只判断这个属性即可|
|
||||
|message|错误信息,可以用来提示|string|√||
|
||||
|code|返回状态码|string|√||
|
||||
|data|国家/区域导游详情|list of object|√||
|
||||
|-> id|id|integer|√||
|
||||
|-> country|国家code|string|√||
|
||||
|-> countryName|国家中文名称|string|√||
|
||||
|-> countryNameEn|国家英文名称|string|√||
|
||||
|-> gmtCreate|创建时间|string|√||
|
||||
|-> gmtModified|更新时间|string|√||
|
||||
|total|数据总量|integer|√||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
@register_tool(tags=["system design", "write trd", "Write a TRD"])
|
||||
async def write_trd(
|
||||
use_case_actors: str,
|
||||
user_requirements: str,
|
||||
acknowledge: str,
|
||||
investment: float = 10,
|
||||
context: Optional[Context] = None,
|
||||
) -> (str, str):
|
||||
|
|
@ -93,7 +271,6 @@ async def write_trd(
|
|||
Args:
|
||||
user_requirements (str): The new/incremental user requirements.
|
||||
use_case_actors (str): Description of the actors involved in the use case.
|
||||
acknowledge (str): A natural text of acknowledgement containing details about external system interfaces.
|
||||
investment (float): Budget. Automatically stops optimizing TRD when the budget is overdrawn.
|
||||
context (Context, optional): The context configuration. Default is None.
|
||||
Returns:
|
||||
|
|
@ -103,12 +280,10 @@ async def write_trd(
|
|||
>>> # Given a new user requirements, write out a new TRD.
|
||||
>>> user_requirements = "Write a 'snake game' TRD."
|
||||
>>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;"
|
||||
>>> acknowledge = "## Interfaces\\n..."
|
||||
>>> investment = 10.0
|
||||
>>> trd = await write_trd(
|
||||
>>> user_requirements=user_requirements,
|
||||
>>> use_case_actors=use_case_actors,
|
||||
>>> external_interfaces=external_interfaces,
|
||||
>>> investment=investment,
|
||||
>>> )
|
||||
>>> print(trd)
|
||||
|
|
@ -116,7 +291,8 @@ async def write_trd(
|
|||
"""
|
||||
context = context or Context(cost_manager=CostManager(max_budget=investment))
|
||||
compress_acknowledge = CompressExternalInterfaces()
|
||||
external_interfaces = await compress_acknowledge.run(acknowledge=acknowledge)
|
||||
acknowledgement = await mock_asearch_acknowledgement(use_case_actors) # Replaced by acknowledgement_repo later.
|
||||
external_interfaces = await compress_acknowledge.run(acknowledge=acknowledgement)
|
||||
detect_interaction = DetectInteraction(context=context)
|
||||
w_trd = WriteTRD(context=context)
|
||||
evaluate_trd = EvaluateTRD(context=context)
|
||||
|
|
@ -155,10 +331,9 @@ async def write_trd(
|
|||
async def write_framework(
|
||||
use_case_actors: str,
|
||||
trd: str,
|
||||
acknowledge: str,
|
||||
additional_technical_requirements: str,
|
||||
output_dir: Optional[str] = "",
|
||||
investment: float = 10,
|
||||
investment: float = 15.0,
|
||||
context: Optional[Context] = None,
|
||||
) -> str:
|
||||
"""
|
||||
|
|
@ -167,7 +342,6 @@ async def write_framework(
|
|||
Args:
|
||||
use_case_actors (str): Description of the use case actors involved.
|
||||
trd (str): Technical Requirements Document detailing the requirements.
|
||||
acknowledge (str): External acknowledgements or acknowledgements required.
|
||||
additional_technical_requirements (str): Any additional technical requirements.
|
||||
output_dir (str, optional): Path to save the software framework files. Default is en empty string.
|
||||
investment (float): Budget. Automatically stops optimizing TRD when the budget is overdrawn.
|
||||
|
|
@ -179,13 +353,11 @@ async def write_framework(
|
|||
Example:
|
||||
>>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;"
|
||||
>>> trd = "## TRD\\n..."
|
||||
>>> acknowledge = "## Interfaces\\n..."
|
||||
>>> additional_technical_requirements = "Using Java language, ..."
|
||||
>>> investment = 10.0
|
||||
>>> investment = 15.0
|
||||
>>> framework = await write_framework(
|
||||
>>> use_case_actors=use_case_actors,
|
||||
>>> trd=trd,
|
||||
>>> acknowledge=acknowledge,
|
||||
>>> additional_technical_requirements=constraint,
|
||||
>>> investment=investment,
|
||||
>>> )
|
||||
|
|
@ -198,12 +370,13 @@ async def write_framework(
|
|||
is_pass = False
|
||||
framework = ""
|
||||
evaluation_conclusion = ""
|
||||
acknowledgement = await mock_asearch_acknowledgement(use_case_actors) # Replaced by acknowledgement_repo later.
|
||||
while not is_pass and (context.cost_manager.total_cost < context.cost_manager.max_budget):
|
||||
try:
|
||||
framework = await write_framework.run(
|
||||
use_case_actors=use_case_actors,
|
||||
trd=trd,
|
||||
acknowledge=acknowledge,
|
||||
acknowledge=acknowledgement,
|
||||
legacy_output=framework,
|
||||
evaluation_conclusion=evaluation_conclusion,
|
||||
additional_technical_requirements=additional_technical_requirements,
|
||||
|
|
@ -214,7 +387,7 @@ async def write_framework(
|
|||
evaluation = await evaluate_framework.run(
|
||||
use_case_actors=use_case_actors,
|
||||
trd=trd,
|
||||
acknowledge=acknowledge,
|
||||
acknowledge=acknowledgement,
|
||||
legacy_output=framework,
|
||||
additional_technical_requirements=additional_technical_requirements,
|
||||
)
|
||||
|
|
@ -223,4 +396,4 @@ async def write_framework(
|
|||
|
||||
file_list = await save_framework(dir_data=framework, output_dir=output_dir)
|
||||
logger.info(f"Output:\n{file_list}")
|
||||
return "\n".join(file_list)
|
||||
return "## Software Framework" + "".join([f"\n- {i}" for i in file_list])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue