prompt.md 88 KB

我希望做一个智能体管理和编排平台,主要功能是管理某个目录中的Skills。

每个Skill是一个独立的文件夹,文件夹内必然包含一个SKILL.md文件,文件开头几行固定包含以下结构:

name: {skill name}
description: {skill description.}

分别为Skill的名称和描述。

我希望后端使用 Java 8 (可使用Spring boot 和 Spring AI 框架)实现,前端使用 Vue 3 实现。Skills 放在本机的某个目录中,在后端配置文件中配置目录路径。

前端包含两个页面,智能体管理智能体编排

  1. 智能体管理:程序启动后,读取配置文件中配置的目录路径,查询其中第一层子目录,筛选出内部包含SKILL.md的子目录,然后读取每个SKILL.md文件,提取前几行的namedescription,作为智能体名称和智能体描述,以列表形式展示。如果namedescription为英文,调用大模型翻译为中文后再进行呈现。

页面上方包含“新增”按钮,点开后弹出一个文件上传对话框,选择一个压缩文件,上传完成后,后端在临时目录中解压验证,压缩文件内第一层目录包含SKILL.md文件,且可以解析出namedescription,则新增成功,复制到Skill路径,列表内新增一行;

每一条右侧包含“编辑”和“删除”按钮,“编辑”可以编辑智能体名称和智能体描述,点击确定后对应SKILL.md文件中的namedescription也随之修改;“删除”需二次确认,确认后将对应Skill子目录删除。

  1. 智能体编排:待智能体管理实现后再进行下一步实现。

界面设计需调用 skill ui-ux-pro-max 进行设计,使用深蓝色渐变风格,要求高端、大气、上档次。


我希望增加一个websocket接口,前端请求时,先快速返回英文响应,翻译完成后推送中文响应,页面更新(不要整个页面刷新)


翻译完成后,前端更新了,但点击“刷新”后,原来是英文的skill又变成了英文,且不会再变回中文了,请排查并解决。


我希望创建一个前后端合并部署的Skill,放在项目路径/.claude/skills下。支持Springboot后端+Vue前端。Skill包含几部分功能:首先根据给定的端口号,修改后端部署端口号;然后修改后端相关配置,支持将前端打包后的dist文件放到静态资源目录下运行;除/api端点外,其他不合法路径直接跳转到前端界面首页;同时创建run.bat和run.sh脚本,作用是:直接运行,执行前端打包+旧前端dist清理+新前端dist复制+后端打包+后端运行;run.bat build 或 run.sh build,执行除后端运行外的所有操作。请按照skill规范帮我创建。


现在还有问题:

  1. 直接通过localhost:<端口号>进入页面,能够正常显示,且自动跳转到路径“localhost:<端口号>/management”,但是在这个路径执行浏览器刷新,则会直接变成空白页面;
  2. 页面提示websocket连接失败。 请解决。

现在,我希望新增一个页面,标签管理。内部可以创建标签组,每个标签组作为一个标签分类维度。每个标签组在创建和编辑时,内部为树状结构,树中的每个节点都是标签。标签可用于智能体、Skill等,一个智能体可对应多个标签。每个标签组均能够修改、删除;标签组里的每个节点也均可以新增、修改、删除。标签组创建时,默认创建一个根节点,名称与标签组名称保持一致,用户可以对该节点改名。用户对树的操作,类似于XMind对思维导图的操作形式。


需要无限层级;同时前端页面中,添加标签时,请弹出对话框进行标签名称输入;删除标签时,也弹出二次确认对话框进行删除,删除确认按钮用中文的“确定”和“取消”。


再进行一些修改:

  1. 标签右侧增加“编辑”按钮,弹出对话框进行标签名称的编辑,而不是现在双击编辑的方式;
  2. 删除按钮由“-”号变为垃圾桶logo;
  3. 多层标签树展开后,每一层级的左侧层级竖线,缩进距离与标签缩进距离不一致,导致看起来很奇怪,请修改。

下面,实现智能体编排功能。

  1. 首先展示一个当前编排过的智能体工作流的列表,展示工作流的名称等关键信息。

  2. 点击“创建”,打开工作流创建界面,参考Dify的工作流编排界面(请搜索后完善),左侧工具栏中包含“用户输入”、“大模型处理”、“智能体”、“输出”、“条件分支”等节点;中间是画布,背景为浅色网格,通过可视化、拖拽的形式,以及节点连线功能,将其他Skill和智能体编排起来;右边为属性工具栏,点击某个节点时才会出现,根据节点类型,显示不同的表单:

    1. 用户输入:包含输入变量的创建,可不创建、创建一个或多个,每个变量包含变量名、中文名、变量类型、变量描述等字段。

    2. 大模型处理:包含模型选择下拉框、系统提示词、用户提示词等输入框,其中用户提示词输入框中可以插入1中用户输入的变量(以变量名表示)。

    3. 智能体:选择智能体列表,列表中为系统中的Skill和已编排好的其他智能体;

    4. 条件分支:初始化有一个IF字段,用户可以在后面用自然语言写条件;用户可添加零个、一个或多个ELIF,均可以用自然语言写条件;

    5. 输出:可以选择用文本还是Json对象输出。

除输入、输出和条件分支外,每个节点左侧和右侧各有一个连接点。输入节点只有右侧有连接点;输出节点只有左侧有连接点;条件分支左侧有一个连接点,右侧有(ELIF数量+2)个连接点,后面可以跟相同数量的节点。点击“完成”,完成工作流的创建。

  1. 创建后,返回工作流列表界面,每个工作流有编辑和删除按钮。删除需二次确认。

目前只有“条件分支”节点可以被拖入画布,“输入”节点拖入画布后只能显示一个输入框;其他节点无法被拖入画布。“条件分支”右侧节点数也不能随着ELIF数量动态调整。请修复。


目前,条件分支节点右侧的连接点还是固定只有一个,我希望它能够有(ELIF数量+2)个,假如节点高度为100px,ELIF数量为2,那么右侧连接点有4个,分别位于20px、40px、60px、80px的位置。 另外,输出节点拖入画布后,显示有问题,节点下方叠加了一个白色方框,请检查。


增加连接线删除功能;同时,如果可以的话,我希望使用曲线连接线,这样一个连接点有多条连接线时,会更容易分辨一些。


skills-manage是别人的项目,只给我们做参考用,忽略它。现在我想实现:

  1. 智能体编辑时,如果名称和描述是英文,对话框中出现翻译按钮,翻译为中文。
  2. 我想为智能体添加输入输出的设置,请先思考实现方式,让我选择。

Uncaught (in promise) TypeError: Failed to resolve module specifier "@/api/translation". Relative references must start with either "/", "./", or "../". 错误位于:management:1


/plan 现在,智能体列表进入时会触发翻译,编辑时点击翻译按钮也会触发翻译,我希望点击翻译按钮后,能够复用列表翻译的结果。具体而言:1.如果点击翻译时,列表中的翻译未完成,那么该接口阻塞,在列表翻译完成后返回,翻译结果与之保持一致;2.如果点击翻译时,列表中的翻译已完成,直接返回缓存结果,也与之保持一致。


很好,接下来继续实现输入输出设置,注意,inputs/outputs字段放到description下方,metadata上方(若有)。


请思考智能体编排后,按工作流执行的调度引擎实现。不要做得太死板,要融入skill的思想,单个节点执行时要灵活,总体工作流执行时要遵循格式化输入输出,确保工作流不丢节点


几个问题:

  1. 图中的节点,类型变成了英文,请保留中文,与左侧工具栏保持一致;
  2. 运行工作流前,输入对话框,透明度过高,导致对话框与下方内容重叠显示;
  3. 工作流中某节点运行时,位置会漂移;
  4. 运行结果弹出后,透明度也过高,同样内容重叠。我建议,透明度调低;同时右侧工具栏分成tab页,可分别展示“节点属性”和“运行结果”。“运行结果”中包含输入、大模型、智能体、输出等工作流中各节点的摘要信息,我希望界面也要美观,将各节点涉及的变量以节点对应的颜色和等宽字体表现出来。

为什么我在某次执行run.sh重启后端服务后,前端变成了最开始的版本?很多功能都不见了


我的项目本来功能完备,但由于未知原因,代码回滚到了之前版本。好在我与大模型的协作历史还在,请根据@chat-history-202606100530.jsonl,查找大模型帮我做的改动是否丢失。若未丢失,跳过,往下查找,直到找到丢失的改动,然后重做后续的左右改动。


帮我创建项目开源准备Skill,大致步骤如下:

  1. 如果没有README.md,使用 readme-gen Skill创建;如果存在,根据项目最新进展更新;
  2. 如果没有.gitignore,创建;然后将项目中不适合开源的内容写入;
  3. 如果配置文件中存在密码、api key等敏感信息,写入.gitignore,然后创建“文件名.example”,将敏感信息抹去。同步将部署步骤(复制.example并修改)写入README.md;
  4. 无需生成CONTRIBUTORS.md、PR请求模板等用于协作的文件。

再增加一个步骤,调用 git-commit-log-gen Skill 生成提交记录并输出。


我希望实现一个功能:当A、B两个节点通过连接线连接起来的时候,如果:

  1. 当A节点定义了输出,B节点未定义输入,那么B节点采用A节点的输出;
  2. 当B节点定义了输入,A节点未定义输出,那么A节点采用B节点的输入;
  3. 当A节点定义了输出,B节点定义了输入,且输入和输出变量一致,那么不采取操作;
  4. 当A节点定义了输出,B节点定义了输入,且输入和输出变量不一致,那么连接线标红,点击连接线,右侧属性区域出现A节点的输出、B节点的输入,用户需通过勾选,选择要保留的输入项和输出项。

进一步扩展到多个节点的情况,当A和B同时连接到C节点时,假如:

  1. A的输出+B的输出=C的输入,那么不采取操作;
  2. 当A未定义输出,B定义了输出,且C的输入包含B的输出,则自动计算A的输出=C的输入-B的输出;(更多节点同理)
  3. 当A和B均未定义输出,C定义了输入,那么需在属性区域分配C的哪些输入由A给出,哪些由B给出;
  4. 当A的输出+B的输出≠C的输入,或存在其他无法处理的情况,用户需手动分配输入和输出变量。

