1.metagpt中的软件公司智能体 (PrepareDocuments Action)

1. PrepareDocuments Action

定义了一个 PrepareDocuments 类,它继承自 Action 类,并实现了一个用于准备项目文档的功能。具体来说,它的主要作用是初始化项目文件夹,设置 Git 环境,并将新增的需求写入 docs/requirements.txt 文件。部分代码跟源码有点不同。

import shutil
from pathlib import Path
from typing import Optionalfrom metagpt.actions import Action
from metagpt.const import REQUIREMENT_FILENAME
from metagpt.utils.file_repository import FileRepository
from metagpt.utils.git_repository import GitRepository
from metagpt.utils.project_repo import ProjectRepofrom metagpt.schema import Documentimport dataclasses@dataclasses.dataclass  
class ActionOutput:content: strinstruct_content: Documentdef __init__(self, content: str, instruct_content: Document):self.content = contentself.instruct_content = instruct_contentclass PrepareDocuments(Action):"""PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt."""name: str = "PrepareDocuments"i_context: Optional[str] = None@propertydef config(self):return self.context.configdef _init_repo(self):"""Initialize the Git environment."""if not self.config.project_path:name = self.config.project_name or FileRepository.new_filename()path = Path(self.config.workspace.path) / nameelse:path = Path(self.config.project_path)if path.exists() and not self.config.inc:shutil.rmtree(path)self.config.project_path = pathself.context.git_repo = GitRepository(local_path=path, auto_init=True)self.context.repo = ProjectRepo(self.context.git_repo)async def run(self, with_messages, **kwargs):"""Create and initialize the workspace folder, initialize the Git environment."""self._init_repo()# Write the newly added requirements from the main parameter idea to `docs/requirement.txt`.doc = await self.repo.docs.save(filename=REQUIREMENT_FILENAME, content=with_messages[0].content)# Send a Message notification to the WritePRD action, instructing it to process requirements using# `docs/requirement.txt` and `docs/prd/`.return ActionOutput(content=doc.content, instruct_content=doc)

2. 示例

context = Context()
from metagpt.schema import Message
USER_REQUIREMENT = """开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结"""from metagpt.actions import UserRequirement
user_msg = Message(role="User", content=USER_REQUIREMENT, cause_by=UserRequirement)
product_manager = PrepareDocuments(context=context)rsp = await product_manager.run([user_msg])
print(rsp)

结果:

2024-12-16 20:31:30.767 | INFO     | metagpt.utils.file_repository:save:57 - save to: D:\llm\MetaGPT\workspace\20241216203129\docs\requirement.txtActionOutput(content='开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结', instruct_content=开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结)

在workspace文件夹中产生的项目结构
在这里插入图片描述

3. 代码详解

导入部分

import shutil
from pathlib import Path
from typing import Optional
  • shutil 用于文件和目录的操作(如删除目录)。
  • Path 是 pathlib 模块的一部分,用于处理路径。
  • Optional 是类型注解中的一个工具,表示某个值可以是某个类型或者 None。
from metagpt.actions import Action
from metagpt.const import REQUIREMENT_FILENAME
from metagpt.utils.file_repository import FileRepository
from metagpt.utils.git_repository import GitRepository
from metagpt.utils.project_repo import ProjectRepo
from metagpt.schema import Document

导入了 metagpt 模块中的一些类和常量,主要用于操作 Git 仓库、文件库和项目仓库等。

ActionOutput 类

@dataclasses.dataclass  
class ActionOutput:content: strinstruct_content: Documentdef __init__(self, content: str, instruct_content: Document):self.content = contentself.instruct_content = instruct_content

这个类用于保存操作的输出结果,包含两个字段:

  • content:操作的结果内容,类型为 str。
  • instruct_content:Document 类型,可能是与操作相关的文档内容。

@dataclasses.dataclass 装饰器简化了类的定义,自动生成了初始化方法。

PrepareDocuments 类

class PrepareDocuments(Action):"""PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt."""name: str = "PrepareDocuments"i_context: Optional[str] = None

PrepareDocuments 类继承自 Action 类,表示一个特定的行动,目的是初始化项目文件夹并将新的需求添加到 docs/requirements.txt 文件。

  • name 是该动作的名称,i_context 是上下文(可选),它会用于定义在动作执行期间的环境信息。
@property
def config(self):return self.context.config

config 是一个只读属性,返回当前上下文的配置对象。

初始化 Git 仓库

