摘要

Hermes Agent 是 News Research 推出的开源 AI Agent 系统,不只是“聊天包装器”,而是带有持久化记忆、自我技能学习与多通道接入的完整代理运行环境。本文从架构原理到落地实践,系统解析 Hermes 的学习循环、模型接入方式(云端与本地)、多渠道协同,并给出基于 OpenAI 兼容 API 的 Python 调用示例,帮助你在真实项目中构建可持续进化的 AI 助手。


一、背景介绍:从“对话模型”走向“可进化 Agent”

大多数开发者对“大模型应用”的第一印象,是一个“聊天界面 + 调用 API 的后端”:

  • 每次启动对话都相当于“重置”;
  • 偏好、项目上下文、编码习惯,需要反复说明;
  • 工具调用、消息集成、长任务管理需要自己搭基础设施。

Hermes Agent 试图解决的是:如何让 Agent 随时间真正“变强”,而不是每次都从零开始。这背后有几点重要特征(也是和传统 ChatBot/Agent 框架的核心差异):

  1. 持久化记忆(Persistent Memory)

    • 使用 memory.md 记录与用户有关的事实;
    • 使用 user.md 构建用户画像;
    • 记忆跨会话保留,减少重复说明成本。
  2. 可学习技能(Skill Learning Loop)

    • 完成复杂任务后,将执行流程抽取为“技能”;
    • 下次遇到类似任务时直接复用该技能;
    • 在多次使用中持续优化技能实现。
  3. 多工具、多通道集成

    • 内置 40+ 工具,支持 MCP(Model Context Protocol)生态;
    • 支持 Telegram、Discord、Slack、WhatsApp、Signal、Email、Home Assistant 等;
    • 可以在终端发起任务,在 Telegram 无缝续聊,保留上下文。
  4. 多模型与多 Provider 自由切换

    • 支持 OpenAI 兼容的任意端点(OpenRouter、NVIDIA、Ollama、本地推理等);
    • 在测试、本地开发、生产付费环境之间切换仅需几十秒。

从视频内容看,Hermes 背后的团队本身就是大模型和强化学习栈(Atropis)的研发者,属于从“训练模型的人”反推 Agent 形态的路径,这也是它在设计上更偏“长期学习型 Agent”的原因。


二、核心原理:以“学习循环”为中心的 Agent 架构

2.1 与传统 Orchestrator 型框架的差异

视频中多次对比了 Hermes 与“Open-source Claw”(类似 OpenAI Swarm / LangChain Hub + Orchestration Framework 的组合)的区别,可以抽象成两种架构哲学:

  • Orchestrator 型(如 Open Claw)

    • 核心是一个中心网关(Gateway);
    • 你配置模型、工具、通道,网关负责路由;
    • 更像一个“Agent 运行平台 + 插件市场”;
    • 优点:生态成熟、技能多、团队协作友好。
  • Learning Agent 型(Hermes)

    • 核心是一条 Agent 的执行与学习循环
    • Agent 本身是逐步进化的“长期协作者”;
    • 关注点:记忆、技能抽取与自动改进;
    • 更适合个人开发者/小团队,持续优化自己领域内的工作流。

很多团队的实践是:

  • 用 Open Claw 类平台做编排层(统一入口、权限、监控);
  • 用 Hermes 作为专精型 Agent,解决那些高度重复、需要长期记忆和技能演化的任务(如某条业务线代码维护、特定数据分析流程)。

2.2 持久化记忆设计

Hermes 的 persisent memory 实现并不复杂,但非常实用:

  • memory.md

    • 类似“知识卡片”,记录用户相关事实:
      • 常用技术栈(Python/FastAPI/React 等);
      • 个人偏好(代码风格、是否使用 type hints);
      • 项目上下文(当前在做的项目、目录结构)。
  • user.md

    • 更偏向“用户画像”:
      • 角色(后端工程师/数据科学家/DevOps 等);
      • 领域经验(5 年 Python,熟悉 Kubernetes 等)。