另外,输入和输出的数据类型,可以为文件和目录的路径,增加该项配置。


输出的参数也定义变量吧,不只选择文本和json类型了。 大模型处理同样可设置输入变量和输出变量。 条件分支也可以接收前方的输出变量,作为条件判断的依据。同时,它接收的所有变量均作为它的输出,透传至下个节点 智能体节点,在选择智能体后,对应智能体的输入和输出就是该节点的输入输出,但可以编辑。


请统一Skill输入输出参数的类型和工作流节点输入输出参数的类型,并都用同样的中文来表示。 另外,“输出”节点接收不再保留“文本”和“JSON对象”下拉框,而是默认保留一个result字段,类型可以选择各种参数类型。


我可能走入了一个误区。请帮我思考:Skill本身是为了让技能执行时更灵活,它运行时,很多情况下不是必须严格约束输入和输出。例如代码审查Skill,不一定输入源代码,有可能是读取目录中的文件。那么,我是否应该硬约束输入和输出?还是设计两套机制,可以切换?还是做一些软约束?


有些情况下,上游Skill和下游Skill,输入输出不一定完全匹配,例如上游“写代码”Skill,针对src子目录进行写入;下游“代码审查”Skill,针对整个目录进行审查。如何处理这种情况?


不是的,我的意思是,尽管输入和输出不一定完全匹配,但在业务上,这是合理的。我希望想办法来兼容这种情况,保留灵活性。请进一步思考。


将你的思考先保存到temp/docs目录下,以markdown的形式,我稍后再来仔细考虑这个问题。现在我们先干其他工作。


接下来,我们将智能体和Skill的概念区分开来。Skill作为“技能”,是更小粒度的能力;而智能体是将多个技能和其他智能体编排起来的成果。所以,我们的“智能体管理”菜单修改为“技能管理”,且该页面所有的“智能体”均修改为“技能”。然后,创建上级菜单“智能体管理”,下方包含“技能管理”和“智能体编排”两个菜单。


我们来完善技能编辑功能。点击“编辑”按钮之后,原来的弹出编辑对话框形式,修改为跳转页面,页面带返回按钮,这样编辑区域可以更大一些。编辑的内容,除自动识别的SKILL.md中的“名称”、“描述”、“输入”、“输出”之外,增加正文编辑区域,将正文部分加载至该区域进行编辑。同样提供翻译功能,支持将英文正文翻译为中文。参考vscode中对markdown格式的语法高亮,实现markdown关键字和符号的高亮。另外,在适当位置增加“高级编辑”按钮,点击后,页面左侧变为目录树形式(不影响菜单栏),将对应Skill目录中的所有文件列出,可以在目录树中新建目录、新建文件等,交互方式类似vscode中的新建方式。新建后,点击对应文件,右侧变为文本编辑区域,可以对文本进行编辑,支持各类后缀(json、py、md、java等)文件的对应关键字高亮。


在工作流中增加“技能”节点,与“智能体”行为类似。


将网页标题修改为“智能体管理平台”


Skill编辑时,正文内容不要包含---内部的部分,以及后面的一行空行,直接从正文开始。保存时,进行拼接。


保存时逻辑再完善一下,原有---中的内容,除name、description外,可能还有metadata等字段。所以如果我们进行了修改,那么只替换name、description中的内容即可;如果加了inputs和outputs字段,紧跟到description之后即可。原有metadata等字段不要删除。如果这些字段未被---包裹起来,再处理一层,将之用---包裹,并确认其与正文间包含一行空行。


后端报错: [翻译] 大模型调用异常: I/O error on POST request for "https://open.bigmodel.cn/api/paas/v4/chat/completions": Read timed out


关于Skill正文的翻译,后端已正常返回结果,为什么前端未更新为中文?


我有3个skill,点开第2个的编辑按钮,请求体发送了第2个skill的正文翻译请求,但返回结果没有对应响应,只有第1个的响应。对应日志如下:


一般而言,大模型的翻译速度最慢为40字符/秒。针对正文过长的情况,请动态设置前端超时时长,留出双倍的时间等待响应返回。


第一次点进“高级编辑”时,左侧总是空的,需要再次点进去才能加载目录结构,请检查。


目录结构展开的层级有问题,例如某个目录下,包含A目录、B目录、C文件,那么A目录展开后,A目录下的文件展开后,会显示到C文件下方,且为平级显示。请修复。


在目录中新建文件和新建目录的logo不太准确,修改一下;另外,不要用原生的弹出框进行输入,用统一界面风格的弹出框。


初次提交中,我把backend/src/main/java/resources/static/提交了,实际上不需要。我希望撤销提交,从暂存区删除该目录,然后重新提交;然后把本次修改生成第二次提交。请帮我生成git命令序列。注意:不要执行。


增加大模型管理(作为独立菜单)、设置默认大模型功能,大模型包含URL和API Key等配置字段


增加一个“测试连接”功能吧,同时参考CC-Switch项目的功能,进行功能完善。


  1. 工作流中,大模型的配置,下拉框改为“大模型管理”中已存在的模型,默认选中默认模型。
  2. 技能管理中,每个Skill的输入,默认不选中“必选”框。
  3. 工作流中,左侧新增“智能操作”节点,意思是非预置的智能体。属性表单中至少应包括“操作要求“,大块文本框类型。与其他节点一致,可选添加输入和输出字段。
  4. 工作流中,画布里的智能体节点、技能节点、智能操作节点,均增加模型选择配置,以支持简单任务路由至简单模型。
  5. 每个智能体节点、技能节点、智能操作节点、大模型处理节点,均支持配置“失败后是否终止工作流”,单选框,“终止”或“跳过”。相应地,后端执行引擎需要区分节点的运行结果,“运行成功”、“无需运行”(例如创建文件的操作,文件已存在,则无需运行,可视为成功)、“运行失败”。只有“运行失败”状态需要触发终止或跳过的判断。

我想将所有的“输入”改为“前置数据”,因为某个步骤的输入不一定是由上个节点传入的,可能是更前面的节点。是否可行?


为什么技能加载不出来了? 后端报错:


在大模型配置时,我希望将URL直接配置到/completions,因为openai标准默认会在URL后添加/v1/chat/completions,但GLM的URL却是以/v4/chat/completions结尾的,会变成/v4/v1/chat/completions,出现问题。


软件包含标签管理功能,我希望对标签和标签组的导出格式形成一个规范,以json格式存储,一个文件即可存储多个标签组的数据。然后做一个功能,可以一键导出和一键导入,导入时,如果标签组有重名,询问是覆盖标签组、合并标签组内的标签、还是跳过该标签组。 最后我既需要完成标签导入导出的功能,又需要出具一个标签存储和导入导出的规范,以markdown形式存储到docs中。


实现技能和智能体的打标功能,可以打0个、1个或多个标签,可以打同一个标签组内的多个标签,可以打不同标签组内的多个标签,可以打非叶子节点的标签。将这个通用的打标原则也补充到@docs/tag-import-export-spec.md规范中。(md可以改名)


你的@tag-system-spec.md中,示例未包含多级标签的情况,请补充。


将标签组和标签设计、存储、导入、导出、打标的相关内容生成一个skill。


刚刚你实现了自定义completionsPath的功能,我想问,假如说我application.yml中的相关配置发生了变化,对应大模型的配置能否也跟着变化?这样更加灵活。


帮我规划技能和智能体版本管理功能。我们简化模型,假如某技能有3个版本1,2,3,然后当前版本从3回退到2,然后又在此基础上做了修改,那么按时间顺序,版本升级到4即可。


基本可以,但高级编辑模式下,只需要在skill保存时生成版本,文件修改删除时不用。可实现版本对比(diff)、版本备注编辑,不用选择性回滚单个文件。


现在点击节点,点击右键,弹出的是浏览器自身的菜单。请实现工作流中节点的删除操作。


我希望技能可以分类管理,类型可以包含无限层级。类型直接在技能卡片左侧新增的类型树中管理即可,无需单独界面。类型创建和编辑时,输入框要和当前界面风格保持一致。 另外,将技能的搜索和分页显示做了吧,搜索只需要一个输入框即可,可以在名称和描述中进行搜索。


智能体也做成卡片形式,除智能体名称外,显示智能体工作流缩略图(可以用带颜色的圆圈来表示对应的工作流节点,简化显示)和创建时间。 另外,技能和智能体的标签设置功能做了没?请确认是否已实现技能和智能体的打标功能,可以打0个、1个或多个标签,可以打同一个标签组内的多个标签,可以打不同标签组内的多个标签,可以打非叶子节点的标签。


打标签时,标签显示比较奇怪,标签组名称缩进过大,标签缩进过小且行距过小;另外,标签组中新增一级标签后,打标签时不显示。请统一修复。 另外,工作流创建时,默认缩放级别在当前基础上缩小5级吧。


智能体页面也像技能一样,新增分类管理、搜索和分页显示吧,它的分类和技能分类不互通,各自具有独立的分类。


工作流编排完成后,我希望将Hermes作为它的执行引擎。请帮我调研并给出解决方案。


我希望在结果里点对应节点,能看到详细的操作执行和工具调用日志


请确认标签管理的逻辑,名为“A”的标签组,根节点是否也为A?如果在根节点同级新建了节点,也就是有两个根节点的情况,是否能处理?


你错了,现在创建时会出现每组多根的情况,前端界面可以通过新建标签,在根节点层级新建节点。修改一下,右侧不再显示和标签组同名的虚拟根节点,这样直接创建就是一级标签,而非根节点层级的标签。这样虚拟根节点也不会被改名。 另外,在给技能和智能体打标签时,弹出的打标界面,标签组显示“> 组名”,一级标签直接靠左显示,会造成标签位置比组名更靠左的情况,请修复。标签之间的行距也过小,请修复。 我更希望所有标签组以思维导图树来展示,平铺在打标签对话框中。父节点和子节点之间使用贝塞尔曲线连接,节点使用圆角矩形包裹,小一些。未选中时标签为白色,选中后为绿色,并出现在上方。


