1. 项目概述与核心价值

最近在开源社区里,一个名为“CreativeChatGLM”的项目引起了我的注意。这个项目基于清华的ChatGLM大语言模型,但它的目标非常明确:不是做一个通用的对话机器人,而是专注于激发和辅助人类的创造力。简单来说,它想成为你的“创意副驾驶”。无论是写小说、编剧本、策划营销方案,还是进行头脑风暴、生成诗歌歌词,它都试图通过特定的提示词工程和交互设计,引导你突破思维定式,产出更具新意的内容。

我之所以对这个项目产生浓厚兴趣,是因为在实际工作中,无论是技术方案设计、产品文案撰写,还是解决一个棘手的工程问题,我们常常会陷入“思维枯竭”或“路径依赖”的困境。传统的搜索引擎或知识库能提供信息,但很难激发新的连接。而通用的大模型虽然能力强大,但如果不加以引导,其输出往往过于宽泛或缺乏针对性。“CreativeChatGLM”恰恰瞄准了这个痛点,它通过预设的“创意角色”和“结构化流程”,将大模型的强大生成能力,聚焦到“创意生产”这个垂直场景上。

对于内容创作者、产品经理、策划人员、设计师,甚至是需要经常进行技术方案创新的工程师来说,这个项目提供了一个非常实用的工具思路。它不仅仅是调用API,更提供了一套如何与大模型协作进行创造性工作的“方法论”和“脚手架”。接下来,我将深入拆解这个项目的设计思路、技术实现,并分享如何将其核心思想应用到我们自己的工作和项目中。

2. 项目整体设计与思路拆解

2.1 核心定位:从通用对话到垂直创意引擎

ChatGLM本身是一个优秀的双语对话模型,具备强大的理解和生成能力。但“通用”也意味着“平均”。当你直接问它“帮我写一个故事”时,它可能会生成一个结构完整但略显平庸的童话。CreativeChatGLM的聪明之处在于,它没有试图重新训练一个模型,而是通过“系统提示词(System Prompt)”和“交互流程设计”,在应用层对模型的能力进行了重塑和定向引导。

项目的核心思路可以概括为“角色扮演”和“流程控制”。它为大模型预设了诸如“科幻作家”、“广告文案专家”、“诗歌诗人”等不同的创意身份。当你选择了一个身份后,系统会加载一套对应的、精心设计的提示词。这套提示词不仅告诉模型“你是谁”,更规定了“你该如何思考和工作”。例如,“科幻作家”的提示词可能会要求模型先构建世界观,再设计核心矛盾,最后刻画人物,而不是直接开始叙述。这就把一次性的生成请求,拆解成了一个可引导、可交互的创造性过程。

2.2 架构设计:轻量级前端与提示词引擎

从项目仓库的结构来看,它的架构非常清晰和轻量。主体是一个基于Streamlit或Gradio等快速Web框架构建的交互界面。这种选择很务实,对于创意工具来说,快速原型验证和用户友好交互比复杂的后端架构更重要。

项目的核心“大脑”其实是一个“提示词模板库”和“会话管理器”。模板库中存放了针对不同创意场景的、多层级的提示词。会话管理器则负责维护用户与模型的对话历史,并根据用户当前的选择(如切换创意角色、进入流程的下一步),动态地将对应的提示词插入到对话上下文中,发送给后端的ChatGLM API(可能是本地部署的,也可能是云服务)。

这种设计的优势在于:

  1. 灵活性极高 :新增一个创意场景,只需要编写一套新的提示词模板,无需改动核心代码。
  2. 资源消耗低 :不需要为每个垂直领域微调模型,节省了大量的计算成本和数据准备时间。
  3. 可解释性强 :创意产出的过程很大程度上由提示词控制,用户可以理解甚至修改提示词来调整模型的“创作风格”。

注意 :这种提示词工程的高度依赖性,也带来了挑战。提示词的质量直接决定了工具的上限。编写出真正能激发模型深层创意能力的提示词,本身就需要大量的测试和迭代,是一门“玄学”与“科学”结合的技艺。

2.3 关键技术选型:为什么是ChatGLM?

项目选择ChatGLM作为基座模型,我认为有几层考量:

  1. 优秀的双语能力 :对于中文创意内容生成,ChatGLM对中文语境、文化梗、语言风格的理解远超同等规模的通用英文模型。这是它处理中文诗歌、小说、文案时的核心优势。
  2. 相对开放的生态 :ChatGLM提供了不同规模的模型(如GLM-3、GLM-4),并且对学术研究和非商业应用相对友好,便于开发者在本地部署和实验。
  3. 对话式交互原生支持 :ChatGLM本身就是一个为多轮对话优化的模型,这与创意过程中需要反复讨论、修改、深化的交互模式天然契合。项目无需额外处理复杂的上下文拼接逻辑。

