maxframe.learn.contrib.llm.multi_modal.generate#

maxframe.learn.contrib.llm.multi_modal.generate(data, model: MultiModalGenLLM, messages=None, prompt_template=None, simple_output: bool = False, params: Dict[str, Any] | None = None, **kw)[源代码]#

基于 MaxFrame 数据,使用多模态大语言模型生成文本。

参数:
  • data (DataFrame or Series) -- 用于按行渲染请求的输入数据。模板占位符按列名引用,例如 "{image_url}"

  • model (MultiModalGenLLM) -- 多模态生成模型实例。

  • messages (list of dict, optional) -- 聊天消息模板。这是 prompt_template 的别名;当两个参数都传入时,messages 优先生效。

  • prompt_template (str or list of dict, optional) -- 用于构建每个请求的提示模板。list 形式应遵循 chat message 结构,其中 message 的 content 可以包含纯文本、provider 兼容的 dict 或 ContentPart 值。

  • simple_output (bool, default False) -- 当模型 executor 支持时,是否直接返回生成文本,而不是原始 provider 响应。

  • params (dict, optional) -- 额外生成参数,例如 temperature 或 max tokens。

返回:

包含 responsesuccess 列的 DataFrame。失败请求会将错误信息写入 response

返回类型:

DataFrame

示例

使用文本和图片 URL 占位符构建 chat messages:

>>> from maxframe.learn.contrib.llm import ContentPart, ImageContentType
>>> from maxframe.learn.contrib.llm.models.dashscope import DashScopeMultiModalLLM
>>> import maxframe.dataframe as md
>>>
>>> df = md.DataFrame({"image_url": ["https://example.com/cat.png"]})
>>> model = DashScopeMultiModalLLM(
...     name="qwen-vl-max",
...     api_key_resource="<api-key-resource-name>",
... )
>>> messages = [
...     {
...         "role": "user",
...         "content": [
...             ContentPart.text("Analyze this image."),
...             ContentPart.image(
...                 data=df.image_url,
...                 type=ImageContentType.IMAGE_URL,
...             ),
...         ],
...     }
... ]
>>> result = model.generate(df, messages=messages)

当图片无法公开访问时,使用带显式 storage options 的 OSS 对象 URL:

>>> storage_options = {
...     "access_key_id": "<access-key-id>",
...     "access_key_secret": "<access-key-secret>",
... }
>>> df = md.DataFrame({"image_url": ["oss://endpoint/bucket/path/cat.png"]})
>>> messages = [
...     {
...         "role": "user",
...         "content": [
...             ContentPart.text("Analyze this OSS image."),
...             ContentPart.image(
...                 data=df.image_url,
...                 type=ImageContentType.IMAGE_URL,
...                 storage_options=storage_options,
...             ),
...         ],
...     }
... ]
>>> result = model.generate(df, messages=messages)

备注

ContentPart.image 支持 IMAGE_URLBINARYBASE64 图片内容。BINARYBASE64 输入必须包含 mime_type