Skip to main content
ClaudeWave
Skill34.8k repo starsupdated 3d ago

chat_with_agent

当你需要咨询其他 agent、寻求帮助,或用户明确要求某个 agent 参与时,使用本 skill。

Install in Claude Code
Copy
git clone --depth 1 https://github.com/agentscope-ai/QwenPaw /tmp/chat_with_agent && cp -r /tmp/chat_with_agent/src/qwenpaw/agents/skills/chat_with_agent-zh ~/.claude/skills/chat_with_agent
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# 与 Agent 对话

## 什么时候用

当你需要**向另一个 agent 询问问题、寻求帮助、请求方案、请求复核、请求决策支持,或者进行任何形式的交流**时,使用本 skill。  
如果**用户明确要求与某个 agent 对话**,也应使用本 skill。

### 应该使用

- 需要另一个 agent 的专长、判断或第二意见
- 需要向某个 agent 请求方案、复核或建议
- 用户明确要求某个 agent 参与、协助或回答
- 需要继续某个已有的 agent 会话,并保留上下文

### 不应使用

- 你自己可以直接完成,且用户没有明确要求调用其他 agent
- 只是普通问答,不需要专门 agent
- 目标 agent 不明确,应该先追问或先查可用 agents
- 刚收到某个 agent 的消息,又立刻回调同一个 agent,可能造成循环

## 决策规则

1. **如果用户明确要求某个 agent,优先按要求执行,但仍要先查 agent,不要猜 ID**
2. **如果你自己能完成,就不要调用其他 agent**
3. **需要保留上下文续聊时,必须传 `session_id`**
4. **默认优先使用 `list_agents()` 和 `chat_with_agent(...)` 进行前台对话,不要绕到别的方式**
5. **如果任务需要后台执行,使用 `submit_to_agent(...)` 提交,再用 `check_agent_task(...)` 查询状态**

## 使用流程

请严格按照以下流程顺序使用本 skill:

1) 确保你的工具列表中包含 `list_agents()` 和 `chat_with_agent(...)` 两个内建工具

  - 这两个工具是与其他 agent 对话的基础,不要删除或禁用它们
  - 如果你没有这两个工具,请告诉用户你需要它们来与其他 agent 对话,并请求用户添加

2) 使用 `list_agents()` 工具查看当前可用的 Agent,并从中选择一个 agent 提取其 id

  - 请根据用户的需求和对应 Agent 的描述来选择最合适的 Agent
  - 如果找不到合适的 Agent 且你不是 Default Agent,就使用 Default Agent
  - 否则告诉用户没有合适的 Agent 可用,并建议他们创建一个新的 Agent 或调整现有 Agent 的描述以便更好地匹配需求

3) 调用 `chat_with_agent(...)` 发起前台求助,其中需要传递的关键参数包括
  - `to_agent`: 对话目标 Agent 的 ID,注意是 ID 不是名字
  - `text`: 你要对目标 Agent 说的内容
  - `session_id`: (可选)如果你需要与同一个 Agent 进行多轮对话,从第二轮开始传递相同的 `session_id` 来保持上下文连续
  - `timeout`: (可选)预估任务需要的前台等待时间,避免过早超时

4) 如果任务适合后台执行,请使用新的后台工具路径
  - `submit_to_agent(...)`:提交后台任务,需要 `to_agent`、`text`,以及可选的 `session_id` / `task_timeout`
    - 省略 `task_timeout` 时,默认执行预算为 **3600 秒(1 小时)**
    - 预计超过 1 小时的任务,请显式传入正数秒
    - 也接受数字字符串,例如 `"7200"`
  - `check_agent_task(...)`:通过 `task_id` 查询任务状态,完成时返回最终结果
    - 超时后任务会以失败结束,错误类似 `Task timed out after Ns`(API 载荷中带 `code=timeout`)

## 最小调用示例

### 新对话

```text
list_agents()

chat_with_agent(
  to_agent="<target_agent_id>",
  text="[Agent <your_agent_id> requesting] 我需要你帮我判断这个问题的处理方向。",
)
```

### 续接已有对话

```text
chat_with_agent(
  to_agent="<target_agent_id>",
  text="[Agent <your_agent_id> requesting] 请基于刚才的结论继续展开第 2 点。",
  session_id="<previous_session_id>",
)
```

### 后台提交与查询

```text
submit_to_agent(
  to_agent="<target_agent_id>",
  text="[Agent <your_agent_id> requesting] 请在后台完成这个较长任务。",
  task_timeout=7200,
)

check_agent_task(
  task_id="<task_id>",
)
```


## 注意事项

- **添加对话标识符**:建议对话内容以如下内容开头

```text
[Agent <your_agent_id> requesting]
```
这样可以让对方 Agent 更清楚地知道是谁在跟它说话,有助于提高沟通效率和准确性。


- **合理复用会话**:如果你需要与同一个 Agent 进行多轮对话,务必传递相同的 `session_id` 来保持上下文连续。否则每次调用都会被视为新的对话,可能导致对方 Agent 无法正确理解你的需求。`session_id` 可以从第一轮对话的返回结果中获取,例如

  ```text
  [SESSION: xxx]
  ```

  其中 `xxx` 就是 `session_id` 的值,该值一般由系统生成,长度一般较长,具有唯一性。你需要把这个 `session_id` 存下来,在后续与同一个 Agent 的对话中继续使用它。