在智能眼镜等终端场景中,用户常常需要通过语音指令触发智能体,并上传图片以实现图片理解功能。这种多模态交互方式能够显著提升用户体验,尤其是在需要快速获取信息或进行复杂任务处理时。你可以选择基于对话 OpenAPI 或音视频通话来实现这一功能。
创建单 Agent(自主规划模式)类型的智能体,选择豆包·视觉理解·Pro 模型或其他支持视觉理解的模型。调试后将智能体发布为 API。
file_id。messages 中同时传入图片和语音文件的 file_id。智能体将结合语音内容和图片内容进行联合理解,并返回对图片的理解结果。示例代码如下,完整的示例代码请参见 audio_chat_with_vision_image 示例项目源码。
# 将语音和图片上传到 coze
audio_file = coze.files.upload(file=audio_path)
image_file = coze.files.upload(file=image_path)
# 调用 /v3/chat 发起对话, 传入语音和图片的 file id
stream = coze.chat.stream(
bot_id=bot_id,
user_id=secrets.token_urlsafe(),
additional_messages=[
Message.build_user_question_objects(
[
MessageObjectString.build_image(file_id=image_file.id),
MessageObjectString.build_audio(file_id=audio_file.id),
]
)
],
)
print(f"对话开始 logid: {stream.response.logid}")
成功调用后,智能体将返回图片的理解结果,返回示例如下:
创建一个对话流,对话流的节点概览如下图所示,在对话流中添加大模型节点用于理解图片。
对话流中各节点的配置和参数如下表所示。
|
节点 |
参数配置 |
示例图 |
|---|---|---|
|
开始 |
开始节点添加一个类型为 image 的输入参数,参数名称可以自定义,但需与代码中一致,本文以 image 为例。 |
|
|
大模型 |
|
|
|
结束 |
新增 |
|
创建智能体并将智能体设置为单 Agent(对话流模式),在智能体中添加对话流。
将智能体发布为 API。
通过 WebSocket 或 RTC 进行音视频通话时,通过上行事件中的 parameters 参数,将图片发送给对话流。本文以 WebSocket 为例介绍具体实现方法。
bot_id。chat.update 上行事件,在 data.chat_config.parameters 参数中传入 image 输入参数的值,并传递给对话流,事件的详细说明请参见 双向流式对话上行事件。input_audio_buffer.append 上行事件,流式上传音频数据,事件的详细说明请参见流式上传音频片段。示例代码如下,完整的示例代码请参见 websocket_chat.py 示例项目源码。
chat = coze.websockets.chat.create(
bot_id=bot_id,
on_event=WebsocketsChatEventHandler(),
)
# 建立 websocket 链接
async with chat() as client:
print("建立 websocket 链接成功")
# 发送 chat_flow 参数
await client.chat_update(
ChatUpdateEvent.Data.model_validate(
{
"chat_config": ChatUpdateEvent.ChatConfig.model_validate(
{
"parameters": {
"image": json.dumps(
{
"file_id": image_file.id,
}
),
}
}
)
}
)
)
# 发送语音数据
for delta in split_bytes_by_length(audio_data, 1024):
await client.input_audio_buffer_append(
InputAudioBufferAppendEvent.Data.model_validate(
{
"delta": delta,
}
)
)
await asyncio.sleep(len(delta) * 1.0 / 24000 / 2) # 模拟真实说话间隔
await client.input_audio_buffer_complete()
await client.wait()
成功建立连接并发送数据后,智能体将根据语音和图片内容返回相应的对话结果,返回示例如下: