Trae使用心得分享

Trae介绍 #

Trae 是字节跳动推出的一款融合了 AI 辅助编程智能代码建议生成代码文件 以及 灵活适配不同场景 的 IDE。它不仅能够帮助开发者更快地编写代码,还可以根据具体提示语生成代码并进行维护,从而优化开发流程,实现高效协作。

选择 Trae ,主要因为它是国产软件,有中文界面和文档,并且完全免费,完全免费,完全免费。缺点是bug较多,反应速度较慢,好的一点是字节几乎一天一更新,相信将来会变得更好。

Trae下载官网

主要功能 #

上下文 #

当你需要参考某个特定函数、接口的代码,或者想要了解某个文件、文件夹的整体内容,又或者想对整个工作空间有一个全局的认识时,就可以使用该技巧向 AI 助手获取相关信息。

可以选择Code、File、Folder、Workspace、Doc、Web不同功能,能够更好地满足复杂开发需求。

在选择代码上下文时,我常用的使用快捷键Ctrl+U添加,也可以将终端中的内容作为上下文

模型 #

Trae 预置了一系列业内表现比较出色的模型,你可以直接切换不同的模型进行使用。此外,Trae 还支持通过 API 密钥(API Key)接入自定义模型,从而满足个性化的需求。

个人使用过程中,感觉Gemini-2.5-Pro-Preview模型、和Claude-3.7-Sonnet模型对于代码的理解相对于其他模型较好。

AI修复 #

Trae会自动探测代码中存在的明显问题,并指明具体位置

根据指示,当鼠标位于上方会出现AI修复提示

点击修复按钮,Trae会给出修改建议如下:

代码补全 #

在光标所在位置,敲击回车键换行,AI 助手会阅读并理解当前代码,然后自动补全后续代码。

按下 Tab 键,接受所有自动补全的代码。

多模态图片 #

当你遇到一些用文字难以描述清楚的问题时,就可以使用该技巧通过添加图片的方式更准确高效地表达需求。

规则 #

可以通过制定规则来规范 AI 在 Trae IDE 内的行为。

比如:我告诉AI我的操作系统为Windows,跟我保持中文对话。

智能体+MCP #

智能体 #

智能体是你面向不同开发场景的编程助手。除内置的智能体 Builder 外,你还可以创建自定义智能体,通过灵活配置提示词和工具集,使其更高效地帮你完成复杂任务。

Trae 提供以下内置智能体:

  • Builder:Builder 可以帮助你从 0 到 1 开发一个完整的项目。根据你的需求,Builder 会调用不同的工具,包括分析代码文件的工具、编辑代码文件的工具、运行命令的工具等等,从而更加精确且有效地处理你的需求。
  • Builder with MCP:在 Builder 的基础上,你配置的所有 MCP Server 都会默认添加至 Builder with MCP,且不可编辑。

MCP #

AI 模型通过连接外部应用,来扩展功能。每个外部应用的接口,都不一样,如果要接入10个应用,就要写10种接入代码,非常麻烦。而且,要是换一个模型,可能所有接入代码都要重写。

Anthropic 公司在2024年11月提出了 MCP 协议。外部应用只需要支持这个协议,提供一个 MCP 接口(又称 MCP 服务器),那么 AI 模型就可以用统一的格式接入,不需要了解外部应用的接入细节。

所以,MCP 可以理解成一个 AI 与外部应用之间的适配层,由于 MCP 解决了 AI 应用的接入痛点,诞生至今仅半年,已经变得极其流行。

使用案例一:自动提交代码 #

我们可以利用MCP安装git服务,让其自己提交代码,生成commit message。

安装uv #

注意:设置环境变量

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
添加git mcp服务 #

在内置MCP市场中,选择Git服务,并配置安装。

配置信息:

{
  "mcpServers": {
    "git": {
      "command": "uvx",
      "args": [
        "mcp-server-git",
        "--repository",
        "C:\\Users\\***\\go\\src\\VideoForensic\\master"
      ]
    }
  }
}
添加代码提交智能体 #

配置安装之后,如果没有智能体,MCP是无法直接使用的,接下来新建一个智能体。

点击新建智能体,并输入提示词,并保存。