def _init_repo(self):"""Initialize the Git environment."""if not self.config.project_path:name = self.config.project_name or FileRepository.new_filename()path = Path(self.config.workspace.path) / nameelse:path = Path(self.config.project_path)if path.exists() and not self.config.inc:shutil.rmtree(path)self.config.project_path = pathself.context.git_repo = GitRepository(local_path=path, auto_init=True)self.context.repo = ProjectRepo(self.context.git_repo)
  • _init_repo 方法用于初始化 Git 仓库。它会检查是否有现有的项目路径,如果没有,则创建一个新的路径。
  • 如果该路径已经存在且配置中没有指示是否覆盖(config.inc 为 False),则删除现有的目录。
  • 随后,使用 GitRepository 初始化一个新的 Git 仓库,并使用 ProjectRepo 创建一个项目仓库。

执行操作

async def run(self, with_messages, **kwargs):"""Create and initialize the workspace folder, initialize the Git environment."""self._init_repo()

run 方法是操作的主要执行入口。它会调用 _init_repo 方法初始化 Git 环境。

# Write the newly added requirements from the main parameter idea to `docs/requirement.txt`.
doc = await self.repo.docs.save(filename=REQUIREMENT_FILENAME, content=with_messages[0].content)

将传入的 with_messages[0].content 写入 docs/requirement.txt 文件。with_messages 似乎是包含多个消息的列表,with_messages[0] 可能是包含需求内容的消息。
使用 await 表明这是一个异步操作,repo.docs.save 方法将内容保存到文档中。

# Send a Message notification to the WritePRD action, instructing it to process requirements using
# `docs/requirement.txt` and `docs/prd/`.
return ActionOutput(content=doc.content, instruct_content=doc)

操作完成后,返回一个 ActionOutput 对象,包含保存的文档内容和相关指示信息,通知后续的行动(例如处理需求的 WritePRD 行动)。

总结

PrepareDocuments 类是一个在项目中进行文件准备和 Git 环境初始化的行动。
它会根据配置初始化 Git 仓库,并将传入的需求内容写入 docs/requirements.txt 文件。
最后,返回一个 ActionOutput 对象,包含文档的内容以及需要后续处理的信息。

PrepareDocuments的数据结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/490907.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHPstudy中的数据库启动不了

法一 netstat -ano |findstr "3306" 查看占用该端口的进程号 taskkill /f /pid 6720 杀死进程 法二 sc delete mysql

数据可视化:提升年度报表分析效率的新路径

在当今复杂多变的商业环境中,企业年度报表不仅是反映企业过去一年经营成果的重要文件,更是指导未来战略规划的基石。它如同一面镜子,既映照出企业的辉煌成就,也不避讳地揭示了存在的问题与挑战。本文将从企业年度报表的编制原则、…

计算机网络-传输层 UDP协议

学习一个网络协议,主要就是学习“数据格式/报文格式” UDP的特点 UDP传输的过程类似于寄信. ⽆连接: 知道对端的IP和端⼝号就直接进⾏传输, 不需要建⽴连接; 不可靠: 没有确认机制, 没有重传机制; 如果因为⽹络故障该段⽆法发到对⽅, UDP协议层也不会给应 ⽤层返回任…

【Android开发】安装Android Studio(2023.1.1)

下载安装包 Android Studio2023.1.1百度云盘下载,提取码:6666https://pan.baidu.com/s/1vNJezi7aDOP0poPADcBZZg?pwd6666 安装Android Studio 2023.1.1 双击下载好的安装包 弹出界面点击下一步 继续点击【Next】 更改安装路径后继续点击【Next】 点…

web网页前后端交互方式

参考该文&#xff0c; 一、前端通过表单<form>向后端发送数据 前端是通过html中的<form>表单&#xff0c;设置method属性定义发送表单数据的方式是get还是post。 如使用get方式&#xff0c;则提交的数据会在url中显示&#xff1b;如使用post方式&#xff0c;提交…

