Hermes-Agent 自定義工具開(kāi)發(fā)實(shí)戰(zhàn)
今天直接上實(shí)戰(zhàn)——教你5分鐘快速開(kāi)發(fā)一個(gè)自定義工具,集成到Hermes中,讓AI智能體擁有你想要的專(zhuān)屬功能!全文代碼可直接復(fù)制,新手也能零失敗上手,建議先收藏+關(guān)注,避免開(kāi)發(fā)時(shí)迷路~
?? 前言:為什么要自定義工具?
Hermes-Agent自帶40+內(nèi)置工具(搜索、文件操作、瀏覽器自動(dòng)化等),但實(shí)際使用中,我們常常需要適配自己的場(chǎng)景:比如對(duì)接公司內(nèi)部系統(tǒng)、操作本地軟件、調(diào)用專(zhuān)屬API,這時(shí)候就需要開(kāi)發(fā)自定義工具。
好在Hermes的工具系統(tǒng)采用插件化設(shè)計(jì),開(kāi)發(fā)門(mén)檻極低——無(wú)需修改核心源碼,只需繼承基類(lèi)、實(shí)現(xiàn)2個(gè)核心方法,就能快速集成,甚至可以直接打包供他人使用!
? 一、開(kāi)發(fā)前準(zhǔn)備(環(huán)境確認(rèn))
確保你已經(jīng)成功安裝Hermes-Agent(參考上一篇安裝教程),并確認(rèn)開(kāi)發(fā)環(huán)境:
# 1. 激活Hermes虛擬環(huán)境(手動(dòng)安裝用戶(hù)) source ~/.hermes/venv/bin/activate # 2. 確認(rèn)hermes命令可用 hermes version # 3. 安裝必要依賴(lài)(若未安裝) pip install pydantic # 工具參數(shù)校驗(yàn)(Hermes內(nèi)置依賴(lài),一般已安裝)
??? 二、自定義工具開(kāi)發(fā)步驟(核心流程)
我們以「開(kāi)發(fā)一個(gè)本地文件查詢(xún)工具」為例(功能:根據(jù)文件路徑,查詢(xún)文件內(nèi)容并返回),一步步演示開(kāi)發(fā)全過(guò)程。
Step 1:找到工具存放目錄
Hermes的工具分為「內(nèi)置工具」和「自定義工具」,自定義工具建議放在 \~/\.hermes/skills/ 目錄下(自動(dòng)被Hermes識(shí)別):
# 創(chuàng)建自定義工具目錄(若不存在) mkdir -p ~/.hermes/skills/my_custom_tools cd ~/.hermes/skills/my_custom_tools
Step 2:編寫(xiě)工具代碼(核心文件)
創(chuàng)建文件 file\_query\_tool\.py,代碼如下(注釋詳細(xì),可直接復(fù)制):
from hermes.tools.base import BaseTool
from pydantic import Field
from typing import Optional
# 自定義工具類(lèi),必須繼承BaseTool
class FileQueryTool(BaseTool):
# 1. 工具基礎(chǔ)信息(必填)
name: str = "file_query" # 工具唯一標(biāo)識(shí)(調(diào)用時(shí)用這個(gè)名字)
description: str = "用于查詢(xún)本地文件的內(nèi)容,需要傳入文件的絕對(duì)路徑;如果文件不存在,會(huì)返回錯(cuò)誤提示" # LLM用來(lái)判斷是否調(diào)用該工具
return_direct: bool = False # 是否直接返回結(jié)果(無(wú)需LLM二次處理)
# 2. 工具參數(shù)(必填,用pydantic校驗(yàn))
file_path: str = Field(
description="本地文件的絕對(duì)路徑,例如:/home/user/test.txt、C:/Users/test.txt(WSL2中用Linux路徑)"
)
encoding: Optional[str] = Field(
default="utf-8",
description="文件編碼格式,默認(rèn)utf-8,若出現(xiàn)亂碼可嘗試gbk"
)
# 3. 核心執(zhí)行方法(必填,實(shí)現(xiàn)工具邏輯)
async def execute(self) -> str:
"""執(zhí)行工具,查詢(xún)文件內(nèi)容并返回"""
try:
# 讀取文件內(nèi)容
with open(self.file_path, "r", encoding=self.encoding) as f:
content = f.read()
# 處理長(zhǎng)文本(避免超過(guò)LLM上下文限制)
if len(content) > 1000:
return f"文件內(nèi)容(前1000字符):\n{content[:1000]}\n\n提示:文件內(nèi)容過(guò)長(zhǎng),已截取前1000字符,如需完整內(nèi)容請(qǐng)指定截取范圍。"
else:
return f"文件內(nèi)容:\n{content}"
except FileNotFoundError:
return f"錯(cuò)誤:未找到文件,請(qǐng)檢查路徑是否正確(路徑:{self.file_path})"
except Exception as e:
return f"讀取文件失?。簕str(e)}"
# 注冊(cè)工具(Hermes啟動(dòng)時(shí)會(huì)自動(dòng)掃描并加載)
def register_tools(tool_manager):
tool_manager.register_tool(FileQueryTool())Step 3:關(guān)鍵代碼解析(必看)
- 繼承BaseTool:所有自定義工具必須繼承Hermes的BaseTool基類(lèi),否則無(wú)法被識(shí)別
- 基礎(chǔ)信息:name(唯一標(biāo)識(shí))、description(給LLM看的說(shuō)明,決定LLM是否調(diào)用該工具)、return_direct(是否直接返回結(jié)果)
- 參數(shù)定義:用pydantic的Field定義參數(shù),description會(huì)告訴LLM需要傳入什么參數(shù)
- execute方法:工具的核心邏輯,必須是async異步方法(Hermes底層是異步執(zhí)行),返回字符串結(jié)果(LLM可直接處理)
- 注冊(cè)工具:通過(guò)register_tools函數(shù),將工具注冊(cè)到ToolManager,Hermes啟動(dòng)時(shí)會(huì)自動(dòng)掃描執(zhí)行
Step 4:驗(yàn)證工具是否加載成功
# 1. 重啟Hermes(加載新工具) hermes stop # 若已啟動(dòng),先停止 hermes # 重新啟動(dòng) # 2. 在Hermes交互界面,查看所有工具 /hermes tools list
如果輸出中包含file\_query,說(shuō)明工具加載成功!
?? 三、測(cè)試自定義工具(實(shí)戰(zhàn)驗(yàn)證)
在Hermes交互界面,直接輸入指令,讓AI調(diào)用我們的自定義工具:
# Hermes交互界面輸入 幫我查詢(xún)文件 /home/user/test.txt 的內(nèi)容
此時(shí)Hermes會(huì)自動(dòng)識(shí)別需要調(diào)用 file\_query 工具,傳入文件路徑參數(shù),執(zhí)行后返回文件內(nèi)容,完美!
?? 四、進(jìn)階技巧(擴(kuò)展功能)
1. 工具參數(shù)擴(kuò)展(多參數(shù)示例)
如果需要多參數(shù)(比如查詢(xún)文件的指定行數(shù)),只需新增Field即可:
start_line: Optional[int] = Field(
default=1,
description="開(kāi)始讀取的行數(shù),默認(rèn)從第1行開(kāi)始"
)
end_line: Optional[int] = Field(
default=None,
description="結(jié)束讀取的行數(shù),默認(rèn)讀取到文件末尾"
)然后在execute方法中處理這兩個(gè)參數(shù)即可。
2. 工具打包與分享
將自定義工具目錄打包成zip,發(fā)給他人,他人只需解壓到 \~/\.hermes/skills/ 目錄,重啟Hermes即可使用,無(wú)需額外配置!
3. 調(diào)試工具(關(guān)鍵技巧)
如果工具執(zhí)行失敗,可通過(guò)以下命令查看日志:
hermes logs # 查看Hermes運(yùn)行日志,定位錯(cuò)誤
?? 五、常見(jiàn)問(wèn)題&解決方案
| 問(wèn)題 | 解決方案 |
|---|---|
| 工具未被加載 | 1. 檢查文件路徑是否在 ~/.hermes/skills/ 下;2. 檢查register_tools函數(shù)是否正確;3. 重啟Hermes |
| 執(zhí)行工具報(bào)錯(cuò)“async錯(cuò)誤” | 確保execute方法是async異步方法,且沒(méi)有同步阻塞操作(如time.sleep,需替換為asyncio.sleep) |
| LLM不調(diào)用自定義工具 | 優(yōu)化description,更明確說(shuō)明工具的用途和適用場(chǎng)景,讓LLM知道何時(shí)該調(diào)用 |
?? 總結(jié)&互動(dòng)引流
本文手把手教你開(kāi)發(fā)Hermes自定義工具,核心就3步:繼承基類(lèi)、定義參數(shù)、實(shí)現(xiàn)執(zhí)行邏輯,5分鐘就能搞定!學(xué)會(huì)這個(gè),你可以開(kāi)發(fā)任何你需要的工具,讓Hermes完全適配你的場(chǎng)景~
到此這篇關(guān)于Hermes-Agent 自定義工具開(kāi)發(fā)實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Hermes-Agent 自定義工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章

Hermes Agent工具集大全:20+工具讓你的AI無(wú)所不能
工具集是Hermes Agent區(qū)別于普通AI聊天工具的關(guān)鍵,通過(guò)調(diào)用各種工具,Hermes Agent不僅僅是一個(gè)對(duì)話(huà)伙伴,而是一個(gè)能夠?qū)嶋H操作系統(tǒng)的智能代理,本文整理了20+個(gè)工具集,覆2026-04-20


