跳到主要内容
版本:1.1.x

Model Service(实验性)

ROCK 提供的 Model Service 负责处理 AI 模型调用的通信,为代理(Agent)和训练框架(如 Roll)或实际的 LLM 推理服务之间提供通信桥梁。

与 RockAgent 集成

ModelService 通常由 RockAgent 自动管理,无需手动调用生命周期方法。只需在配置中启用即可:

from rock.sdk.sandbox.model_service.base import ModelServiceConfig

config = ModelServiceConfig(
enabled=True, # 启用 ModelService,RockAgent 会自动管理其生命周期
)

RockAgent 会自动:

  • 安装 ModelService(安装 Python 运行时环境、安装模型服务包)
  • 启动/停止 ModelService
  • 监控 Agent 进程

架构概述(Local 模式)

Local 模式下,模型服务使用文件系统作为通信媒介,实现代理和模型间的请求-响应机制。

当 Agent 需要调用模型时,请求首先写入日志文件,然后由负责监听的组件处理响应。当模型生成响应后,结果将写回日志文件,并由等待的 Agent 读取。

anti_call_llm - 核心 API

anti_call_llm()Local 模式下最重要的 API,用于手动触发 LLM 反调用,实现模型调用的精细控制:

result = await model_service.anti_call_llm(
index=0, # LLM 调用索引
response_payload='OpenAI type response', # 响应数据(可选)
call_timeout=600, # 操作超时(秒)
check_interval=3, # 状态检查间隔(秒)
)

使用场景:

  • Agent 捕获到 LLM 响应后,调用此方法通知 Roll 运行时
  • 支持携带响应数据,用于错误处理或重试
  • 超时和检查间隔可配置,适应不同网络环境

CLI 命令

如果需要通过 CLI 使用模型服务,ROCK 提供了一个 CLI 命令集,可以在沙箱中安装 ROCK 后,通过 rock model-service 访问:

start 命令

开始模型服务进程

rock model-service start --type [local|proxy]

参数:

  • --type: 模型服务类型,可选 localproxy,默认为 local

watch-agent 命令

监控代理进程,当进程退出时发送 SESSION_END 消息

rock model-service watch-agent --pid <进程ID>

参数:

  • --pid: 需要监控的代理进程 ID

stop 命令

停止模型服务

rock model-service stop

anti-call-llm 命令

反调用 LLM 接口

rock model-service anti-call-llm --index <索引> [--response <响应>]

参数:

  • --index: 上一个 LLM 调用的索引,从 0 开始
  • --response: 上一次 LLM 调用的响应(可选)

文件通信协议

模型服务使用文件进行进程间通信,定义了特定的标记格式用于区分请求和响应:

请求格式

LLM_REQUEST_START{JSON请求数据}LLM_REQUEST_END{元数据JSON}

响应格式

LLM_RESPONSE_START{JSON响应数据}LLM_RESPONSE_END{元数据JSON}

会话结束标识

SESSION_END

元数据包含时间戳和索引信息,用于保证消息顺序和处理。

SDK 使用

ModelServiceConfig

模型服务配置类,位于 rock/sdk/sandbox/model_service/base.py

from rock.sdk.sandbox.model_service.base import ModelServiceConfig

config = ModelServiceConfig(
enabled=True,
type="local", # 服务类型
install_cmd="pip install rock-model-service", # 安装命令
install_timeout=300, # 安装超时(秒)
start_cmd="rock model-service start --type ${type}", # 启动命令
stop_cmd="rock model-service stop", # 停止命令
logging_path="/data/logs", # 日志路径
logging_file_name="model_service.log", # 日志文件名
)
配置项默认值说明
enabledFalse是否启用模型服务(RockAgent 自动管理)
type"local"服务类型:localproxy
install_cmd-模型服务包安装命令
install_timeout300安装超时时间(秒)
start_cmd-启动命令模板
stop_cmd-停止命令
logging_path/data/logs日志目录路径
logging_file_namemodel_service.log日志文件名

ModelService

模型服务管理类,处理沙箱内模型服务的生命周期:

from rock.sdk.sandbox.client import Sandbox
from rock.sdk.sandbox.model_service.base import ModelServiceConfig, ModelService

sandbox = Sandbox(config)
model_service = ModelService(sandbox, ModelServiceConfig())

# 通常由 RockAgent 自动管理,无需手动调用
# 以下方法仅在需要手动控制时使用

# 安装模型服务
await model_service.install()

# 启动模型服务
await model_service.start()

# 监控代理进程
await model_service.watch_agent(pid="12345")

# 执行反调用 LLM(Local 模式核心 API)
result = await model_service.anti_call_llm(
index=0,
response_payload='{"content": "response"}',
call_timeout=600,
check_interval=3,
)

# 停止模型服务
await model_service.stop()

API 参考

install()

在沙箱中安装模型服务依赖。

await model_service.install()

执行步骤:

  1. 创建并初始化 Python 运行时环境
  2. 创建 Rock 配置文件
  3. 安装模型服务包

注意: 通常由 RockAgent 自动调用。

start()

启动模型服务。

await model_service.start()

前提条件:必须先调用 install()

注意: 通常由 RockAgent 自动调用。

stop()

停止模型服务。

await model_service.stop()

如果服务未运行,会跳过此操作。

注意: 通常由 RockAgent 自动调用。

watch_agent(pid)

监控代理进程。

await model_service.watch_agent(pid="12345")

当进程退出时,发送 SESSION_END 消息。

anti_call_llm(index, response_payload, call_timeout, check_interval)

执行反调用 LLM 操作。这是 Local 模式下最重要的 API。

result = await model_service.anti_call_llm(
index=0, # LLM 调用索引
response_payload='{"result": "..."}', # 响应数据(可选)
call_timeout=600, # 操作超时(秒)
check_interval=3, # 状态检查间隔(秒)
)

配置选项

服务配置

  • SERVICE_HOST: 服务主机地址,默认为 "0.0.0.0"
  • SERVICE_PORT: 服务端口,默认为 8080

日志配置

  • LOG_FILE: 用以通信的日志文件路径,包含请求和响应数据

轮询配置

  • POLLING_INTERVAL_SECONDS: 轮询间隔,默认为 0.1
  • REQUEST_TIMEOUT: 请求超时时间,默认为无限

标记配置

定义了用于区分日志文件中不同类型消息的标记:

  • REQUEST_START_MARKER / REQUEST_END_MARKER
  • RESPONSE_START_MARKER / RESPONSE_END_MARKER
  • SESSION_END_MARKER