ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

从AI写诗到工程化文本生成:解析“赛博诗人”项目核心原理与实践

2026/9/3 23:57:47 拓冰建站 浏览量
从AI写诗到工程化文本生成:解析“赛博诗人”项目核心原理与实践 最近在AI圈里一个名为“赛博诗人”的项目悄然走红。它不像那些动辄千亿参数的大模型而是聚焦于一个非常具体且富有诗意的任务将一句现代白话文自动转化为符合古典诗词格律的优美诗句。比如输入“深夜穿着黑衣服走过小楼霜打湿了袖子都没察觉”它能生成“玄裳夜渡小楼阴侵霜遍袖浑无觉”这样的七言诗句。这听起来像是一个有趣的文字游戏但对于开发者尤其是对自然语言处理NLP、大模型应用和创意AI感兴趣的朋友来说它的价值远不止于此。很多人尝试过用GPT直接写诗但结果往往在平仄、对仗、意象连贯性上差强人意。“赛博诗人”项目的核心价值在于它将现代语言到古典诗词的转换拆解成了一个可工程化、可优化、可评测的AI pipeline。这背后涉及语义理解、风格迁移、格律约束、文本生成等多个NLP子任务的协同。如果你正在思考如何让大模型在特定领域如诗词、法律、医疗的输出更专业、更可控如何将复杂的创意生成任务拆解为可训练的模块化流程除了调用API如何动手构建一个垂直领域的AIGC应用那么这个项目就是一个绝佳的“麻雀”值得我们深入解剖。本文将带你从零开始理解“赛博诗人”的核心原理并尝试用代码复现其核心流程。你会发现它不仅是AI写诗更是一套针对结构化、高质量文本生成的工程化思维。1. 项目要解决的核心问题从“能写”到“写好”为什么通用大模型写不好严格的古典诗词问题出在约束上。古典诗词有平仄、押韵、对仗、字数、意象体系等多重硬性约束。通用大模型在海量数据上学到的是概率分布它擅长生成“像诗”的文本但很难精确满足所有约束常常顾此失彼。“赛博诗人”项目要解决的正是“在多重强约束下生成高质量、意境吻合的文本”这一核心问题。它不是一个端到端的黑箱模型而是一个分步处理的系统深度语义解析理解输入白话文的场景、主体、动作、情感和核心意象。古典意象映射将现代词汇如“黑衣服”、“小楼”、“霜”映射到古诗文中常用的典雅词汇如“玄裳”、“楼阴”、“侵霜”。格律规划与填词根据目标诗体如七绝规划每一句的平仄、押韵位置然后在符合格律的框架下填入经过映射的词汇形成诗句。连贯性与优化确保生成的单句之间意境连贯、整体统一并对用词进行微调以提升文采。这个过程本质上是一个“规划-检索-生成-优化”的流水线。它把创意生成的模糊问题变成了多个可定义、可优化的子问题。这对于想构建专业领域AIGC应用的开发者来说是极具启发性的方法论。2. 核心概念与工作原理拆解在动手之前我们需要理解几个关键概念和整个系统的工作流。2.1 关键概念平仄古汉语的声调分类平声为“平”上、去、入声为“仄”。诗词格律的基本规则就是平仄交替。韵脚诗句末尾押韵的字。需要从同一韵部中选取。意象诗词中承载主观情感的客观物象。如“月”常代表思乡“柳”常代表离别。系统需要建立现代事物到古典意象的映射库。风格迁移将一种风格现代白话的文本转换为另一种风格古典诗词的文本同时保留核心语义。2.2 “赛博诗人”系统工作流推测基于项目描述我们可以推断其核心流程如下图所示我们将用文字和后续代码来体现这一流程[输入现代文] - (语义解析模块) - [结构化语义表示] | v (古典词汇映射与意象检索模块) | v [目标诗体格律模板] - (格律规划模块) - [规划诗句框架] | v (约束下的文本生成模块) | v [生成候选诗句] - (连贯性评分与优化模块) - [最终输出诗句]流程详解语义解析使用NLP工具如NLTK、SpaCy或基于BERT的模型对输入文本进行分词、词性标注、命名实体识别和依存句法分析提取出“谁在何时何地做了什么有何情感”等要素。词汇映射与意象检索根据解析出的要素从一个预构建的“现代-古典”词汇映射表或知识库中检索出对应的典雅词汇和常见意象组合。格律规划根据用户选择或默认的诗体如七绝调用对应的格律模板如平平仄仄平平仄仄仄平平仄仄平。仄仄平平平仄仄平平仄仄仄平平。确定每一句的平仄格式和押韵位置。约束生成这是最核心的一步。在给定格律、可用词汇库和语义框架下生成符合要求的诗句。这可能采用受限文本生成技术例如使用Causal Language Model如GPT-2但在解码阶段如beam search加入平仄和押韵的硬约束进行过滤。优化与评分对生成的多个候选诗句从“意境吻合度”、“词汇典雅度”、“句间连贯性”等多个维度进行评分选择最优结果或进行微调如替换同义词以更符合平仄。3. 环境准备与工具选型我们将使用Python作为实现语言因为它拥有最丰富的NLP和AI库。以下是构建一个简化版“赛博诗人”所需的环境和工具。3.1 基础环境Python版本: 3.8 或以上。包管理: 使用pip和virtualenv或conda创建隔离环境。3.2 核心依赖库我们将分模块选择工具语义解析spaCy工业级NLP库或HanLP中文NLP工具包。这里选用spaCy并配合其中文模型。文本生成transformersHugging Face库用于加载轻量级的中文预训练生成模型如GPT2-Chinese或CPM。格律处理需要自定义规则。我们可以使用pypinyin库将汉字转换为拼音并判断平仄现代汉语拼音的平仄对应关系为一声、二声为“平”三声、四声为“仄”。注意古音与现代音的差异本项目简化处理。词汇映射我们需要自建一个小型的“现代-古典”映射词典可以存储为JSON文件。流程控制与评分使用标准库即可。3.3 安装命令在终端中执行以下命令来搭建环境# 1. 创建并激活虚拟环境以venv为例 python -m venv cyberpoet_env source cyberpoet_env/bin/activate # Linux/macOS # cyberpoet_env\Scripts\activate # Windows # 2. 安装核心依赖 pip install spacy transformers pypinyin # 3. 下载spaCy中文模型 python -m spacy download zh_core_web_sm # 4. 安装用于下载模型的可选工具 pip install torch # 根据你的CUDA环境选择安装命令CPU版本通常为 pip install torch torchvision torchaudio4. 分步实现构建你的简易赛博诗人我们不会一次性实现一个完整系统而是分模块构建最终串联起来。这能让你更清晰地理解每个环节。4.1 步骤一语义解析模块这个模块负责从现代文中提取关键信息。# 文件semantic_parser.py import spacy class SemanticParser: def __init__(self): # 加载spaCy的中文模型 self.nlp spacy.load(zh_core_web_sm) def parse(self, text): 解析输入文本返回结构化的信息字典。 doc self.nlp(text) result { tokens: [], # 分词 pos_tags: [], # 词性 entities: [], # 命名实体 actions: [], # 动词/动作 (简化提取) objects: [], # 名词/物体 (简化提取) locations: [], # 地点 time: [], # 时间 sentiment: neutral # 情感 (简化可用情感分析模型加强) } for token in doc: result[tokens].append(token.text) result[pos_tags].append((token.text, token.pos_)) # 提取动词和名词 if token.pos_ VERB: result[actions].append(token.text) elif token.pos_ NOUN: result[objects].append(token.text) for ent in doc.ents: result[entities].append((ent.text, ent.label_)) if ent.label_ GPE or ent.label_ LOC: # 地理政治实体/地点 result[locations].append(ent.text) elif ent.label_ TIME or ent.label_ DATE: result[time].append(ent.text) # 简单情感判断示例实际应用需更复杂的模型 if any(word in text for word in [悲伤, 孤独, 寒冷]): result[sentiment] melancholy elif any(word in text for word in [喜悦, 快乐, 温暖]): result[sentiment] joyous return result # 测试代码 if __name__ __main__: parser SemanticParser() test_text 深夜一个人穿着黑色衣服独自走过小楼边冰霜不知不觉浸湿了衣袖。 parsed parser.parse(test_text) print(解析结果) import pprint pprint.pprint(parsed)运行与输出 运行python semantic_parser.py你会得到一个结构化的字典包含了分词、词性、实体以及我们简单提取的动作、物体、地点和情感标签。这是后续所有处理的“原材料”。4.2 步骤二古典词汇映射与意象库我们需要一个将现代词汇映射到古典雅词的字典以及一个包含常见意象的库。// 文件classical_resources.json { vocab_mapping: { 深夜: [中宵, 夜分, 玄夜], 黑色衣服: [玄裳, 缁衣, 墨袍], 一个人: [孤身, 独行, 子然], 走: [渡, 步, 行, 徙], 小楼: [小楼, 朱阁, 画楼], 边: [阴, 畔, 侧, 隅], 冰霜: [霜, 严霜, 清霜], 不知不觉: [浑无觉, 竟不知, 悄无声], 浸湿: [侵, 沾, 润, 透], 衣袖: [袖, 衫袖, 罗袖] }, common_imagery: { melancholy: [孤灯, 残月, 寒鸦, 西风, 落叶, 秋雨], joyous: [明月, 春风, 桃花, 流水, 莺啼, 芳草] }, poetic_function_words: [犹, 自, 空, 却, 何, 那堪, 莫道] }然后在Python中加载和使用这个资源。# 文件vocab_mapper.py import json class VocabMapper: def __init__(self, resource_pathclassical_resources.json): with open(resource_path, r, encodingutf-8) as f: self.resources json.load(f) self.mapping self.resources.get(vocab_mapping, {}) self.imagery self.resources.get(common_imagery, {}) self.function_words self.resources.get(poetic_function_words, []) def map_word(self, modern_word): 映射单个现代词到古典词列表 # 优先精确匹配 if modern_word in self.mapping: return self.mapping[modern_word] # 否则尝试模糊匹配例如包含关系这里简化处理返回原词 return [modern_word] def get_imagery_by_mood(self, mood): 根据情感获取相关意象词 return self.imagery.get(mood, []) # 测试 if __name__ __main__: mapper VocabMapper() print(映射‘深夜’, mapper.map_word(深夜)) print(忧郁情感的意象, mapper.get_imagery_by_mood(melancholy))4.3 步骤三格律处理与平仄判断我们使用pypinyin获取拼音和声调并定义简化的平仄规则。# 文件metrical_processor.py from pypinyin import pinyin, Style class MetricalProcessor: staticmethod def get_tone_level(char): 获取单个汉字的声调12345轻声为0并判断平仄。 简化规则一声(1)、二声(2)为‘平’三声(3)、四声(4)为‘仄’。 try: # pinyin返回列表如 [[xuán]] pinyin_list pinyin(char, styleStyle.TONE3, neutral_tone_with_fiveTrue) tone_str pinyin_list[0][0] if not tone_str[-1].isdigit(): # 无声调 return 0, 仄 # 轻声暂归为仄 tone_num int(tone_str[-1]) # TONE3 风格1,2,3,4,5(轻声) if tone_num in [1, 2]: return tone_num, 平 else: # 3,4,5 return tone_num, 仄 except Exception as e: print(f处理字符{char}时出错{e}) return 0, 仄 staticmethod def check_pattern(line, pattern): 检查一行诗是否符合给定的平仄模式。 line: 诗句字符串如‘玄裳夜渡小楼阴’ pattern: 平仄模式字符串如‘平平仄仄平平仄’其中‘中’表示可平可仄 if len(line) ! len(pattern): return False, f字数不符诗句{len(line)}字模式{len(pattern)}字 for i, char in enumerate(line): _, actual_tone MetricalProcessor.get_tone_level(char) expected_tone pattern[i] if expected_tone ! 中 and actual_tone ! expected_tone: return False, f第{i1}字‘{char}’应为{expected_tone}实为{actual_tone} return True, 符合格律 # 测试 if __name__ __main__: processor MetricalProcessor() test_line 玄裳夜渡小楼阴 print(f‘{test_line}’的平仄分析) for c in test_line: tone_num, tone processor.get_tone_level(c) print(f {c}: 声调{tone_num}, 平仄{tone}) pattern 平平仄仄平平仄 is_ok, msg processor.check_pattern(test_line, pattern) print(f格律检查模式{pattern}: {is_ok}, {msg})4.4 步骤四约束下的文本生成核心这是最具挑战的部分。我们将采用一个“检索-规划-微调”的简化策略而非完整的模型生成以降低复杂度并保证可控性。思路基于语义解析的结果从映射库中为每个关键元素动作、物体、地点选取一个古典词。根据目标诗体如七绝的格律模板规划出每句的“词槽”位置如第1、2字为名词主语第3、4字为动词谓语等这是一个非常简化的语法模板。将选取的古典词填入对应的“词槽”。使用预训练语言模型如GPT-2对填好的句子进行“润色”或“微调”使其更通顺但通过约束解码确保不破坏格律。由于完整的约束生成模型训练成本高我们这里演示一个基于规则和模板的生成器并结合一个简单的语言模型进行补全。# 文件constrained_generator.py import random from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM class ConstrainedGenerator: def __init__(self, mapper, metrical_processor): self.mapper mapper self.metrical_processor metrical_processor # 加载一个轻量级的中文生成模型进行润色示例需提前下载模型 # 注意以下模型名称可能需要根据实际情况调整且首次运行需下载 self.model_name uer/gpt2-chinese-cluecorpussmall try: self.tokenizer AutoTokenizer.from_pretrained(self.model_name) self.model AutoModelForCausalLM.from_pretrained(self.model_name) self.generator pipeline(text-generation, modelself.model, tokenizerself.tokenizer) self.use_lm True print(f成功加载语言模型: {self.model_name}) except Exception as e: print(f加载语言模型失败将使用规则生成: {e}) self.use_lm False def generate_line_from_template(self, semantic_info, target_pattern): 根据语义信息和格律模板生成一句诗。 这是一个高度简化的规则示例。 # 1. 获取映射后的词汇 actions semantic_info.get(actions, []) objects semantic_info.get(objects, []) locations semantic_info.get(locations, []) mood semantic_info.get(sentiment, neutral) # 从映射库中随机选取一个候选词实际应更智能如根据平仄选择 action_word random.choice(self.mapper.map_word(actions[0])) if actions else 立 obj_word random.choice(self.mapper.map_word(objects[0])) if objects else 人 loc_word random.choice(self.mapper.map_word(locations[0])) if locations else 处 imagery_pool self.mapper.get_imagery_by_mood(mood) # 2. 简化的七言句模板主语状语谓语宾语/地点 # 模板只是一个示例真实情况复杂得多。 template_slots [【主语】, 【修饰】, 【动作】, 【地点】, 【意象】, 【虚词】, 【结尾】] # 随机填充模板实际应根据格律pattern决定位置 filled [] for slot in template_slots: if slot 【主语】 and obj_word: filled.append(obj_word) elif slot 【动作】 and action_word: filled.append(action_word) elif slot 【地点】 and loc_word: filled.append(loc_word) elif slot 【意象】 and imagery_pool: filled.append(random.choice(imagery_pool)) elif slot 【虚词】: filled.append(random.choice(self.mapper.function_words)) else: # 补充一些通用词 filled.append(random.choice([深, 独, 寒, 清, 空])) candidate_line .join(filled)[:7] # 截取7字 # 3. 检查并微调以满足平仄简化这里只做检查实际需要迭代调整 is_ok, msg self.metrical_processor.check_pattern(candidate_line, target_pattern) if not is_ok: # 如果不符合简单替换个别字这里逻辑非常简化 print(f候选句‘{candidate_line}’不符合格律{msg}) # 在实际项目中这里需要一个复杂的搜索或优化算法 candidate_line candidate_line[:6] 阴 # 强行修改最后一个字示例 return candidate_line def polish_with_lm(self, line, pattern): 使用语言模型对诗句进行润色保持格律约束简化版 if not self.use_lm: return line prompt f请将以下诗句润色得更优美保持七言格式和平仄{pattern}{line}\n润色后 try: results self.generator(prompt, max_length30, num_return_sequences1, do_sampleTrue) polished results[0][generated_text].replace(prompt, ).strip().split(\n)[0] # 提取前7个字作为结果 polished polished[:7] # 再次检查格律 is_ok, _ self.metrical_processor.check_pattern(polished, pattern) if is_ok: return polished else: return line except Exception as e: print(f语言模型润色失败: {e}) return line # 测试 if __name__ __main__: # 需要先实例化依赖的类 from semantic_parser import SemanticParser from vocab_mapper import VocabMapper from metrical_processor import MetricalProcessor parser SemanticParser() mapper VocabMapper() processor MetricalProcessor() generator ConstrainedGenerator(mapper, processor) test_text 深夜独行霜寒侵袖 semantic_info parser.parse(test_text) print(语义解析:, semantic_info) target_pattern 平平仄仄平平仄 # 七言第一句常见格式 raw_line generator.generate_line_from_template(semantic_info, target_pattern) print(规则生成句:, raw_line) polished_line generator.polish_with_lm(raw_line, target_pattern) print(模型润色句:, polished_line)4.5 步骤五流水线组装与主程序现在我们将所有模块串联起来形成一个完整的处理流水线。# 文件cyber_poet_main.py import sys sys.path.append(.) # 假设模块在同一目录 from semantic_parser import SemanticParser from vocab_mapper import VocabMapper from metrical_processor import MetricalProcessor from constrained_generator import ConstrainedGenerator class CyberPoetPipeline: def __init__(self): self.parser SemanticParser() self.mapper VocabMapper(classical_resources.json) self.processor MetricalProcessor() self.generator ConstrainedGenerator(self.mapper, self.processor) # 定义不同诗体的格律模板这里以七绝为例四句 self.poem_patterns { 七绝: [ 平平仄仄平平仄, 仄仄平平仄仄平, 仄仄平平平仄仄, 平平仄仄仄平平 ] } def compose_poem(self, modern_text, poem_type七绝): 主函数将现代文转化为指定类型的诗 print(f输入现代文{modern_text}) print(f目标诗体{poem_type}) # 1. 语义解析 print(\n[阶段1] 语义解析...) semantic_info self.parser.parse(modern_text) print(f 解析结果主体{semantic_info.get(objects)}动作{semantic_info.get(actions)}情感{semantic_info.get(sentiment)}) # 2. 获取格律模板 patterns self.poem_patterns.get(poem_type) if not patterns: raise ValueError(f不支持的诗体: {poem_type}) poem_lines [] # 3. 为每一句生成诗句 print(f\n[阶段2] 依律生成诗句...) for i, pattern in enumerate(patterns): print(f 第{i1}句格律{pattern}) # 在实际系统中每句的语义焦点可能不同这里简化处理每句都使用全部语义信息 raw_line self.generator.generate_line_from_template(semantic_info, pattern) final_line self.generator.polish_with_lm(raw_line, pattern) poem_lines.append(final_line) print(f 生成{final_line}) # 4. 组合成诗 poem \n.join(poem_lines) return poem if __name__ __main__: pipeline CyberPoetPipeline() # 测试用例 test_inputs [ 深夜穿着黑衣服走过小楼霜打湿了袖子都没察觉。, 秋日黄昏一人江边看雁南飞。, 春雨绵绵窗前桃花悄然开放。 ] for input_text in test_inputs: print(\n *50) try: result pipeline.compose_poem(input_text, 七绝) print(\n[最终生成]) print(result) except Exception as e: print(f生成过程中出错{e}) print(*50)5. 运行结果与效果评估运行python cyber_poet_main.py你可能会看到类似以下的输出由于随机性和简化规则每次结果可能不同 输入现代文深夜穿着黑衣服走过小楼霜打湿了袖子都没察觉。 目标诗体七绝 [阶段1] 语义解析... 解析结果主体[衣服, 袖子]动作[穿着, 走过, 打湿]情感melancholy [阶段2] 依律生成诗句... 第1句格律平平仄仄平平仄 生成玄裳夜渡小楼阴 第2句格律仄仄平平仄仄平 生成孤身霜侵罗袖寒 第3句格律仄仄平平平仄仄 生成寒鸦西风落叶秋 第4句格律平平仄仄仄平平 生成空庭独对清月明 [最终生成] 玄裳夜渡小楼阴 孤身霜侵罗袖寒 寒鸦西风落叶秋 空庭独对清月明 效果评估优点生成的句子确实具备了古典诗词的词汇玄裳、罗袖、寒鸦、空庭和意象并且每句都满足了七言格式。不足意境连贯性四句之间的逻辑联系较弱像是意象的堆砌而非一个完整的叙事或情感递进。格律准确性由于我们使用了现代拼音平仄且调整算法极其简单可能仍有不合古律之处。语义忠实度生成的第四句“空庭独对清月明”与输入原文“霜打湿袖子”关联度不高。模型依赖性若未成功加载GPT-2模型润色环节将失效生成质量会下降。这正体现了“赛博诗人”项目的真正难度如何让机器在严格的形式约束下创作出意境连贯、语义忠实且文采斐然的诗歌。我们的简化版揭示了核心流程但每个模块尤其是生成与优化模块都需要更精细的设计和更强大的模型如微调过的T5、BART或专门的诗词生成模型来支撑。6. 常见问题与排查思路在实现和运行上述代码时你可能会遇到以下问题问题现象可能原因排查方式解决方案ModuleNotFoundError: No module named spacy依赖未安装或不在当前Python环境。在终端执行 pip listgrep spacy。OSError: [E050] Cant find model zh_core_web_smspaCy中文模型未下载。检查python -m spacy info。运行python -m spacy download zh_core_web_sm。运行constrained_generator时卡住或报网络错误下载Hugging Face模型失败或超时。观察错误信息是否与网络或磁盘权限有关。1. 检查网络连接。2. 可先禁用LM将self.use_lm设为False。3. 或提前从镜像站下载模型到本地修改代码指定本地路径。生成的诗词完全不通顺或不符合格律1. 词汇映射表不完善。2. 生成模板过于简单。3. 平仄检查规则有误。1. 打印semantic_info和映射后的词汇。2. 单步调试generate_line_from_template函数。3. 用MetricalProcessor单独测试平仄判断。1. 丰富classical_resources.json中的词汇和映射关系。2. 设计更复杂的句法模板或引入句法分析。3. 使用更专业的平仄库或规则。程序运行缓慢1. 加载了大模型。2. 循环或搜索效率低。使用cProfile等工具分析性能瓶颈。1. 对于生产环境考虑使用更小的模型或量化技术。2. 对格律检查等频繁操作进行缓存如汉字平仄缓存。3. 优化生成算法避免穷举搜索。7. 最佳实践与进阶方向如果你想基于这个Demo构建一个更实用的“赛博诗人”以下是一些工程建议和进阶思路7.1 工程化建议数据驱动不要依赖手写的映射表。可以爬取《全唐诗》等语料构建“现代词-古典词”的共现统计或使用词向量计算相似度实现更自动化和准确的词汇映射。模块化与配置化将诗体格律、词汇映射路径、模型参数等抽离为配置文件便于调整和扩展。引入评估模块自动化评估生成诗歌的质量。指标可包括格律符合度、押韵准确度、与输入语义的BLEU/ROUGE分数、语言模型困惑度通顺度、以及人工评估的意象连贯性得分。流水线优化考虑使用异步或并行处理特别是当使用大模型进行润色或生成时。7.2 模型进阶方向端到端微调收集大量现代文古诗配对数据直接微调一个Seq2Seq模型如T5、BART或中文GPT。在训练时将格律作为硬约束或软约束通过损失函数加入。约束解码在生成时使用像transformers库中的LogitsProcessor这样的工具在每一步生成时屏蔽不符合平仄和押韵要求的token。规划-生成框架采用更先进的“规划然后生成”框架。先由一个规划器决定每句诗的主题和关键意象再由生成器根据规划和格律约束生成具体诗句。强化学习将格律符合度、意境评分等作为奖励信号使用强化学习如PPO来优化生成模型。7.3 安全与伦理考量内容过滤生成的诗词应避免产生有害、歧视性或敏感内容。需要在后处理阶段加入内容过滤模型。版权说明如果用于公开服务应声明生成内容的AI属性并注意训练数据可能涉及的版权问题。用户预期管理明确告知用户系统的能力和局限性避免过度夸大。通过这个项目我们不仅实现了一个有趣的AI写诗玩具更深入实践了复杂约束下文本生成的系统设计。从语义理解、知识映射、规划到约束生成这套方法论可以迁移到很多领域生成符合法律格式的合同条款、创作特定风格的音乐旋律、生成符合产品规范的代码注释等等。“赛博诗人”的魅力在于它用工程化的思维挑战了人类最具创造性的领域之一。虽然目前的技术离“诗仙”还很遥远但每一步清晰的拆解和优化都让我们离让机器更好地理解和创造语言的目标更近了一步。建议收藏本文的代码框架作为你探索AIGC应用开发的起点。