基础智能体#

MS-Agent的基础智能体类是LLMAgent。MS-Agent的对话能力、工具调用都经由该类进行处理。示意图如下:

png

LLMAgent在构造时会初始化config。然后依次进行:

  • 将config中配置的callbacks注册进来

  • 初始化LLM、工具、消息管理、rag

  • 读取消息历史缓存(如有)

  • 准备消息,如进行rag查询,增加plan等

  • 进入循环,尝试压缩消息

  • 准备好工具列表,调用LLM

  • 根据LLM的结果调用工具,重新开始循环

循环的结束条件:

  1. 模型进行了回复,但没有任何工具调用

  2. 达到了config中max_chat_round的轮数

callbacks#

开发者可以通过callbacks来对Agent执行流程进行定制。callbacks可以进行如下配置:

  • custom_callback.py

from ms_agent.callbacks import Callback

class CustomCallback(Callback):

    def on_generate_response(self, runtime,
                                   messages):
        ...

  • agent.yaml

callbacks:
  - custom_callback

这意味着在yaml文件平级有一个custom_callback.py文件。该文件包含了继承自Callback类的子类,并实现了某些具体方法。支持的callback有:

  • on_task_begin: 在任务开始执行时调用callback

  • on_generate_response: 在调用LLM前调用callback

  • on_tool_call: 在调用tool前调用该callback

  • after_tool_call: 在调用tool后调用该callback

  • on_task_end: 在任务完成后调用该callback

callback作为一种辅助机制,由于其可读性不高,建议在callback中执行一些不太复杂的流程,例如控制流程结束、打印日志等。如果需要定制Agent,请考虑直接继承LLMAgent。

自定义Agent#

如果需要更多的定制化,可以考虑继承LLMAgent类并复写其中的某些方法。定义新的Agent类和上述定义callback的流程相同:

  • custom_agent.py


from ms_agent.agent import LLMAgent

class CustomAgent(LLMAgent):

    # For example, override the condense memory function
    async def condense_memory(self, messages):
        ...
  • agent.yaml

code_file: custom_agent

在这种情况下,agent.yaml会使用你自定义的agent类,而不会再加载LLMAgent类执行。

例子#

  1. 一个基本的agent.yaml:https://www.modelscope.cn/models/ms-agent/simple_agent

  2. 外部代码的agent:https://www.modelscope.cn/models/ms-agent/simple_agent_code

  3. 使用callback完成复杂工作流:https://github.com/modelscope/ms-agent/tree/main/projects/code_genesis