我希望打标时,思维导图里能够带标签组作为根节点,但该节点无法选取。所有节点再小一些,比文字稍高一点点即可。圆角矩形的圆角半径大概是矩形高度的一半。导图的线、圆角矩形的外边框、矩形内的文字,都是白色,矩形内不填充颜色。选中节点后,矩形外边框和文字变绿。上方标签样式不用变,但颜色变为绿色。


我想实现智能体(工作流)运行结果记录功能,按智能体,记录各智能体运行结果,类似编排界面右侧的结果界面。该功能单独列出一个菜单。


我觉得标签也可以显示到卡片最下方,也以空心圆角矩形的形式


每个Skill都有其适用的场景。我希望实现一个功能:在工作流编排界面,增加一个“自动关联”按钮。点击后,假如说某个Skill的SKILL.md或智能操作的工作流程中,涉及到了隐式调用其他Skill的场景,那么在图中以虚线画出相关的技能,并以虚线箭头指向源头Skill或智能操作。由于部分Skill的描述为英文,故应以语义而非字符串匹配来识别。而且这个操作还要快,不需要过于深度思考。


工作流编排界面,智能操作的输入框,我希望拥有一个按钮,如果觉得编辑区域太小,可以扩展成mono editor弹出框,按照md的高亮方式编辑。


现在,我希望修改工作流的执行逻辑。不再单纯传递变量。节点与节点之间传递“上下文”,包括:

  1. 一个工作目录。每个工作流执行时,服务器为其创建一个临时工作目录。内部所有文件都能被所有节点看到。“输入”节点可以上传多个文件、文件夹,上传后落到该目录下。技能和智能体也可以将运行成果落到目录下。
  2. 全部变量。每个节点传给后一节点时,包括自己输出的变量和之前节点输出的所有变量。 保留扩展性,后续还可能传递git分支状态等内容。 一个节点接收到所有上下文输入后,与自己的所需的前条件对比,例如需要README.md文件和weather变量(均为必填),但上下文未提供,则按失败处理,根据配置选择终止或跳过。输出节点可以输出上下文中的变量,以及工作目录的打包下载。

技能和智能体的分类栏,让它在最矮的情况下也通到页面底部吧,否则右侧技能和智能体的数量很少的情况下,太矮了


让技能搜索时,也能搜索到翻译后的文字吧,否则纯英文技能较难搜索。


模型管理页面,色彩为灰黑色,与其他页面不一致,风格统一一下。


呃,没必要改成卡片网格布局,列表即可,颜色与其他页面保持一致就行。改回来吧。但按钮样式、弹窗等保持现在改过的即可。


工作流里,输入节点,还不支持上传目录,请完善。


关于模型选择:

  1. 模型处,除默认模型外,增加设置调用顺序,然后创建后端接口,外部业务通过该接口调用模型,后端自动路由至默认模型,若默认模型不可用,按照调用顺序依次调用,直至成功或全部失败;
  2. 系统内部使用,在翻译、关联分析等需要大模型调用时,优先使用application.yml中配置的模型,若不可用,按1.中的顺序,调用“模型管理”中配置好的模型。
  3. 检查工作流节点中的模型选择逻辑。我观察到,当某个工作流节点不选择模型时(即表示使用默认模型),那么我在模型管理中修改了默认模型的配置,节点使用的还是之前的配置。只有在下拉框中重新选择模型时,才会更新。我希望模型管理中修改后,工作流节点能及时感知到。

版本管理中,假如从v2回滚到v1,然后再次保存,没有生成v3版本,而是又生成了v2,请修复。


现在工作流中,连线还会判断输入和输出的匹配,但只计算了前后两个节点。根据我们的设计,现在连线传递的是整个上下文环境,所以:假如A节点->B节点->C节点,A有output1,B有output2,C需要output1和output2,那么B和C节点中间也应该是绿色的线。


如何看出技能的当前版本?没有地方显示。而且,当前版本不应该有切换按钮。


智能体的版本管理是否尚未实现,我也需要像技能一样管理智能体的版本。


有哪些数据保存在H2数据库里?能否使用json保存数据?两种方式有何利弊?


折中方案:

  • 配置类数据(ai_model、tags、categories、workflow 定义)→ JSON 文件
  • 运行日志(workflow_run、workflow_run_node)→ 保留 H2,或独立用 SQLite/日志文件

现在,模型管理里,模型的测试连接、编辑、删除等操作都没有了,调用顺序的数字后面有两个小点,请检查并修复。


几个操作按钮再紧凑一些,每个按钮用图标表示,鼠标指上去给提示,尽量不要换行;再加一个“复制”按钮,点击后生成“原名称(复制)”的新模型。


  1. 我记得智能体和智能操作使用Hermes作为执行引擎,现在好像没有生效,确认一下;
  2. 关联分析后,添加到工作流里的节点,外框作为虚框;它与原节点的连线,不要使用原有的连接点,可在外侧再套一个虚线矩形框,由它指向原节点,多个技能框到一起;如果该虚框在原连接点正上方,则从底边中点拉一条虚线,指向原节点顶边中点;如果该虚框在原连接点正下方,则从顶边中点拉一条虚线,指向原节点底边中点;
  3. 工作流新建后,点了“保存”,“运行”按钮应即刻亮起,而非退出重进才亮起;
  4. 工作流运行时,临时工作目录中,先将所有skill文件夹复制到工作目录/.hermes/skills目录下,再启动Hermes执行,以使技能生效。

我观察到,hermes-bridge中需要:

base_url = os.environ.get("HERMES_BRIDGE_BASE_URL", "")
api_key = os.environ.get("HERMES_BRIDGE_API_KEY", "")
model = os.environ.get("HERMES_BRIDGE_MODEL", "")

我希望将backend代码中application.yml中的取值赋给hermes-bridge的执行环境。


我的hermes工作了,但我的临时目录里只有一个文件,为什么我让它基于本目录内容生成README.md,且不允许读取git历史,它能把上级目录的代码也写入README.md?请帮我检查工作目录路径是否正确。工作目录为@backend\data\workflow-runs\2\4f05fc53


hermes提示因工具调用次数已达上限,未能通过 write_file 工具直接写入文件。限制从何而来?


请排查,为什么老报错:


Hermes执行时,思考过程流式输出,这导致工作流中节点运行结果出现很多条,每条一个token。我希望它的思考过程也在前端流式输出。


现在执行报错:未知节点类型:UserInput


能否彻底规范化,而非修修补补???


再体系化考虑一下变量的传递和展示,举个例子,现在llm的输出不会赋值给定义的result变量,而是node开头的一个变量。是否通过额外的输出指令让它按定义的变量输出?其他节点也有同样的问题


都可以按你的推荐来。同时考虑每个节点的输出如何符合outputs规范。然后将整个方案保存到docs下,md格式。待我确认后开始实现。


修改:本期需要做llm按outputs结构化输出。


技能管理、智能体管理、模型管理中,都有“新增”和“刷新”按钮,但三个页面中这两个按钮风格完全不同,导致割裂。请统一风格和样式。 运行记录页面,现在已经按照智能体将所有记录列出了,我希望增加一个功能,点击某个智能体,将其运行记录折叠起来。这样便于观看。当然,初进页面还是默认全部展开。 具体到运行结果处,当前每个变量左侧为变量名,右侧为值,但左侧变量名很长时,会压缩右侧值文本框的宽度,建议改成两行。这在运行记录页面和工作流编排页面都统一修改。 模型管理页面,模型表格颜色修改一下,与其他页面颜色(深蓝)保持统一。


现在表头变了,表格内容背景还是灰黑色。表头其实太亮了,再调回去一些吧,表格内容背景请修改


表格删除时,提示还是Cancel和Confirm,修改为中文,提示框也修改为蓝色调吧;另外,技能管理处,删除提示框中文字是绿色和黄色,不一致。 你应该把模型删除、智能体删除、技能删除的提示框都做成中央的弹出框,蓝色调,风格一致。


另外,hermes-agent执行时,工作目录虽然设置为backend/data/workflw-runs//,但是实测它还是能读到上层目录,我让它在工作目录生成README.md,它生成了整个backend的README.md。请严格控制hermes的目录权限!!


我想增加智能体模板功能,最终的效果是:点击创建智能体时,弹出几种模式供选择,如工作流编辑模式、自然语言编辑模式、空白模式等,每种模式一个正方形按钮,按钮上有模式名称和节点缩略图(与智能体页面缩略图保持一致)。对应的,我需要一个页面来创建和编辑这些模板。


目前节点缩略图(包括工作流模板、智能体列表中的)只显示几个节点的首个文字。我需要它在此基础上,保留节点之间的位置关系和连线,这样缩略图就更形象了。为了美观,节点中可以不保留文字,只用对应颜色表示也可以。


智能体模板里:

  1. 节点无法删除和拖动;
  2. 连线有问题;
  3. 输出节点样式又出现了问题,节点下方叠加了一个白色方框。
  4. 没有节点属性编辑区域。 请把智能体编排的整个编辑区域复刻到模板编辑里。

现在,我想增加知识库功能,包括文档数据管理、结构化数据管理、知识图谱管理。文档数据提供文档上传功能,上传后先分类管理,然后直接向量化入库;结构化数据提供各类数据源管理功能,可以查看数据源内表和数据(可参考@beekeeper-studio项目的数据源管理,甚至直接复刻即可);知识图谱提供图谱数据源管理功能,可以查看图谱。


Milvus、Neo4J实例尚未开通,智谱embedding模型还未开通,先做功能,等实例开通后再验证。另外,将现在的设计保存到docs下,作为指导


