第8章:生成式AI
生成式AI(Generative AI)是当前人工智能领域最热门的技术方向之一。从ChatGPT到Midjourney,生成式AI正在深刻改变内容创作的方式。本章将全面介绍文本生成、图像生成、多模态模型和代码生成等核心技术。
8.1 文本生成
文本生成是生成式AI最成熟的应用领域。基于大语言模型的文本生成系统可以完成写作、翻译、摘要、对话等多种任务。
8.1.1 主流文本生成模型对比
以下是当前主流的文本生成模型及其特点:
| 模型 | 上下文长度 | 主要优势 | 适用场景 |
|---|---|---|---|
| GPT-4o | 128K tokens | 多模态、速度快、性价比高 | 通用对话、内容创作 |
| GPT-4 Turbo | 128K tokens | 推理能力强、知识更新 | 复杂推理、长文档分析 |
| Claude 3.5 Sonnet | 200K tokens | 长文本、代码能力强 | 代码生成、长文档处理 |
| Claude 3 Opus | 200K tokens | 最强推理、创意写作 | 高难度任务、创作 |
| 文心一言4.0 | 8K tokens | 中文优化、本土知识 | 中文场景、国内业务 |
| 通义千问Max | 32K tokens | 中文理解、数学推理 | 教育、数学问题 |
| Gemini 1.5 Pro | 1M tokens | 超长上下文、多模态 | 视频分析、大规模文档 |
8.1.2 API调用示例
下面介绍如何使用主流模型的API进行文本生成:
OpenAI GPT-4 API调用(Python)
import openai
# 设置API密钥
openai.api_key = "your-api-key"
# 调用GPT-4进行对话
response = openai.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一位专业的技术写作助手。"},
{"role": "user", "content": "请帮我写一篇关于人工智能发展历程的短文,约500字。"}
],
temperature=0.7, # 创造性程度:0-2,越高越随机
max_tokens=1000, # 最大输出token数
top_p=0.9 # 核采样参数
)
print(response.choices[0].message.content)
Claude API调用示例
import anthropic
client = anthropic.Anthropic(api_key="your-api-key")
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1000,
temperature=0.7,
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "请分析这段代码的潜在问题:\n\ndef divide(a, b):\n return a / b"
}
]
}
]
)
print(message.content[0].text)
通义千问API调用示例
import dashscope
# 设置API密钥
dashscope.api_key = "your-api-key"
# 调用通义千问
response = dashscope.Generation.call(
model="qwen-max",
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "请用一句话解释什么是机器学习。"}
],
result_format='message'
)
print(response.output.choices[0].message.content)
API参数调优指南:
- temperature:控制随机性,0.0为确定性输出,0.7-1.0适合创意任务
- max_tokens:限制输出长度,避免生成过长内容
- top_p:核采样,0.9-1.0适合大多数场景
- presence_penalty:减少重复,0-2之间,创意写作可设为0.6
- frequency_penalty:降低高频词概率,对话场景可设为0.5
8.2 图像生成
图像生成技术近年来取得了突破性进展,扩散模型(Diffusion Models)已成为当前主流的图像生成技术路线。
8.2.1 扩散模型原理
扩散模型的核心思想是通过逐步去噪的过程生成图像:
扩散模型工作原理:
- 前向扩散:逐步向原始图像添加高斯噪声,直到图像完全变成噪声
- 反向去噪:训练神经网络学习逆转这个过程,从噪声逐步恢复清晰图像
- 条件生成:通过文本提示(Text Prompt)引导生成特定内容的图像
扩散模型的关键技术组件:
- U-Net架构:用于预测噪声的神经网络结构
- 注意力机制:连接文本编码和图像生成过程
- VAE(变分自编码器):在潜空间(Latent Space)进行高效生成
- 调度器(Scheduler):控制去噪步数和强度
8.2.2 主流图像生成工具对比
| 工具 | 类型 | 特点 | 使用门槛 |
|---|---|---|---|
| Stable Diffusion | 开源模型 | 可本地部署、高度定制、社区生态丰富 | 较高(需配置环境) |
| DALL-E 3 | 商业API | 文本理解准确、图像质量高、遵循提示词 | 低(通过API/ChatGPT) |
| Midjourney | 商业服务 | 艺术风格独特、美学表现力强 | 中(Discord操作) |
| Adobe Firefly | 商业服务 | 与Adobe生态集成、商用安全 | 低 |
| 文心一格 | 国内服务 | 中文提示词优化、本土化风格 | 低 |
| 通义万相 | 国内服务 | 中文理解好、多种艺术风格 | 低 |
8.2.3 API调用示例
DALL-E 3图像生成(Python)
import openai
client = openai.OpenAI(api_key="your-api-key")
response = client.images.generate(
model="dall-e-3",
prompt="一只穿着宇航服的橘猫在月球表面行走,背景是蓝色的地球,
科幻风格,高清细节,电影级光影",
size="1024x1024",
quality="hd", # 标准或高清
n=1, # 生成数量
style="vivid" # vivid(生动)或natural(自然)
)
# 获取生成的图片URL
image_url = response.data[0].url
print(f"图片链接: {image_url}")
print(f"修正后的提示词: {response.data[0].revised_prompt}")
Stable Diffusion本地推理(Python)
from diffusers import StableDiffusionPipeline
import torch
# 加载模型
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
)
pipe = pipe.to("cuda") # 使用GPU
# 生成图像
prompt = "a beautiful landscape with mountains and lake, sunset,
digital art, highly detailed"
image = pipe(
prompt,
num_inference_steps=50, # 推理步数
guidance_scale=7.5 # 提示词遵循程度
).images[0]
# 保存图像
image.save("generated_image.png")
8.2.4 提示词技巧
高质量的提示词(Prompt)是获得满意图像的关键。以下是提示词编写的最佳实践:
提示词结构公式:
[主体描述] + [环境/背景] + [艺术风格] + [光照/氛围] + [画质修饰词]
提示词示例对比
【简单提示词】
a cat
【优化后的提示词】
一只毛茸茸的英国短毛猫(主体),
坐在窗台上(场景),
午后阳光透过窗户洒进来(光照),
温暖的日系摄影风格(风格),
8k超高清,柔和虚化背景(画质),
--ar 16:9(宽高比,Midjourney专用)
提示词优化技巧:
- 具体描述:用详细的形容词描述主体特征
- 参考艺术家:提及特定艺术家风格(如"宫崎骏风格")
- 使用专业术语:如"景深"、"散景"、"逆光"等摄影术语
- 负面提示词:使用negative prompt排除不想要的元素
- 参数调节:调整CFG Scale(提示词强度)和步数
8.3 多模态模型
多模态模型能够同时处理和理解多种类型的数据(文本、图像、音频、视频),是AI向通用智能发展的重要方向。
8.3.1 主流多模态模型介绍
代表性多模态模型:
- CLIP:OpenAI的视觉-语言预训练模型,连接图像和文本语义空间
- GPT-4V/GPT-4o:具备强大的图像理解和分析能力
- Claude 3系列:支持图像输入,擅长视觉问答和文档分析
- Gemini:原生多模态架构,支持文本、图像、视频、音频
- LLaVA:开源视觉语言助手,结合LLaMA和CLIP
- Qwen-VL:阿里巴巴开源的视觉语言模型
8.3.2 视觉问答与图像理解
多模态模型的核心能力之一是视觉问答(Visual Question Answering),即根据图像内容回答文本问题。
GPT-4V视觉分析示例
import openai
import base64
# 将图片转为base64编码
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
base64_image = encode_image("chart.png")
client = openai.OpenAI(api_key="your-api-key")
response = client.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "请分析这张图表,告诉我:\n1. 图表展示什么数据\n2. 数据的主要趋势\n3. 有哪些关键数据点"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/png;base64,{base64_image}"
}
}
]
}
],
max_tokens=500
)
print(response.choices[0].message.content)
8.3.3 多模态应用场景
| 应用场景 | 描述 | 典型模型 |
|---|---|---|
| 图像描述生成 | 自动生成图片的文字说明 | BLIP、LLaVA |
| 视觉问答 | 根据图片回答问题 | GPT-4V、Gemini |
| OCR+理解 | 识别并理解图片中的文字内容 | PaddleOCR+LLM |
| 视频分析 | 理解视频内容,生成摘要 | Gemini 1.5 Pro |
| 文档理解 | 分析PDF、扫描件等文档 | Claude 3、GPT-4V |
| 图像编辑 | 根据文本指令编辑图片 | InstructPix2Pix |
8.4 代码生成
AI代码生成工具正在 revolutionize 软件开发的方式,从自动补全到完整函数生成,大幅提升开发效率。
8.4.1 主流AI编程工具
| 工具 | 开发商 | 主要功能 | 支持环境 |
|---|---|---|---|
| GitHub Copilot | GitHub/OpenAI | 代码补全、函数生成、注释生成代码 | VS Code、JetBrains等 |
| Cursor | Anysphere | AI原生编辑器、代码聊天、智能重构 | 独立IDE |
| Codeium | Codeium | 免费代码补全、自然语言搜索 | 多IDE支持 |
| Amazon CodeWhisperer | AWS | 代码建议、安全扫描 | VS Code、JetBrains |
| Tabnine | Tabnine | 本地/云端模型、隐私优先 | 多IDE支持 |
| 通义灵码 | 阿里巴巴 | 中文注释理解、代码解释 | VS Code、JetBrains |
8.4.2 代码生成模型
除了商业工具,还有多个专门用于代码生成的大语言模型:
开源代码生成模型:
- CodeT5/CodeT5+:专为代码理解和生成设计的编码器-解码器模型
- CodeLlama:基于LLaMA微调的代码专用模型,支持多种编程语言
- StarCoder:Hugging Face开源的代码生成模型,训练数据透明
- DeepSeek-Coder:深度求索开源,在多个代码任务上表现优秀
- WizardCoder:使用Evolve-Instruct微调的代码模型
8.4.3 API调用示例
使用GPT-4生成代码
import openai
client = openai.OpenAI(api_key="your-api-key")
def generate_code(prompt, language="python"):
response = client.chat.completions.create(
model="gpt-4",
messages=[
{
"role": "system",
"content": f"你是一个专业的{language}程序员。请生成高质量、
带注释的代码,并解释关键逻辑。"
},
{"role": "user", "content": prompt}
],
temperature=0.2 # 代码生成使用较低temperature
)
return response.choices[0].message.content
# 示例:生成代码
prompt = """请用Python编写一个函数,实现以下功能:
- 输入:一个包含嵌套字典和列表的复杂数据结构
- 输出:展平后的字典,键使用点号表示路径
- 要求:处理循环引用,添加类型注解"""
code = generate_code(prompt)
print(code)
使用Hugging Face生成代码
from transformers import AutoTokenizer, AutoModelForCausalLM
# 加载CodeLlama模型
model_name = "codellama/CodeLlama-7b-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# 准备提示词
prompt = '''# 创建一个Python类来实现简单的缓存系统
# 要求:支持设置过期时间,线程安全
class Cache:'''
# 生成代码
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=200,
temperature=0.2,
do_sample=True
)
generated_code = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_code)
8.4.4 AI辅助编程最佳实践
高效使用AI编程工具的建议:
- 明确需求:提供清晰的函数签名、输入输出示例和边界条件
- 逐步迭代:先生成框架,再逐步完善细节
- 代码审查:始终审查AI生成的代码,检查安全性和正确性
- 测试驱动:让AI先生成测试用例,再编写实现代码
- 上下文利用:提供相关代码片段帮助AI理解项目风格
- 文档生成:利用AI自动生成代码注释和文档
AI代码生成的注意事项:
- 安全风险:AI可能生成包含漏洞的代码,特别是SQL注入、XSS等问题
- 版权问题:注意训练数据的许可证兼容性
- 过度依赖:保持对代码的理解,避免成为"提示词工程师"
- 幻觉问题:AI可能生成不存在或错误的API调用
8.5 本章小结
本章全面介绍了生成式AI的核心应用领域:
- 文本生成:了解主流大语言模型的特点,掌握API调用方法
- 图像生成:理解扩散模型原理,熟练运用提示词技巧
- 多模态模型:探索视觉问答等跨模态应用
- 代码生成:善用AI编程工具,遵循最佳实践
展望未来:
生成式AI正在快速演进,未来的发展趋势包括:更高的生成质量、更低的计算成本、更强的多模态融合能力、更好的可控性和一致性,以及更完善的安全机制。建议读者持续关注这一领域的最新进展,不断实践和探索。