# 智能体模版(Agent Template)
智能体模版用于帮助用户快速构建智能体，当完成template模版层抽象后，使用者只需填写智能体模版里特定属性配置信息，即可执行特定编排逻辑，如agentUniverse系统内置的RAG template/ReAct template/PEER template等。

## 如何定义智能体模版
### [智能体模版基础类定义](../../../../../../agentuniverse/agent/template/agent_template.py)
AgentTemplate基于[Agent基础类](../../../../../../agentuniverse/agent/agent.py)，包含配置信息如下：

- llm_name: LLM领域组件名称, 用户在agent yaml profile中`llm_model`配置后，模版类自动装配
- memory_name: 记忆领域组件名称, 用户在agent yaml `memory`中配置后，模版类自动装配
- tool_names: 智能体工具领域组件名称列表, 用户在agent yaml `tools`中配置后，模版类自动装配
- knowledge_names: 智能体知识领域组件名称列表, 用户在agent yaml `knowledge`中配置后，模版类自动装配
- prompt_version: 智能体prompt版本号, 用户在agent yaml profile中`prompt_version`中配置后，模版类自动装配

包含方法如下：

- execute(self, input_object: InputObject, agent_input: dict, **kwargs) -> dict:
  : 智能体模版同步执行方法，包含智能体记忆、LLM、Prompt的处理逻辑。

-  async_execute(self, input_object: InputObject, agent_input: dict, **kwargs) -> dict:
  : 智能体模版异步执行方法，包含智能体记忆、LLM、Prompt的处理逻辑。

-  customized_execute(self, input_object: InputObject, agent_input: dict, memory: Memory, llm: LLM, prompt: Prompt, **kwargs) -> dict:
  : 智能体模版自定义同步执行方法，智能体模版基础类提供了默认实现，**推荐您自定义智能体模版时，重写该方法**。

-  customized_async_execute(self, input_object: InputObject, agent_input: dict, memory: Memory, llm: LLM, prompt: Prompt, **kwargs) -> dict:
  : 智能体模版自定义异步执行方法，智能体模版基础类提供了默认实现，**推荐您自定义智能体模版时，重写该方法**。

- process_llm(self, **kwargs) -> LLM:
  : 智能体模版LLM默认处理逻辑。

- process_memory(self, agent_input: dict, **kwargs) -> Memory | None:
  : 智能体模版记忆默认处理逻辑。

- process_prompt(self, agent_input: dict, **kwargs) -> Prompt:
  : 智能体模版Prompt默认处理逻辑。

- invoke_tools(self, input_object: InputObject, **kwargs):
  : 智能体模版默认工具调用逻辑。

- invoke_knowledge(self, query_str: str, input_object: InputObject, **kwargs):
  : 智能体模版默认知识调用逻辑。

- invoke_chain(self, chain: RunnableSerializable[Any, str], agent_input: dict, input_object: InputObject, **kwargs):
  : 智能体模版默认chain同步调用逻辑。

-  async_invoke_chain(self, chain: RunnableSerializable[Any, str], agent_input: dict, input_object: InputObject, **kwargs):
  : 智能体模版默认chain异步调用逻辑。

### 智能体模版具体实现类的定义
template模版实现类，需继承AgentTemplate基础类，并定义当前模版的`input_keys`和`output_keys`具体出入参信息，`parse_input`和`parse_result`具体出入参解析方法。

若智能体模版基础类中的自定义执行方法如`customized_execute`不能满足您的自定义编排需求，推荐您重写该方法，实现特定的执行逻辑。
同理如`process_llm`、`invoke_tools`等一些列智能体相关领域组件处理逻辑，均可重写方法实现自定义需求。

注：AgentTemplate基础类定义已足够抽象，**推荐您根据需求重写特定方法，不推荐完全复制，代码结构臃肿复杂，维护成本高**。

## 如何使用智能体模版
以agentUniverse内置的[PEER智能体模版](../../../../../../agentuniverse/agent/template/peer_agent_template.py)为例，可填写配置信息如下（以下配置信息均存在默认值）：
- planning_agent_name: plan拆解节点智能体名称，用户在agent yaml profile中配置`planning`后，模版类自动装配
- executing_agent_name: execute执行节点智能体名称，用户在agent yaml profile中配置`executing`后，模版类自动装配
- expressing_agent_name: express表达节点智能体名称，用户在agent yaml profile中配置`expressing`后，模版类自动装配
- reviewing_agent_name: review评价节点智能体名称，用户在agent yaml profile中配置`reviewing`后，模版类自动装配
- expert_framework: peer多智能体专家框架，用户在agent yaml profile中配置`expert_framework`后，模版类自动装配



