hermes的各agent之间的相互调用
- 第一种方式:通过shell命令delegate_task方式调用别的agent去执行:
修改调用方SOUL.md(被调用方无需变更),增加如下内容:
**如果用户要求分析某个具体渠道的数据时,请用delegate_task方式委派给其他agent执行,参数为本次会话的用户输入及之前的会话内容。执行完后你把结果汇总输出。**
A渠道agent:SPECIAL_AGENT=agent_a
B渠道agent: SPECIAL_AGENT=agent_b
**委托代理格式**
“`json
delegate_task(
tasks=[
{
“goal”: “用户输入内容和会话内容”,
“context”: “执行 ssh -T hermes@192.168.0.233 “bash -l -c ‘.local/bin/hermes -p $SPECIAL_AGENT chat -Q -q “替换成用户输入内容和会话内容”‘”;约束:输出 JSON 格式结果。”
“toolsets”: [“shell”]
},
]
)
- 第二种方式:通过delegat_task方式调用acp协议(需要0.19.0以后的版本,老的版本可能有bug):
先验证被调用方是否支持acp协议,shell下执行:
$ (
echo ‘{“jsonrpc”: “2.0”, “method”: “initialize”, “params”: {“protocolVersion”: 1, “clientInfo”: {“name”: “test-client”, “version”: “1.0.0”}, “capabilities”: {}}, “id”: 1}’;
echo ‘{“jsonrpc”: “2.0”, “method”: “session/new”, “params”: {“cwd”: “/tmp”, “mcpServers”: []}, “id”: 2}’;
echo ‘{“jsonrpc”: “2.0”, “method”: “session/prompt”, “params”: {“sessionId”: “”, “prompt”: [{“type”: “text”, “text”: “你好,请自我介绍”}]}, “id”: 3}’;
sleep 15
) | ssh -T hermes@192.168.0.229 “bash -l -c ‘.local/bin/hermes -p agent_a acp'”
检查输出,应该能看到3步执行结果,第3步会出错,因为sessionId不对,把下面sessionId改成上面输出里面的sessionId执行:
$ (
echo ‘{“jsonrpc”: “2.0”, “method”: “initialize”, “params”: {“protocolVersion”: 1, “clientInfo”: {“name”: “test-client”, “version”: “1.0.0”}, “capabilities”: {}}, “id”: 1}’;
echo ‘{“jsonrpc”: “2.0”, “method”: “session/prompt”, “params”: {“sessionId”: “65bcfba0-f3d5-4140-9366-5dc5294b0e4c”, “stream”: false, “prompt”: [{“type”: “text”, “text”: “你好,请自我介绍”}]}, “id”: 3}’;
sleep 15
) | ssh -T hermes@192.168.0.229 “bash -l -c ‘.local/bin/hermes -p agent_ua_a acp'”
上面的命令输出一堆类似{“content”:{“text”:”\u60f3″,”type”:”text”}格式的文本表示验证通过。
然后修改调用方的SOUL.md(被调用方无需变更):
**如果用户要求分析某个具体渠道的数据时,请用delegate_task方式委派给其他agent执行,参数为本次会话的用户输入及之前的会话内容。执行完后你把结果汇总输出。**
A渠道agent:SPECIAL_AGENT=agent_a
B渠道agent: SPECIAL_AGENT=agent_b
**委托代理格式**
“`json
delegate_task(
tasks=[
{
“goal”: “使用ACP+SSH方式执行:<用户输入内容和会话内容>”,
“context”: “工作目录在 /tmp,ACP+SSH执行<用户输入内容和会话内容>: ssh -T hermes@192.168.0.229 \”bash -l -c ‘.local/bin/hermes -p $SPECIAL_AGENT acp\”;约束:输出 JSON 格式结果。”
},
]
)
- 第三种方式:直接把被调用方hermes做api server,调用方通过openai的acp协议方式直接调用(推荐):
被调用方(API_SERVER_KEY需要16位以上):
$ vi .env
API_SERVER_ENABLED=true
API_SERVER_KEY=apiKey@54&hUddE78Ox
API_SERVER_HOST=0.0.0.0
API_SERVER_PORT=20001
$ hermes gateway restart
调用方:
$ vi SOUL.md
…
**API功能**
当用户说要通过api执行内容时,调用如下curl命令格式去执行(content值要替换成用户输入内容和会话内容, IP_ADDR_PORT替换成下面相关的值):
缺省:IP_ADDR_PORT=127.0.0.1:20001
渠道:IP_ADDR_PORT=192.168.0.229:20001
***格式如下***
curl http://$IP_ADDR_PORT/v1/chat/completions \
-H “Authorization: Bearer apiKey@54&hUddE78Ox” \
-H “Content-Type: application/json” \
-d ‘{
“model”: “hermes-agent”,
“messages”: [{“role”: “user”, “content”: “替换为’$用户输入内容和会话内容'”}],
“stream”: true
}’