多线程(JAVA笔记第三十九期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 进程和线程的概念并发与并行多线程的实现方式继承Thread类的方式进行实现使用Runnable接口的方式进行实现使用Callable接口和Future接口方式进行实现 多线程常用的成员方法同步代码…

牛客网刷题 | BC125 序列中整数去重

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 输入n个整数的序列…

【一文概述】常见的几种内外网数据交换方案介绍

一、内外网数据交换的核心需求 内外网数据交换的需求核心在于“安全、效率、合规”&#xff0c;而应用场景的多样性使得不同企业需要定制化的解决方案。通过结合业务特性和安全等级要求&#xff0c;企业能够选择适合的技术方案来实现高效、安全的内外网数据交换。 1、数据安全…

记:排查设备web时慢时快问题,速度提升100%

问题描述 问题1&#xff1a; 发现web登录界面刷新和登录功能都比较卡&#xff0c;开浏览器控制台看了下&#xff0c;让我很惊讶&#xff0c;居然能这么慢&#xff1a; 公司2个局域网内的表现不同&#xff0c;局域网A中的都比较卡&#xff0c;局域网B中的又不存在该现象。 问…

简单的Java小项目

学生选课系统 在控制台输入输出信息&#xff1a; 在eclipse上面的超级简单文件结构&#xff1a; Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…

环境和工程搭建

1.案例介绍 1.1 需求 实现⼀个电商平台 该如何实现呢? 如果把这些功能全部写在⼀个服务⾥, 这个服务将是巨⼤的. 巨多的会员, 巨⼤的流量, 微服务架构是最好的选择. 微服务应⽤开发的第⼀步, 就是服务拆分. 拆分后才能进⾏"各⾃开发" 1.2 服务拆分 拆分原则 …

港科夜闻 | 香港科大与荷兰代尔夫特理工大学(TU Delft)建立合作伙伴关系,推动艺术科技教育与研究...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与荷兰代尔夫特理工大学(TU Delft)建立合作伙伴关系&#xff0c;推动艺术科技教育与研究。2024年12月6日&#xff0c;合作伙伴计划正式启动&#xff0c;双方期望透过合作加强艺术科技知识交流&#xff0c;借此推…

电脑游戏运行时问题解析:《Geometry Dash》DLL文件损坏的原因与解决方案

电脑游戏运行时问题解析&#xff1a;《Geometry Dash》DLL文件损坏的原因与解决方案 在探索《Geometry Dash》这款节奏明快、充满挑战的几何世界冒险游戏时&#xff0c;我们或许会遇到一些令人头疼的技术问题&#xff0c;其中之一便是DLL文件损坏。DLL&#xff08;动态链接库&…

爬虫逆向学习(十四):分享一下某数通用破解服务开发经验

阅前须知 这篇博客不是教大家怎么实现的&#xff0c;而且告知大家有这个东西&#xff0c;或者说一种趋势&#xff0c;借此分享自己大致的实现经验。具体的实现我也不好整理&#xff0c;毕竟是在别人的基础上缝缝补补。 前言 使用补环境方式破解过某数的同学都知道&#xff0…

Maven 的下载

目录 1、Maven 官方地址2、下载3、解压4、配置本地仓库 1、Maven 官方地址 https://maven.apache.org/ 2、下载 3、解压 将下载的压缩包解压到任意位置 4、配置本地仓库 在 Maven 的安装目录下新建文件夹&#xff0c;用来当作 Maven 的本地仓库 进入 conf 目录下&#xff…

【HarmonyOS】鸿蒙应用实现手机摇一摇功能

【HarmonyOS】鸿蒙应用实现手机摇一摇功能 一、前言 手机摇一摇功能&#xff0c;是通过获取手机设备&#xff0c;加速度传感器接口&#xff0c;获取其中的数值&#xff0c;进行逻辑判断实现的功能。 在鸿蒙中手机设备传感器ohos.sensor (传感器)的系统API监听有以下&#xf…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(三)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(三) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

统一身份安全管理体系的业务协同能力

随着集团企业数字化组织转型深化&#xff0c;各组织机构间业务协同程度提升。研发业务协同、数据驱动生产决策等数字化生产协作工作体系得以展开&#xff0c;企业内数据流转加快。企业对统一身份安全管理体系的业务协同管理和支撑能力要求提升&#xff1a; 统一身份管理流程需…

华为HarmonyOS NEXT 原生应用开发:鸿蒙中组件的组件状态管理、组件通信 组件状态管理小案例(好友录)!

文章目录 组件状态管理一、State装饰器1. State装饰器的特点2. State装饰器的使用 二、Prop装饰器&#xff08;父子单向通信&#xff09;1. Prop装饰器的特点2. Prop装饰器的使用示例 三、Link装饰器&#xff08;父子双向通信&#xff09;1. Link装饰器的特点3. Link使用示例 四…

CoolEdit详细使用和安装教程

Cool Edit Pro主要用于音频录制、编辑、混音和后期处理。Cool Edit Pro 的特点包括&#xff1a; 音频编辑&#xff1a;支持多轨编辑&#xff0c;可以同时处理多个音频文件&#xff0c;支持精确的音频剪切、复制、粘贴等操作。 录音功能&#xff1a;内置强大的录音功能&#xf…