Text Generation 智能创作,文本生成的无限可能

文本生成能力

学习目标

完成本节后,你将能够:

  • 理解大模型的文本生成原理和能力边界
  • 掌握知识问答、对话交互和代码生成的关键技术
  • 学会编写高质量的提示词以获得更好的生成效果
  • 能够处理和优化各类生成内容

先修知识

学习本节内容前,你需要了解:

  • Python编程基础
  • API调用和JSON处理
  • 基本的NLP概念
  • HTTP请求和响应

1. 文本生成基础

1.1 生成能力概述

大模型的文本生成能力主要体现在以下方面:

  1. 自然语言生成

    • 文章和故事创作
    • 内容总结和扩写
    • 风格转换和润色
  2. 知识问答

    • 事实性问答
    • 解释性问答
    • 推理性问答
  3. 对话交互

    • 多轮对话管理
    • 角色扮演
    • 任务型对话
  4. 代码生成

    • 功能代码实现
    • 代码补全和优化
    • 注释和文档生成

1.2 工作原理

def generate_text(prompt: str, type: str = "general") -> str:
    """基础文本生成函数
    
    Args:
        prompt: 输入提示词
        type: 生成类型,可选 general/qa/chat/code
        
    Returns:
        生成的文本内容
    """
    try:
        response = openai.ChatCompletion.create(
            model="gpt-4o",  # 使用最新的GPT-4o模型
            messages=[
                {"role": "system", "content": get_system_prompt(type)},
                {"role": "user", "content": prompt}
            ],
            temperature=0.7,  # 添加温度参数控制创造性
            max_tokens=2000   # 设置合适的最大token数
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"生成失败:{str(e)}"

def get_system_prompt(type: str) -> str:
    """获取不同类型的系统提示词"""
    prompts = {
        "general": "你是一个专业的写作助手,善于创作各类文本内容。",
        "qa": "你是一个知识渊博的专家,善于回答各类问题。",
        "chat": "你是一个友好的对话助手,善于与用户进行自然交流。",
        "code": "你是一个专业的程序员,善于编写高质量的代码。"
    }
    return prompts.get(type, prompts["general"])

2. 知识问答实现

2.1 基础问答

class QASystem:
    def __init__(self, knowledge_base: dict = None):
        self.knowledge_base = knowledge_base or {}
    
    def answer_question(self, question: str) -> str:
        """回答用户问题"""
        # 分析问题类型
        q_type = self._analyze_question_type(question)
        
        # 根据问题类型生成答案
        if q_type == "factual":
            return self._answer_factual(question)
        elif q_type == "explanation":
            return self._answer_explanation(question)
        else:
            return self._answer_reasoning(question)
    
    def _analyze_question_type(self, question: str) -> str:
        """分析问题类型"""
        # 实现问题类型识别逻辑
        pass

2.2 知识库增强

class EnhancedQASystem(QASystem):
    def __init__(self, knowledge_base: dict = None, embeddings_model: str = "text-embedding-3-large"):  # 更新为最新的embedding模型
        super().__init__(knowledge_base)
        self.embeddings_model = embeddings_model
        self.embeddings_cache = {}
    
    def add_knowledge(self, content: str, source: str):
        """添加新知识到知识库"""
        # 生成内容的嵌入向量
        embedding = self._get_embedding(content)
        
        # 存储知识和对应的向量
        self.knowledge_base[source] = {
            "content": content,
            "embedding": embedding
        }
    
    def _get_embedding(self, text: str) -> list:
        """获取文本的嵌入向量"""
        if text in self.embeddings_cache:
            return self.embeddings_cache[text]
        
        response = openai.Embedding.create(
            model=self.embeddings_model,
            input=text,
            dimensions=3072  # 使用最新模型的默认维度
        )
        embedding = response.data[0].embedding
        self.embeddings_cache[text] = embedding
        return embedding

3. 对话系统实现

3.1 对话管理

class DialogueManager:
    def __init__(self, max_history: int = 10):
        self.history = []
        self.max_history = max_history
    
    def add_exchange(self, user_input: str, bot_response: str):
        """添加一轮对话"""
        self.history.append({
            "user": user_input,
            "bot": bot_response,
            "timestamp": time.time()
        })
        
        # 维护对话历史长度
        if len(self.history) > self.max_history:
            self.history.pop(0)
    
    def get_context(self) -> list:
        """获取对话上下文"""
        return [
            {"role": "user" if i % 2 == 0 else "assistant", 
             "content": msg["user"] if i % 2 == 0 else msg["bot"]}
            for msg in self.history
            for i in range(2)
        ]

3.2 个性化对话

class PersonalizedChatBot:
    def __init__(self, personality: str, knowledge_base: dict):
        self.personality = personality
        self.knowledge_base = knowledge_base
        self.dialogue_manager = DialogueManager()
    
    def chat(self, user_input: str) -> str:
        """处理用户输入并生成回复"""
        # 获取对话上下文
        context = self.dialogue_manager.get_context()
        
        # 生成回复
        response = self._generate_response(user_input, context)
        
        # 更新对话历史
        self.dialogue_manager.add_exchange(user_input, response)
        return response
    
    def _generate_response(self, user_input: str, context: list) -> str:
        """生成个性化回复"""
        system_prompt = f"""
        你是一个{self.personality}的AI助手。
        请基于以下知识回答:{json.dumps(self.knowledge_base, ensure_ascii=False)}
        """
        
        messages = [
            {"role": "system", "content": system_prompt},
            *context,
            {"role": "user", "content": user_input}
        ]
        
        response = openai.ChatCompletion.create(
            model="gpt-4o",  # 更新为最新模型
            messages=messages,
            temperature=0.8,  # 适当提高温度以增加对话的活力
            max_tokens=1000   # 设置合适的最大token数
        )
        return response.choices[0].message.content

4. 代码生成实现

4.1 基础代码生成

class CodeGenerator:
    def __init__(self):
        self.language_specs = {
            "python": {
                "indent": 4,
                "comment": "#",
                "docstring": '"""'
            },
            "javascript": {
                "indent": 2,
                "comment": "//",
                "docstring": "/**"
            }
        }
    
    def generate_code(self, description: str, language: str = "python") -> str:
        """根据描述生成代码"""
        prompt = f"""
        请使用{language}实现以下功能:
        {description}
        
        要求:
        1. 代码规范,遵循{language}的最佳实践
        2. 包含完整的错误处理
        3. 添加清晰的注释和文档
        4. 考虑代码的可维护性和扩展性
        """
        
        response = openai.ChatCompletion.create(
            model="gpt-4o",  # 更新为最新模型
            messages=[
                {"role": "system", "content": "你是一个专业的程序员,擅长编写高质量代码。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.2,  # 降低温度以保证代码生成的稳定性
            max_tokens=4000   # 设置足够大的token数以容纳完整代码
        )
        return response.choices[0].message.content

    def complete_code(self, partial_code: str, description: str = "") -> str:
        """补全部分代码"""
        prompt = f"""
        请补全以下代码:
        {partial_code}
        
        补充说明:{description}
        
        要求:
        1. 保持代码风格一致
        2. 添加必要的错误处理
        3. 确保代码可以正常运行
        """
        
        response = openai.ChatCompletion.create(
            model="gpt-4o",  # 更新为最新模型
            messages=[
                {"role": "system", "content": "你是一个代码补全专家。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3,  # 保持较低温度以确保优化的可靠性
            max_tokens=4000   # 设置足够的token数
        )
        return response.choices[0].message.content

    def generate_test(self, code: str) -> str:
        """生成测试代码"""
        prompt = f"""
        请为以下代码生成单元测试:
        {code}
        
        要求:
        1. 使用标准测试框架
        2. 覆盖主要功能点
        3. 包含正常和异常情况
        4. 添加测试说明文档
        """
        
        response = openai.ChatCompletion.create(
            model="gpt-4o",  # 更新为最新模型
            messages=[
                {"role": "system", "content": "你是一个测试开发专家。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3,  # 保持较低温度以确保优化的可靠性
            max_tokens=4000   # 设置足够的token数
        )
        return response.choices[0].message.content

4.2 代码优化与重构

class CodeOptimizer:
    def __init__(self):
        self.optimization_types = {
            "performance": "优化性能和资源使用",
            "readability": "提高代码可读性",
            "security": "加强安全性",
            "maintainability": "提升可维护性"
        }
    
    def optimize_code(self, code: str, optimization_type: str = "all") -> str:
        """优化代码"""
        prompt = f"""
        请优化以下代码:
        {code}
        
        优化类型:{self.optimization_types.get(optimization_type, "全面优化")}
        
        优化要求:
        1. 保持功能不变
        2. 提供优化说明
        3. 对比优化前后的差异
        4. 考虑潜在的影响
        """
        
        response = openai.ChatCompletion.create(
            model="gpt-4o",  # 更新为最新模型
            messages=[
                {"role": "system", "content": "你是一个代码优化专家。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3,  # 保持较低温度以确保优化的可靠性
            max_tokens=4000   # 设置足够的token数
        )
        return response.choices[0].message.content
    
    def refactor_code(self, code: str, goal: str) -> str:
        """重构代码"""
        prompt = f"""
        请重构以下代码:
        {code}
        
        重构目标:{goal}
        
        要求:
        1. 应用适当的设计模式
        2. 提高代码质量
        3. 保持向后兼容
        4. 提供重构说明
        """
        
        response = openai.ChatCompletion.create(
            model="gpt-4o",  # 更新为最新模型
            messages=[
                {"role": "system", "content": "你是一个代码重构专家。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3,  # 保持较低温度以确保优化的可靠性
            max_tokens=4000   # 设置足够的token数
        )
        return response.choices[0].message.content

4.3 文档生成

class DocGenerator:
    def __init__(self):
        self.doc_types = {
            "api": "API文档",
            "usage": "使用说明",
            "design": "设计文档",
            "deployment": "部署文档"
        }
    
    def generate_docs(self, code: str, doc_type: str = "api") -> str:
        """生成代码文档"""
        prompt = f"""
        请为以下代码生成{self.doc_types.get(doc_type, "API")}文档:
        {code}
        
        要求:
        1. 使用标准文档格式
        2. 包含必要的示例
        3. 说明主要功能点
        4. 注明使用注意事项
        """
        
        response = openai.ChatCompletion.create(
            model="gpt-4o",  # 更新为最新模型
            messages=[
                {"role": "system", "content": "你是一个技术文档专家。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.3,  # 保持较低温度以确保优化的可靠性
            max_tokens=4000   # 设置足够的token数
        )
        return response.choices[0].message.content

4.4 实战示例

4.4.1 生成REST API

# 示例:生成一个简单的REST API
api_description = """
创建一个用户管理API,包含以下功能:
1. 用户注册
2. 用户登录
3. 获取用户信息
4. 更新用户信息
5. 删除用户
"""

code_generator = CodeGenerator()
api_code = code_generator.generate_code(api_description, "python")
print(api_code)

4.4.2 优化数据处理代码

# 示例:优化数据处理代码
original_code = """
def process_data(data):
    result = []
    for item in data:
        if item > 0:
            result.append(item * 2)
    return result
"""

optimizer = CodeOptimizer()
optimized_code = optimizer.optimize_code(original_code, "performance")
print(optimized_code)

4.4.3 生成单元测试

# 示例:为函数生成单元测试
function_code = """
def calculate_discount(price: float, discount_rate: float) -> float:
    if not (0 <= discount_rate <= 1):
        raise ValueError("Discount rate must be between 0 and 1")
    return price * (1 - discount_rate)
"""

code_generator = CodeGenerator()
test_code = code_generator.generate_test(function_code)
print(test_code)

4.5 代码生成最佳实践

  1. 提示词工程

    • 提供清晰的功能描述
    • 指定具体的技术要求
    • 包含示例和约束条件
    • 说明性能和安全要求
  2. 代码质量控制

    • 生成后进行代码审查
    • 运行自动化测试
    • 检查安全漏洞
    • 验证代码规范
  3. 持续优化

    • 收集用户反馈
    • 优化生成模板
    • 更新最佳实践
    • 跟踪生成效果
  4. 注意事项

    • 检查生成代码的许可证
    • 保护敏感信息
    • 考虑向后兼容
    • 注意性能影响

5. 最佳实践

5.1 模型选择指南

5.1.1 大语言模型选择

  1. GPT-4o

    • OpenAI最新的优化版大语言模型
    • 适用场景:
      • 复杂的代码生成和优化
      • 多轮对话和推理
      • 长文档生成和总结
    • 特点:
      • 支持128k tokens的上下文窗口
      • 优化的代码理解和生成能力
      • 更新的知识库
      • 更快的响应速度
    • 成本考虑:
      • 输入:$0.01/1K tokens
      • 输出:$0.03/1K tokens
  2. GPT-3.5 Turbo

    • 性价比较高的备选模型
    • 适用场景:
      • 简单的文本生成
      • 基础的对话交互
      • 初步的代码生成
    • 特点:
      • 支持16k tokens的上下文窗口
      • 响应速度快
      • 成本较低
    • 成本考虑:
      • 输入:$0.0005/1K tokens
      • 输出:$0.0015/1K tokens

5.1.2 文本向量模型选择

  1. text-embedding-3-large
    • OpenAI最新的文本向量模型
    • 特点:
      • 3072维向量输出
      • 更强的语义理解能力
      • 支持多语言
    • 适用场景:
      • 高精度的语义搜索
      • 文档相似度计算
      • 知识库检索
    • 成本:$0.00013/1K tokens

5.2 参数优化指南

5.2.1 temperature参数

根据不同任务类型设置合适的temperature值:

  • 代码生成:0.2-0.3(保证稳定性)
  • 代码优化:0.3-0.4(允许适度创新)
  • 文档生成:0.5-0.7(保持格式规范)
  • 对话交互:0.7-0.8(增加对话活力)

5.2.2 max_tokens参数

根据输出内容类型设置合适的max_tokens值:

  • 短代码片段:1000-2000
  • 完整程序:3000-4000
  • 技术文档:2000-3000
  • 对话响应:800-1500

5.3 成本优化策略

  1. 模型选择优化

    • 简单任务使用GPT-3.5 Turbo
    • 复杂任务使用GPT-4o
    • 批量任务使用异步处理
  2. Token使用优化

    • 精简提示词
    • 合理设置max_tokens
    • 使用token计数工具
    • 缓存常用结果
  3. 请求频率优化

    • 实现请求限速
    • 使用结果缓存
    • 批量处理请求
    • 错误重试机制

练习与作业

  1. 基础练习:实现一个简单的问答系统
  2. 提高练习:开发一个多轮对话机器人
  3. 挑战练习:创建一个代码生成和优化工具

常见问题

Q1: 如何提高生成内容的质量? A1: 通过优化提示词、增加约束条件、实施质量控制等方式来提高生成质量。

Q2: 如何处理生成内容中的错误? A2: 建立完善的验证机制,使用规则过滤,并收集反馈持续优化。

小测验

  1. 文本生成的核心组件有哪些?
  2. 如何实现有效的对话管理?
  3. 代码生成需要注意哪些关键点?

扩展阅读