### 创建PEER智能体模版的实际智能体实例
如上文描述，当完成template模版层抽象后，使用者只需填写智能体模版里特定属性配置信息，即可执行特定编排逻辑，配置信息如下：
```yaml
info:
  name: 'demo_peer_agent'
  description: 'demo peer agent'
profile:
  planning: 'demo_planning_agent'
  executing: 'demo_executing_agent'
  expressing: 'demo_expressing_agent'
  reviewing: 'demo_reviewing_agent'
  expert_framework:
    context:
      planning: # planning节点对应专家知识
      executing: # executing节点对应专家知识
      expressing: # expressing节点对应专家知识
      reviewing: # reviewing节点对应专家知识
    selector:
memory:
  name: 'demo_memory'
metadata:
  type: 'AGENT'
  module: 'agentuniverse.agent.template.peer_agent_template'
  class: 'PeerAgentTemplate'
```



## agentUniverse目前内置有以下智能体模版:
### [PeerAgentTemplate](../../../../../../agentuniverse/agent/template/peer_agent_template.py)
上文已介绍，此处省略。

Peer智能体模版中四个节点智能体实例类型需为对应智能体模版类（PlanningAgentTemplate/ExecutingAgentTemplate/ExpressingAgentTemplate/ReviewingAgentTemplate）或对应自定义子类。

### [PlanningAgentTemplate](../../../../../../agentuniverse/agent/template/planning_agent_template.py)
Peer中的Planning节点智能体模版。

### [ExecutingAgentTemplate](../../../../../../agentuniverse/agent/template/executing_agent_template.py)
Peer中的Executing节点智能体模版。

### [ExpressingAgentTemplate](../../../../../../agentuniverse/agent/template/expressing_agent_template.py)
Peer中的Expressing节点智能体模版。

### [ReviewingAgentTemplate](../../../../../../agentuniverse/agent/template/reviewing_agent_template.py)
Peer中的Reviewing节点智能体模版。

### [RagAgentTemplate](../../../../../../agentuniverse/agent/template/rag_agent_template.py)
RAG智能体模版，具体配置示例如下：
```yaml
info:
  name: 'demo_rag_agent'
  description: 'demo rag agent'
profile:
  prompt_version: demo_rag_agent.cn
  llm_model:
    name: 'qwen_llm'
action:
  tool:
    - 'xxx_tool_1'
  knowledge:
    - 'xxx_knowledge_1'
memory:
  name: 'xxx_memory'
metadata:
  type: 'AGENT'
  module: 'agentuniverse.agent.template.rag_agent_template'
  class: 'RagAgentTemplate'
```

### [ReActAgentTemplate](../../../../../../agentuniverse/agent/template/react_agent_template.py)
ReAct智能体模版，具体配置示例如下：
```yaml
info:
  name: 'demo_react_agent'
  description: 'react agent'
profile:
  prompt_version: qwen_react_agent.cn
  llm_model:
    name: 'qwen_llm'
    model_name: 'qwen-max'
    stop: 'Observation'
    temperature: 0.1
action:
  tool:
    - 'xxx_tool_1'
    - 'xxx_tool_2'
  knowledge:
    - 'xxx_knowledge_1'
memory:
  name: 'xxx_memory'
metadata:
  type: 'AGENT'
  module: 'agentuniverse.agent.template.react_agent_template'
  class: 'ReActAgentTemplate'
```

### [Nl2ApiAgentTemplate](../../../../../../agentuniverse/agent/template/nl2api_agent_template.py)
Nl2Api智能体模版，具体配置示例如下：
```yaml
info:
  name: 'demo_nl2api_agent'
  description: 'demo nl2api agent'
profile:
  llm_model:
    name: 'qwen_llm'
action:
  tool:
    - 'xxx_tool_1'
    - 'xxx_tool_2'
    - 'xxx_tool_3'
    - 'xxx_tool_4'
    - 'xxx_tool_5'
metadata:
  type: 'AGENT'
  module: 'agentuniverse.agent.template.nl2api_agent_template'
  class: 'Nl2ApiAgentTemplate'
```

# 总结
至此您已了解智能体模版的作用，智能体模版的具体定义以及如何使用智能体模版，请移步至工作模式文档，我们将具体向您介绍工作模式的定义、工作模式/智能体模版与agentUniverse的计划的区别等。