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

LLMAgent在构造时会初始化config。然后依次进行:
将config中配置的callbacks注册进来
初始化LLM、工具、消息管理、rag
读取消息历史缓存(如有)
准备消息,如进行rag查询,增加plan等
进入循环,尝试压缩消息
准备好工具列表,调用LLM
根据LLM的结果调用工具,重新开始循环
循环的结束条件:
模型进行了回复,但没有任何工具调用
达到了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类执行。
例子#
一个基本的agent.yaml:https://www.modelscope.cn/models/ms-agent/simple_agent
外部代码的agent:https://www.modelscope.cn/models/ms-agent/simple_agent_code
使用callback完成复杂工作流:https://github.com/modelscope/ms-agent/tree/main/projects/code_genesis