当然,这个架构是模型无关的。其核心思想可以平移到其他优秀的开源或闭源模型上,如Qwen、DeepSeek或GPT系列。关键在于理解其“通过流程和角色设计来约束和激发大模型创意能力”的方法论。

3. 核心模块解析与实操要点

3.1 创意角色系统:如何让模型“入戏”

这是项目最有趣的部分。它不仅仅是给模型一个头衔,而是构建了一套完整的“角色设定”。一个有效的创意角色提示词通常包含以下几个要素:

  1. 身份与背景 :明确告诉模型“你是谁”。例如:“你是一位拥有20年经验的4A广告公司创意总监,尤其擅长为科技品牌打造年轻化、有态度的传播方案。”
  2. 核心任务与目标 :定义这次交互要完成什么。例如:“你的任务是帮助用户为一个新的智能手表产品构思一句打动Z世代消费者的Slogan。”
  3. 思维框架与工作流程 :指导模型如何一步步思考。这是区别于普通问答的关键。例如:

    “请按以下步骤工作:

    1. 首先,询问用户关于产品核心功能、目标用户画像、品牌调性的三个关键信息。
    2. 然后,基于这些信息,运用‘矛盾修辞’、‘情感共鸣’、‘场景化描述’三种技巧,分别生成三个方向的Slogan草稿。
    3. 最后,对每个草稿进行简要的创意阐释,并邀请用户选择或提出修改意见。”
  4. 风格与禁忌 :规定输出的语言风格和需要避免的内容。例如:“请使用简洁、有力、富有网感的短句。避免使用‘极致’、‘非凡’等陈词滥调。”

实操心得 :在编写自己的角色提示词时,我发现“思维框架”部分最为重要。把它想象成你在给一个非常聪明但缺乏经验的新手下达工作指令。指令越具体、步骤越清晰,模型输出的结果就越可控、质量越高。一开始可以模仿项目提供的范例,然后针对自己的特定领域进行细化。

3.2 结构化创意流程:从发散到收敛

创意往往不是一蹴而就的,它需要经历发散、碰撞、筛选、深化的过程。CreativeChatGLM项目通过多轮对话设计模拟了这一流程。常见的流程包括:

  • 头脑风暴模式 :用户输入一个主题(如“未来城市交通”),模型以所选角色(如“科幻概念设计师”)的身份,快速生成10个天马行空的概念点子,不求完美,只求数量和新奇。
  • 概念深化模式 :用户从头脑风暴的结果中选中一个点子(如“磁悬浮个人滑板”),模型则切换到“产品经理”角色,引导用户一起完善这个点子的具体形态、使用场景、技术难点和潜在价值。
  • 故事生成模式 :这可能是一个更线性的流程。先确定故事类型和主题,再构建核心冲突和人物,接着梳理故事大纲,最后才生成具体段落。每一步都基于上一步的结果进行迭代。

注意事项 :流程设计要避免过于僵化。好的工具应该在“引导”和“自由”之间取得平衡。在关键节点设置选择分支,允许用户随时打断流程、返回上一步或注入新的想法,这样才能真正实现“人机协作”,而不是“机器主导”。

3.3 提示词模板的编写与管理

项目的核心资产就是那些提示词模板。管理好它们至关重要。

  1. 结构化存储 :建议使用YAML或JSON文件来存储每个创意场景的配置。一个模板文件应包含: role_name (角色名)、 system_prompt (系统提示词)、 greeting_message (初始问候语)、 workflow_steps (流程步骤定义)等字段。
  2. 模块化设计 :将通用的思考框架(如“5W1H分析法”、“SWOT分析”)抽离成独立的模块,在不同的角色模板中引用。这样可以提高复用性,也便于统一更新。
  3. 版本控制与A/B测试 :像管理代码一样管理你的提示词。使用Git来跟踪修改。对于重要的创意场景,可以准备A/B两套略有不同的提示词,通过小范围测试来看哪套效果更好。

一个简单的模板文件示例(JSON格式)