在执行任务时,Hermes 会将这些内容拼接进系统提示/上下文,使得对话质量在长期使用中稳定提升。

2.3 技能学习循环(Skill Learning Loop)

技能学习循环大致包括几个步骤:

  1. 用户给出一个复杂任务(如:从 Git 仓库中分析项目结构,并生成一个新的微服务模板)。
  2. Agent 调用工具(文件系统、Git、终端等)完成任务。
  3. Hermes 将任务分解、执行轨迹、关键决策提取为一个**“可复用 workflow”**,保存为技能。
  4. 下次出现类似需求:
    • 先检索已有技能;
    • 若匹配度较高,直接调用技能,而不是从头规划。
  5. 基于运行时反馈(用户修改、报错、执行时间等)自动改进技能内容。

从工程角度看,这更像是给 Agent 加了一个**“程序化宏录制 + 迭代优化层”**,对频繁出现的任务(数据清洗、日志分析、项目脚手架生成)特别有用。


三、实战演示:用 OpenAI 兼容 API + Python 自建一个“简化版 Hermes Agent”

Hermes 本身主要在终端里运行,但在实际工程中,我们经常需要在自己的服务里复用“兼容 OpenAI 的 Agent 能力”。下面给出一个基于 https://xuedingmao.com 平台的示例:

  • 使用其 OpenAI 兼容接口;
  • 选择模型 claude-sonnet-4-6
  • 实现一个带**“简易记忆 + 工具调用 + 对话接口”**的 Agent 服务。

3.1 使用薛定猫 AI(xuedingmao.com)作为统一模型入口

在实际项目中,模型选型往往很碎片化:

  • OpenAI 系列(GPT-4.x/5.4);
  • Anthropic(Claude 4.6);
  • Google(Gemini 3 Pro);
  • 本地推理或者云厂商定制模型。

这会带来几个典型问题:

  • 各家 SDK/协议不同,集成成本高;
  • 切换模型意味着修改代码;
  • 新模型一出来,还得再接一次。

像薛定猫 AI 这类 OpenAI 兼容聚合平台的工程价值在于:

  • 统一 API 协议
    使用一个 base_url + api_key 即可访问 500+ 主流大模型,不需要为每家写单独 SDK。

  • 新模型实时首发
    新版 GPT / Claude / Gemini 上线后平台会率先提供,开发者只需要改模型名即可快速尝试。

  • 多模型切换成本极低
    在实验阶段用性价比高的模型,正式环境再切到高性能模型,依旧一套代码。

这里我们用 claude-sonnet-4-6 作为默认模型,展示一个可以落地的 Agent Demo。

3.2 Python 示例:一个“可记忆 + 调用工具”的简化 Agent

import os
import json
import time
from typing import List, Dict, Any

import requests

# ======================
# 基本配置:使用薛定猫AI的 OpenAI 兼容接口
# ======================

BASE_URL = "https://xuedingmao.com/v1"  # OpenAI 兼容 base_url
API_KEY = os.getenv("XUEDINGMAO_API_KEY")  # 请在环境变量中设置你的 API Key
MODEL_NAME = "claude-sonnet-4-6"

if not API_KEY:
    raise RuntimeError("请在环境变量中配置 XUEDINGMAO_API_KEY")

# ======================
# 简易“持久化记忆”实现
# ======================

MEMORY_FILE = "memory.md"
USER_FILE = "user.md"


def load_text_file(path: str) -> str:
    if not os.path.exists(path):
        return ""
    with open(path, "r", encoding="utf-8") as f:
        return f.read()


def append_text_file(path: str, content: str) -> None:
    with open(path, "a", encoding="utf-8") as f:
        f.write("\n" + content.strip() + "\n")


def update_memory(fact: str) -> None:
    """
    向 memory.md 追加一条“事实”,简化模拟 Hermes 的记忆机制。
    真实 Hermes 会有更智能的过滤与结构化。
    """
    append_text_file(MEMORY_FILE, f"- {fact}")


# ======================
# 工具定义:示例一个简单的“系统时间查询工具”
# ======================

