第21章 主线项目(中):多模态功能实现与集成
-
目标概述:本章在上一章框架基础上,填充各功能模块的具体实现逻辑,使多模态创作工作站具备实际可用的核心功能。我们将重点实现聊天/问答、内容创作、PPT生成和视觉问答四大功能,并让它们共享统一的用户界面和后台服务结构。读者将在此过程中看到跨模块协作的代码,以及如何在一个大型项目中管理提示词和配置。
-
聊天与知识问答集成:完善 Chat 模块。复用第5章 CLI 聊天机器人代码,实现与用户自由对话;同时融合第7章知识库QA功能,当检测到问题属于知识库范围时,引入知识库检索提供更准确答案。实现思路:在 chat.py 的 get_answer(question) 中,先调用知识检索 find_relevant() 判断是否有高相关资料,若有则构造"根据以下资料回答: ... [资料] 问: ..."这样的Prompt调用LLM回答;若无则走普通对话模式调用LLM。提示AI生成相应代码,展示关键片段截图。处理上下文对话状态,可使用Session或简单全局缓存最近对话,实现连续对话记忆。
-
内容创作模块:完善 Creation 模块。集成第10章内容Bot逻辑,实现一个 /create 接口,接受参数如主题、风格等,返回生成的文章。将之前 outline_generator 和 content_generator 函数整合,或直接将提示词组装放在此模块处理。AI 生成代码后,我们优化它能返回段落分段的结果。截图展示Creation模块生成内容的核心Prompt和调用。
-
PPT生成模块:完善 Presentation 模块。复用第9章PPT助手代码。在 /presentation 接口实现: 接收演示主题或大纲 -> 调用内容生成逻辑(可能复用 Creation 模块的生成函数,只是生成结果格式不同)-> 调用 PPT 生成函数创建pptx文件 -> 返回下载链接或存储路径。AI 生成这部分代码,我们校对确保文件IO正确。截图展示生成 PPT 的部分日志或结果通知代码。由于无法直接在HTTP响应中发送二进制文件(除非前端下载),可以选择将 PPT 保存在服务器并提供下载URL,此细节向读者解释。
-
视觉问答模块:完善 Vision 模块。复用第12章视觉QA逻辑,实现 /vision 接口:接受上传图像和提问 -> 用以前的 analyze_image 获取描述 -> 将描述和问题交给LLM回答 -> 返回答案文本。AI 生成Flask处理文件上传的代码(使用 request.files 等),我们检查安全性如限制文件大小格式。截图展示Vision模块调用CV API以及返回答案的主要代码段。测试时可用一张示例图编码为base64发送,书中说明web界面将在下一章开发。
-
模块协作与共享:确保各模块共用的部分(如调用OpenAI API的key、通用Prompt片段)提取到配置或util中,例如 app/utils.py 里写一个 call_llm(prompt) 函数,各模块调用之。这样方便管理。AI 协助我们提炼,截图展示util函数的代码。
-
前后端联调:由于本章主要做后端,实现后可用curl等测试接口是否正常返回。但我们也初步规划前端如何调用。例如Chat模块将对应一个聊天页面,通过AJAX不断POST提问;Creation模块在前端提供表单提交获取文章;Vision模块需要前端支持文件上传。虽未实现前端,在此写出各接口的URL和使用方法供第22章用。
-
样例项目代码结构:更新列出现在完整实现的主要代码文件和重要函数:
-
app/chat.py:实现对话与知识库QA(列出函数 get_answer 等);
-
app/creation.py:实现内容生成(函数 generate_article 等);
-
app/presentation.py:实现PPT生成(函数 create_ppt 等,调用 utils.save_ppt 保存文件);
-
app/vision.py:实现图像问答(函数 answer_image_question 等);
-
app/utils.py:封装通用AI调用、日志、错误处理等。
-
测试与演示:通过在本地运行服务器,使用模拟请求测试每个模块:
-
Chat:终端下用curl发送 /chat 提问,观察JSON回答;
-
Creation:发送主题看看返回文章摘要片段;
-
Presentation:请求PPT生成,验证服务器创建了pptx文件;
-
Vision:发送测试图像,看回答合理性。
讲解每步测试结果,附部分终端IO截图证明功能已打通。当然,全功能需要第22章前端来友好展现,但此时后端引擎已经齐全。 -
术语解释:解释“接口(endpoint)”“HTTP请求/响应”等Web开发基本术语,确保读者理解前端通过URL触发我们实现的各功能。指出多模态集成后的复杂度上升,但因为模块化清晰,开发仍有条不紊,这是本书Vibe Coding方法论的胜利成果。