Skip to main content
大语言模型(在 AgentScope 的类命名中称为 Chat Model)驱动智能体的对话与工具调用,输入输出可以是文本之外的多模态内容。AgentScope 当前提供以下模型类:

创建模型

每个模型接收一个凭证、一个模型名,以及可选的 API 专属 Parameters 对象。下面三个 tab 分别展示流式、工具调用与推理三种典型初始化场景:
所有模型共享的构造参数:

调用模型

通过传入一组 Msg 对象(以及可选的 toolstool_choice)调用模型:
返回类型取决于模型的 stream 设置:
  • stream=False:返回单个 ChatResponse,承载完整输出。
  • stream=True:返回 AsyncGenerator[ChatResponse, None]。中间 chunk(is_last=False)只携带增量内容;最后一个 chunk(is_last=True)承载完整的累积内容
下面两个 tab 分别展示两种模式:
一段典型的流式输出示例,展示「增量 → 累积」的模式:
每个 ChatResponse 包含若干内容块(TextBlockThinkingBlockToolCallBlockDataBlock)、一个 is_last 标志、一个 finished_reasonFinishedReason.COMPLETEDFinishedReason.INTERRUPTED),以及记录 token 数与耗时的 ChatUsage

中断模型调用

模型层的中断指的是异步取消:模型调用运行在 asyncio 任务中,取消该任务(触发 asyncio.CancelledError)即可停止进行中的 API 请求,典型场景是用户在智能体推理过程中发起打断。 被取消时,ChatModelBase.__call__ 不会丢弃已生成的部分输出,而是捕获取消并返回一个最终 ChatResponse,其中包含已累积的内容,并将 finished_reason 标记为 FinishedReason.INTERRUPTED;正常结束时为 FinishedReason.COMPLETED,因此下游代码始终可以区分完整回答与被截断的回答:
这是智能体中断机制在模型层的那一半:Agent 类基于同样的机制停止运行中的推理-行动循环,并保持上下文一致。智能体层面的行为参见中断智能体

生成结构化输出

当需要返回符合 Pydantic 模型或 JSON schema 的结构化结果时,调用 generate_structured_output 而非 __call__。它返回一个 StructuredResponse,其 content 是经过 schema 校验的 dict:
generate_structured_output 会基于 schema 合成一个强制工具调用,再对模型输出做校验与修复。

格式化器

格式化器(Formatter)负责把 AgentScope 的 Msg 对象转换为各模型 API 期望的 list[dict] 载荷。它通过模型构造函数中可选的 formatter 参数配置。AgentScope 为每种 API 都内置了两种格式化器: 切换到多智能体模式只需传入 MultiAgent 变体,无需修改智能体代码:
如果模型 API 的载荷格式不属于 OpenAI 或 Anthropic 风格,开发者可以继承 FormatterBase 实现自定义格式化器,并通过同一个 formatter 参数传入。

自定义模型 API

开发者可以通过实现一个凭证与一个模型类,并注册该凭证,把自定义模型 API 接入 AgentScope。

步骤 1:定义凭证

继承 CredentialBase,使用唯一的 type 判别字段,并实现 get_chat_model_class()

步骤 2:实现模型类

继承 ChatModelBase,定义内部 Parameters 类,并实现 _call_api。基类负责重试、流式累积与中断处理,因此 _call_api 只需要把 API 返回结果转换为 AgentScope 的 ChatResponse chunk:
对流式的自定义模型而言,直接以 ChatResponse(content=..., is_last=False) 产出增量返回即可。如果 _call_api 结束时没有产出 is_last=True 的最终 chunk,ChatModelBase.__call__ 会通过 ChatResponse.append_chat_response() 自动累积这些增量并返回最终响应;如果流式过程被取消,则会返回带有部分累积内容且 finished_reason=FinishedReason.INTERRUPTED 的响应。

步骤 3:添加模型卡片(可选)

把 YAML 文件放在模型实现旁边的 _models/ 目录里。每个文件描述一个模型:它的能力(input_typesoutput_types)、上限(context_sizeoutput_size),以及该模型专属的 parameter_overrides(完整卡片格式参见前端集成):
MyProviderChatModel.list_models() 会加载该目录下的所有 YAML。如果想从其他位置(例如应用自己维护的模型注册表)拉取模型卡片,传入 custom_yaml_dir