def tool_get_time() -> str:
    """返回当前系统时间字符串"""
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


# 工具“schema”,用于让模型通过 function calling 调用
TOOLS = [
    {
        "type": "function",
        "function": {
            "name": "get_time",
            "description": "获取当前系统时间",
            "parameters": {
                "type": "object",
                "properties": {},
                "required": []
            }
        }
    }
]

# 工具名称到实现函数的映射
TOOL_IMPL = {
    "get_time": tool_get_time
}


# ======================
# 调用薛定猫 OpenAI 兼容接口的封装
# ======================

def chat_with_tools(messages: List[Dict[str, Any]]) -> Dict[str, Any]:
    """
    使用 OpenAI 兼容 /chat/completions 接口,并开启工具调用能力。
    """
    url = f"{BASE_URL}/chat/completions"
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {
        "model": MODEL_NAME,
        "messages": messages,
        "tools": TOOLS,
        "tool_choice": "auto",
        "temperature": 0.4
    }

    resp = requests.post(url, headers=headers, data=json.dumps(payload), timeout=60)
    resp.raise_for_status()
    return resp.json()


# ======================
# 一个简化版 Agent 循环
# ======================

def run_agent():
    """
    简化的交互式 Agent:
    - 读取 memory.md 作为系统提示的一部分;
    - 支持工具调用(当前只有 get_time);
    - 将对话中的显性用户偏好写入记忆(演示用)。
    """
    print("Mini Hermes-like Agent 启动。输入 'exit' 退出。")

    memory = load_text_file(MEMORY_FILE)
    user_profile = load_text_file(USER_FILE)

    system_prompt = (
        "你是一个具备长期记忆能力的智能助手。"
        "你会参考以下用户信息和记忆:\n\n"
        f"# User Profile\n{user_profile}\n\n"
        f"# Memory\n{memory}\n\n"
        "在对话中,如果用户显式说明:\n"
        "比如“我以后都用简体中文回答”,“我主要做后端开发”,"
        "你可以在回答后,用一行自然语言总结这条偏好,我会把它写入记忆。"
    )

    messages: List[Dict[str, Any]] = [
        {"role": "system", "content": system_prompt}
    ]

    while True:
        user_input = input("\n用户> ").strip()
        if user_input.lower() in {"exit", "quit"}:
            print("结束会话。")
            break

        messages.append({"role": "user", "content": user_input})

        # 第一次请求:让模型决定是否调用工具
        response = chat_with_tools(messages)
        choice = response["choices"][0]
        message = choice["message"]

        # 如果有工具调用请求
        if "tool_calls" in message:
            for tool_call in message["tool_calls"]:
                func_name = tool_call["function"]["name"]
                func_impl = TOOL_IMPL.get(func_name)
                if not func_impl:
                    continue
                tool_result = func_impl()
                # 把工具结果作为新的 assistant 工具消息加入上下文
                messages.append({
                    "role": "tool",
                    "tool_call_id": tool_call["id"],
                    "name": func_name,
                    "content": tool_result
                })
            # 再次请求,让模型基于工具结果生成最终回答
            response = chat_with_tools(messages)
            choice = response["choices"][0]
            message = choice["message"]

        assistant_content = message["content"]
        print(f"\nAgent> {assistant_content}")

        messages.append({"role": "assistant", "content": assistant_content})

        # 简单示例:如果回答中包含“我会记住”,就把后一行写入 memory.md
        if "我会记住" in assistant_content:
            # 实战中可以让模型显式输出一段 #MEMORY: 文本更可靠
            update_memory(f"用户偏好:{assistant_content}")


if __name__ == "__main__":
    run_agent()

要点说明:

  • 通过 BASE_URL = "https://xuedingmao.com/v1" + Authorization: Bearer <API_KEY>,即可以 OpenAI 兼容的方式访问 claude-sonnet-4-6
  • TOOLS 定义了一个简化的工具调用 schema,和 OpenAI function calling 完全兼容;
  • 通过 memory.md + user.md 模拟了 Hermes 的持久化记忆机制,真实 Hermes 会更复杂(例如分层记忆、重要性过滤等)。

