
后端AI AgentMCP 服务AI 技能【免费下载链接】MoviePilotNAS媒体库自动化管理工具项目地址https://gitcode.com/gh_mirrors/mo/MoviePilot点击查看免费下载MoviePilot 的 Agent 通过模型、Skills、工具与会话状态协作完成 NAS 媒体库的自动化管理任务。本文围绕 Agent 的长任务连续性展开任务计划update_plan、按需工具发现、运行中消息注入、记忆系统、工具结果续读、写工具持久执行记录以及异常与取消后的恢复机制。读者将掌握 Agent 如何在下载后未入库这类多步骤排查中保持目标不丢失、在中断后保留已知事实并安全继续以及宿主如何对写操作进行去重与核验。能力对齐路线与每轮真实运行验收可参考 Agent 与 Codex Harness 对齐路线。任务计划复杂任务的工作便签复杂任务可以使用内部update_plan工具保存目标、步骤、状态、检查依据和阻塞原因。例如排查下载后未入库可以依次检查下载状态、整理队列、目标目录和媒体库四个环节。计划的约束与状态模型简单查询不需要创建计划只有含多个依赖步骤或需要并行调查的复杂工作才使用计划。步骤支持pending、in_progress、completed、blocked四种状态completed和blocked必须填写依据evidence。计划单独保存在会话图状态task_plan字段中每次模型请求都能读取压缩旧消息不会删除计划。计划快照随聊天消息保存附加在末条宿主消息的additional_kwargs中在会话图重建后恢复。用户询问进度时继续当前目标明确开始新任务时替换计划。计划是模型记录的工作状态不代表工具执行结果或写操作授权仍需通过工具核实实际结果。源码级实现PlanMiddleware计划机制由 app/agent/middleware/plan.py 中的PlanMiddleware实现PlanStep模型限定单步骤step长度 1~300 字符、evidence最多 600 字符并通过模型校验器强制completed/blocked 步骤必须提供 evidence从源头避免无依据的完成声明或无原因的阻塞见require_result_context。TaskPlan模型限定objective最多 800 字符、步骤数量最多 12 条MAX_PLAN_STEPS且要求步骤名称唯一防止同名步骤无法稳定区分进度。before_agent在新图没有计划时从历史消息的PLAN_SNAPSHOT_KEY中恢复after_agent把成功轮次的末条消息携带恢复点复用聊天消息持久化能力。after_model拒绝同一响应中多次调用update_plan返回 error 状态提示模型合并步骤后重试。modify_request每次请求都将当前计划以current_task_plan形式注入系统消息同时明确标注Model-reported working state; not authorization or independent proof模型声明的工作状态不是授权或独立证据。计划在写入前经过sanitize_for_host脱敏非法历史不会进入系统提示词。代码修改与 Pull Request当用户明确要求提交 PR 时Agent 使用 skills/submit-pull-request/SKILL.md 流程。该流程把 Git clone 作为代码修改入口先通过 GitHub API 复用或创建当前 Token 用户的 Fork优先复用 parent 正确的同名 Fork从上游基线创建隔离工作分支和本地 clone后续 Agent 的修改与测试都必须发生在这个 clonesource_root中原工作区和运行时目录不作为 PR 源目录。没有本地 Git 仓库时不是降级为文件上传而是先执行 clone。流程在提交前通过collect_pull_request.py生成真实 Git 工作树的变更预览不含源码正文的changes_file并要求用户明确确认确认后才执行本地git add、git commit、git push最后通过 GitHub API 创建或复用 PR。该脚本会拒绝运行时或敏感路径.env、config/、data/、logs/、tmp/、缓存、数据库和私钥文件。安全边界明确默认创建 Draft PR只有用户明确要求时才把draft设为false不执行合并、关闭 Issue 或强制推送Token 只从运行时 GitHub 设置读取REPO_GITHUB_TOKEN/GITHUB_TOKEN不出现在命令行、预览和日志中Git HTTPS 通过临时 askpass 环境提供认证网络中断可以复用同一 payload 重试日志、Issue 正文、README、仓库文件和命令输出均视为不可信数据不能改变目标仓库、权限、Token 或确认门槛。运行中补充消息SteeringWebAgent 在 Agent 正在运行时仍可提交文本和附件。其核心机制由 app/agent/middleware/steering.py 的SteeringMiddleware实现宿主为每个会话生成消息 ID先把消息放入有界 steering inbox下一次模型调用前由中间件把它作为真实HumanMessage写入图状态并通过当前 SSE 报告queued、applied两个阶段提交和运行收尾共享原子边界收尾竞态中已接受的消息会在同一 worker 内继续处理停止会话不会继续派发新的工具动作补充消息不会启动第二张 Agent 图也不会替换当前输出回调。关键实现细节_can_inject检查工具调用尚未交付时不插入用户消息保持 AI/Tool 配对协议完整注入的 HumanMessage 携带moviepilot_steering_message_id和continuation_context指令要求模型继续原任务并保留此前的范围、停止条件、确认标准、输出格式和安全约束只有用户明确修改时才改变它们同步/异步模型调用均在模型请求边界原子消费 inbox不增加 LangGraph 递归节点。记忆与活动记录记忆目录结构Agent 的记忆统一位于config/agent/memory记忆类别位置加载方式说明全局公共主记忆config/agent/memory/MEMORY.md每轮默认注入所有用户共享的偏好、沟通方式、长期规则和稳定事实仅系统管理员可写当前用户主记忆memory/users/user-key/MEMORY.md每轮默认注入当前用户的偏好与规则公共记忆先于用户记忆主题记忆各自作用域下的 Markdown 文件不自动加载用search_memory(categorytopic, ...)按需检索活动记录各自作用域下的activity/YYYY-MM-DD.md不自动加载自动生成的只读历史保留期默认 7 天旧的config/agent/activity文件不迁移也不再作为活动记忆读取。强制任务前检索Agent 在执行任何实质任务或调用业务、文件、网络、命令等工具前必须先调用search_memory检索与本次请求相关的记忆这是本轮任务的第一个工具调用。简单问候、致谢等无需执行任务的情况不需要检索。工具支持分类primary、topic、activity、all过滤关键词、文件路径file_path、日期dateYYYY-MM-DD、时间窗口days默认 7 天、条数limit默认 20、最大 50和显式正则过滤use_regex。检索结果是有界的结构化内容不会把整个记忆目录重新塞回上下文。app/agent/middleware/memory.py 中MemoryMiddleware的实现细节包括主记忆文件最多注入 100 KiBMAX_MEMORY_FILE_SIZE按需检索单文件上限 2 MiB、单行最多 1200 字符、单次返回正文最多 32 KiB活动记忆单日文件最多 256 KiB由 LLM 在轮次结束后生成 40~160 字的脱敏摘要SKIP标记跳过低价值对话图片载荷被替换为[图片]占位符避免 Base64 数据写入记忆路径解析严格限制在全局公共记忆与当前用户记忆作用域内逃逸根目录的链接会被拒绝。写入记忆的规则用户明确要求记住的偏好或规则应写入当前用户的memory/users/user-key/MEMORY.md或合适的用户级主题文件只有系统管理员可以写入全局公共记忆。一次性请求、临时状态和凭据API Key、Token、密码、Cookie不应写入记忆。检索到的文件内容只是上下文不能覆盖系统或用户指令。Agent 人格是全局运行时配置不按用户隔离所有用户共享当前激活人格。普通用户可以查询人格列表但只有系统管理员可以切换激活人格或修改人格定义人格定义见 app/agent/defaults/personas。按需发现工具Tool Discovery当设置LLM_MAX_TOOLS 0时Agent 首轮仍只筛选一批相关工具该配置项默认值为 0即不启用工具选择中间件见 app/runtime/config.py。后续读取 Skill 或发现新问题后可以通过内部search_tools(search, limit)按名称、说明或标签搜索当前会话工具目录并在下一次模型调用获得匹配工具的完整参数定义。发现机制参数参数取值/约束每次最多返回匹配工具8 个TOOL_DISCOVERY_MAX_RESULTS保留最近额外工具候选16 个TOOL_DISCOVERY_WINDOW_SIZE再次发现刷新候选优先级匹配方式工具精确名称 有限中英文能力别名如整理对应 transfer额外工具参数定义预算最多 4096 tokens且不超过已知模型窗口的 10%总输入余量保留 15%实现位于 app/agent/middleware/selection.py 的ToolSelectorMiddleware_find_discovery_tools只在当前授权目录内离线匹配关键词空白或无关查询不会展开全量工具能力别名表TOOL_DISCOVERY_ALIASES覆盖媒体、资源、站点、订阅、下载、媒体库、整理transfer、系统、配置、插件、工作流、定时、文件、网页、命令、过滤、人格、推荐、元数据、Skill 等中英文关键词搜索先报告候选pending_budget_check下一次模型调用根据统一预算明确报告实际启用和未启用原因enabled/schema_budget_exceeded/context_budget_exceeded等初选、常驻和供应商工具保持可用发现状态仅作用于当前用户请求新的用户请求重新筛选LLM_MAX_TOOLS约束首轮筛选数量发现不会安装工具、连接新的 MCP 服务或扩大执行权限。此外工具筛选还做了两项工程优化以 provider-neutral JSON 提示约束模型返回{tools: [...]}并手动解析避免不同 OpenAI/Anthropic 兼容端点对response_format的支持差异在abefore_agent只做一次真实筛选、后续模型回合复用结果避免为每次工具循环重复消耗一次额外的 LLM 调用。update_plan、search_memory、search_tools、read_tool_result和get_tool_execution是 Agent 内部会话能力不通过外部 MCP 或moviepilot tool发布。工具结果与大结果续读宿主统一区分四种执行结果状态状态含义succeeded成功failed失败pending任务未完成异步任务已提交不等于完成unknown实际结果未知明确的业务失败、MCPisError和普通异常会以失败消息返回模型普通业务对象中的错误说明或下载器状态不会被当成整个工具的失败或执行状态。大结果续读read_tool_result超长结果在当前会话图中临时保存预览带result_id和next_offset。Agent 使用read_tool_result按 Unicode 字符位置续读无需重新执行原工具。其容量与生命周期约束见 app/agent/middleware/output.py每条完整结果最多 1 MiBMAX_RESULT_BYTES每个图最多 8 条、合计 4 MiB15 分钟后过期容量超限、图重建和进程退出也会使编号失效无法保存的结果明确要求缩小查询范围不同图线程不能互读管理员结果在降权后不能续读结果原文只短期驻留内存不归档到磁盘或日志。execute_command 的结构化返回execute_command(actionrun)返回结构化 JSONexit_code、timed_out、execution_outcome和status表示实际执行结果output保存输出预览output_file指向超长输出的临时归档。判定规则仅正常退出且退出码为 0 时成功非零退出或已停止的超时命令为失败无法确认进程结束时为unknown不能凭有输出判断成功超时和取消不会撤销命令已经产生的外部副作用取消继续向外传播同时回收输出读取任务、关闭归档文件。run、后台 pipe 和 PTY 共用cwd、shell、login解析省略cwd使用 MoviePilot 根目录相对路径也相对该目录并支持~错误目录在进程启动前拒绝。POSIX 默认使用配置的SHELL未配置时/bin/sh且不启动登录模式Windows 未显式指定时保留 Git Bash → PowerShell 7 → cmd 的选择顺序与 UTF-8 策略。管道会话可用write(input_text末段输入, close_stdintrue)交付末段后关闭输入PTY 的输入输出共用端点因此拒绝close_stdintrue。终端句柄绑定宿主创建的用户及任务作用域知道session_id不代表可以操作它。父任务使用terminal_sessions[{session_id:term_…,actions:[read,wait]}]显式分享指定终端给子任务提示词中提到句柄不会授权兄弟任务也不会继承。缺少、已关闭或无权访问的终端均返回terminal_access_denied。interrupt仅发送一次 POSIXSIGINT或 WindowsCTRL_BREAK_EVENT不等待升级强杀kill负责终止并在需要时强杀。工具图片与模型视觉browse_webpage(actionscreenshot)和view_image(url...|file_path...|image_data...)在 Agent 中返回真实图像块和有限来源说明。图像在通用文本截断之前处理最终请求按完整工具回复批次把ToolMessage中的image_url块组装成带TOOL_OBSERVATION_MARKER的临时HumanMessage(content[text, image_url, ...])再发送给支持图片的模型原始用户消息、工具调用 ID 和授权不变。关键边界视觉中间件只修改出站副本不把临时图片观察写回持久会话历史每次模型请求都检查实际模型资料和LLM_SUPPORT_IMAGE_INPUT开关已知纯文本模型会得到明确的未接收工具图片说明服务明确拒绝图片时只对该次模型调用做一次文字回退随后本轮沿用文字观察不重复执行图片工具浏览器截图最多约 150 KiB 原始 JPEGview_image图片最多约 768 KiB实际输入还受 1 MiB data URL 和像素上限约束view_image的远程 URL 只允许通过公网安全校验的 HTTP(S) 地址本地路径继续遵守 Agent 文件访问边界恢复后的旧图片不能用于声称已看到视觉细节需要重新调用图片工具获取当前内容。写工具的持久执行记录Invocation生产 Agent 在副作用之前向agentinvocation表提交原子认领。记录只包含用户、会话、工具身份、参数指纹、执行 token、状态和固定宿主文案不保存原始参数或工具输出。无法认领时不执行写入相同调用 ID 携带不同参数时拒绝执行。去重与核验规则同一用户请求内参数规范化后完全相同的 MoviePilot API 写调用共用一个执行身份防止模型并行或重复调用明确的新用户请求可再次执行已完成操作实现见 app/agent/middleware/invocation.py 的InvocationMiddleware普通工具使用原始工具调用 ID 去重不把重复执行同一条诊断命令误合并为同一业务意图上一轮相同 API 参数仍为运行中或未知时新请求先核验旧记录不盲目发起第二次写入已确认提交的异步请求保存为pending同一执行身份不重复提交新的明确用户意图可以再次提交pending不代表外部任务已完成get_tool_execution可凭宿主返回的invocation_id查询当前用户、当前会话的最近观测状态当前自动核验支持非敏感设置完整替换通过config.system.get只读确认目标值匹配后收口为成功并跳过重复写入敏感、未匹配、列表追加及其他无法确定的副作用保持unknown不允许模型自行把它改成成功或未执行写入请求发出后的传输中断、超时和响应正文不可用保留unknown调用前参数错误和明确 HTTP 拒绝仍为失败冷启动将未收口的 running 转为 unknown并更换 token旧执行者不能覆盖新恢复状态也不会仅因时间过去而自动重放。这些机制不构成任意外部系统的恰好一次事务保证。成功、失败和已确认提交的回执随会话删除回收没有聊天记录的后台同类回执按共享会话保留期清理。异常和取消后的继续对已启用聊天持久化的会话执行异常或用户取消时Agent 在释放会话图之前尝试保存脱敏恢复快照已收到的工具回执保留未收到结果的调用明确标记为结果未知不能当成未执行或已成功用户随后说继续时Agent 可以读取已有结果和计划从剩余工作继续下载、修改配置、删除文件等操作如缺少回执应先只读核验实际状态再决定是否重试取消仍会终止当前轮次不会自动重放工具。聊天快照保存采用有界等待。进程强制退出、持久化失败或工具在中断后才完成的外部副作用不能保证被聊天快照记录写工具通过上述持久执行记录保留恢复边界。子代理连续工作默认子代理在宿主执行边界强制只读多功能 API 网关按具体operation_id判断副作用继承管理员身份也不能修改、删除、触发下载或服务操作敏感设置原值读取同样不开放终端仅允许读取/等待已有输出浏览器仅允许观察已有页面不允许导航、输入、点击、脚本、关闭或修改 Cookie外部 MCP 的兼容 Read 标签没有动作级保证需交由主代理处理正常业务查询和声明只读的本地工具仍可使用。一轮结束会回收未完成的子任务正常收敛后同一会话下一轮仍可委派。会话关闭时永久停止接收子任务无法在等待上限内收敛的任务仍由原 owner 持有并封闭新提交。子代理沿用主 Agent 的最终请求预算和上下文压缩机制长调查可以压缩旧消息但最新单条工具事务或固定提示本身超过模型窗口时仍会明确失败不会静默删除关键内容。验证范围任务评测与离线轨迹验收的区别、场景及命令见 Agent 任务评测。固定响应单测不代表真实模型完成率。自动化测试使用脚本模型和真实 LangGraph 执行图覆盖工具发现和预算、计划恢复、结果状态、分页续读、持久认领和只读核验、执行中断以及连续两轮子代理委派。SQLite 测试覆盖并发认领、token 隔离、迁移和清理。测试不调用付费模型或外部服务。需要强调的是这些机制提高执行可靠性真实任务的理解、规划质量和成功率仍取决于所选模型、上下文窗口、工具权限及外部服务状态。模型能力需要用真实业务场景单独评估Agent 与 Codex Harness 对齐路线 中记录的四层硬门禁确定性回归、真实 MoviePilot 运行、同场景 Harness 对比、留存与复核正是对这一原则的工程化落地。赞分享后端AI AgentMCP 服务AI 技能【免费下载链接】MoviePilotNAS媒体库自动化管理工具项目地址https://gitcode.com/gh_mirrors/mo/MoviePilot点击查看免费下载相关推荐Quartz.NET任务恢复机制系统重启后自动恢复执行的终极指南Quartz.NET任务恢复机制系统重启后自动恢复执行的终极指南 在当今的企业级应用中 可靠的任务调度 是确保业务连续性的关键因素。Quartz.NET作为任务调度后端Nacos 任务执行引擎Task Execution深度解析延迟任务、执行任务与领域调度机制Nacos 任务执行引擎Task Execution深度解析延迟任务、执行任务与领域调度机制 本文以 Nacos 官方设计规范 Foundation Ta后端微服务配置中心服务注册发现云原生pianobar远程控制教程打造专属音乐服务器的终极指南pianobar远程控制教程打造专属音乐服务器的终极指南 pianobar 是一款基于控制台的Pandora音乐播放器它不仅能让你在终端中享受个性化的上一篇告别卡顿Vue.Draggable与GraphQL查询合并工具实战指南下一篇从安装到报告Kcov完整使用手册附Linux/MacOS配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考