第12章 综合案例四:视觉问答微应用
-
目标概述:本章实现一个小型视觉问答应用,让读者体验多模态AI项目。应用功能:用户提供一张图片和一个问题,系统利用图像识别模型获取图像内容,再结合语言模型回答问题。例如上传一张风景照问“这是什么地方?”,系统先识图得到可能的地点信息,再由语言模型给出回答。这让读者尝试整合计算机视觉和LLM,在 Vibe Coding 框架下开发多模态应用。
-
提示词结构:针对视觉问答项目,我们提示 AI 生成的代码涉及调用现有图像识别API或模型(考虑简易,使用现成的如百度OCR或AWS Rekognition,或者OpenAI的图像识别如果有)。提示内容包括:用Python编写一个接受图像文件和文本问题的程序,首先对图像执行分析获取描述或标签,然后将图像描述和用户问题一起作为Prompt给ChatGPT得到回答。我们要求模块化设计:vision.py 处理图像 -> qa.py 处理问答。提示词明确使用某个公开的图像API(以减少模型实现复杂度),并示例API的返回结构供AI参考。
-
流程图:绘制视觉问答流程:用户提供图片+问题 -> 图像分析模块(调用CV API,输出描述/标签)-> 将问题和图像描述整合为Prompt -> 调用LLM生成答案 -> 返回给用户。流程图特别强调图像信息如何融入Prompt,例如Prompt模板:“这是一张描述为{标签}的图片。问:{用户问题}。请基于图片内容回答。”
-
可视化代码生成过程:使用 Cursor 生成图像分析代码:如AI编写 analyze_image(image_path) 函数,内部调用假定的API(示例:AWS Rekognition或者OpenAI Vision API),截图显示AI对API用法的实现(如果无法确知接口细节,我们提供伪代码形式,AI通常会给出假定代码)。再生成QA代码:answer_question(image_info, question) 函数,将image_info和question组装Prompt调用语言模型。截图展示Prompt构建和模型调用代码。最后 main.py 整合:接受命令行参数或固定测试图像路径,调用上述函数并打印答案。展示AI生成这些部分代码的过程截图,重点说明Prompt如何设计。
-
样例项目代码结构:主要模块:
-
vision.py:包含 analyze_image 函数,封装图像识别API调用;
-
qa.py:包含 answer_question 函数,封装LLM问答调用;
-
main.py:整合以上,实现一个简单交互或读取测试文件运行。
若使用外部API服务,还会有配置文件存放API Key,使用说明等。 -
生成结果截图:展示用一张示例图和问题运行的结果。例如提供一张猫的照片,问“这只猫是什么品种?”,系统可能识别出“图像中是一只橘色的短毛猫”,然后回答“这可能是一只橘色虎斑猫”。截图包括终端输出或日志,显示图像分析结果和最终答案。也可加入识别API返回的JSON片段截图,让读者了解底层数据。
-
测试点与失败案例:测试各种图像和问题:如问题与图像无关时,系统应察觉并提示无法回答(测试Prompt要引导模型在无法根据图像回答时拒绝或说不确定)。失败案例:最初AI生成的代码可能对接API不正确或忽略某步,例如忘记将图像转换合适格式。通过报错信息截图,说明我们如何调整提示或代码解决。另一个挑战是LLM可能基于常识回答而非图像内容,我们强调提示需反复提醒模型依据提供的图像信息回答。可能在Prompt加入“只根据以上图像描述回答,不要添加额外猜测”。
-
术语解释:解释“多模态”“计算机视觉(CV)”“OCR”“图像识别”等概念。说明API与本地模型的区别,以及常用的视觉AI服务。强调这是读者首次接触非文本输入的AI编程,属于难度提升点,但掌握后将大大拓展可开发应用范围。