{
  "scenario_name": "短视频脚本策划",
  "role": "短视频平台资深编导",
  "system_prompt": "你是抖音、B站平台的资深内容编导,擅长在30秒内抓住观众眼球。你的风格是节奏快、反转强、情绪饱满。请严格按照以下步骤与用户协作:\n1. 先明确视频的核心目的(品牌宣传?知识科普?剧情娱乐?)。\n2. 确定目标受众和平台调性。\n3. 使用‘黄金3秒钩子+核心信息点+情绪爆点结尾’的结构进行构思。\n4. 输出分镜脚本,包含画面描述、台词、音效和时长预估。",
  "greeting": "你好!我是你的短视频脚本助手。今天想策划一个什么方向的视频?我们先从确定目标开始吧。",
  "parameters": {
    "max_length": 800,
    "temperature": 0.8
  }
}

4. 本地部署与核心环节实现

4.1 环境准备与模型部署

假设我们想在本地机器上复现一个类似CreativeChatGLM的工具,以下是关键步骤:

第一步:基础环境搭建 你需要一个Python环境(建议3.8以上)。首先创建虚拟环境并安装核心依赖。

# 创建并激活虚拟环境
python -m venv creative_env
source creative_env/bin/activate  # Linux/Mac
# creative_env\Scripts\activate  # Windows

# 安装基础依赖
pip install streamlit  # 或 gradio,根据项目实际选用
pip install transformers torch  # 用于加载ChatGLM模型
pip install sentencepiece  # ChatGLM分词器所需

如果项目使用的是ChatGLM的API,则可能需要安装对应的SDK,如 zhipuai (智谱AI)。

第二步:获取并加载ChatGLM模型 这里有两种主流方式:

  • 方式A:使用Transformers库加载本地模型 (需足够显存/内存)。从Hugging Face或清华云下载模型权重。
    from transformers import AutoTokenizer, AutoModelForCausalLM
    tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
    model = AutoModelForCausalLM.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).half().cuda() # 半精度加载到GPU
    model = model.eval()
    
  • 方式B:调用云端API (更简单,无需本地算力)。你需要注册对应的平台(如智谱AI、DeepSeek等)获取API Key。
    import zhipuai
    zhipuai.api_key = "your_api_key"
    # 调用函数
    response = zhipuai.model_api.invoke(model="chatglm_turbo", prompt=[{"role": "user", "content": "你好"}])
    

实操心得 :对于创意生成这种对响应速度有一定要求,且需要反复调试提示词的场景,如果本地硬件允许(至少有一张8GB以上显存的GPU),我强烈建议 方式A 。本地部署虽然初期设置麻烦,但避免了网络延迟、API调用费用和频次限制,在长时间、高交互的创意会话中体验流畅得多。对于GLM-3-6B这样的模型,在消费级显卡上已经可以跑出不错的效果。

4.2 构建交互界面与会话管理

我们以Streamlit为例,构建一个简易的创意聊天界面。

核心代码结构

import streamlit as st
import json
import os

# 1. 初始化Session State,用于存储对话历史、当前角色等
if "messages" not in st.session_state:
    st.session_state.messages = []
if "current_role" not in st.session_state:
    st.session_state.current_role = None

# 2. 加载创意角色模板
def load_role_templates():
    roles_dir = "./roles"
    templates = {}
    for file in os.listdir(roles_dir):
        if file.endswith(".json"):
            with open(os.path.join(roles_dir, file), 'r', encoding='utf-8') as f:
                data = json.load(f)
                templates[data["role"]] = data
    return templates

role_templates = load_role_templates()

# 3. 侧边栏:角色选择器
st.sidebar.title("创意工坊")
selected_role = st.sidebar.selectbox("选择你的创意伙伴:", list(role_templates.keys()))

# 当角色改变时,重置对话,并注入系统提示词
if selected_role != st.session_state.current_role:
    st.session_state.current_role = selected_role
    st.session_state.messages = [
        {"role": "system", "content": role_templates[selected_role]["system_prompt"]},
        {"role": "assistant", "content": role_templates[selected_role]["greeting"]}
    ]

# 4. 主界面:显示聊天记录
st.title(f"与【{selected_role}】的创意对话")
for msg in st.session_state.messages:
    if msg["role"] != "system":  # 不显示系统提示词
        with st.chat_message(msg["role"]):
            st.markdown(msg["content"])

# 5. 聊天输入框
if prompt := st.chat_input("请输入你的创意想法或指令..."):
    # 用户消息加入历史
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    # 调用模型生成回复(这里以调用本地模型为例)
    with st.chat_message("assistant"):
        with st.spinner("思考中..."):
            # 构建完整的对话上下文(包含所有历史消息)
            context = st.session_state.messages
            # 调用模型生成函数(需自行实现,如使用model.chat())
            full_response = call_model_with_context(context)
            st.markdown(full_response)
    # 助手回复加入历史
    st.session_state.messages.append({"role": "assistant", "content": full_response})