当前存在以下问题:

  1. 请实现技能和智能体的分类选择功能;
  2. 工作流中,点击“自动关联”后,生成的虚线框有以下问题:①高度不够高,无法包裹住识别出的技能;②左右位置不在被识别节点的中间,即没有水平居中对齐;③无法拖动,我希望它可以和技能一起组合起来被拖动;
  3. hermes-agent在某次执行时,它的思考过程如下:“先澄清了一个歧义:系统提示声明的当前目录是 ...\e2e0ba03,但 os.getcwd() 返回的是 backend 根目录。” 这是不是说明,java在调用hermes-agent执行任务时,还是错误地给了backend作为根目录?之前的修复未生效?请检查;
  4. 将“文档数据”“结构化数据”“知识图谱”菜单降级,并合并到一级菜单“知识库管理”中;“知识库管理”放到“智能体管理”之上;
  5. “技能管理”和“智能体编排”页面,对应数据项过多时,滚动不要带着左侧的分类树一起滚动;分类树中若分类过多,设置单独的滚动条,在分类区域上下滚动;
  6. 点击“创建智能体”后,弹出模式选择框,右上角包含两个“X”按钮;
  7. “技能管理”和“智能体编排”页面,左侧分类树里的数量不对,会随着分类的点击变化,很奇怪,请修复。

智能体编排中,智能体的分类设置不生效,请检查。


现在,我在公网IP为82.156.83.248的服务器上部署了Neo4j和Milvus,Neo4j端口号为7473,7474,7687;Milvus端口号为19530,9091。

Neo4j: 用户名: neo4j 密码: IDaXlPq3p3ES4h9BtaFh7Oc 端口: 7474 (HTTP) / 7687 (Bolt) / 7473 (HTTPS) 连接: bolt://82.156.83.248:7687

Milvus: 用户名: 无 (authorizationEnabled: false, 认证关闭) 密码: 无 端口: 19530 (gRPC) / 9091 (健康检查) 连接: 82.156.83.248:19530 (直接连, 不需要用户名密码)

继续我们的知识库开发吧。


新增数据源,点击测试连接,提示密码未提供。另外,请支持达梦数据库。


测试连接:jdbc:mysql://82.156.82.248:3306?useSSL=false&serverTimezone=UTC,提示:Failed to initialize pool: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.


确实IP写错了,但现在报错:Failed to initialize pool: Public Key Retrieval is not allowed


那在创建mysql默认数据源时,示例URL把这个加上。


解析pdf文件时报错:metadata cannot have null values


hermes报错乱码,请帮我看一下什么意思。另外,解决该乱码问题。


两个问题:

  1. hermes思考过程中说,它所在终端的pwd命令输出还是backend目录,而非data/{workflow-id}/{run-id}目录。请再次检查Java给hermes传递的变量和环境。
  2. 运行记录中,建议将智能体和智能操作的思考过程也存储起来。

目前,添加模型并设置成默认后,工作流中节点运行还使用的是原来的默认模型;而且模型那里无法选择,选择了也不会回显到下拉框里。


  1. 工作流节点属性处,选择模型后,仍未回显;
  2. 不管使用默认模型,还是选择某个其它模型,针对某个节点创建hermes进程时,都需要将模型对应的URL、API Key等作为环境变量传入hermes进程。目前应该是直接使用application.yml中的模型,请完善。

  1. 工作流中的某节点切换模型后,模型名称没必要将节点宽度撑大,放不下的可在最后用...代替;
  2. 不管如何设置,Hermes-bridge启动后,调用的模型还是application.yml中的模型。我需要根据节点配置中选择的模型进行调用。仔细检查逻辑。

执行报错:执行失败: 节点 node-2-1781355966894 执行失败: Hermes 智能操作调用失败: Hermes Bridge 返回 HTTP 401: {"detail":"invalid or missing X-Bridge-Token"}


运行记录菜单页中还是没有思考过程记录,只有工作流页面有。我希望运行记录菜单页中也将思考过程显示出来。


自动关联功能,识别成功后,我希望相关技能节点位于虚线框中,现在它们会出现在画布左上方,与虚线框不在一起。同时它们和虚线框要成为一个整体去拖动,不能分开各拖各的。请修复。


我希望在某个恰当的目录下,定义.agentignore文件,仿照.gitignore的写法。其作用是,Hermes相关工作流节点在工作时,应该忽略的目录中文件。例如.hermes目录。被忽略的文件,不出现在_workingDirFiles中,下载工作目录时也不被包含。


思考过程(包括工作流和运行记录中的)支持折叠功能。工作流中,折叠后,仍然接收流式响应,只是不显示而已,展开后还可以继续输出。 另外,现在工作流中,思考过程流式输出,会使Tab页无法切换回“节点属性”。请修复。


对比application.yml和application.yml.example,将更新写入.example文件中。注意,敏感信息不要写入。


自动关联功能,识别成功后,相关技能还是出现在画布左上方,与虚线框不在一起。我需要该节点位于虚线框中,同时技能和虚线框要组合成为一个整体去拖动,不能分开各拖各的。请修复。


我在本地使用pip安装了pymilvus,支持使用本地db文件存储向量数据。参考“https://github.com/milvus-io/milvus”,修改为连接本地的milvus吧


我已经使用pip安装了pymilvus,但是执行: python -m milvus.server --data ./milvus.db 报错: C:\Python311\python.exe: Error while finding module specification for 'milvus.server' (ModuleNotFoundError: No module named 'milvus') 请帮我解决。注意,只解决问题即可,不要帮我启动服务,我自己来启动。


我补充安装了milvus-lite,但是启动时还是报同样的错误。


现在,删除“文档数据”中的文档时,报“服务器内部错误”。


2026-06-23 10:14:54.624 [task-1] INFO c.a.m.service.impl.DocumentPipelineImpl - [流水线启动] doc=2 (火箭军某旅对接实战深训同一课目.docx) 2026-06-23 10:14:56.026 [task-1] INFO c.a.m.service.impl.DocumentPipelineImpl - [解析完成] doc=2 字符数=1223 2026-06-23 10:14:56.054 [task-1] INFO c.a.m.service.impl.DocumentPipelineImpl - [分块完成] doc=2 chunkCount=2 2026-06-23 10:14:56.060 [task-1] ERROR c.a.m.service.impl.DocumentPipelineImpl - [流水线失败] doc=2 err=metadata cannot have null values java.lang.IllegalArgumentException: metadata cannot have null values


重新向量化报错: 2026-06-23 10:44:34.253 [http-nio-2438-exec-2] ERROR c.a.m.c.exception.GlobalExceptionHandler - 系统异常 org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call


  1. 文章分块过粗,一个新闻稿只分了2块;
  2. 增加分块查看功能;
  3. 写入报错: 2026-06-23 11:39:10.096 [task-1] ERROR c.a.m.s.impl.VectorStoreServiceImpl - Milvus 写入失败: HTTP 404 -

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Tue Jun 23 11:39:09 CST 2026
    There was an unexpected error (type=Not Found, status=404).
    2026-06-23 11:39:10.097 [task-1] ERROR c.a.m.service.impl.DocumentPipelineImpl - [流水线失败] doc=2 err=Milvus 写入失败:HTTP 404 -

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Tue Jun 23 11:39:09 CST 2026
    There was an unexpected error (type=Not Found, status=404).
    com.agent.management.common.exception.BusinessException: Milvus 写入失败:HTTP 404 -

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Tue Jun 23 11:39:09 CST 2026
    There was an unexpected error (type=Not Found, status=404).
  4. 检索测试报错: 2026-06-23 11:41:57.274 [http-nio-2438-exec-2] INFO c.a.m.config.AiRequestLoggingConfig - [AI-HTTP] 响应 Body (275 chars):

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Tue Jun 23 11:41:57 CST 2026
    There was an unexpected error (type=Not Found, status=404).
    2026-06-23 11:41:57.274 [http-nio-2438-exec-2] INFO c.a.m.config.AiRequestLoggingConfig - [AI-HTTP] ========== 请求结束 ========== 2026-06-23 11:41:57.275 [http-nio-2438-exec-2] WARN o.s.a.r.a.SpringAiRetryAutoConfiguration - Retry error. Retry count: 1, Exception: HTTP 404 -

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Tue Jun 23 11:41:57 CST 2026
    There was an unexpected error (type=Not Found, status=404).
    org.springframework.ai.retry.NonTransientAiException: HTTP 404 -

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Tue Jun 23 11:41:57 CST 2026
    There was an unexpected error (type=Not Found, status=404).

目前我上传了一则新闻,分块还是2块,且2块均显示“未向量化”。向量化按钮在哪里?是否是因为失败了才显示“未向量化”?


  1. 根据语义进行分片,而非chunk-size;
  2. 针对每一片,增加一个"向量化"主按钮让操作更明显;同时在文档处增加向量化按钮,给所有分片向量化;
  3. 最后看日志,分析为向量化原因

向量化报错: ERROR c.a.m.c.exception.GlobalExceptionHandler - 系统异常 org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Method parameter 'chunkId': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "undefined"

    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.convertIfNecessary(AbstractNamedValueMethodArgumentResolver.java:301)
    at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:136)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)
    ...

Caused by: java.lang.NumberFormatException: For input string: "undefined"

    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
    at java.base/java.lang.Long.parseLong(Long.java:711)
    at java.base/java.lang.Long.valueOf(Long.java:1163)
    at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:206)

给我把插入Milvus时的详细日志打出来,包括调用Milvus的协议、端口号等


分支1:@SuperMew目录是一个与RAG、向量化、知识库等相关的参考项目。请遍历该项目,告诉我这个项目主要干了哪些工作,在@docs下生成一个super-mew-readme.md,重点聚焦于其技术栈、Embedding的具体方法以及必需依赖等方面。


参考@SuperMew项目自身文档@SuperMew/README.md及我对其的补充文档@docs/super-mew-readme.md,实现本地Embedding(不再使用智谱Embedding),需要实现稠密向量 + 稀疏向量、三级分块、Leaf-only 向量化存储,尽量复用(复制)SuperMew项目中的代码。暂不用实现检索相关功能。有需要我决策的内容,给我提出。


