我希望做一个智能体管理和编排平台,主要功能是管理某个目录中的Skills。
每个Skill是一个独立的文件夹,文件夹内必然包含一个SKILL.md文件,文件开头几行固定包含以下结构:
name: {skill name}
description: {skill description.}
分别为Skill的名称和描述。
我希望后端使用 Java 8 (可使用Spring boot 和 Spring AI 框架)实现,前端使用 Vue 3 实现。Skills 放在本机的某个目录中,在后端配置文件中配置目录路径。
前端包含两个页面,智能体管理和智能体编排。
SKILL.md的子目录,然后读取每个SKILL.md文件,提取前几行的name和description,作为智能体名称和智能体描述,以列表形式展示。如果name和description为英文,调用大模型翻译为中文后再进行呈现。页面上方包含“新增”按钮,点开后弹出一个文件上传对话框,选择一个压缩文件,上传完成后,后端在临时目录中解压验证,压缩文件内第一层目录包含SKILL.md文件,且可以解析出name和description,则新增成功,复制到Skill路径,列表内新增一行;
每一条右侧包含“编辑”和“删除”按钮,“编辑”可以编辑智能体名称和智能体描述,点击确定后对应SKILL.md文件中的name和description也随之修改;“删除”需二次确认,确认后将对应Skill子目录删除。
界面设计需调用 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规范帮我创建。
现在还有问题:
现在,我希望新增一个页面,标签管理。内部可以创建标签组,每个标签组作为一个标签分类维度。每个标签组在创建和编辑时,内部为树状结构,树中的每个节点都是标签。标签可用于智能体、Skill等,一个智能体可对应多个标签。每个标签组均能够修改、删除;标签组里的每个节点也均可以新增、修改、删除。标签组创建时,默认创建一个根节点,名称与标签组名称保持一致,用户可以对该节点改名。用户对树的操作,类似于XMind对思维导图的操作形式。
需要无限层级;同时前端页面中,添加标签时,请弹出对话框进行标签名称输入;删除标签时,也弹出二次确认对话框进行删除,删除确认按钮用中文的“确定”和“取消”。
再进行一些修改:
下面,实现智能体编排功能。
首先展示一个当前编排过的智能体工作流的列表,展示工作流的名称等关键信息。
点击“创建”,打开工作流创建界面,参考Dify的工作流编排界面(请搜索后完善),左侧工具栏中包含“用户输入”、“大模型处理”、“智能体”、“输出”、“条件分支”等节点;中间是画布,背景为浅色网格,通过可视化、拖拽的形式,以及节点连线功能,将其他Skill和智能体编排起来;右边为属性工具栏,点击某个节点时才会出现,根据节点类型,显示不同的表单:
用户输入:包含输入变量的创建,可不创建、创建一个或多个,每个变量包含变量名、中文名、变量类型、变量描述等字段。
大模型处理:包含模型选择下拉框、系统提示词、用户提示词等输入框,其中用户提示词输入框中可以插入1中用户输入的变量(以变量名表示)。
智能体:选择智能体列表,列表中为系统中的Skill和已编排好的其他智能体;
条件分支:初始化有一个IF字段,用户可以在后面用自然语言写条件;用户可添加零个、一个或多个ELIF,均可以用自然语言写条件;
输出:可以选择用文本还是Json对象输出。
除输入、输出和条件分支外,每个节点左侧和右侧各有一个连接点。输入节点只有右侧有连接点;输出节点只有左侧有连接点;条件分支左侧有一个连接点,右侧有(ELIF数量+2)个连接点,后面可以跟相同数量的节点。点击“完成”,完成工作流的创建。
目前只有“条件分支”节点可以被拖入画布,“输入”节点拖入画布后只能显示一个输入框;其他节点无法被拖入画布。“条件分支”右侧节点数也不能随着ELIF数量动态调整。请修复。
目前,条件分支节点右侧的连接点还是固定只有一个,我希望它能够有(ELIF数量+2)个,假如节点高度为100px,ELIF数量为2,那么右侧连接点有4个,分别位于20px、40px、60px、80px的位置。 另外,输出节点拖入画布后,显示有问题,节点下方叠加了一个白色方框,请检查。
增加连接线删除功能;同时,如果可以的话,我希望使用曲线连接线,这样一个连接点有多条连接线时,会更容易分辨一些。
skills-manage是别人的项目,只给我们做参考用,忽略它。现在我想实现:
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的思想,单个节点执行时要灵活,总体工作流执行时要遵循格式化输入输出,确保工作流不丢节点
几个问题:
为什么我在某次执行run.sh重启后端服务后,前端变成了最开始的版本?很多功能都不见了
我的项目本来功能完备,但由于未知原因,代码回滚到了之前版本。好在我与大模型的协作历史还在,请根据@chat-history-202606100530.jsonl,查找大模型帮我做的改动是否丢失。若未丢失,跳过,往下查找,直到找到丢失的改动,然后重做后续的左右改动。
帮我创建项目开源准备Skill,大致步骤如下:
再增加一个步骤,调用 git-commit-log-gen Skill 生成提交记录并输出。
我希望实现一个功能:当A、B两个节点通过连接线连接起来的时候,如果:
进一步扩展到多个节点的情况,当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项目的功能,进行功能完善。
我想将所有的“输入”改为“前置数据”,因为某个步骤的输入不一定是由上个节点传入的,可能是更前面的节点。是否可行?
为什么技能加载不出来了? 后端报错:
在大模型配置时,我希望将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的高亮方式编辑。
现在,我希望修改工作流的执行逻辑。不再单纯传递变量。节点与节点之间传递“上下文”,包括:
技能和智能体的分类栏,让它在最矮的情况下也通到页面底部吧,否则右侧技能和智能体的数量很少的情况下,太矮了
让技能搜索时,也能搜索到翻译后的文字吧,否则纯英文技能较难搜索。
模型管理页面,色彩为灰黑色,与其他页面不一致,风格统一一下。
呃,没必要改成卡片网格布局,列表即可,颜色与其他页面保持一致就行。改回来吧。但按钮样式、弹窗等保持现在改过的即可。
工作流里,输入节点,还不支持上传目录,请完善。
关于模型选择:
版本管理中,假如从v2回滚到v1,然后再次保存,没有生成v3版本,而是又生成了v2,请修复。
现在工作流中,连线还会判断输入和输出的匹配,但只计算了前后两个节点。根据我们的设计,现在连线传递的是整个上下文环境,所以:假如A节点->B节点->C节点,A有output1,B有output2,C需要output1和output2,那么B和C节点中间也应该是绿色的线。
如何看出技能的当前版本?没有地方显示。而且,当前版本不应该有切换按钮。
智能体的版本管理是否尚未实现,我也需要像技能一样管理智能体的版本。
有哪些数据保存在H2数据库里?能否使用json保存数据?两种方式有何利弊?
折中方案:
现在,模型管理里,模型的测试连接、编辑、删除等操作都没有了,调用顺序的数字后面有两个小点,请检查并修复。
几个操作按钮再紧凑一些,每个按钮用图标表示,鼠标指上去给提示,尽量不要换行;再加一个“复制”按钮,点击后生成“原名称(复制)”的新模型。
我观察到,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的目录权限!!
我想增加智能体模板功能,最终的效果是:点击创建智能体时,弹出几种模式供选择,如工作流编辑模式、自然语言编辑模式、空白模式等,每种模式一个正方形按钮,按钮上有模式名称和节点缩略图(与智能体页面缩略图保持一致)。对应的,我需要一个页面来创建和编辑这些模板。
目前节点缩略图(包括工作流模板、智能体列表中的)只显示几个节点的首个文字。我需要它在此基础上,保留节点之间的位置关系和连线,这样缩略图就更形象了。为了美观,节点中可以不保留文字,只用对应颜色表示也可以。
智能体模板里:
现在,我想增加知识库功能,包括文档数据管理、结构化数据管理、知识图谱管理。文档数据提供文档上传功能,上传后先分类管理,然后直接向量化入库;结构化数据提供各类数据源管理功能,可以查看数据源内表和数据(可参考@beekeeper-studio项目的数据源管理,甚至直接复刻即可);知识图谱提供图谱数据源管理功能,可以查看图谱。
Milvus、Neo4J实例尚未开通,智谱embedding模型还未开通,先做功能,等实例开通后再验证。另外,将现在的设计保存到docs下,作为指导
当前存在以下问题:
...\e2e0ba03,但 os.getcwd() 返回的是 backend 根目录。” 这是不是说明,java在调用hermes-agent执行任务时,还是错误地给了backend作为根目录?之前的修复未生效?请检查;智能体编排中,智能体的分类设置不生效,请检查。
现在,我在公网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报错乱码,请帮我看一下什么意思。另外,解决该乱码问题。
两个问题:
目前,添加模型并设置成默认后,工作流中节点运行还使用的是原来的默认模型;而且模型那里无法选择,选择了也不会回显到下拉框里。
执行报错:执行失败: 节点 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
This application has no explicit mapping for /error, so you are seeing this as a fallback.
This application has no explicit mapping for /error, so you are seeing this as a fallback.
This application has no explicit mapping for /error, so you are seeing this as a fallback.
This application has no explicit mapping for /error, so you are seeing this as a fallback.
This application has no explicit mapping for /error, so you are seeing this as a fallback.
This application has no explicit mapping for /error, so you are seeing this as a fallback.
目前我上传了一则新闻,分块还是2块,且2块均显示“未向量化”。向量化按钮在哪里?是否是因为失败了才显示“未向量化”?
向量化报错: 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级子块都没有了,。;等中文标点符号?
修改。我的要求:
我表达的有误,我允许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进行两个关键修改:
在“技能生成”页面,“需求描述”处,增加一个“智能润色”按钮,点击后,使用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文件,应用其中的更改。注意:
@temp/co-defense-rag-call-examples.md中,是针对某个场景进行知识库检索的调用示例。 参考@temp/co-defense-rag-call-examples.md中调用知识库检索的示例,在工作流中增加节点“知识库检索”。右侧属性配置界面,可下拉选择4种检索来源:文档数据库、结构化数据库、知识图谱库、混合检索。
执行文档检索;报错:
注意:不要搜索,请到相关的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 中没有匹配的数据源绑定”。看起来没有和我真实的数据源关联起来。请解决。
针对工作流中的各类节点,进行以下工作:
我针对工作流有几个想法:
将设计写入 @docs 目录,然后按照此计划继续实现。
有了这个机制,原有的“前置节点输出的工作空间各变量作为系统提示词注入”的需求就可以取消了,只把节点明确定义的输入变量注入即可,否则很多情况下,变量太多,会造成智能体的注意力分散。 另外,我希望在前端界面中,工作流“运行结果”处,点击图中某个节点,运行结果处自动滚动到对应节点的运行结果处,并高亮显示运行结果。 还有,运行结果中,点击某个节点(带思考过程)中的“XXX条日志”按钮,不要再出现额外的流式中间输出(即以token分隔开的多条日志),因为它内容与完整的思考过程重复。
-llm.log中,具体的向量数字不用输出,太占空间了。
翻译 @skills/agent-management-external-workflow 目录中的内容。
稍微修改该skill的描述,确保用户提及“智能体管理平台”也能触发该skill,而不是必须提及“agent-management”这个英文名。
再加入描述,规定输入,用户需要指定智能体管理平台的baseUrl、工作流ID或名称等。相关业务应用需要将用户指定的baseUrl和工作流信息配置到配置文件中,而不是写死,以适应变化。
我希望让智能体(工作流)在存储时,也包含一个英文名ID(唯一,同样必须遵循 kebab-case 规范,若不满足,处理方式与技能编辑中的前端处理一致),以及一个中文名称。在工作流编辑页面中增加这两项内容,样式与技能编辑中一致。弃用原有的数字ID(但当前可以兼容,直到用户手动修改为止)。
修改设计方案,更新TODO。
基本可行,但我希望URL路由也改成name。因为skill也是类似的逻辑。我建议Long类型id可以不用了,你来评估一下。
工作流前端表单的描述、提示等,样式也要和Skill一致,现在表单没有提示,也就是输入框前方的Label。
我手动修改了,技能编辑界面和工作流编辑界面,保持了Label、Placeholder、Hint等的风格完全一致。我希望在工作流编辑界面,再加上智能体描述。请修改前后端。
检索每个菜单页中的主要按钮(主要是各类列表上方的“创建”、“删除”、“刷新”等按钮。不包括弹出框中的按钮)。现在有两种风格,一种是无边框圆角矩形,最主要的按钮文字为白色;另一种是有边框圆角矩形,圆角稍小。主要的按钮文字为黑色,边框为浅绿色。我需要你统一风格,统一成后一种。(弃用)
工作流页面,菜单栏之外的区域,整体会发生一个约28px的上下滚动,我不希望它发生。
我要给每个节点增加一个节点名称输入框(可选输入),若输入,在画布中节点名称不能重复。输入后,画布中节点展示为“节点名称 节点类型”,如“关系查询 知识库检索 ”。节点名称和节点类型字体区分开来。若节点名称为空,直接显示“节点类型”。 另外,工作流中,每个节点的前置数据,添加后,关联方式出现在了表单最下方,应该紧跟该前置数据,作为数据的一个属性。关联方式中,使用节点名称来区分各节点。
工作流编辑界面,智能体名称输入框,扩展到与上方Label右边界相同;智能体描述输入框,右边界扩展到“版本历史”按钮左侧。
工作流中,每个节点宽度固定为250px,不再根据其中内容动态扩展节点宽度。
之前我说,定义某个节点的输入数据,让它可以与前序节点的输出关联。我说的前序节点不只是它前面的一个节点,而是它前面所有节点的输出都可以关联。修改逻辑,同步更新docs下的对应文档。
我们将工作流唯一标识的设计进行了修改,对应更新 @skills/agent-management-external-workflow 中的技能。
智能体名称的输入框,最大就到上方Label的右边界即可;下方名称更改的提示,最大宽度可以延伸到右侧描述输入框的右边界。
工作流编辑处,修改:
工作流部分节点包含“从模板同步”按钮,我希望该功能做成动态的,随着用户的输入,实时识别模板中的{{}}变量,然后动态同步到前置数据中,不再保留按钮。 另外,将“用户输入”节点在画布中的显示样式修改一下。输入变量的样式与其他节点一致。目前字体和背景都不同。
现在,我输入完{{a}}后,要再输入一个字符才能自动识别a这个变量。我希望输入{{}}时不识别,但按顺序输入完{{a}}后或在{{}}中输入a之后,直接识别变量。
现在,每次服务启动都需要调用多次翻译接口。我希望将翻译结果缓存下来(到一个json文件里或数据库里),下次翻译时先查询,如果全文匹配则直接调出,节省翻译时间。
对整个项目(而非本次变更)进行code-review。
为什么我在日志里还是可以看到“ 变量 fragment_mass 被节点 node-1-1783926357665 覆盖(旧值类型=String)”这样的日志?我们不是设计了机制,某个节点的输入,可以与前序节点的变量关联吗?即使有同名变量,也不会覆盖,只是让后继节点选择而已。请检查设计,给我一个详细的说明。
我需要一个工作流增删改的接口说明,写到docs下,md格式
在工作流编辑中:
各节点的输出(不包括本地文件写入,只关注节点输出的变量),我希望统一成如下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 文件,应用其中的更改。注意:
在工作流编辑中:
工作流的“运行”按钮按下后,弹出的变量输入对话框,增加一个“变量导出”和“变量导入”的按钮,导出按钮点击后,将已输入的变量保存为Json格式,未输入的不用管,命名为“工作流名称-节点名-输入变量.json”,然后提示用户选择保存位置保存。导入按钮支持将该文件导入,将已输入的变量填入对应表单。
变量导出报错:TypeError: Cannot read properties of undefined (reading 'num1') 另外,变量输入对话框,点击对话框外的区域还是会被关闭,我不希望这样。
变量导出时,强制让用户选择保存位置,而不是下载到浏览器指定的默认为止。(未实现)
根据 @docs/workflow-node-output-envelope.md ,开展修改。
在工作流中:
我观察到,如果一个节点,后继跟随多个并行节点,那么多个并发节点目前好像会是一起完成的。但这样不对,应该是有快有慢。先完成的节点,又可以紧跟着触发它的后继节点,不必等其他并行节点一起。检查此处逻辑。
为什么我默认模型从kimi修改为了glm-5.2,工作流里各节点使用的模型也设置为了“使用默认模型”,但业务系统调用工作流时,报错还是kimi的报错?仔细检查所有关于使用哪个模型的逻辑。
使用技能 git-commit-log-gen 生成提交日志,可以参考 @prompt.md 中的末尾部分需求。
从用户角度对提交日志进行简化,对用户和测试不可见的实现细节不写到日志里。
将上述改造实施计划输出到 @docs 下,然后开始实施。
部分节点的输出,输出为 Json 格式,但与我定义的字段名不一致。我的定义: {"status": 200/400, "message": "...", "data": {"fieldA": ...}} 它的输出: {"状态": "成功", "信息": "XXXX成功", "数据": {"字段A": ...}} 为什么 validator 没有将这种格式认定为非法,并让该节点重试,重新生成?
如果某个节点输出的格式未通过校验,我认为不应该重新运行节点。应分为几种情况: (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模式下,不识别多余字段,只识别必需字段是否存在。 模板格式,带上示例值。
为各节点的前置数据(输入变量)和输出变量增加“必填”或“必需”设置。
当前,输出节点接收不到前序节点的输出变量,但可以接收到一堆前序节点的工作区变量。检查逻辑。
我为输出节点设置了输入变量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 文件中。请根据我的需求(倒数几个需求),重新总结变更。同类变更放到一起。变更说明不要过于技术化。
为什么前端页面显示还是只有8条错误模式?