多模态场景下提供大模型的深度思考能力
使用具备深度思考能力的模型,对图片、视频或文本进行分析理解,并返回结构化文本输出。算子会自动构建符合多模态模型规范的 message 结构,用户只需按约定提供图片 / 视频 / 文本数据即可完成推理。
(同一个字段中不允许同时混用字符串和列表两种类型)
该算子(ArkLLMThinkingVision)在 Daft 0.6.5(及其以下版本),使用方式与 0.6.14 版本(及其以上版本)不相同。
df = df.with_column( "llm_result", las_udf( ArkLLMThinkingVision, construct_args={ "model": "doubao-seed-1.6", "system_text": "你是一个专业的视频理解助手,能够分析视频中的内容并提供详细的描述。", "inference_type": "online", }, )(videos=col("videos"), texts="请用简短的语言描述视频里的内容,返回格式为json。"), )
df = df.with_column( "llm_result", las_udf( ArkLLMThinkingVision, construct_args={ "model": "doubao-seed-1.6", "multimodal_type": "video", "system_text": "你是一个专业的视频理解助手,能够分析视频中的内容并提供详细的描述。", "prompt": "请用简短的语言描述视频里的内容,返回格式为json。", "inference_type": "online", }, )(col("videos")), )
输入列名 | 说明 |
|---|---|
images | 传入待处理的图片数据。支持传入单张图片(string)或多张图片(list),数据来源由参数 source_type 控制:url 模式支持 http/https/tos/s3 等协议地址,其中 tos/s3 会自动转换为预签名 URL;base64 模式使用图片的 Base64 编码;binary 模式会将二进制数据自动转换为 Base64 编码。 |
videos | 传入待处理的视频数据。支持传入单条视频(string)或多条视频(list),数据来源由参数 source_type 控制:url 模式支持 http/https/tos/s3 等协议地址,其中 tos/s3 会自动转换为预签名 URL;base64 模式使用视频的 Base64 编码;binary 模式会将二进制数据自动转换为 Base64 编码。 |
texts | 传入用户文本提示词。支持传入单条文本(string)或多条文本(list)。 |
默认情况下,返回字段类型为 struct,包含以下字段:
当环境变量 LAS_LLM_FINISH_REASON_CHECK=true 时,返回 struct 中会额外包含以下字段:
当环境变量 LAS_LLM_BOTS_REFERENCES=true 时,返回 struct 中会额外包含以下字段:
两个环境变量可以同时开启,此时输出 struct 中会同时包含上述字段。
如参数没有默认值,则为必填参数
参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
model | str | 模型名称 支持的模型有: 豆包模型和 DeepSeek 模型。例如:doubao-seed-1.6。 | |
version | str or None | 模型版本 输入模型对应的版本信息。例如:250115。 | |
inference_type | str | batch | 推理类型,支持在线推理和批量推理。默认值为 batch,即采用批量推理 - online: 采用方舟平台提供的在线推理模块进行推理 - batch:采用方舟平台提供的批量推理模块进行推理 |
system_text | str or None | 系统提示内容 系统提示内容,以 system 角色作为模型的输入,用于统一约束模型行为。 | |
system_image_url | str or None | 系统图片 URL 图文混排场景下,输入系统图片 URL,用于指导模型的行为。 | |
system_video_url | str or None | 系统视频 URL 图文混排场景下,输入系统视频 URL,用于指导模型的行为。 | |
image_format | str | jpeg | 图片编码格式 默认 jpeg。支持格式: JPEG、PNG、WEBP、GIF、BMP、TIFF 等常见格式。详细格式请参考 https://www.volcengine.com/docs/82379/1362931#%E5%9B%BE%E7%89%87%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E |
image_url_detail | str or None | 图片质量 支持手动设置图片的质量,取值范围 high、low、auto。 - high:高细节模式,适用于需要理解图像细节信息的场景,如多个局部信息/特征提取、复杂/丰富细节图像理解等,理解更全面。 - low:低细节模式,适用于简单图像分类/识别、整体内容理解/描述等场景,理解更快速。 - auto:默认模式,不同模型选择的模式略有不同,具体请参见官方文档。 | |
video_format | str | mp4 | 视频编码格式 配置视频格式,默认是 mp4。支持的视频格式:MP4、AVI、MOV。单视频文件需在 50MB 以内。 |
video_fps | float or None | 视频帧率 取值范围:[0.2, 5]。默认值 1。每秒钟从视频中抽取指定数量的图像。取值越高,对于视频中画面变化理解越精细;取值越低,对于视频中画面变化感知减弱,但是使用的 token 花费少,速度也更快。 | |
source_type | str | url | 数据来源类型 指定媒体数据的来源格式,默认 url。可选值: - binary: 原始二进制数据 - base64: Base64 编码数据 - url: 网络资源地址(支持 http/https/tos/s3),其中 tos/s3 会自动转换为预签名 URL |
max_tokens | int or None | 模型回复最大长度(单位 token),输入输出总长度受模型上下文限制。 | |
max_completion_tokens | int or None | 模型生成的 token 数量的上限,包含思维链内容(reasoning_content)与回答内容(content),不包含传入的信息(messages)。 超出后,停止模型输出思维链内容及模型回答,并返回 finish_reason 字段为 length。 | |
stop | list or None | 停止词列表 模型遇到 stop 字段所指定的字符串时将停止继续生成,这个字符串本身不会输出。 最多支持 4 个字符串。例如 ["你好", "天气"]。 | |
frequency_penalty | float | 0 | 频率惩罚系数 频率惩罚系数。如果值为正,会根据新 token 在文本中的出现频率对其进行惩罚,从而降低模型逐字重复的可能性。 取值范围 [-2.0, 2.0],默认 0。 |
presence_penalty | float | 0 | 存在惩罚系数 存在惩罚系数。如果值为正,会根据新 token 到目前为止是否出现在文本中对其进行惩罚,从而增加模型谈论新主题的可能性。 取值范围为 [-2.0, 2.0]。默认值 0。 |
temperature | float | 1 | 采样温度 采样温度控制了生成文本时对每个候选词的概率分布进行平滑的程度。 - 当取值为 0 时模型仅考虑对数概率最大的一个 token。 - 较高的值(如 0.8)会使输出更加随机,而较低的值(如 0.2)会使输出更加集中确定。 通常建议仅调整 temperature 或 top_p 其中之一,不建议两者都修改。取值范围为 [0, 2],默认值 1。 |
top_p | float | 0.7 | 核采样概率阈值 核采样概率阈值。模型会考虑概率质量在 top_p 内的 token 结果。 当取值为 0 时模型仅考虑对数概率最大的一个 token。 0.1 意味着只考虑概率质量最高的前 10% 的 token,取值越大生成的随机性越高,取值越低生成的确定性越高。 默认值 0.7。 |
logit_bias | dict or None | 调整指定 token 在模型输出内容中出现的概率,使模型生成的内容更加符合特定的偏好。 logit_bias 字段接受一个 map 值,其中每个键为词表中的 token ID(使用 tokenization 接口获取),每个值为该 token 的偏差值,取值范围为 [-100, 100]。 -1 会减少选择的可能性,1 会增加选择的可能性;-100 会完全禁止选择该 token,100 会导致仅可选择该 token。 该参数的实际效果可能因模型而异。 | |
tools | list or None | 工具调用配置 待调用工具的列表,模型返回信息中可包含。当您需要让模型返回待调用工具时,需要配置该结构体。 | |
thinking_type | str or None | 思考模式 控制模型是否开启深度思考模式。不配置时,采用深度思考模式,可以手动关闭。可选值: - enabled:开启思考模式,模型一定先思考后回答。 - disabled:关闭思考模式,模型直接回答问题,不会进行思考。 - auto:自动思考模式,模型根据问题自主判断是否需要思考,简单题目直接回答。 | |
llm_config | dict or None | 自定义 LLM 配置 除了上述参数,其他参数会透传给模型。上述参数会覆盖 llm_config 中的值。 | |
request_timeout | int | 1200 | 超时时间 单次请求的超时时间(秒)。 |
max_concurrency | int | 100 | 并发数 每个进程的最大并发数。 |
下面的代码展示了如何使用 daft 访问火山方舟 多模态深度思考模型(豆包系列)进行批量推理。请注意每次大模型推理结果可能不同。
from __future__ import annotations import os import daft from daft import col from daft.las.functions.ark_llm.ark_llm_thinking_vision import ArkLLMThinkingVision from daft.las.functions.udf import las_udf if os.getenv("DAFT_RUNNER", "native") == "ray": import logging import ray def configure_logging(): logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S.%s".format(), ) logging.getLogger("tracing.span").setLevel(logging.WARNING) logging.getLogger("daft_io.stats").setLevel(logging.WARNING) logging.getLogger("DaftStatisticsManager").setLevel(logging.WARNING) logging.getLogger("DaftFlotillaScheduler").setLevel(logging.WARNING) logging.getLogger("DaftFlotillaDispatcher").setLevel(logging.WARNING) ray.init(dashboard_host="0.0.0.0", runtime_env={"worker_process_setup_hook": configure_logging}) daft.context.set_runner_ray() daft.set_execution_config(min_cpu_per_task=0) if __name__ == "__main__": # 需配置环境变量 LAS_API_KEY : LAS_API_KEY 通过在 LAS 服务页面上创建获取 tos_dir_url = os.getenv("TOS_DIR_URL", "las-cn-beijing-public-online.tos-cn-beijing.volces.com") samples = { "videos": [ f"https://{tos_dir_url}/public/shared_video_dataset/eating_56.mp4", ] } df = daft.from_pydict(samples) df = df.with_column( "llm_result", las_udf( ArkLLMThinkingVision, construct_args={ "model": "doubao-seed-1.6-thinking", "system_text": "你是一个专业的视频理解助手,能够分析视频中的内容并提供详细的描述。", "inference_type": "online", }, )(videos=col("videos")), ) df = df.with_column("reasoning_content", col("llm_result").struct.get("reasoning_content")) df = df.with_column("llm_result", col("llm_result").struct.get("llm_result")) df.show() # 输出(每次大模型推理结果可能不同) # ╭────────────────────────────────┬──────────────────────────────────────┬─────────────────────────────────────────────────────────────╮ # │ videos ┆ llm_result ┆ reasoning_content │ # │ --- ┆ --- ┆ --- │ # │ String ┆ String ┆ String │ # ╞════════════════════════════════╪══════════════════════════════════════╪═════════════════════════════════════════════════════════════╡ # │ https://las-public-data-qa.to… ┆ 视频展示了一个充满童趣的动画场景: ┆ 用户现在需要分析这个动画视频的内容。首先看画面,一开始是一… │ # │ ┆ ┆ │ # │ ┆ 画面初始聚焦于*… ┆ │ # ╰────────────────────────────────┴──────────────────────────────────────┴─────────────────────────────────────────────────────────────╯