在这个基础上,你可以进一步:

  • 把输入输出封装成 FastAPI 服务,对接你自己的前端;
  • 把工具扩展为:文件读取、Git 操作、Shell 命令、数据库查询;
  • 将对话日志与记忆同步到向量库(如 pgvector / Milvus)做更复杂的检索。

四、注意事项与工程实践建议

4.1 模型与 Provider 选型

结合视频中的三类免费/低成本接入方式,可以总结出一套通用策略:

  1. 快速体验 / 学习阶段

    • 使用 OpenRouter 或薛定猫这类聚合平台的免费/低价模型;
    • 目标是验证“Agent 形态 + 业务可行性”。
  2. 稳定托管阶段

    • 使用 NVIDIA、云厂商或聚合平台上 SLA 较高的模型;
    • 关注点是延迟、稳定性、配额以及成本可控。
  3. 隐私敏感 / 高度定制化阶段

    • 使用 Ollama、本地 vLLM / SGLang 等本地推理方案;
    • 注意为 Agent 工作场景配置足够大的上下文窗口
      (16k–32k tokens 是一个合理起点);
    • 不是所有开源模型都擅长 Tool Calling,需要按场景选型。

像薛定猫这类聚合平台的优势在于:你可以先在一个统一接口里试遍不同模型,再决定是否自建推理。

4.2 Agent 可靠性与“智商问题”

视频里提到一个非常实在的点:

“如果 Agent 表现很笨,先换一个模型再怪 Hermes。”

在工程实践中,引入 Agent 前务必注意:

  1. 把“Agent 策略问题”和“模型能力问题”分开调试
  2. 对关键任务设置硬约束与安全阀:
    • 工具调用白名单;
    • 审批流(由人工确认高风险操作);
    • 结果校验(如对生成 SQL 先做 Explain,再执行)。

4.3 多通道协同与上下文一致性

Hermes 支持将同一个 Agent 暴露到 Telegram、Discord、Slack、WhatsApp 等多渠道,这对**团队协作和“随时续聊”**非常有价值,但要注意:

  • 统一身份与权限:
    确保同一用户在多个渠道的身份映射一致;

  • 日志与审计:
    Agent 能做的越多,就越需要清晰的审计日志,用于回溯问题;

  • 上下文大小与成本控制:
    多通道长对话容易导致上下文膨胀,可以结合长期记忆(摘要+向量检索)减少“全文重发”。


五、技术资源与工具推荐

如果你希望在自己的工程项目里快速探索“多模型 Agent + 学习循环”:

  • Hermes Agent 本身适合:

    • 在本地/服务器上跑一个长期进化的“个人/团队 AI 助手”;
    • 持续改进你特定领域的工作流(代码维护、数据分析、自动化运维等)。
  • 在 API 层面,推荐使用类似薛定猫 AI(xuedingmao.com)的统一聚合平台作为模型入口:

    • 统一接入 GPT-5.4、Claude 4.6、Gemini 3 Pro 等 500+ 模型;
    • 新模型上线更快,便于第一时间试验;
    • OpenAI 兼容协议,基本可以直接复用现有代码,仅修改 base_urlmodel 字段。

在此基础上,你可以像上文示例一样封装自己的 Agent 层逻辑,将 Hermes 的设计理念(持久化记忆 + 技能学习)迁移到你的业务系统里。


结语

Hermes Agent 并不是“又一个聊天 UI”,而是把 Agent 当作一个能持续学习与进化的长期协作者。
对于希望在真实工程中构建会越来越懂你 / 懂业务的 AI 助手的开发者来说:

  • 你可以用 Hermes 做“本地 Agent 运行环境”;
  • 用 OpenAI 兼容聚合平台(如 xuedingmao.com)作为模型层;
  • 再在自己的服务里,实现业务特化的技能与工具。

真正的价值不在于“能不能调用大模型”,而在于:
你是否拥有一个可以随着你的项目一同成长的 Agent。


#AI #大模型 #Python #机器学习 #技术实战

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