news 2026/5/27 22:02:47

harness 与 hermes-agent 运行原理和核心流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
harness 与 hermes-agent 运行原理和核心流程

Harness 的运行流程

Harness 的主程序入口在:

harness/cmd/gitness/main.go

启动主线是:

gitness server .local.env | cli/operations/server/server.go | 加载 env -> LoadConfig -> SetupLogger -> SetupProfiler | cmd/gitness/wire.go / wire_gen.go 组装依赖 | bootstrap 初始化系统 service、pipeline service、gitspace service、admin 用户 | 启动 HTTP server、metric server、job scheduler、SSH server | app/router/web.go 提供 API、Swagger、OpenAPI、前端 UI

Harness 的请求处理原理

典型 Web/API 请求链路:

浏览器 / CLI / curl | HTTP server | router + middleware | app/api/controller/* | app/services/* | store / git / registry / job / pubsub | 数据库、文件系统、Git 仓库、Docker、Redis

前端通过 OpenAPI 生成的 TypeScript client 调用后端接口。后端负责认证、授权、业务校验和持久化。

Harness 前端嵌入原理

Harness 的前端不是纯独立服务。它有两种形态:

  1. 开发时,web可以独立启动 webpack dev server
  2. 构建时,web/dist会被 Goembed机制打进二进制

关键文件:

harness/web/dist.go harness/app/router/web.go

所以最终gitness二进制可以直接提供 UI。

Hermes Agent 的运行流程

Hermes Agent 的主要入口来自pyproject.toml

hermes = hermes_cli.main:main hermes-agent = run_agent:main hermes-acp = acp_adapter.entry:main

典型 CLI 对话链路:

hermes | hermes_cli/main.py | 加载 profile / config / env / CLI 参数 | run_agent.AIAgent | 构造模型 client + system prompt + tool definitions | 调用 LLM | 模型返回文本或 tool_calls | model_tools.handle_function_call / tools.registry dispatch | 工具结果写回 messages | 继续调用 LLM,直到完成或达到预算 | 持久化 session/messages 到 hermes_state.py 管理的 SQLite

Hermes Agent 的工具调用原理

核心机制:

  • 每个工具文件通过tools.registry.register()自注册
  • tools/registry.py保存 schema、handler、check_fn、toolset 信息
  • model_tools.py负责 discovery、schema 输出、函数调用分发
  • toolsets.py定义工具集合和组合关系
  • run_agent.py在模型返回 tool_calls 后执行工具

简化流程:

工具模块 import | registry.register(name, schema, handler) | get_tool_definitions() | LLM 看到可用工具 schema | LLM 返回 tool_calls | AIAgent 执行工具 | 工具输出进入下一轮 messages

Hermes Agent 的 Gateway 原理

Gateway 在:

hermes-agent/gateway/run.py

它把多种消息平台统一成 agent 会话入口:

  • Telegram
  • Discord
  • Slack
  • WhatsApp
  • Signal
  • Matrix
  • Email
  • Webhook
  • 其他平台 adapter

典型链路:

用户在消息平台发消息 | 平台 adapter 收到事件 | gateway session 管理和权限/配对判断 | 取出或创建 AIAgent | 调用 run_conversation | 把回复发回对应平台

运行原理对比

维度HarnessHermes Agent
主循环HTTP/SSH/Job server 常驻Agent 对话循环 + Gateway 常驻
输入API 请求、Git 请求、Webhook、UI 操作用户消息、CLI 输入、cron、ACP 请求
输出页面、API 响应、Git/Registry 协议响应、日志文本回复、工具结果、文件修改、消息投递
状态推进业务服务更新数据库和 Git/Registry 状态LLM 多轮推理 + 工具结果推进会话
后台任务job scheduler、metric collector、cleanupcron scheduler、gateway watcher、session/cache eviction
失败处理返回错误码、事务回滚、优雅关闭retry、fallback、压缩、错误分类、工具防护
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 22:00:12

从零到一:在Ubuntu 20.04上部署并实战YOLOv5目标检测

1. 环境准备:搭建Ubuntu 20.04基础环境 在开始部署YOLOv5之前,我们需要确保Ubuntu 20.04系统已经安装了必要的软件和工具链。我建议使用全新的Ubuntu系统进行操作,这样可以避免各种依赖冲突问题。实测下来,Ubuntu 20.04 LTS是最稳…

作者头像 李华
网站建设 2026/5/27 21:59:58

告别满屏的 URL 拼接:一篇文章带你彻底搞懂 OpenFeign

在微服务架构中,把一个大系统拆分成多个小服务后,最直接面临的问题就是:服务之间如何通信?在早期的 Spring Cloud 开发中,我们最常用的工具是 RestTemplate。但随着业务复杂度的提升,RestTemplate 暴露出了…

作者头像 李华
网站建设 2026/5/27 21:58:28

《ZLToolKit源码学习笔记》(1)VS2019编译实战:从CMake配置到调试运行

1. 环境准备:从零搭建开发环境 第一次接触ZLToolKit源码的朋友可能会被编译环境搞得一头雾水。别担心,我刚开始也是这样。经过几次踩坑,总结出一套最稳妥的环境搭建方案。首先需要准备三样东西:VS2019开发环境、CMake工具和ZLTool…

作者头像 李华
网站建设 2026/5/27 21:56:26

AI驱动开发工作流实战:从GitHub Issue到Merged PR的自动化实践

1. 项目概述:一个AI驱动的完整开发工作流作为一名在软件工程一线摸爬滚打了十多年的开发者,我经历过无数次从发现问题、讨论方案到最终提交代码的循环。传统的流程,从在GitHub上开一个Issue,到最终Pull Request被合并,…

作者头像 李华