会话管理的关键 st.session_state 用于在Streamlit应用重载时保持状态。我们将完整的对话历史(包括隐藏的 system 消息)都保存在这里,每次用户输入后,将整个历史上下文发送给模型,这样模型就能始终记得自己的角色和之前的对话内容。

4.3 集成提示词模板与流程控制

上面的代码实现了基本的角色切换。要实现更复杂的流程控制(如分步骤引导),需要在 call_model_with_context 函数或角色模板中增加逻辑。

进阶实现思路

  1. 在角色模板中定义流程状态 :在JSON模板中增加一个 current_step 字段,以及每个步骤对应的 guide_question (引导问题)。
  2. 在会话状态中跟踪流程 :在 st.session_state 中存储 workflow_step
  3. 智能回复生成 :在调用模型前,先判断当前流程步骤。如果是第一步,可以在用户输入前,先由系统自动发出引导问题。或者,在模型生成回复后,解析回复内容,判断当前步骤是否完成,并自动推进到下一步,同时更新界面提示。

这部分的实现会更复杂,需要更精细的状态管理。一个简化版的方法是:不追求全自动的流程推进,而是在每个步骤的引导提示词中明确告诉用户和模型“我们现在处于哪个阶段,下一步该做什么”,依靠用户的输入来手动推进流程。虽然自动化程度低,但更灵活,不易出错。

5. 效果优化与高级技巧

5.1 生成参数调优:温度(Temperature)与Top-p

大模型生成文本时,有两个关键参数直接影响其“创意”程度:

  • 温度(Temperature) :控制输出的随机性。值越高(如1.0),生成的内容越多样、越出人意料,但也可能包含无关或错误信息;值越低(如0.2),生成的内容越确定、越保守,倾向于选择概率最高的词,容易重复和乏味。
  • Top-p(核采样) :从累积概率超过p的最小词集合中采样。与温度配合使用,能更好地控制生成质量。

针对创意场景的调参建议

  • 头脑风暴阶段 :需要大量新奇点子。可以设置较高的温度(0.8~1.0)和较高的Top-p(0.9~0.95),鼓励模型“放飞自我”。
  • 概念深化/文案撰写阶段 :需要在合理范围内创新。建议使用中等温度(0.6~0.8)和中等Top-p(0.8~0.9),在连贯性和创造性之间取得平衡。
  • 修改/润色阶段 :需要基于已有内容进行小幅优化。应使用较低的温度(0.3~0.5)和较低的Top-p(0.7~0.8),确保输出稳定、可靠。

你可以在角色模板的 parameters 字段中为不同场景预设不同的参数,在调用模型时动态传入。

5.2 引入外部知识库与长期记忆

基础的CreativeChatGLM会话是短暂的。要让创意助手真正了解你的项目背景、品牌调性、过往的创意风格,就需要引入“记忆”能力。

实现方案

  1. 向量数据库 :将你的项目文档、品牌手册、历史成功案例等文本资料进行切片、向量化,存入如Chroma、Milvus等向量数据库。
  2. 检索增强生成(RAG) :在用户开启一个新的创意任务或提到某个关键概念时,从向量数据库中检索最相关的几条信息。
  3. 上下文注入 :将这些检索到的信息,以“参考信息”或“背景知识”的形式,插入到本次对话的系统提示词或用户提问的前面,让模型在生成时有所依据。

例如,系统提示词可以变成:

你是我们的专属广告文案师。以下是我们的品牌手册摘要:[此处插入从向量库检索到的品牌信息]。请基于以上品牌调性,完成接下来的任务:...

这样,生成的Slogan或文案就会更贴合品牌的实际要求,而不是凭空想象。

5.3 多模态创意扩展

创意不止于文字。我们可以将项目的思路扩展到图像、音乐甚至视频生成。

  • 文生图集成 :当模型生成了一个精彩的场景描述或人物设定后,可以自动调用Stable Diffusion、DALL-E等文生图模型的API,将文字描述转化为概念图、分镜草图。
  • 风格一致性 :通过LoRA等微调技术,让文生图模型学习你特定的品牌视觉风格(如特定的色彩、构图),确保生成的图片与文字创意在调性上统一。

这需要将CreativeChatGLM从一个纯文本工具,升级为一个“创意调度中心”,根据对话内容,智能调用不同的AI能力(文本、图像、语音),形成多模态的创意产出流水线。这将是此类工具未来一个非常有力的发展方向。

6. 常见问题与排查技巧实录

在实际搭建和使用这类创意辅助工具的过程中,我踩过不少坑,也总结了一些经验。

6.1 模型回复质量不佳或偏离角色