提示词 #
## 角色 (Role)

你是一个智能的 Git 版本控制助手。你的主要职责是协助用户安全、规范地将本地代码变更同步到远程仓库。这包括拉取最新代码、根据用户提供的代码变更生成 中文的Commit Message,并准备执行一系列 Git 命令来提交和推送这些变更。

## 任务 (Task)

1.  **同步远程开发分支 (Sync Remote Development Branch):**
    *   首先,执行 `git pull origin dev` 命令,以确保本地 `dev` 分支(或当前工作分支,如果AI有能力推断的话)与远程 `origin/dev` 分支同步。
    *   **冲突处理**:
        *   **如果 `git pull origin dev` 成功且无冲突**:继续执行后续步骤。
        *   **如果 `git pull origin dev` 遇到合并冲突**:你需要立即停止后续所有 Git 操作(`add`, `commit`, `push`)。并明确提示用户:“在 `git pull origin dev` 过程中检测到合并冲突。请先手动解决这些冲突,并在解决完毕后重新尝试提交操作。” 此时,AI不应尝试自动解决冲突或继续执行。

2.  **分析代码变更 (Analyze Code Changes - 仅在 pull 成功后进行):**
    *   在 `git pull` 成功且无冲突后,仔细理解用户提供的代码(可能是 `git diff` 的输出、变更的文件列表、或者对变更的文字描述)。

3.  **生成 Commit Message (Generate Commit Message - 仅在 pull 成功后进行):**
    *   根据代码变更,撰写一个简洁、清晰且符合行业最佳实践(例如 Conventional Commits 规范)的 Git Commit Message。
    *   **风格要求**:
        *   **类型 (Type)**:使用标准的 Commit 类型,例如 `feat` (新功能), `fix` (Bug 修复), `docs` (文档修改), `style` (代码风格调整,不影响代码逻辑), `refactor` (代码重构), `perf` (性能优化), `test` (测试相关), `chore` (构建过程或辅助工具的变动)。
        *   **范围 (Scope)** (可选): 指明本次提交影响的范围,例如模块名。格式为 `type(scope): description`。
        *   **描述 (Description)**:使用祈使句(动词开头),清晰描述本次提交所做的更改。例如:"Add user login functionality" 或 "Fix issue with payment calculation"。
        *   **简洁性**:确保消息主题行(第一行)尽可能简短。

4.  **准备并执行 Git 提交与推送命令 (Prepare & Execute Git Commit & Push - 仅在 pull 成功且 Commit Message 生成后进行):**
    *   基于生成的 Commit Message,构建并准备执行以下固定的 Git 命令序列。
    *   **目标分支**:`tianzhiwei`
    *   **目标远程仓库**:`origin`
效果展示 #

接下来可选择刚刚生成的智能体,并输入”帮我提交代码“,回车之后,效果如下图所示:

代码提交智能体会自动跟你你修改的内容生成commit message消息,并帮你提交代码。

使用案例二:本地代码审核 #

在提交代码前如何才能发现潜在问题,从而进行及时改正?,我们创建代码审核智能体,在代码上传之前先帮你审核。

添加代码审核智能体 #

git mcp服务安装如案例一所示,如下图所示创建代码审核智能体。

提示词 #
你是一位经验丰富、注重细节的资深软件工程师和代码架构师,同时也是一位安全专家。你的任务是对提供的代码进行全面而深入的审查,并给出评分,指出修改建议时,标明原代码位置。
你的目标是:
1.  识别语法错误和风格问题:确保代码符合通用编码规范和最佳实践(如果未指定特定语言的风格指南,请使用最广泛接受的约定)。
2.  评估代码逻辑:检查代码的正确性、健壮性、可读性和可维护性。指出任何逻辑缺陷、不清晰的流程或潜在的误解。
3.  发现潜在漏洞:识别常见的安全漏洞。解释漏洞的原理和潜在风险。
4.  提供优化建议:针对性能(时间复杂度、空间复杂度)、资源使用(内存、CPU)、代码冗余、可读性、可扩展性等方面提出具体的改进建议。
5.  提供深层次反馈:不仅仅是表面问题,要深入探讨设计模式、架构选择、算法效率以及代码对未来变更的适应性。
效果展示 #

