LangChain多模态智能体:文生图、识图、RAG问答与小说生成全攻略
基于LangChain构建多模态智能体:整合文生图、识图、RAG问答与小说生成
一、项目背景:打造全能型智能体助手
在AI应用多元化的今天,单一功能的智能体已难以满足复杂场景需求。本项目基于LangChain框架,整合多模态大模型(Qwen2.5-VL)、文生图模型、RAG知识库问答、实时搜索工具(Tavily)及多章节小说生成工作流,构建了一个支持文本-图像交互、知识问答、内容创作的全能型智能体。其核心目标是:
- 处理用户混合模态查询(如图文结合的问题)
- 实现知识驱动的精准回答(RAG+实时搜索)
- 自动化生成高质量内容(图片、小说等)
二、技术架构:多工具协同的智能体生态
核心组件
-
多模态大模型:
- Qwen2.5-VL-72B-Instruct(ModelScope):支持图文联合理解,用于图像描述、多模态推理
- Qwen3-235B-A22B(ModelScope):作为智能体的“大脑”,负责工具调用决策
-
功能工具链:
- 文生图工具:基于ModelScope API生成图片(如“可爱性感的妹子全身照”)
- 识图工具:利用Qwen2.5-VL解析图片内容(如描述人物、场景)
- RAG问答:对接本地知识库,优先处理可通过知识检索回答的问题
- 实时搜索:Tavily工具获取实时信息(如天气、新闻)
- 小说生成:自定义工作流实现多章节小说自动化创作(从主题到分章剧情)
-
Agent框架:
- 使用ReAct模式(思考-行动循环),通过LangChain的
create_react_agent
构建 - 工具调用优先级策略:
- 小说创作必须调用
create_multichapter_nocel_tool
- 知识类问题优先使用RAG,RAG无法回答时再调用实时搜索
- 小说创作必须调用
- 使用ReAct模式(思考-行动循环),通过LangChain的
三、核心功能与实现细节
1. 多模态交互:图文理解与生成
(1)文生图工具
- 技术实现:
通过ModelScope图像生成API,输入文本prompt生成图片URL,并自动下载保存本地@tool def generate_image_from_text(prompt: str) -> str:response_data = make_image_api_request(prompt) # 调用ModelScope APIimage_url = parse_image_api_response(response_data)download_image_from_agent_output(image_url) # 自动下载图片return f"Generated image URL: {image_url}"
- 示例输入:
请帮我生成一个在星空下读书的少女插画
- 输出效果:
生成图片URL并保存至本地images/
目录
(2)识图工具
- 输入格式:
严格遵循QUESTION: <问题> IMAGE: <图片URL/本地路径>
格式input_string = "QUESTION: 这张图片里有什么动物? IMAGE: https://example.com/animal.jpg"
- 技术细节:
- 解析输入字符串,提取问题与图片标识
- 本地图片自动转换为Base64 Data URL,适配模型输入要求
- 构建多模态消息(文本问题+图像数据)调用Qwen2.5-VL
multimodal_message = HumanMessage(content=[{"type": "text", "text": question}, {"type": "image_url", "image_url": {"url": image_url}}] ) response = chatLLM_multimodal.invoke([multimodal_message])
2. 知识问答:RAG与实时搜索结合
- RAG优先策略:
智能体接收到问题时,首先判断是否可通过本地知识库回答(如技术文档、FAQ),调用rag_agent
工具@tool def rag_agent(input_string: str) -> str:response = qa_chain.invoke({"query": input_string}) # 对接FAISS向量库return response.get("result")
- 实时搜索兜底:
若RAG未命中有效结果,自动触发Tavily搜索工具获取最新信息search_tool = TavilySearchResults(max_results=3) # 实例化搜索工具
3. 小说生成:自定义工作流
- 状态驱动流程:
通过NovelWorkflowState
管理创作状态(主题、大纲、章节内容等),支持递归生成多章节剧情initial_state = NovelWorkflowState(user_topic="科幻冒险",max_chapters=5, ) final_state = nocel_tool.invoke(initial_state) # 执行工作流 return final_state.all_generated_chapters # 获取所有章节
- 应用场景:
自动生成连贯的多章节故事,适用于内容创作、剧本生成等场景
四、智能体运行示例
示例1:文生图任务
用户输入:
请生成一张樱花树下的猫咪图片
Agent思考过程:
- 识别为图像生成任务,调用
generate_image_from_text
工具 - 工具返回图片URL并下载保存
输出结果:
Generated image URL: https://modelscope.oss-... 已成功生成图片
示例2:识图问答
用户输入:
QUESTION: 这个建筑的名称是什么? IMAGE: https://example.com/eiffel-tower.jpg
Agent思考过程:
- 解析为识图问题,调用
describe_image_with_vl
工具 - 多模态模型返回“埃菲尔铁塔”的描述
输出结果:
图片中的建筑是埃菲尔铁塔,位于法国巴黎...
示例3:小说生成
用户输入:
请生成一篇主题为: {XXX}章节为{X}的小说
Agent思考过程:
- 检测到小说创作需求,调用
create_multichapter_nocel_tool
工具 - 工作流生成3章故事:第一章飞船起航,第二章外星探索,第三章危机解除
输出结果:
Chapter 1: 星际远航计划启动...
Chapter 2: 发现神秘紫色星球...
Chapter 3: 能源危机与意外救援...
示例4:RAG和Web搜索
智能体可以根据需求搜索本地和联网的文库资料搜索的内容进行回答,使用嵌入文本大模型(从huggingface中直接下载到本地加载)
五、挑战与未来优化方向
当前挑战
- 多工具协调:部分场景需多轮工具调用(如先搜索后生成),需优化Agent的决策逻辑
- 长文本生成:小说章节连贯性待提升,需引入上下文记忆机制
- 实时性需求:部分搜索任务对时效性要求高,需优化Tavily结果解析效率
未来计划
- 功能扩展:
- 集成语音输入输出,支持多模态对话
- 添加代码生成工具,打造开发助手
- 性能优化:
- 引入模型量化与缓存机制,降低调用成本
- 优化RAG检索策略,提升知识库命中率
- 用户体验:
- 开发Web界面,支持图片上传/小说章节预览
- 实现用户偏好学习,个性化生成内容
六、总结
本项目通过LangChain实现了多模态智能体的工具整合与流程编排,展示了大模型在跨模态任务中的强大能力。未来,随着工具生态的丰富和模型能力的提升,智能体有望在教育、创意产业、智能客服等领域发挥更大价值。欢迎感兴趣的开发者加入,共同拓展智能体的应用边界!
代码仓库:kingdol666/langchainDemo: 一个学习langchain自写的一些agent或案例https://github.com/kingdol666/langchainDemo
作者:kingdol
发布日期:2025年5月19日
标签:#LangChain #多模态AI #智能体开发 #RAG #大模型应用