使用slf4j,实现日志按天打印功能,并实现30天后自动清理


查看@backend/logs/agent-management.log中的最后一次启动日志,解决子进程端口占用不断重启的问题。


增加分块内容查看功能。


请告诉我分块的具体算法。为什么现在总是在句子中间分块?以及为什么分块完成后,每个L3级子块都没有了,。;等中文标点符号?


修改。我的要求:

  1. 所有L1加起来,文字内容与原文一致,不能少标点;
  2. 例如某L1划分为两个L2,那么两个L2加起来,文字内容与L1一致,不能少标点;
  3. 划分位置应在标点处;
  4. 尽量根据语义进行划分,例如一段话中,根据标点分为ABCD4个子句,AB说的一件事儿,CD说的一件事儿,那么不要把BC划分到一起。

我表达的有误,我允许overlap存在,但需要划分在合理的地方(标点处);假如某L1划分为两个L2,那么两个L2加起来,去掉overlap后,文字内容与L1一致,不能少标点。


请查看后端日志,又出现了数据库连接未断开的情况。设计机制,在后端进程被杀死的时候,清理数据库连接。


目前的语义分块原理是什么?请详细解释。


所以现在并未使用bert等框架进行句子的语义理解和分块是吗?


将当前的语义分块、向量化等实现方式、完成内容、相关说明等写入docs目录,你自己命名。


就算使用语义进行分块,我也允许L2和L3级别出现重叠,例如,一个承上启下的句子,就应该既划分到前一个块,又划分到后一个块中。更新算法和md文件。


又出现了,杀Spring boot进程后,Embedding Bridge进程未杀死。请先杀掉子进程,然后检查原因。


工作流中的自动关联功能,识别成功后,相关技能还是出现在画布左上方,与虚线框不在一起。我需要该节点位于虚线框中,同时技能和虚线框要组合成为一个整体去拖动,不能分开各拖各的。请修复。 该问题之前已经让你修复过3次,你的解决思路:改为先添加 parent 节点待 nextTick 后再添加子节点(parentId + extent:'parent'),子节点 draggable:false,.base-node 设 pointer-events:none 实现整体拖动。 但修复未生效。


停止验证,我手动验证了修复效果。目前可以将虚线框和技能一起拖动了,但技能(或多个技能的组合)没有与虚线框左右居中;另外,如果拖动了其他工作流节点,再来拖动虚线框,会导致那个节点和虚线框一同移动。


左右居中实现了,但联动拖动的问题还没解决。


针对自动关联的技能,增加一个自适应连线功能:如果虚线框被拖动到相关节点的上方,那么虚线修改为虚线框底边中点和相关节点顶边中点连线;反之,修改为虚线框顶边中点和相关节点底边中点连线


功能实现了,但做反了,请修改。


智能体模板界面,从“空工作流”切换到其他工作流,工作流中的连接线可以正常显示;但从一个工作流切换到另一个工作流,连接线就跑飞了,不再正常连接到应有的两个节点的连接点。请检查并修复。


当前,图数据库Neo4j的数据,查询后未渲染出来。请检查。


节点增加动态距离功能,过于紧密的节点慢慢互相推开。另外,根据review建议修改


结构化数据库中,针对某个mysql数据源,需要点击一下“刷新”按钮才能刷新出表结构;另外,我希望增加某个表的数据查看功能(不用写SELECT语句),同样可设置行数限制(如100)。


节点动态距离功能(斥力)仍未生效。


你理解错了,我不是指你生成的节点距离近,而是用户在拖动节点后,该节点可能和其他节点距离过近,此时需要斥力,让节点动态平衡


工作流中,必须包含一个输入节点和一个输出节点,且需要通过其他节点连接起来,保存时需要进行判断,不满足要提示,并拒绝保存


工作流界面,版本回滚时,未清空原画布,对应版本工作流和原工作流重叠在一起。


我要为工作流提供外部调用接口,输入可以以Json方式输入自定义变量,还可以跟随上传文件列表、目录列表等;输出既要包含每个节点的思考过程(流式输出,可通过另一个接口获取),又要包含最终输出的变量和工作空间下载。请帮我设计接口规范,并写到docs目录下。


针对刚刚实现的接口,帮我生成完备的REST调用测试,并带详细的输出。需要上传的文件和目录,生成到temp目录下


部分测试用例是否是并行或异步执行的?我希望看到TEST01彻底执行完毕后,延迟1秒,启动TEST02(即使异步,也要等查询结果的请求返回后再开始下一个TEST)。另外,请使用workflow ID为2的工作流进行测试,以获取流式输出。该工作流是生成README.md的工作流,所以请进行三个测试:只输入变量,上传多个源代码文件,以及上传多个源代码目录。 把请求体也输出出来。


查看@temp/ext_api_test_wf2_s1.log,解决报错


工作流中包含技能时,运行报错:未知的节点类型:skill


针对temp目录里的测试脚本,我希望它生成的日志包含整个调用流程里每一步的请求Url、请求头、请求体、响应类型、响应体等,流式输出结果也要写全。


保留这两个todo。现在,我们来进行技能的修改。在每个技能编辑页面,增加一个复选框,表示该技能具备生成其他技能的能力;然后创建一个菜单页“技能生成”,选择具备生成其他技能能力的技能,然后输入技能名称、技能描述、技能需求等信息,点击“生成”,系统调用hermes-bridge,加载被选择的技能生成技能,创建临时目录并设置pwd(流程类似于工作流的执行流程),根据需求生成技能,放到工作目录下的技能英文名目录中,然后再复制到全局技能目录中,完成后跳到新生成技能的编辑页面。


技能生成处,源技能为空,但我已经设置了两个技能可以有生成能力。请检查。


我有一个技能,在SKILL.md中名称为“military-workflow-skill-creator”,但目录名称为“military_workflow_skill_creator_codex_v1_1_1”。执行时,Hermes寻找该技能,报错:agent.tool_executor: Tool skill_view returned error (0.01s): {"success": false, "error": "Skill 'military-workflow-skill-creator' not found."}。规避该问题,必要时可查询skill规范。


修改一下逻辑。现在,我要将技能名称这个概念进行明确,分为技能名称(严格按照skill规范,统一用 kebab-case 短横线命名文件夹,禁用大写 / 空格 / 下划线)、技能展示名称(可包含中文、下划线等字符)。技能上传和保存时,自动将技能目录名修改为技能名称。界面展示时,仍按现在的展示方式,但首行展示的内容修改为“技能展示名称”或其翻译。


下划线开头和结尾,也判定成了合法kebab-case,我理解你会把下划线规范化(删除),但提示不应为合法,而应提示名称会被规范化为去除下划线的形式。请修复。


在temp中写一个 curl 脚本,调用临时迁移接口,扫描全部 skill,将 folderName 与 SKILL.md name 不一致的统一重命名。


将选中部分进行修改。 系统提示词固定为:“使用简体中文回复,使用简体中文创建技能。”,不再将原有技能创建器的内容写入。 用户提示词中,buildUserMessage方法里,提示词“请生成一个新的技能(Skill)。”修改为“请使用技能{xxx}生成一个新的技能(Skill)。” xxx为要调用的技能创建器名称。


翻译功能,只翻译displayName,不要翻译name了,否则会出现问题。


现在更奇怪了,不但仍然翻译name,而且不翻译正文了。


现在,当displayName和description都不含英文,但正文含英文时,翻译按钮不出现了。请检查


现在,正文含英文的情况下,点击翻译,description翻译完成后即显示完成,正文未翻译。


我认为,某一段落内含英文就应该翻译,然后由大模型来判断英文是否需要翻译。而不是只翻译纯英文。因为很多情况下,某一段里可能只包含一个中文词语,如果用原有逻辑,会导致整个段落不被翻译。


高级编辑里,一些文件打开后,明明没有修改,还是带橙色小圆点,请确认逻辑; 另外,在高级编辑里,也增加翻译功能吧,可以对当前打开的文件进行全文翻译。


不管是基本编辑还是高级编辑,点击“翻译”后,出结果以后,不要立刻保存,要写入原文件,然后将文件状态设置成“已修改”,用户点击“保存”后才保存;如果在高级编辑中,点击左侧目录树切换文件,且当前文件已修改未保存,给出提示(保存/丢弃/取消)。


基础切到高级或高级切到基础时,也提示吧


“运行记录”功能中,点击某个节点(带思考过程)中的“XXX条日志”按钮,不要再出现额外的流式中间输出(即以token分隔开的多条日志),因为它内容与上方完整的思考过程重复; 另外,每条运行记录下方,增加“工作空间下载”的功能。


我需要生成一个skill,生成到项目的.claude目录下,名称你自己确定。该skill作用如下:针对军事业务场景,用户粗略描述其业务需求,该skill生成业务的详细输入输出描述,以进一步生成另外的智能体。 但需要注意的是,你只生成输入输出描述,不涉及智能体的生成。 生成的输入输出描述样例如下,你每次生成只需要替换{}中的内容:

请生成一个 {该业务的英文名,样例:information_extraction} 类型的工作流节点 skill。
该节点{该业务的主要作用是什么,样例:接收单条或多条前线事件报告文本},输入包括 {该业务的输入,样例:事件源ID(source_id)、报告文本(report_text)、报告事件(report_time)、报告者角色(reporter_role)、解析目标(extraction_targets)}。节点需要{该业务的工作内容,样例:从报告中抽取时间、地点、坐标、目标对象、事件动作、风险关键词、人员或装备状态,并为每个抽取结果绑定输入证据}。
输出字段必须包括:
{该业务的输出字段,样例:
解析出的条目(extracted_items)
证据链接(evidence_refs)
置信度(confidence)
是否需要审查(review_required)}
要求:
{该业务的要求,样例:
不得抽取输入中不存在的事实。
每个抽取项必须包含证据来源。
当文本含糊、关键信息缺失、存在高风险词或置信度低于 0.70 时,review_required 必须为 true。}
生成完整 skill 包,包括 SKILL.md、schema、prompts、runtime scripts、examples 和 tests。

