公司动态

基于LLM与LangChain的智能内容配套系统实战:从文本理解到多模态生成

📅 2026/9/3 5:50:38
基于LLM与LangChain的智能内容配套系统实战:从文本理解到多模态生成
最近在开发一个内容生成工具时遇到了一个挺有意思的需求如何让 AI 自动为一段文字配上合适的图片、标题、摘要甚至生成视频脚本这其实就是“文字 AI 都给我配上了”这个场景的工程化实现。无论是做自媒体、内容运营还是开发智能助手这个能力都能极大提升效率。本文将手把手带你实现一个核心模块基于大语言模型LLM的智能内容增强系统。我们会从原理拆解到代码实战完整覆盖从文本理解、关键词提取、到多模态内容匹配的全流程。本文适合有一定 Python 基础对 AI 应用开发感兴趣的开发者。你将学到如何利用 LangChain 框架和 OpenAI API或其他模型构建一个能理解文本并自动生成配套元数据如配图建议、标题、标签的实用工具。文章包含大量可运行的代码片段并会详细解释其中的设计思路和避坑要点。1. 背景与核心概念什么是“智能内容配套”“文字 AI 都给我配上了”听起来很口语化其核心是指在给定一段核心文字如文章正文、产品描述、新闻稿后由人工智能自动完成一系列配套内容的生成或推荐。这远不止是简单的关键词匹配。1.1 核心能力拆解一个完整的智能内容配套系统通常包含以下维度标题生成根据正文提炼出吸引眼球、符合平台调性的多个标题变体。摘要/导语生成提取核心思想生成简短有力的摘要。关键词/标签提取自动识别内容主题生成用于分类和搜索的标签。配图建议不是直接生成图片那是文生图模型的事而是根据文字内容生成详细的、可供图库搜索或文生图模型使用的图片描述提示词Prompt。例如将“夏日海滩度假”转化为“阳光明媚的黄金沙滩蔚蓝大海与椰林休闲风格高清摄影”。风格建议判断内容适合的风格如科技感、小清新、严肃新闻并给出排版或视觉建议。多平台适配为同一内容生成适合微博、微信公众号、知乎、小红书等不同平台的变体文案。1.2 技术栈与原理实现上述功能主要依赖于自然语言处理NLP技术特别是基于 Transformer 的大语言模型LLM。其工作流程可以抽象为文本理解与特征提取LLM 深度理解输入文本的语义、情感、主题和实体。任务定义与提示工程通过精心设计的“提示词Prompt”引导 LLM 执行特定任务如“请生成三个标题”。结构化输出解析将 LLM 返回的非结构化文本解析成程序可用的结构化数据如 JSON。下游应用集成将解析后的数据如图片提示词发送给图库 API 或文生图模型完成最终配套。接下来我们将基于这个原理搭建一个实战项目。2. 环境准备与版本说明本项目主要使用 Python 和 LangChain 框架。LangChain 能极大地简化我们与 LLM 的交互、提示词管理和输出解析流程。2.1 基础环境操作系统Windows 10/11, macOS, 或 Linux (如 Ubuntu 20.04) 均可。Python 版本建议使用 Python 3.8 至 3.11。本文示例在 Python 3.9 上测试通过。包管理工具使用pip。2.2 核心依赖库创建一个新的项目目录并初始化一个虚拟环境是推荐做法。然后安装以下依赖# 创建项目目录并进入 mkdir smart_content_enricher cd smart_content_enricher # 创建并激活虚拟环境 (以 venv 为例) python -m venv venv # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate # 安装核心依赖 pip install langchain0.1.0 pip install langchain-openai0.0.5 # 用于 OpenAI 模型 pip install python-dotenv1.0.0 # 用于管理环境变量 pip install pydantic2.5.0 # 用于数据验证和设置重要langchain和langchain-openai版本迭代较快以上版本为撰写本文时的稳定版本。如果遇到兼容性问题可尝试安装最新版但部分 API 可能需要调整。2.3 API 密钥配置我们需要一个 LLM 服务。这里以 OpenAI 的 GPT 模型为例你也可以替换为国内兼容 API 或本地模型。你需要准备一个 OpenAI API Key。在项目根目录创建.env文件用于安全存储密钥。在.env文件中写入OPENAI_API_KEY你的实际API密钥 OPENAI_BASE_URLhttps://api.openai.com/v1 # 如果使用官方接口则无需修改若用代理需调整确保.gitignore文件中包含.env避免密钥泄露。2.4 项目结构预览完成后你的项目结构大致如下smart_content_enricher/ ├── .env # 环境变量密钥 ├── .gitignore ├── requirements.txt # 依赖列表可选 ├── src/ │ ├── __init__.py │ ├── config.py # 配置加载 │ ├── models.py # 数据模型定义 │ ├── prompt_templates.py # 提示词模板 │ └── main.py # 主程序入口 └── tests/ # 测试目录可选3. 核心组件与原理拆解在编写代码前我们需要理解 LangChain 中的几个关键概念它们是我们构建系统的基石。3.1 LLM 与 ChatModel在 LangChain 中LLM通常指纯文本补全模型而ChatModel如 GPT-3.5/4接收和返回的是消息序列。我们使用ChatOpenAI来与 GPT 对话。3.2 提示词模板PromptTemplate这是“提示工程”的载体。我们将任务要求、输入变量和格式指令封装成一个模板。例如from langchain.prompts import ChatPromptTemplate template 你是一位资深内容编辑。请根据以下文章正文生成配套内容。 正文{article_text} 请生成 1. 三个不同风格的标题。 2. 一段不超过100字的摘要。 3. 五个关键词。 prompt ChatPromptTemplate.from_template(template){article_text}是一个占位符运行时会被实际文章替换。3.3 输出解析器OutputParserLLM 默认返回文本。我们需要将其转换为结构化的数据比如 Python 字典或 Pydantic 模型对象。PydanticOutputParser是绝佳选择它能定义输出格式并让 LLM 按照指定格式如 JSON返回。3.4 链Chain链是将 LLM、提示词、解析器组合起来的工作流。LCEL(LangChain Expression Language) 让这个过程像管道一样清晰chain prompt | llm | output_parser result chain.invoke({article_text: 你的文章})理解了这些我们就可以开始搭建了。4. 完整实战构建智能内容配套系统让我们一步步实现这个系统。4.1 定义数据结构模型首先在src/models.py中我们用 Pydantic 定义我们希望 LLM 返回的数据结构。这相当于给 AI 的输出定了一个“合同”。# file: src/models.py from typing import List from pydantic import BaseModel, Field class GeneratedContent(BaseModel): 智能生成的内容配套 titles: List[str] Field(description生成的标题列表至少3个风格各异) summary: str Field(description文章摘要简洁有力不超过150字) keywords: List[str] Field(description关键词或标签5-8个) image_prompts: List[str] Field(description为配图生成的详细提示词描述2-3个需包含场景、风格、构图等元素) style_suggestion: str Field(description内容整体风格建议如‘科技简约’、‘温暖人文’等) # 可选增加多平台适配 # platform_adaptations: dict Field(default_factorydict, description各平台文案适配)4.2 创建提示词模板在src/prompt_templates.py中我们编写一个详细的提示词模板引导 LLM 生成高质量、结构化的内容。# file: src/prompt_templates.py from langchain.prompts import ChatPromptTemplate from .models import GeneratedContent # 导入上面定义的模型 # 使用 PydanticOutputParser 来关联模型和提示词 from langchain.output_parsers import PydanticOutputParser parser PydanticOutputParser(pydantic_objectGeneratedContent) # 构建系统指令和人类指令 system_template 你是一位顶尖的融媒体内容策划专家。你的任务是为用户提供的文字内容生成一套完整、专业、可直接使用的配套内容方案。 请严格按照指定的格式输出。 human_template 请为以下文字内容生成配套方案 ---------------- {article_text} ---------------- {format_instructions} # 将格式指令由解析器自动生成注入到提示词中 prompt ChatPromptTemplate.from_messages([ (system, system_template), (human, human_template), ]).partial(format_instructionsparser.get_format_instructions()) # 关键部分填充格式指令 # 导出需要的组件 __all__ [prompt, parser]parser.get_format_instructions()会自动生成一段详细的文本告诉 LLM 必须返回 JSON 格式并且字段必须符合GeneratedContent模型的定义。这是实现结构化输出的关键。4.3 配置加载与链的组装在src/config.py中加载环境变量和配置 LLM。# file: src/config.py import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI # 加载 .env 文件中的环境变量 load_dotenv() # 初始化 ChatOpenAI 模型 # 注意这里使用了环境变量中的 OPENAI_API_KEY 和 OPENAI_BASE_URL llm ChatOpenAI( modelgpt-3.5-turbo, # 也可用 gpt-4, gpt-4-turbo-preview 等 temperature0.7, # 控制创造性0.0最确定1.0最随机 api_keyos.getenv(OPENAI_API_KEY), base_urlos.getenv(OPENAI_BASE_URL, https://api.openai.com/v1) # 提供默认值 ) __all__ [llm]在src/main.py中我们将所有组件组装成链并编写主逻辑。# file: src/main.py import asyncio from src.config import llm from src.prompt_templates import prompt, parser from src.models import GeneratedContent async def enrich_content(article_text: str) - GeneratedContent: 核心函数为输入文本生成配套内容 # 构建链提示词 - 语言模型 - 输出解析器 chain prompt | llm | parser print(正在调用AI生成配套内容...) try: # 调用链 result: GeneratedContent await chain.ainvoke({article_text: article_text}) return result except Exception as e: print(f生成过程中发生错误: {e}) # 可以在这里添加重试或降级逻辑 raise def print_result(result: GeneratedContent): 美观地打印结果 print(\n *50) print(智能内容配套生成结果) print(*50) print(f\n **生成的标题**:) for i, title in enumerate(result.titles, 1): print(f {i}. {title}) print(f\n **摘要**:\n {result.summary}) print(f\n️ **关键词**: {, .join(result.keywords)}) print(f\n️ **配图提示词**:) for i, img_prompt in enumerate(result.image_prompts, 1): print(f {i}. {img_prompt}) print(f\n **风格建议**: {result.style_suggestion}) print(*50) async def main(): # 示例文章正文 sample_article 随着春季最后一个节气谷雨的过去我们正式进入了夏季。夏季是阳气最盛的季节气候炎热而生机旺盛。此时是新陈代谢的时期阳气外发伏阴在内气血运行亦相应地旺盛起来活跃于机体表面。 夏季养生重在精神调摄保持愉快而稳定的情绪切忌大悲大喜以免以热助热火上加油。心静人自凉可达到养生的目的。在饮食上宜清淡少食肥甘厚味多食豆类食品如绿豆、赤豆、扁豆等以解暑利湿、健脾益肾。 print(输入文章正文) print(-*30) print(sample_article) print(-*30) # 调用生成函数 enriched await enrich_content(sample_article) # 打印结果 print_result(enriched) if __name__ __main__: # 运行异步主函数 asyncio.run(main())4.4 运行与验证在项目根目录下运行python -m src.main如果一切配置正确你将看到类似以下的输出具体内容因模型随机性而异输入文章正文 ------------------------------ 随着春季最后一个节气谷雨的过去... ------------------------------ 正在调用AI生成配套内容... 智能内容配套生成结果 **生成的标题**: 1. 入夏养生正当时调神静心食豆祛湿 2. 告别谷雨迎盛夏中医教你夏季养生三要诀 3. 心静自然凉夏季养生重在精神与饮食调摄 **摘要**: 本文介绍了夏季养生的核心原则。夏季阳气旺盛养生重点在于精神调摄保持情绪稳定避免大悲大喜。饮食上宜清淡推荐多食用绿豆、赤豆等豆类食品以达到解暑利湿、健脾益肾的功效。 ️ **关键词**: 夏季养生, 精神调摄, 饮食清淡, 豆类食品, 解暑利湿, 阳气 ️ **配图提示词**: 1. 宁静的夏日庭院一位老者于树荫下静坐冥想身边有一碗绿豆汤阳光透过树叶洒下斑驳光影中国风水墨意境。 2. 摆满各种豆类绿豆、赤豆、扁豆的木质桌面旁边有中医古籍和茶具色调柔和静物摄影突出健康自然主题。 **风格建议**: 传统养生与现代生活结合风格应偏向宁静、自然、健康色调以绿色、米色等清新色系为主。 可以看到AI 不仅生成了标题、摘要、关键词还给出了非常具体、可操作的配图提示词和风格建议。这些提示词可以直接用于 Midjourney、Stable Diffusion 等文生图工具或作为图库搜索的关键词。5. 常见问题与排查思路在实际使用中你可能会遇到以下问题问题现象可能原因解决思路ModuleNotFoundError: No module named ‘langchain’依赖未正确安装或虚拟环境未激活。1. 确认已激活虚拟环境。2. 在项目根目录下执行pip install -r requirements.txt或重新安装pip install langchain langchain-openai。AuthenticationError/Invalid API KeyAPI 密钥错误、过期或base_url配置不对如使用了不正确的代理地址。1. 检查.env文件中的OPENAI_API_KEY是否正确无误首尾无空格。2. 如果使用第三方代理确认OPENAI_BASE_URL填写正确。3. 在 OpenAI 平台检查密钥余额和状态。RateLimitError请求频率或总量超过限制。1. 免费用户或新账号有每分钟请求数RPM和每日限额TPM。2. 添加请求延迟time.sleep(1)。3. 升级账户或购买更多额度。LLM 输出格式不符合预期解析失败1. 提示词中的format_instructions不够清晰。2. 模型如gpt-3.5-turbo复杂指令遵循能力较弱。3.temperature参数过高导致输出随机性大。1.强化提示词在system_template中更严厉地强调“必须严格按格式输出”。2.升级模型尝试使用gpt-4系列模型其指令遵循和复杂格式输出能力更强。3.降低temperature设置为0.3以下增加输出确定性。4.添加后处理在解析失败时尝试用正则表达式从错误响应中提取 JSON。生成的内容质量不高过于笼统提示词不够具体未限定领域或风格。1.细化角色将“内容编辑”具体化为“健康科普自媒体编辑”、“科技产品文案策划”等。2.提供示例在提示词中加入一两个输入输出的例子Few-Shot Learning。3.增加约束明确要求标题字数、摘要句式、关键词数量、图片提示词必须包含的元素等。程序报错‘...’ object is not callableLangChain 版本更新导致 API 变更。1. 检查安装的langchain和langchain-openai版本。2. 查阅对应版本的官方文档调整导入和调用方式。本文代码基于0.1.x版本。6. 最佳实践与工程建议将原型转化为可投入生产使用的系统还需要考虑更多工程化细节。6.1 提示词工程优化角色扮演Role Playing给 AI 一个明确的、专业的角色能显著提升输出质量。例如“你是一位有10年经验的生活类公众号主编擅长创作爆款标题和治愈系文案。”少样本学习Few-Shot在提示词中提供1-3个高质量的输入输出示例能极大地引导模型输出符合你要求的格式和风格。分步思考Chain-of-Thought对于复杂任务可以要求模型“先分析文章的主要情感和受众再基于此生成标题”。在提示词中体现思考过程。迭代优化将不同的提示词版本保存下来用一批测试文章进行批量生成和人工评估选择效果最好的版本。6.2 系统稳定性与性能错误处理与重试网络波动、API 限流不可避免。务必用try...except包裹核心调用并实现指数退避的重试机制。from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) async def call_llm_with_retry(chain, input_dict): return await chain.ainvoke(input_dict)异步与批处理ChatOpenAI支持异步调用。对于需要处理大量文章的场景使用asyncio.gather进行并发调用可以大幅提升效率。缓存结果对于已经处理过的、内容不变的文章可以将生成结果缓存起来如使用redis或sqlite避免重复调用 API 产生费用。设置超时为 LLM 调用设置合理的超时时间防止因网络或服务端问题导致程序长时间挂起。6.3 扩展性与模块化多模型支持不要将代码与 OpenAI 强绑定。可以抽象一个LLMProvider接口方便后续接入 Claude、文心一言、通义千问等模型。可配置的生成项用户可能只需要标题或只需要配图提示词。可以通过配置开关动态组合提示词模板和输出解析模型。流水线化将“内容分析”、“标题生成”、“摘要生成”、“配图建议”拆分成独立的链Chain然后组合成一个顺序执行或条件执行的工作流SequentialChain, RouterChain。这样更易于测试和迭代单个模块。集成下游服务将生成的image_prompts自动发送给文生图 API如 DALL-E、Stable Diffusion API并将生成的图片 URL 返回实现真正的“一键配图”。6.4 成本与安全监控 Token 消耗OpenAI API 按 Token 收费。在调用前后计算输入和输出的 Token 数量并记录到日志中便于成本分析和优化。langchain本身也提供了一些回调函数用于此目的。内容审核对于用户生成的内容UGC作为输入务必在调用 LLM 前或后加入内容安全审核环节防止生成不当内容。数据隐私如果处理敏感数据需确认所选 LLM API 的数据隐私政策或考虑使用可本地部署的开源模型如通过Ollama部署Llama 3。通过以上步骤你已经拥有了一个功能完整、可扩展的智能内容配套系统核心。它从一段文字出发自动生成了标题、摘要、标签和配图方案将“文字 AI 都给我配上了”这句话变成了可运行的代码。你可以在此基础上继续探索多平台适配、风格化指令微调、与 CMS 系统集成等更高级的功能。