入门 Eva J Patel(freeCodeCamp) 2026-09-10 16:14:02 · 0 阅读

第16章 构建 AI 文本生成应用

文本生成是用 Gradio 演示 AI 应用最轻松的场景之一。

交互逻辑很直观:用户输入 prompt,应用将其发给模型,模型生成文本,结果显示在界面上。

但要做好,远不止放一个文本框加一个按钮那么简单。

基础架构

应用可以按以下流程运行:

Prompt
→ Validation
→ Model
→ Generated text
→ Output

从占位符开始

在接入真实模型之前,先搭建好界面。

import gradio as gr

def generate(prompt):
    if not prompt.strip():
        return "Please enter a prompt."

    return f"Generated response for: {prompt}"

with gr.Blocks() as demo:
    prompt = gr.Textbox(
        label="Prompt",
        lines=8,
        placeholder="Write what you want the model to generate..."
    )

    button = gr.Button(
        "Generate",
        variant="primary"
    )

    output = gr.Textbox(
        label="Generated Text",
        lines=15
    )

    button.click(
        fn=generate,
        inputs=prompt,
        outputs=output
    )

demo.launch()

这就是基础框架。

添加生成参数

文本生成应用通常会提供以下可调参数:

  • 最大输出长度

  • temperature

  • 生成条数

  • 重复处理策略

例如:

temperature = gr.Slider(
    minimum=0,
    maximum=2,
    value=0.7,
    step=0.1,
    label="Temperature"
)

temperature 的作用是什么

temperature 主要影响生成结果的可预测性和多样性。

值越低,输出越确定;值越高,变化越大。

具体表现取决于模型和生成策略的实现。

别把 temperature 当成通用的"创意滑块"——它影响的是 token 采样方式,而非模型的智能程度。

接入参数

你的生成函数可能变成这样:

def generate(prompt, temperature):
    return model.generate(
        prompt,
        temperature=temperature
    )

然后:

button.click(
    fn=generate,
    inputs=[prompt, temperature],
    outputs=output
)

最大 Token 数

你还可以暴露一个最大输出长度的选项。

max_tokens = gr.Slider(
    minimum=50,
    maximum=2000,
    value=500,
    step=50,
    label="Maximum Output Length"
)

然后:

def generate(prompt, temperature, max_tokens):
    return model.generate(
        prompt,
        temperature=temperature,
        max_tokens=max_tokens
    )

具体参数名取决于你使用的模型库。

Prompt 模板

有时候不应该让用户去写完整的 prompt。

更好的做法是由应用来构建 prompt。

例如:

def build_prompt(topic, tone):
    return (
        f"Write a {tone.lower()} explanation "
        f"of {topic} for a beginner."
    )

然后把生成的 prompt 发给模型。

这样非技术用户使用起来会更容易。

示例:文章生成器

import gradio as gr

def generate_article(topic, tone, length):
    prompt = (
        f"Write an article about {topic}. "
        f"Use a {tone.lower()} tone. "
        f"Target approximately {length} words."
    )

    return f"Model output for:\n\n{prompt}"

with gr.Blocks() as demo:
    gr.Markdown("# AI Article Generator")

    topic = gr.Textbox(
        label="Topic"
    )

    tone = gr.Dropdown(
        choices=[
            "Professional",
            "Friendly",
            "Academic",
            "Casual"
        ],
        value="Friendly",
        label="Tone"
    )

    length = gr.Slider(
        minimum=100,
        maximum=3000,
        value=800,
        step=100,
        label="Target Length"
    )

    button = gr.Button(
        "Generate Article",
        variant="primary"
    )

    output = gr.Textbox(
        label="Article",
        lines=20
    )

    button.click(
        fn=generate_article,
        inputs=[topic, tone, length],
        outputs=output
    )

demo.launch()


准备好后,把占位输出替换为真实的模型调用。

流式生成

长文本生成往往需要一定时间。

不必等全部生成完毕,模型有时可以逐步流式输出部分结果。

概念上:

def generate(prompt):
    for chunk in model_stream(prompt):
        yield chunk

界面可以渐进式更新,从而显著提升感知上的响应速度。

处理空提示词

始终做输入校验。

if not prompt.strip():
    return "Please enter a prompt."

也可以设置长度上限。

if len(prompt) > 5000:
    return "Your prompt is too long."

生成文本并不天然正确

这对教育和专业场景尤其重要。

模型可能产生:

  • 事实性错误

  • 过时信息

  • 虚构的引用

  • 误导性解释

界面再精致,也不能让模型输出变得可靠。

如果你的应用面向高风险场景,可能需要额外的校验和人工审核。

动手试试

构建一个 AI 内容生成器,包含以下参数:

  • 主题

  • 目标受众

  • 语气

  • 输出长度

  • 可选示例

返回生成的结果。

如果暂时没有可用的模型,可以先用占位函数实现完整界面,之后再接入真实模型。

要点总结

  • 文本生成应用通常由提示词、模型和输出三部分组成。

  • 生成参数可以通过 Gradio 控件暴露给用户。

  • 提示词模板可以降低用户的使用门槛。

  • 流式输出能提升感知上的响应速度。

  • 发送提示词前先做校验。

  • 不应默认将生成文本视为事实或权威内容。

评论 (0)