由于我的skill使用场景不具备可交互性,故我需要对该skill进行两个关键修改:

  1. 输出使用json包裹起来,输出的文本单独使用一个字段;另外,增加“status”字段,标识成功/失败/警告,增加“message”字段,标识原因(如“信息不足。”、“已根据用户描述与军事业务常识补全输入字段(source_id、reporter_role 等)。”
  2. 删除反问的相关逻辑,要么返回失败或警告,要么生成,不允许与用户进行交互。

在“技能生成”页面,“需求描述”处,增加一个“智能润色”按钮,点击后,使用Hermes agent运行技能管理列表中的military-workflow-spec技能,将用户在文本框中的输入给到该技能,然后读取技能返回的结果(不用深度思考,快速返回即可)。如果结果Json中含prompt字段,那么回写回文本框。另外,如果status为失败或警告,那么通过toast弹出提示,将message中的提示内容展示给用户。


把项目中所有大模型和智能体调用的请求和响应日志,打印到日志目录中(但不输出到控制台),作为DEBUG级别。


OK,我查看了“智能润色”功能的输出,LLM已经返回了符合要求的结果,为什么前端界面未将prompt字段回填?


目前,Hermes的执行速度比较慢,请查看logs中的最后一次调用日志(含.log、-llm.log),对比时间,找出卡点,告诉我,我们一起来想优化方法。


分析最近2次的调用日志,看看为什么第一次时间没有大的提升;第二次更换模型后提升很多,有没有其他优化的点可以应用?


P0方案B,先看看java的技能为什么不被hermes识别


查看最近一次的任务日志,为什么时间又变长了很多?


接收现状。那么,根据日志分析,Hermes的初始化和启动时间长不长?需不需要做类似线程池的机制,让Hermes进程常驻?


文档上传报错:could not execute statement [Value too long for column "ERROR_MESSAGE CHARACTER VARYING(255)"]。


@agent-management-rag目录,是我针对该项目的另一个worktree,主要做了RAG的检索和治理的相关工作。请分析提交记录,然后合并到主分支。


丢弃暂存区更改和当前文件更改,还原到最近一次提交,生成命令;删除所有Todo


读取@agent-management-rag/02_907f73440ae2_git_diff.patch文件,应用其中的更改。注意:

  1. 该更改是其他同事的更改,而我已经有了大量其他更改。所以,行号有可能已变化。所以,不要使用git命令进行合并,而是你来读取文件内容,然后智能把更改写入当前分支。尽量不要使用脚本来进行patch应用。
  2. 不要读取其他patch文件。
  3. 对于新增文件,直接复制到对应路径即可;对于修改文件,由你来进行智能修改。

@temp/co-defense-rag-call-examples.md中,是针对某个场景进行知识库检索的调用示例。 参考@temp/co-defense-rag-call-examples.md中调用知识库检索的示例,在工作流中增加节点“知识库检索”。右侧属性配置界面,可下拉选择4种检索来源:文档数据库、结构化数据库、知识图谱库、混合检索。

  1. 选择文档数据库时,生成以下表单:
    • 检索语句(使用自然语言检索,多行文本框,例如“协防关系定义规则是什么?”)
    • 在所有文档中检索(复选框,选择后,下方“文档范围”条目消失)
    • 文档范围(列出当前文档数据库中的文档,用复选框选择,后续只在选择的文档中搜索)
    • TopK(大于0的数字)
  2. 选择结构化数据库时,生成以下表单:
    • 检索语句(使用自然语言检索,多行文本框,例如“查询XX航母的具体属性”)
    • 在所有数据源中检索(复选框,选择后,下方“生效数据源”条目消失)
    • 生效数据源(列出当前所有的结构化数据源,用复选框选择,后续只在选择的数据源中搜索)
  3. 选择知识图谱库时,生成以下表单:
    • 检索语句(使用自然语言检索,多行文本框,例如“查询与XX航母有协防关系的装备信息”)
    • 在所有数据源中检索(复选框,选择后,下方“生效数据源”条目消失)
    • 生效数据源(列出当前所有的知识图谱数据源,用复选框选择,后续只在选择的数据源中搜索)

执行文档检索;报错:

注意:不要搜索,请到相关的py文件中定位问题;问题不在于部署的是milvus还是milvus lite。


删除所有TODO。我将milvus-lite和pymilvus版本统一了,都是3.0,然后重启服务,报错:

注意:不要搜索,请到相关的py文件中定位问题;问题不在于部署的是milvus还是milvus lite。


文档数据可以搜索出来了,但RAG页面,混合检索报错: ERROR c.a.m.c.exception.GlobalExceptionHandler - 系统异常 java.lang.IllegalStateException: rag-ai-bridge is disabled


我希望只在application.yml里配置一次大模型,rag-ai-bridge启动时,Java通过环境变量等注入python。


图谱检索,报错: { "graph:1": {

"error": "Cypher generation failed: 503 Service Unavailable: \"{\"detail\":\"query repair unavailable: Request timed out.\"}\""

} }


模型能力没问题。现在仍有报错: { "graph:1": {

"error": "Cypher generation failed: Cypher uses nonexistent or unauthorized label: POTENTIAL_SUPPORT"

} }


将工作流执行超时时间,以及每个节点超时时间设为无限。


当前,工作流有两个问题:

  1. 智能操作、技能、大模型等节点在执行时,看不到前面节点的输出。我需要你将前置节点输出的工作空间各变量作为系统提示词注入。
  2. 如果某节点后置多个节点,不会并行执行,而是串行挨个执行。

在当前文件的逻辑中,点击“应用审核后的授权配置”按钮,提示“知识库 1 中没有匹配的数据源绑定”。看起来没有和我真实的数据源关联起来。请解决。


针对工作流中的各类节点,进行以下工作:

  1. 除用户定义的输入输出外,每类节点会自动接受的输入和自动生成的输出字段,梳理出来;
  2. 针对每类节点自动生成的每个输出字段,定义其转换为下游节点输入字段的转换器,例如,文档数据库检索结果,若转换为下游输入的字符串,那么取检索结果top1的内容;若转换为下游输入的Json对象,取检索结果top1;若转换为下游输入的Json列表,取检索结果topK等等,将每类规则梳理出来。 如有需要,仔细读取当前代码实现。最终形成markdown格式的文档,存放至docs下。

我针对工作流有几个想法:

  1. 每个节点,在开始执行时,存放的工作区内容,是从起始节点到前序节点的所有变量的总和(不包括与当前节点完全无关的其他工作流分支的变量),以及当前工作空间的所有文件(工作空间不区分分支,整个工作流共有)。针对变量,所有前序节点的输出均需要标记节点ID,这样做的话,如果前序多个节点拥有名称相同的输出变量,也不会相互覆盖;
  2. 如果某个节点,定义了输入变量,那么该输入变量的定义处,支持关联前序节点的某个输出变量(可指定某个前序节点的某个输出变量)。关联后,如果类型一致,直接赋值;否则根据 @docs/workflow-node-fields.md 梳理出的转换规则,进行转换后赋值。如果连接线变化导致了已配置的前序节点不再是当前前序节点了,那么关联解除。在没有明确指定关联变量的情况下,按照如下顺序进行变量隐式关联: 2.1. 逐个向前查找同名输出变量。例如,A->B->C,A定义了输出变量result,类型为字符串;B定义了输出变量result,类型为整数;C定义了输入变量result,那么关联到最近前序节点B的输出变量result,然后根据 @docs/workflow-node-fields.md 中的转换规则进行转换后,赋值给C的result变量; 2.2. 2.1不满足的情况下,逐个向前查找忽略“-”、“_”等字符和字母大小写后的同名输出变量,例如output-field和output_field和outputField均可自动关联,同样按照最近原则查找,然后转换后赋值; 2.3. 2.1和2.2不满足的情况下,逐个向前查找Json对象中的同名输出变量。例如,A->B->C,B定义了输出变量output,结构为:{"total": {"result": "XXX", "count": 2}};C定义了输入变量result,那么关联到最近前序节点B的output.total.result,同样按照最近原则查找,然后转换后赋值; 2.4。 2.1、2.2和2.3不满足的情况下,逐个向前查找Json对象中的忽略“-”、“_”等字符和字母大小写后的同名输出变量,同样按照最近原则查找,然后转换后赋值。

将设计写入 @docs 目录,然后按照此计划继续实现。


有了这个机制,原有的“前置节点输出的工作空间各变量作为系统提示词注入”的需求就可以取消了,只把节点明确定义的输入变量注入即可,否则很多情况下,变量太多,会造成智能体的注意力分散。 另外,我希望在前端界面中,工作流“运行结果”处,点击图中某个节点,运行结果处自动滚动到对应节点的运行结果处,并高亮显示运行结果。 还有,运行结果中,点击某个节点(带思考过程)中的“XXX条日志”按钮,不要再出现额外的流式中间输出(即以token分隔开的多条日志),因为它内容与完整的思考过程重复。


-llm.log中,具体的向量数字不用输出,太占空间了。


翻译 @skills/agent-management-external-workflow 目录中的内容。


稍微修改该skill的描述,确保用户提及“智能体管理平台”也能触发该skill,而不是必须提及“agent-management”这个英文名。


再加入描述,规定输入,用户需要指定智能体管理平台的baseUrl、工作流ID或名称等。相关业务应用需要将用户指定的baseUrl和工作流信息配置到配置文件中,而不是写死,以适应变化。


我希望让智能体(工作流)在存储时,也包含一个英文名ID(唯一,同样必须遵循 kebab-case 规范,若不满足,处理方式与技能编辑中的前端处理一致),以及一个中文名称。在工作流编辑页面中增加这两项内容,样式与技能编辑中一致。弃用原有的数字ID(但当前可以兼容,直到用户手动修改为止)。


修改设计方案,更新TODO。

  1. 不使用 slug 作为智能体的唯一标识,看看“Skill”中使用的是哪个字段,与之保持一致(我记得应该是name字段,你来确认);同理,中文名称也保持一致(我记得应该是displayName字段,你来确认);
  2. 兼容之前的数字ID,意思不是保留数字ID,而是数字ID同样符合 kebab-case 规范,所以直接将原有数字ID赋值给新的唯一标识字段即可;
  3. WorkflowList 不是可选展示唯一标识,而是一定要展示唯一标识 + 中文名称。 5态机的设计可以复用,没问题。 重新设计方案,经过我同意后再开始实施。

基本可行,但我希望URL路由也改成name。因为skill也是类似的逻辑。我建议Long类型id可以不用了,你来评估一下。


工作流前端表单的描述、提示等,样式也要和Skill一致,现在表单没有提示,也就是输入框前方的Label。


我手动修改了,技能编辑界面和工作流编辑界面,保持了Label、Placeholder、Hint等的风格完全一致。我希望在工作流编辑界面,再加上智能体描述。请修改前后端。


检索每个菜单页中的主要按钮(主要是各类列表上方的“创建”、“删除”、“刷新”等按钮。不包括弹出框中的按钮)。现在有两种风格,一种是无边框圆角矩形,最主要的按钮文字为白色;另一种是有边框圆角矩形,圆角稍小。主要的按钮文字为黑色,边框为浅绿色。我需要你统一风格,统一成后一种。(弃用)


  1. 将“文档数据”页面的“上传文档”按钮、“RAG治理”页面的“应用审核后的授权配置”按钮、“技能管理”页面的“新增技能”按钮、“智能体编排”页面的“创建智能体”按钮、“智能体模板”页面的“保存修改”按钮、“模型管理”页面的“新增模型”按钮,统一成“知识图谱”页面的“查询”按钮风格。
  2. 将“技能管理”页面的“刷新”按钮、“智能体编排”页面的“刷新”按钮和“模板管理”按钮、“智能体模板”页面的“刷新”按钮和“新增模板”按钮、“标签管理”页面的标签组“导入”“导出”“新增”按钮和标签“新增”按钮,统一成“文档数据”页面“刷新”按钮的风格。其中,原来只有logo没有文字的按钮,仍保持只有logo即可,只有边框和背景统一。

工作流页面,菜单栏之外的区域,整体会发生一个约28px的上下滚动,我不希望它发生。


  1. 工作流画布中,在不选中的状态下,有的连接线是灰色的,有的是橙色的。运行结束后,有的是绿色的,有的是橙色的。为什么会有差异?统一一下。
  2. 标签管理页面,也会有一个整体的微小上下滚动,去掉它。
  3. 模型管理页面、技能管理页面、智能体编排页面,上下滚动时,将最上方的按钮栏固定住,不要一起滚动。

我要给每个节点增加一个节点名称输入框(可选输入),若输入,在画布中节点名称不能重复。输入后,画布中节点展示为“节点名称 节点类型”,如“关系查询 知识库检索 ”。节点名称和节点类型字体区分开来。若节点名称为空,直接显示“节点类型”。 另外,工作流中,每个节点的前置数据,添加后,关联方式出现在了表单最下方,应该紧跟该前置数据,作为数据的一个属性。关联方式中,使用节点名称来区分各节点。


工作流编辑界面,智能体名称输入框,扩展到与上方Label右边界相同;智能体描述输入框,右边界扩展到“版本历史”按钮左侧。


工作流中,每个节点宽度固定为250px,不再根据其中内容动态扩展节点宽度。


之前我说,定义某个节点的输入数据,让它可以与前序节点的输出关联。我说的前序节点不只是它前面的一个节点,而是它前面所有节点的输出都可以关联。修改逻辑,同步更新docs下的对应文档。


我们将工作流唯一标识的设计进行了修改,对应更新 @skills/agent-management-external-workflow 中的技能。


智能体名称的输入框,最大就到上方Label的右边界即可;下方名称更改的提示,最大宽度可以延伸到右侧描述输入框的右边界。


工作流编辑处,修改:

  1. “前置数据”和“输出变量”,除变量名、中文名、类型外,增加“描述”,与“用户输入”节点保持一致;
  2. “前置数据”增加一个按钮,“引入”,可在所有前驱节点的输出中作选择,选择后,将对应变量的变量名、中文名、类型和描述填入,“关联关系”自动选择到对应变量;
  3. “输出变量”增加一个按钮,“引入”,可在所有后继节点的输入(前置数据)中作选择,选择后,将对应变量的变量名、中文名、类型和描述填入,后继节点对应变量的“关联关系”自动选择到本节点的该变量;
  4. 部分类型节点(如知识库检索)缺少前置数据和输出变量的设置,补充。

工作流部分节点包含“从模板同步”按钮,我希望该功能做成动态的,随着用户的输入,实时识别模板中的{{}}变量,然后动态同步到前置数据中,不再保留按钮。 另外,将“用户输入”节点在画布中的显示样式修改一下。输入变量的样式与其他节点一致。目前字体和背景都不同。


现在,我输入完{{a}}后,要再输入一个字符才能自动识别a这个变量。我希望输入{{}}时不识别,但按顺序输入完{{a}}后或在{{}}中输入a之后,直接识别变量。


现在,每次服务启动都需要调用多次翻译接口。我希望将翻译结果缓存下来(到一个json文件里或数据库里),下次翻译时先查询,如果全文匹配则直接调出,节省翻译时间。


对整个项目(而非本次变更)进行code-review。


为什么我在日志里还是可以看到“ 变量 fragment_mass 被节点 node-1-1783926357665 覆盖(旧值类型=String)”这样的日志?我们不是设计了机制,某个节点的输入,可以与前序节点的变量关联吗?即使有同名变量,也不会覆盖,只是让后继节点选择而已。请检查设计,给我一个详细的说明。


  1. 各类弹出对话框,若不小心点到对话框之外,不要让其直接关闭,非常容易误操作;
  2. 各类弹出对话框,整体色调、默认按钮和取消按钮的样式等,统一一下风格,另外,不要再出现橙黄色按钮了。

我需要一个工作流增删改的接口说明,写到docs下,md格式


在工作流编辑中:

  1. 对于输出节点来说,其输出变量,既要对业务输出,同时又来源于前序节点。因此,应与其他节点的“输入变量”或“前置数据”引入类似,同样应该具有“引入”操作,来接收前序节点的输出变量。不同之处在于,引入的变量仍作为输出变量即可,而非输入变量。
  2. 同理,对于输入节点来说,其输入变量,既来源于业务,又要对后继节点输出,因此,应与其他节点的“输出变量”引入操作类似,同样应该具有“引入”操作,来关联后继节点的输入变量。不同之处在于,引入的变量仍作为输入变量即可,而非输出变量。

各节点的输出(不包括本地文件写入,只关注节点输出的变量),我希望统一成如下Json格式: { "status": 200/400(200表示成功,400表示失败), "message": "成功/XXX原因导致失败", "data": ...(各节点定义的变量组合,以Json方式列出) } 例如,LLM节点,定义了“output”变量(字符串)和“elapsed_time”变量,那么输出应为: { "status": 200, "message": "调用成功", "data": {

"output": "XXXXXXX(输出结果)",
"elapsed_time": 15.83

} } 后继节点在接收变量时,统一解析前序节点的“data”字段中的变量(及其子字段)。 针对各类节点(LLM、智能操作、技能、智能体等),设计具体格式化输出的实现方式。


修改 @docs/workflow-node-output-envelope.md ,目前程序是机械地将各节点的运行结果放到Json里,只能接收用户定义的固定数量的变量名。但我需要的不只是机械地包装运行结果。例如智能操作节点,根据用户描述的不同,可以匹配用户定义的多个变量,灵活地进行匹配。我需要一些机制,来让节点灵活输出Json结果(如对大模型进行强调、生成结果有问题的话让大模型重新生成等)。请针对各类节点进行设计。


读取 @agent-management-rag/0001-1.-Text2SQL.patch 文件,应用其中的更改。注意:

  1. 该更改是其他同事的更改,而我已经有了大量其他更改。所以,行号有可能已变化。所以,不要使用git命令进行合并,而是你来读取文件内容,然后智能把更改写入当前分支。不要使用脚本来进行patch应用。
  2. 不要读取其他patch文件。
  3. 对于新增文件,直接复制到对应路径即可;对于修改文件,由你来进行智能修改。

在工作流编辑中:

  1. 对于输出节点来说,其输出变量的“引入”操作,接收前序节点的输出变量,也应有关联关系的配置功能,与其他节点的“前置数据”引入一样。
  2. 目前画布内节点的变量颜色,“前置数据”为蓝色,“输出变量”为绿色。对于“用户输入”节点而言,定义的所有变量,固然是该节点的“输出变量”,但对于整个工作流而言,它属于“输入变量”,因此,我希望它们在画布中显示为蓝色;对于“输出”节点而言,它定义的所有变量,固然都从其他节点接收,但对于整个工作流而言,属于“输出变量”,因此,我希望它们在画布中显示为绿色。
  3. 在一个节点内,前置数据变量名不能重复;输出变量名不能重复;此规则在添加和引入时都应触发,以toast形式警告用户。
  4. 如果一个变量关联到了前驱节点的某个变量,那么那个变量删除后,关联关系应自动回退为“自动推断”,现在显示有问题。

  1. 变量重名时,阻止整个工作流的保存,弹出提示中说明哪些节点的哪些变量重名了;但不阻止输入;
  2. 如果一个变量关联到了前驱节点的某个变量,那么那个变量删除后,关联关系应自动回退为“自动推断”,这个仍未实现;
  3. 假如我在LLM 提示词中输入{{}},然后在里面缓慢地输入abc,那么有可能生成a、ab、abc三个变量,这是不对的,应该是同一个变量动态更名。实现它。

工作流的“运行”按钮按下后,弹出的变量输入对话框,增加一个“变量导出”和“变量导入”的按钮,导出按钮点击后,将已输入的变量保存为Json格式,未输入的不用管,命名为“工作流名称-节点名-输入变量.json”,然后提示用户选择保存位置保存。导入按钮支持将该文件导入,将已输入的变量填入对应表单。


变量导出报错:TypeError: Cannot read properties of undefined (reading 'num1') 另外,变量输入对话框,点击对话框外的区域还是会被关闭,我不希望这样。


变量导出时,强制让用户选择保存位置,而不是下载到浏览器指定的默认为止。(未实现)


根据 @docs/workflow-node-output-envelope.md ,开展修改。


在工作流中:

  1. 我希望在日志中明确输出各节点的输出变量(以Json格式,输出用户明确定义的输出变量,而非整个工作区),一定在最开始标识清楚节点名称;
  2. 我希望在日志中明确各节点接收到的输入变量(以Json格式,输出用户明确定义的输入变量/前置数据,而非整个工作区),一定在最开始标识清楚节点名称;

我观察到,如果一个节点,后继跟随多个并行节点,那么多个并发节点目前好像会是一起完成的。但这样不对,应该是有快有慢。先完成的节点,又可以紧跟着触发它的后继节点,不必等其他并行节点一起。检查此处逻辑。


为什么我默认模型从kimi修改为了glm-5.2,工作流里各节点使用的模型也设置为了“使用默认模型”,但业务系统调用工作流时,报错还是kimi的报错?仔细检查所有关于使用哪个模型的逻辑。


使用技能 git-commit-log-gen 生成提交日志,可以参考 @prompt.md 中的末尾部分需求。

从用户角度对提交日志进行简化,对用户和测试不可见的实现细节不写到日志里。


将上述改造实施计划输出到 @docs 下,然后开始实施。


  1. 部分节点的输出,输出为 Json 格式,但与我定义的字段名不一致。我的定义: {"status": 200/400, "message": "...", "data": {"fieldA": ...}} 它的输出: {"状态": "成功", "信息": "XXXX成功", "数据": {"字段A": ...}} 为什么 validator 没有将这种格式认定为非法,并让该节点重试,重新生成?

  2. 如果某个节点输出的格式未通过校验,我认为不应该重新运行节点。应分为几种情况: (1) 运行失败,如"模型访问量过大"等情况,应重新运行节点; (2) 运行成功,但输出结果提取错误,应先根据用户定义的输出变量组织 json 模板,然后将明确的 json 模板及节点运行结果或结论重新输入给大模型,让大模型根据节点运行结果重新组织 json 结构。没必要让节点的逻辑全部重新运行。


除"用户输入"节点和"条件分支"节点外,其他节点的用户定义输出均为必填,需严格满足每个字段均存在,键名严格校验。调整计划,把计划输出到 @docs 目录下,然后参考输出的计划文件执行。


执行完毕后,将计划与原 @docs/workflow-node-fields.md 补充合并。


现象:Hermes Agent 节点明明 LLM 调用失败(HTTP 429 限流、access_token 过期等),但工作流最终报告"执行成功",data 里装的是"API call failed after 3 retries: HTTP 429: 该模型当前访问量过大"。为什么"调用失败"却被当作"工作流成功"?根因排查并给出修复方案。


将执行方案写入 @docs 目录,然后执行 B+C+D。B 的错误文本匹配,还可以做一个菜单页,进行列表配置。


dify 目录是一个与智能体工作流编排调度等相关的参考项目。请探索该项目,告诉我这个项目主要干了哪些工作,在 docs 目录下生成一个 dify-readme.md,重点聚焦于其技术栈、工作流编排调度的具体方法、项目在多智能体智能协同方面的探索(智能调度而非强依赖DAG)以及必需依赖等方面,并为目录树中的每个目录生成一个简要说明。


@skills-manage 目录是一个与技能管理相关的参考项目。请遍历该项目,告诉我这个项目主要干了哪些工作,在 @docs 下生成一个 skills-manage-readme.md,重点聚焦于其技术栈、技能管理的具体逻辑以及必需依赖等方面。


分析 @temp/temp-logs.txt 文件,这是同一工作流的3次调用记录,包含各节点的输入和输出结果。3次调用时,输入的查询语句和实体位置等信息不同。已知“协同关系图谱查询[技能]”的逻辑是直接调用一个脚本请求数据(技能位于 @backend/uploads/skills/carrier-support-graph-query 下);“多源证据融合与评分[智能操作]”的逻辑是“仅依据文档、知识图谱和结构化数据库证据完成分析”。那么,分别观察这两个节点,为什么每个节点在3次调用中的输出格式都不同?一会儿输出 markdown 文本,一会儿输出 Json 结构。请仔细检查,必要时可以查询全量日志 @backend/logs/agent-management.2026-07-22.0.log 。


根据参考项目 hermes-agent,其 skill 注册表刷新机制是什么?


我在每次执行工作流时,会将 uploads/skills 下的所有 skill 复制到其“工作目录/.hermes”下。那么在这种情况下,Skill 同步(在 Java 上传新 skill 时同步刷新 hermes-agent 的 skill 注册表,让 skill_view 可用)应该如何实现?


选择方案A。确保 skillFileSyncer.syncTo(固定目录/skills) 方法不会将对应 skill 目录下的历史版本文件复制过去。per-run sync 可以删除。


技能执行日志:[WARNING] agent.tool_executor: Tool terminal returned error (1.59s): {"output": "C:\Python311\python.exe: can't open file 'D:\\projects\\agent-management\\hermes-home\\skills\\carrier-support-graph-query\\scripts\\skill.py': [Errno 2] No such file or di


根据 prompt.md 需求文件、 docs 目录下的设计文件,以及工作流相关的源码,梳理我们的工作流所包含的所有特性,然后与 dify 进行对比,列出我们具备而 dify 没有的功能、我们没有而 dify 具备的能力、我们与 dify 实现方法不同的能力。形成 md 文件,放到 docs 目录下。


技能生成页面,使用“具有创建其他技能能力的技能”进行技能创建时,将创建的技能写入到运行时的工作目录中,而不是该技能目录下(目前会写入 generated_skills、tmp_smoke_generated 两个目录),否则会导致 Hermes 扫描技能时出现多个相同技能,进而发生冲突。


我建议,在向 {HERMES_HOME} 复制 skill 时(包括但不限于软件启动时和 skill 发生增删改时),除跳过每个技能下的 _versions 目录外,还跳过每个 skill 中直接包含 SKILL.md 的子目录。评估我的这个方案。


给我解释“技能内含 subdir/nested/SKILL.md(subdir 无 SKILL.md) | 跳过 subdir/”,我没看懂,不是应该整体跳过 “subdir/nested/” ?


参考 @dify 目录,告诉我:dify 的 Agent V2 节点是什么?定位是什么?


如果我希望做一个工具,让每个工作流节点可以按需获取前序节点的工作区变量、输出变量、思考过程,而非将所有变量塞到上下文里,我应该将这个工具做成什么形式的?


将上述计划输出至 docs 下,然后详细告诉我目前 NodeWorkspaceBuilder 的变量注入方式。


将NodeWorkspaceBuilder 注入机制也写到 node-context-ondemand-plan.md 中,你自己找合理的位置放。


目前,智能操作、技能、LLM等LLM类节点的输出是如何约束的?如果在执行过程中,根据节点的输出变量,动态拼接输出json模板,让节点遵守,应如何操作?给出方案。 例如,某节点定义的输出变量为:output1(字符串)、output2(数字)、output3(Json对象),那么在提示词或技能执行逻辑后,拼接:

**必须按如下格式输出:**
{
  "output1": "XXX", // 字符串类型
  "output2": 0, // 数字类型
  "output3": {XXX}, // Json对象
  "other_fields": ... // 其他有必要输出的变量,如置信度、运行错误、需要用户注意或参考的信息等
}

或者你也可以给出更好的设计。


除 LlmExecutor / SmartActionExecutor 外,针对 HermesAgentExecutor / HermesSmartActionExecutor / SkillExecutor / AgentExecutor,也给出接入方案,因为本质上,这些都是基于 Hermes 去执行的节点,非常重要。 扩展字段,直接放到 envelope 的 data 字段里,不要使用“_meta”等字段包裹,而且要告知LLM,它可以自由发挥,不局限与我们列出的少数几个字段,但只放置必要的字段,最小化放置,snake_case命名方式。 object 子字段约束,暂时不做,后续实现。 strict模式下,不识别多余字段,只识别必需字段是否存在。 模板格式,带上示例值。


  1. 选项B;2. 选项A;3. 选项A;4. 先不做。 将改造计划先写入 docs,然后开始执行。

为各节点的前置数据(输入变量)和输出变量增加“必填”或“必需”设置。


当前,输出节点接收不到前序节点的输出变量,但可以接收到一堆前序节点的工作区变量。检查逻辑。


我为输出节点设置了输入变量result和git-commit-log(对输出节点而言,这些变量既是输入变量,也是输出变量)。我期望的输出是包含这两个变量的,但实际输出是: {"uploadedFiles":["GenerateTableSections.bas"],"node-2-1781355966894result":"已成功生成README.md文档并获取Git提交日志","node-2-1781355966894readme":"D:\projects\agent-management\backend\data\workflow-runs\2\20d4f9f8\README.md","node-2-1781355966894__git_commit_log":"1. 重构了工作流执行模型。","_workingDirFiles":["GenerateTableSections.bas","README.md"],"_runId":"20d4f9f8"} 这些应该是工作区变量而非输出变量。请检查


我的需求都写在 prompt.md 文件中。请根据我的需求(倒数几个需求),重新总结变更。同类变更放到一起。变更说明不要过于技术化。


  1. 标签管理、模型管理、错误模式管理,合并到“其他管理”菜单下;
  2. “错误模式管理”页面,不要明确提Hermes的名字,因为模式也可用于后续其他智能体框架;
  3. “错误模式管理”页面,表格的表头颜色、表格颜色等样式,与“模型管理”页面保持一致;
  4. “错误模式管理”页面,内置的错误模式,再丰富一些;同时将内置错误模式管理放到application.yml,同步更新application.yml.example。

为什么前端页面显示还是只有8条错误模式?