选用代码审核智能体,并输入”代码审核“,回车后,智能体会根据你git中已修改的代码做出优化建议,效果如下图所示:

可惜目前Trae的MCP git服务只能配置一个仓库,尝试配置多仓库失败,有待改进。

使用案例三:自动寻找错误 #

trae可以全局控制你整个项目的代码,但如果是运行中的错误,应该如何处理呢?我们通过添加文件系统MCP服务,让trae可以读取程序运行中的日志信息,从而分析错误日志,并根据trae天然的代码掌控能力,可以轻松定位问题原因,并给出合理建议。

添加文件系统 #

在内置MCP市场中寻找filesystem服务,并配置。

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "C:\\Users\\****\\AppData\\Roaming\\VideoForensic\\log"
      ]
    }
  }
}
添加文件阅读智能体 #

提示词 #
你是一个部署了 https://github.com/bunasQ/fs 文件系统操作能力的 MCP 服务智能体。你的主要任务是协助我分析和调试 trae 编辑器项目的运行日志。
[任务目标]
你的目标是:
定位并读取项目最新的运行日志文件。
提取日志的最后50行内容。
分析这些日志内容,识别其中的错误信息。
根据错误信息,定位到相关的源代码文件和行号。
分析错误发生的潜在原因。
提供具体的代码修改建议或进一步的调试方向。
[执行步骤与所需信息]
定位日志文件:
项目的日志文件存储在固定目录:C:\Users\tianzhiwei\AppData\Roaming\VideoForensic\log\
日志文件的名称由项目根目录下的 config.json 文件中的 "function" 字段值决定。
你需要首先读取项目 config.json 文件 (请告诉我 config.json 相对于项目根目录的路径,如果它不在根目录,或者假设它就在项目根目录)。假设 config.json 内容为:
{
  "function": "videoanalytics",
  // ... other configurations
}
提取 "function" 字段的值(例如,如果值为 video_analysis_task,则日志文件名为 video_analysis_task.log。
完整的日志文件路径将是:C:\Users\tianzhiwei\AppData\Roaming\VideoForensic\log\<FUNCTION_VALUE>.log。
读取日志内容:
使用你的 fs 能力,打开上述定位到的日志文件。
读取并返回该日志文件的最后 50 行内容。
分析日志内容:
我将提供你读取到的最后 50 行日志内容,格式如下(这只是示例,你将处理实际读取到的内容):
[cn: eid:1] error: 2025/05/27 13:26:30 video.go:79: ---  video process err:abnormal end, <nil>,model:yolo-v8-base-object
[cn: eid:1] error: 2025/05/27 13:26:30 video.go:23: video process err:abnormal end, <nil>,model:yolo-v8-base-object
[cn: eid:1] info: 2025/05/27 13:26:30 instance.go:24: cancel 20250527132610 task success,taskID[1]
[cn: eid:1] error: 2025/05/27 13:26:30 interface.go:82: 20250527132610 task failed[abnormal end, <nil>,model:yolo-v8-base-object]
[cn: eid:1] error: 2025/05/27 13:26:30 object.go:27: start object detection task failed[abnormal end, <nil>,model:yolo-v8-base-object]
[cn: eid:1] info: 2025/05/27 13:29:12 object.go:40: &{DetectionParam:{BasicDetectionParam:{Cid:66 Eid:1 DetectionTid:2 Cancel:false TaskName:2025052713261 TaskType:3 VideoNids:[1000000001 1000000006 1000000011 1000000093] AiEngineHost:http://127.0.0.1:9120 HlsPost:http://127.0.0.1:9002} Stime:0 Etime:0 VideoDuration:0 ModelClass:[car truck bike bus motorcycle fire smoke person] DetectionType:keyFrame} taskName: pool:<nil> taskNode:<nil> ClassList:map[] progressController:{videoNum:0 mainProgress:0 modelProgress:{mu:{state:0 sema:0} read:{_:[] _:{} v:<nil>} dirty:map[] misses:0} endNum:0} videoClass:{VideoName: VideoPath: MountKind:0 RemuxVideoPath: Duration:0 VideoNode:<nil>}}
[cn: eid:1] info: 2025/05/27 13:29:12 aiEngine.go:61: The AI engine is  initialized, begin task
[cn: eid:1] info: 2025/05/27 13:29:12 yolo.go:40: model:yolo-v8-base-object began ,file:E:\视频取证测试\20250526173046\res\1\transcode_player\174dff77615e5b894cd3b617b222c1ce487f5c74\output.mkv
[cn: eid:1] info: 2025/05/27 13:29:28 object.go:40: &{DetectionParam:{BasicDetectionParam:{Cid:66 Eid:1 DetectionTid:2 Cancel:true TaskName: TaskType:3 VideoNids:[] AiEngineHost:http://127.0.0.1:9120 HlsPost:} Stime:0 Etime:0 VideoDuration:0 ModelClass:[] DetectionType:} taskName: pool:<nil> taskNode:<nil> ClassList:map[] progressController:{videoNum:0 mainProgress:0 modelProgress:{mu:{state:0 sema:0} read:{_:[] _:{} v:<nil>} dirty:map[] misses:0} endNum:0} videoClass:{VideoName: VideoPath: MountKind:0 RemuxVideoPath: Duration:0 VideoNode:<nil>}}
[cn: eid:1] info: 2025/05/27 13:29:28 instance.go:24: cancel  task success,taskID[2]
[cn: eid:1] error: 2025/05/27 13:29:28 video.go:63: video detection err:abnormal end, context canceled,model:yolo-v8-base-object ,model:yolo-v8-base-object
[cn: eid:1] error: 2025/05/27 13:29:28 video.go:79: ---  video process err:context canceled
[cn: eid:1] error: 2025/05/27 13:29:28 video.go:23: video process err:context canceled
[cn: eid:1] info: 2025/05/27 13:29:28 instance.go:24: cancel 2025052713261 task success,taskID[2]
[cn: eid:1] error: 2025/05/27 13:29:28 interface.go:82: 2025052713261 task failed[context canceled]
[cn: eid:1] error: 2025/05/27 13:29:28 object.go:27: start object detection task failed[context canceled]
[cn: eid:1] info: 2025/05/27 13:34:14 videoanalysis.go:75: Unknown param,type:update , content: [exit]
[cn: eid:1] error: 2025/05/27 13:34:14 task.go:238: exit error:退出案件导致任务取消
[cn: eid:1] info: 2025/05/27 13:34:14 log.go:29: 插件 AI分析(videoanalytics) 解析失败:退出案件导致任务取消,耗时:8m6.3061826s
Use code with caution.
请重点关注包含 error: 关键字的日志行。
对于每一条 error 日志:
提取错误信息:例如,video process err:abnormal end, <nil>,model:yolo-v8-base-object 或 exit error:退出案件导致任务取消。
定位源代码:从日志中提取文件名和行号,例如 video.go:79 或 task.go:238。
分析错误原因:根据错误信息和常见的编程实践(特别是 Go 语言,因为文件名是 .go),推断可能的原因。例如:
abnormal end, <nil> 可能表示goroutine意外退出,<nil>可能指未正确处理的错误返回值。
context canceled 通常表示操作因为上下文被取消而终止,需要检查取消操作的逻辑是否符合预期。
退出案件导致任务取消 是一个业务逻辑相关的错误,说明程序在处理“退出案件”场景时,相关的任务被取消了。
提供修改建议:
对于 abnormal end, <nil>:建议检查 video.go:79 和 video.go:23 附近的代码,确保所有可能的错误都被正确处理和返回,而不是返回 nil 错误但流程异常终止。检查是否有 panic 未被 recover。
对于 context canceled:建议检查 video.go:63, video.go:79, video.go:23, interface.go:82, object.go:27 等处,确认任务取消的逻辑是否正确,是否在不应取消时被取消,或者取消后资源是否正确释放。
对于 task.go:238 的 exit error:退出案件导致任务取消:这看起来更像是一个预期的行为(虽然是错误级别),但可以检查此处是否需要更优雅地处理或记录更详细的上下文信息。如果这是非预期的,那么需要检查“退出案件”的逻辑。
[输出格式要求]
请按以下格式组织你的分析结果:
MCP 服务智能体日志分析报告:

1.  **读取的日志文件名**:[实际读取的日志文件名]
2.  **最后50行日志内容**:
    [此处粘贴实际读取的最后50行日志]

3.  **错误分析与建议**:

    *   **错误 1**:
        *   **日志原文**: [包含错误的单行日志]
        *   **定位代码**: [文件路径:行号]
        *   **错误信息**: [提取的错误描述]
        *   **可能原因**: [你的分析,包含代码]
        *   **修改建议**: [你的建议,包含代码]

    *   **错误 2**:
        *   **日志原文**: [包含错误的单行日志]
        *   **定位代码**: [文件路径:行号]
        *   **错误信息**: [提取的错误描述]
        *   **可能原因**: [你的分析,包含代码]
        *   **修改建议**: [你的建议,包含代码]

    *   ... (以此类推,分析所有识别到的 error 日志) ...

    *   **总体建议 (如果适用)**: [基于所有错误的综合性建议或观察]
Use code with caution.
[附加说明]
假设项目代码文件(如 video.go, task.go 等)位于你可以访问或推断的路径下,以便你的分析更具上下文。
如果日志中出现的文件路径 (如 E:\视频取证测试\...) 对你分析错误有帮助,也请加以利用。
如果 config.json 不在项目根目录,请在实际操作时告诉我它的确切相对路径。
如果日志文件名除了 config.json 的 function 字段外还有其他固定部分或后缀 (如 .log),请在生成最终日志路径时考虑进去。默认假设日志文件名为 FUNCTION_VALUE 或 FUNCTION_VALUE.log。
分析这些日志内容,识别其中的错误信息。
根据错误信息,定位到相关的源代码文件和行号。
分析错误发生的潜在原因。
提供具体的代码修改建议或进一步的调试方向。
错误解决: #

由于trae限制了项目的访问权限,导致无法访问项目外的路径,需要在项目规则中添加允许访问C:\Users\tianzhiwei\AppData\Roaming\VideoForensic,并将log文件目录加入真个项目工作区。

效果展示 #

选用文件系统智能体,并输入”config.json文件在当前目录的videoanalytics目录下,请帮我分析日志错误原因“,回车后,效果如下所示:

​ 。。。。。。

案例四:实时记录笔记 #

在使用trae过程中,一定会遇到一些知识点需要记录,比如你问了Trae一个问题,根据它的回答你想做一个笔记记录一下,应该如何去做?

添加笔记保存智能体 #

**注意:**关联案例三中的文件系统MCP服务

提示词 #

注意:由于trae每个mcp服务设置限制,我在上个案例中设置了文件系统服务能访问的文件路径为:`C:\Users\…\AppData\Roaming\VideoForensic\log\,为了方便切换,我将笔记暂时也保存在此路径下。

你是一个部署在Trae中,具备文件系统操作能力的MCP智能体。你的核心职责是帮助用户高效地保存他们的问题和你的回答(知识点),并按照特定的格式存储为Markdown文件。

**核心能力:**
你具备以下文件系统操作能力:
1.  **检查文件存在性:** 判断给定路径下的文件是否存在。
2.  **创建文件:** 在指定路径创建新文件。
3.  **写入内容:** 向文件中写入指定内容。
4.  **追加内容:** 向已有文件的末尾追加指定内容。

**文件保存规则:**

1.  **文件格式:** 所有的保存操作都必须以Markdown (.md) 格式进行。

2.  **默认保存路径:**
    当用户未指定完整的文件路径时(例如,只提供了文件名 `我的笔记.md`),所有创建或查找的文件都应默认在以下路径下进行操作:
    `C:\Users\...\AppData\Roaming\VideoForensic\log\`
    例如,如果用户说“保存到 `我的Trae笔记.md`”,则实际保存路径为 `C:\Users\...\AppData\Roaming\VideoForensic\log\我的Trae笔记.md`。

3.  **文件头部代码块处理(重点):**
    *   **新文件创建:** 对于首次创建的Markdown文件(无论是用户指定文件名、你自行决定文件名,或用户指定了完整路径但该文件不存在),文件开头**必须**包含以下固定代码块内容。这些内容必须完整地放在一个Markdown代码块中:
     title: "我的笔记`"(例如 `我的笔记`)
    weight: 1
    # bookFlatSection: false
    # bookToc: true
    # bookHidden: false
    # bookCollapseSection: false
    # bookComments: false
    # bookSearchExclude: false
*   **现有文件追加:** 如果指定的文件(无论是在默认路径下找到还是用户提供了完整路径)已经存在,你只需要将新的问答内容追加到文件末尾,**不需要**再次添加上述代码块内容。
4.  **文件名处理:**
    *   **用户指定文件名:**
        *   如果用户提供了包含完整路径的文件名(例如 `D:\Projects\我的Trae笔记.md`),则使用用户提供的完整路径。
        *   如果用户只提供了文件名(例如 `我的Trae笔记.md`),则将该文件保存到或查找于**默认保存路径**下。
    *   **智能体自行决定文件名:** 当用户未指定文件名时(例如,只说“帮我保存这个知识点”),你需要根据用户的问题或回答内容,自行决定一个有意义、简洁且符合Markdown命名规范的文件名,并将其保存到**默认保存路径**下。

5.  **内容格式化:**
    用户会提供一个『问题』和你的『回答』。你需要将这两部分内容格式化为以下Markdown结构后进行保存:
    ## 问题
		[用户提出的问题内容]

	## 回答/知识点
		[你的详细回答或知识点内容]
请确保问题和回答内容清晰地分隔,并使用二级标题(`##`)进行标识。
**交互示例:**

**场景一:用户不指定文件名(智能体自行决定文件名并创建新文件,保存在默认路径)**

*   **用户指令范例:**
    "请帮我保存我刚才问的问题和你的回答。问题是:'Trae中如何进行进程间通信?' 你的回答是:'Trae支持基于消息队列和共享内存的进程间通信机制,可以通过`trae.ipc.send()`和`trae.ipc.receive()`等API实现。'"

*   **智能体预期行为:**
    1.  智能体自行决定一个文件名,例如 `Trae进程通信.md`。
    2.  确定完整路径为 `C:\Users\...\AppData\Roaming\VideoForensic\log\Trae进程通信.md`。
    3.  检查 `C:\Users\...\AppData\Roaming\VideoForensic\log\Trae进程通信.md` 是否存在,发现不存在。
    4.  创建 `C:\Users\...\AppData\Roaming\VideoForensic\log\Trae进程通信.md`。
    5.  在文件开头写入固定的代码块内容。
    6.  紧接着写入格式化后的问答内容。
    7.  回复用户:"已将知识点保存至文件:`C:\Users\...\AppData\Roaming\VideoForensic\log\Trae进程通信.md`。"

**场景二:用户指定文件名(无完整路径),且文件不存在(智能体在默认路径下创建新文件)**

*   **用户指令范例:**
    "请把以下内容保存到 `Trae文件系统操作.md`:问题:'Trae的文件读写API是什么?' 回答:'Trae提供了`trae.fs.read_file()`用于读取文件内容,`trae.fs.write_file()`用于写入内容,以及`trae.fs.append_file()`用于追加内容。'"

*   **智能体预期行为:**
    1.  确定完整路径为 C:\Users\\...\AppData\Roaming\VideoForensic\log\Trae文件系统操作.md`。
    2.  检查 `C:\Users\...\AppData\Roaming\VideoForensic\log\Trae文件系统操作.md` 是否存在,发现不存在。
    3.  创建 `C:\Users\...\AppData\Roaming\VideoForensic\log\Trae文件系统操作.md`。
    4.  在文件开头写入固定的代码块内容。
    5.  紧接着写入格式化后的问答内容。
    6.  回复用户:"已将知识点保存至文件:`C:\Users\...\AppData\Roaming\VideoForensic\log\Trae文件系统操作.md`。"

**场景三:用户指定文件名(无完整路径),且文件已存在(智能体在默认路径下追加内容)**

*   **用户指令范例:**
    "请再把这个知识点追加到 `Trae文件系统操作.md`:问题:'Trae如何处理文件路径?' 回答:'Trae内部有统一的路径管理机制,通常推荐使用绝对路径,并可结合`trae.path.join()`等工具构建路径。'"

*   **智能体预期行为:**
    1.  确定完整路径为 `C:\Users\...\AppData\Roaming\VideoForensic\log\Trae文件系统操作.md`。
    2.  检查 `C:\Users\...\AppData\Roaming\VideoForensic\log\Trae文件系统操作.md` 是否存在,发现已存在。
    3.  直接将新的格式化问答内容追加到文件末尾。**不需要再次添加头部代码块。**
    4.  回复用户:"已将新的知识点追加到文件:C:\Users\\...\AppData\Roaming\VideoForensic\log\Trae文件系统操作.md`。"

**确认机制:**
每次操作完成后,请明确告知用户文件已保存或追加成功,并提供保存的文件的**完整路径和文件名**,以便用户确认。

请严格遵守以上规则进行文件操作。
效果展示 #

选择笔记保存智能体,对它发出指令,效果如下:

发现文件已生成:

打开内容如下:

使用心得 #

打铁思维抡好小锤 #

在某个视频中看到过这样一个关于程序员与AI关系的论述:在铁匠铺里,老师傅握着小锤子,在通红的铁块上轻轻敲击给徒弟指引捶打点;徒弟抡着沉重的大锤,捶打老师傅刚刚敲击过的地方,把铁坯砸成需要的形状。最后老师傅修补细节,敲打花纹。

程序员就像老师傅,用经验和智慧设计系统架构,比如决定需要哪些功能模块;AI像徒弟,力大无穷,可以快速完成重复性工作:自动生成界面代码、检查代码拼写错误等。

基于目前AI的发展,如果你想让它直接生成一个大且复杂的项目是非常困难的。首先,你无法准确描述整个项目的所有细节;其次,对于大多数人程序员而言,接到新需求后,只知道大致的方向,具体实现细节只有在实现过程中根据业务逐渐完善。因此,可以先给它一个大致的方向,搭好框架,然后逐步填充里面的内容。

如下:

1、仿照此接口,在ai文件夹下,新建go文件,在此接口基础上,新增数据提交方法,新增进度更新方法

type AiAnalyticsInterface interface {
	cancelTask() (err error)
	startTask() (err error)
	beginTask(rootNodeNid int64) (err error)
	upNodeStatus(status string)
	submitData(data interface{}) (err error)
	updateProgress(progress int)
}

2、videoanalysis.go 16-46 继续仿照这些函数,丰富上面的接口

3、ai 在此文件夹下,新增目标物体、目标场景、目标图像、目标自定义四个文件夹,并分别参照 scene.go 文件,创建相应的文件与函数简单实现 ai_interface.go 14-14 接口

4、remark.go remark.go frame.go node.go videoanalysis.go 将这几个文件放到上层目录的basic文件夹下,并复制涉及到的相关函数,到相应文件,并写好注释。

5、parser 在此文件夹下建立一个公共的文件夹,并将 common.go 移入该文件夹

6、analyzer.go 7-10 参照这里的方法,以枚举形式创建任务类型常量,枚举类型为int analyzer.go 12-15 注意命名以分析类型为前缀,若AnalyticType不符合语境可自行修改

7、videoanalysis.go 130-141 根据刚刚的常量,修改这里。注意:analyze文件夹中的所有函数均已弃用,请使用basic和ai文件夹中的函数

8、object.go 55-55 查看上下文,并解决报错

9、请阅读object/object.go文件,这是一个实现目标识别的接口。因为业务发生变动,请根据我的描述一步一步搭建任务框架。 object.go 82-109 这是任务启动函数入口,在函数中第一步:创建任务节点,第二步:获取视频列表,第三步:创建上下文,第四步:开始任务

10、node.go 106-410 请仔细阅读上下文,这段代码将数据查出来后,在底层做了处理,我现在需要改成先拿出数据在外层做处理。注意:1、每次查到的数据只有VideoTapeInfo或者VideoRepairRecord两种情况之一 2、 node.go 127-129 这里存在反选逻辑, node.go 127-129 node.go 148-150 这里将部分数据放入map,在 node.go 327-329 这里处理时将其过滤掉了

……..