问题表现 :模型忘记了自己的角色,开始用通用口吻回答问题;或者生成的创意非常平庸、模板化。

排查与解决

  1. 检查系统提示词 :这是最常见的原因。确保你的 system_prompt 足够强硬和具体。使用“你必须”、“你始终要记住”、“你的角色是”等强指令性词语。将角色描述放在对话历史的最前面,并且每次调用都包含它(虽然有些API可以只传一次,但为了保险,在构建上下文时每次都带上)。
  2. 审查对话历史长度 :大模型有上下文窗口限制(如4K、8K、32K tokens)。如果对话轮次太多,最早的系统提示词可能会被“挤出去”。需要实现一个“摘要”或“滑动窗口”机制,在上下文过长时,用一段摘要替换掉中间部分的历史,但务必保留开头的系统指令和最近的关键对话。
  3. 调整生成参数 :如5.1节所述,尝试降低 temperature ,增加 top_p ,或者使用“重复惩罚”参数( repetition_penalty )来避免模型陷入循环或生成无意义内容。
  4. 提供更具体的用户输入 :用户的提问越模糊,模型的回答也越宽泛。在工具设计上,可以通过表单、选择题等方式引导用户输入更具体的信息(如“目标受众年龄?”“希望传达的核心情绪是?”),再将结构化信息整合成清晰的提示给模型。

6.2 流程控制失灵或状态混乱

问题表现 :在多步骤创意流程中,模型跳过了某个步骤,或者回答了不属于当前步骤的问题。

排查与解决

  1. 强化步骤提示 :在每个步骤的引导语中,不仅要告诉模型“现在做什么”,还要简要重申“我们之前已经完成了什么”。例如:“好的,我们已经确定了产品核心功能是‘长续航’。现在进入第二步:请基于‘长续航’这一点,构思三个可能打动户外爱好者的广告场景。”
  2. 在用户侧进行状态约束 :在前端界面,根据当前流程步骤,动态改变输入框的提示文本或禁用某些功能。例如,在“收集信息”步骤,输入框提示可以是“请输入关于目标用户的描述”;而在“生成方案”步骤,则可以变成“对以上方案,提出你的修改意见”。
  3. 实现简单的状态机 :在后端维护一个明确的流程状态(如 “step1_info_gathering” , “step2_brainstorming” )。根据状态,决定调用哪个具体的提示词模板来处理用户的输入,而不是始终使用同一套提示词。

6.3 处理速度慢或资源占用高

问题表现 :本地部署的模型响应缓慢,交互体验差。

排查与解决

  1. 模型量化 :如果使用本地模型,务必使用量化版本(如int4, int8)。这能大幅降低显存占用和计算量,速度提升明显,而对生成质量的影响在可接受范围内。Hugging Face上通常会有社区提供的量化版模型。
  2. 使用更小的模型 :对于创意激发和文案辅助,不一定需要千亿参数模型。像ChatGLM-6B、Qwen-7B这样的模型,在精心设计的提示词引导下,完全能胜任很多工作。在效果和速度之间找到平衡点。
  3. 优化推理框架 :使用专为推理优化的库,如vLLM、TensorRT-LLM或OpenAI-compatible的本地服务器(如LM Studio),它们比原生Transformers的推理速度更快。
  4. 缓存机制 :对于一些常见的、通用的创意请求(如“帮我起10个科技公司名字”),如果结果不要求每次绝对不同,可以考虑缓存模型的输出,下次直接返回,减少模型调用。

6.4 创意成果的评估与筛选

问题表现 :模型一次生成了多个选项,用户难以判断哪个更好。

解决思路 :工具可以提供辅助评估功能。

  1. 自我评估 :在生成多个方案后,可以要求模型(或以另一个“评审员”角色)根据预设的标准(如创新性、可行性、与品牌契合度)对这几个方案进行简要评分和点评。
  2. 对比展示 :以清晰的表格形式并列展示不同方案及其关键特点,方便用户对比。
  3. 迭代优化 :提供“基于方案A,但更偏向XX方向”或“融合方案A和B的优点”这样的快捷指令按钮,引导用户进行快速迭代,而不是从头开始。

构建一个高效的创意辅助工具,技术实现只是一部分,更重要的是对创意工作流的深刻理解,以及将这种理解转化为有效的提示词和交互设计。CreativeChatGLM项目提供了一个优秀的起点和范式。它的核心价值不在于代码本身,而在于其“以人为本,用流程和角色赋能AI”的设计哲学。掌握了这一点,你完全可以根据自己的专业领域,打造出专属的“法律文书创意助手”、“工业设计概念生成器”或“学术论文创新点挖掘工具”。

更多推荐