# 文档说明

在本例中我们将进一步向大家介绍如何构建并运行多模态智能体，根据传入的图片或音频进行智能问答。

样例工程地址：[multimodal_app](../../../../examples/sample_apps/multimodal_app)

## 多模态智能体

多模态智能体：
[multimodal_agent.py](../../../../examples/sample_apps/multimodal_app/intelligence/agentic/agent/agent_instance/multimodal_agent.py)
[multimodal_agent.yaml](../../../../examples/sample_apps/multimodal_app/intelligence/agentic/agent/agent_instance/multimodal_agent.yaml)

aU构建多模态demo智能体，配置prompt/多模态模型/智能体记忆。

## 多模态模型

千问多模态模型：
[qwen_multimodal_llm.yaml](../../../../examples/sample_apps/multimodal_app/intelligence/agentic/llm/qwen_multimodal_llm.yaml)

我们通过aU内置的QWenOpenAIStyleLLM构建千问多模态智能体，使用qwen-vl做视觉理解；使用qwen-audio做音频理解；使用qwen-omni做全模态理解。

## 使用说明

### 视觉理解

在agent运行时，传入image_urls参数（图片的url地址），例如

```python
from agentuniverse.agent.agent import Agent
from agentuniverse.agent.agent_manager import AgentManager

instance: Agent = AgentManager().get_instance_obj('multimodal_agent')
output_object = instance.run(input="图中描绘的是什么景象?", image_urls=[
    'https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg'])
```

aU框架在agentuniverse.prompt.chat_prompt.ChatPrompt.generate_image_prompt方法中会读取agent传入的image_urls参数，并组装成标准的多模态prompt格式。

image_urls参数支持两种类型：

1. image_urls传入标准的http or https url，aU会直接拼装多模态prompt格式。
2. image_urls传入本地文件路径，aU会读取图片文件并转换为base64编码，再拼装多模态prompt格式。

### 音频理解

在agent运行时，传入audio_url参数（音频的url地址），例如

```python
from agentuniverse.agent.agent import Agent
from agentuniverse.agent.agent_manager import AgentManager

instance: Agent = AgentManager().get_instance_obj('multimodal_agent')
output_object = instance.run(input='帮我完成音频里的任务内容？',
                             audio_url='https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/kvkadk/%E6%8E%A8%E8%8D%90%E4%B9%A6.wav')
```

aU框架在agentuniverse.prompt.chat_prompt.ChatPrompt.generate_audio_prompt方法中会读取agent传入的audio_url参数，并组装成标准的多模态prompt格式。

audio_url参数支持单一类型：传入标准的http or https url，aU会直接拼装多模态prompt格式。

## 运行测试

运行 [multimodal_agent.py](../../../../examples/sample_apps/multimodal_app/intelligence/test/multimodal_agent.py)


### 视觉理解
通过传入agent input（用户问题）和image_urls（图片的url地址）进行多轮智能问答。

运行测试：

```python
from agentuniverse.base.agentuniverse import AgentUniverse
from agentuniverse.agent.agent import Agent
from agentuniverse.agent.agent_manager import AgentManager

AgentUniverse().start(config_path='../../config/config.toml', core_mode=True)


def chat_with_images():
    instance: Agent = AgentManager().get_instance_obj('multimodal_agent')
    output_object = instance.run(input="图中描绘的是什么景象?", image_urls=[
        'https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg'])
    res_info = f"\n图中描绘的景象是:\n"
    res_info += output_object.get_data('output')
    print(res_info)
```

执行结果为：

```text
图中描绘的景象是:
图中描绘的是一幅海滩上的温馨景象。具体细节如下：

- 一个人和一只狗坐在沙滩上，背景是广阔的海洋和明亮的天空。
- 人穿着格子衬衫和短裤，面带微笑，与狗互动。
- 狗戴着彩色项圈，前爪抬起，似乎在与人握手或玩耍。
- 沙滩上有明显的脚印和波浪痕迹，显示出海边的自然环境。
- 海洋在远处延伸，海浪轻轻拍打着岸边。
- 天空明亮，阳光照射下来，给整个场景增添了一种温暖的氛围。
```

### 音频理解
通过传入agent input（用户问题）和audio_url（音频的url地址）进行多轮智能问答。

音频内容为: **我想读一些文学类的书，有什么推荐吗？**

运行测试：

```python
from agentuniverse.base.agentuniverse import AgentUniverse
from agentuniverse.agent.agent import Agent
from agentuniverse.agent.agent_manager import AgentManager

AgentUniverse().start(config_path='../../config/config.toml', core_mode=True)


def chat_with_audio():
    instance: Agent = AgentManager().get_instance_obj('multimodal_agent')
    output_object = instance.run(input='帮我完成音频里的任务内容？',
                                 audio_url='https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240916/kvkadk/%E6%8E%A8%E8%8D%90%E4%B9%A6.wav')
    res_info = f"\nagent运行结果是:\n"
    res_info += output_object.get_data('output')
    print(res_info)
```

执行结果为：

```text
agent运行结果是:
根据您的需求，以下是几本文学类书籍推荐：

1. 《百年孤独》 - 加西亚·马尔克斯
   - 这是一部魔幻现实主义的经典之作，讲述了布恩迪亚家族七代人的传奇故事，融合了神话传说、历史事件和个人命运，展现了拉丁美洲一个世纪的兴衰史。

2. 《平凡的世界》 - 路遥
   - 描绘了中国70年代中期到80年代中期的社会变迁，以孙少平和孙少安两兄弟为中心，展现了普通人在大时代历史进程中所走过的艰难曲折的道路。

3. 《红楼梦》 - 曹雪芹
   - 讲述了贾宝玉、林黛玉等人的爱情悲剧，揭示了封建社会的种种弊病，是中国古代小说的巅峰之作。

4. 《活着》 - 余华
   - 通过主人公福贵的一生，反映了中国近现代以来的历史沧桑巨变，表达了生命的意义在于经历苦难后依然坚强地活下去的主题。

5. 《骆驼祥子》 - 老舍
   - 叙述了一个勤劳善良的车夫祥子三起三落的人生经历，深刻揭露了旧中国城市底层人民生活的艰辛和社会黑暗。
```