🎮 拒绝 AI 幻觉:用 RAG 打造专属"魂系"道具设计师
检索增强生成 · 大模型落地 · 游戏内容生成
🎯 项目背景
如果直接让大模型(LLM)去设计一个《艾尔登法环》的硬核游戏道具,它大概率会开始一本正经地胡说八道(比如给你写个"增加30%暴击率,持续5秒"的劣质网游数值)。这种现象叫做"AI 幻觉"。
为了治好它的幻觉,我们需要用到目前 AI 落地最核心的技术:RAG(检索增强生成,Retrieval-Augmented Generation)。
💡 RAG 核心理念
RAG 就是给 AI 安排一场"开卷考试"
提取与清洗 (ETL)
把庞杂的官方设定集整理成条理清晰的"复习大纲"
检索 (Retrieval)
去本地"学霸笔记"(向量数据库)里翻找最相关的官方设定
生成 (Generation)
AI看着参考资料,模仿官方的文风和平衡性交出满分答卷
🏗️ 技术架构
💻 核心代码解析:四步走搞定 RAG 闭环
数据清洗与解构 (The ETL)
纯文本是给人类看的,大模型需要结构化的数据。我们通过 Python 正则表达式,将 148 个护符的原始文本精准"解剖"为:机制(Effect)与叙事(Lore)。这一步彻底避免了 AI 将剧情与数值混淆。
import re
import json
def parse_talismans(raw_text):
# 用正则切分每个护符的独立文本块
pattern = re.compile(r'(\d+)\.\s*【(.*?)】\n\s*(.*?)(?=\n\d+\.\s*【|\Z)', re.DOTALL)
matches = pattern.findall(raw_text)
# 核心特征词:精准剥离"游戏数值"与"背景故事"
effect_keywords = ['能提升', '能恢复', '能强化', '能减少', '将变得']
results = []
for match in matches:
sentences = re.split(r'(?<=[。!?])', re.sub(r'\s+', ' ', match[2]).strip())
effect_desc = [s for s in sentences if any(k in s for k in effect_keywords)]
lore_desc = [s for s in sentences if not any(k in s for k in effect_keywords)]
results.append({
"item_name": match[1].strip(),
"effect": " ".join(effect_desc),
"lore": " ".join(lore_desc)
})
return results
effect_keywords 特征词精准剥离"游戏数值"与"背景故事",避免AI将剧情与机制混淆。
构建向量知识库 (The Library)
数据结构化后,我们使用开源中文模型将其转化为高维向量,并存入轻量级的本地向量数据库 ChromaDB 中。
import chromadb
from chromadb.utils import embedding_functions
# 初始化本地数据库
chroma_client = chromadb.PersistentClient(path="./vectordb")
# 加载轻量级中文 Embedding 模型
chinese_ef = embedding_functions.SentenceTransformerEmbeddingFunction(
model_name="shibing624/text2vec-base-chinese"
)
# 创建专属知识库集合并将 JSON 数据灌入
collection = chroma_client.create_collection(
name="elden_ring_talismans",
embedding_function=chinese_ef
)
精准语义检索 (The Search)
当玩家输入脑洞大开的需求时,系统不再是简单的关键字匹配,而是进行"多维空间语义测算",精准召回最合适的参考护符。
# 接收玩家的脑洞需求
user_query = "我想设计一个适合刺客用的,暴击能回血的道具,带点猩红腐败元素"
# 从知识库中召回最相似的 2 条官方设定作为"开卷参考"
results = collection.query(
query_texts=[user_query],
n_results=2
)
# 将召回的机制与背景故事打包为 Context
reference_text = format_results(results)
增强生成 (The Exam)
最后,我们将最新的大模型 SDK 与检索到的上下文融合,完成最终的"开卷答题"。
from google import genai
# 初始化客户端 (隐式读取环境变量保证安全)
client = genai.Client()
# 拼装包含参考资料的 Prompt
prompt = f"""
你是一位资深的游戏道具设计师。请根据玩家需求,并严格模仿以下参考护符的平衡机制与碎片化叙事风格,设计一个全新护符:
【玩家需求】:{user_query}
【官方参考资料】:\n{reference_text}
"""
# 调用大模型生成最终设计
response = client.models.generate_content(
model='gemini-2.5-flash',
contents=prompt
)
print(response.text)
🌟 最终效果与复盘
通过引入完整的 RAG 架构(ETL → VectorDB → LLM),AI 的输出从"不知所云的西幻爽文",瞬间蜕变为用词克制、机制严谨、带有代价属性的原汁原味"魂系"文案。这完美验证了私有化数据与大模型结合在垂直内容生成领域的强大潜力!
💎 项目价值
拒绝幻觉
基于真实游戏数据生成,杜绝AI胡编乱造
风格一致
严格模仿官方文风,保持游戏世界观统一
平衡性强
参考真实道具数值,保证游戏性平衡
工程化落地
完整ETL流程,展示数据处理实战能力
🛠️ 技术栈
📌 面试要点
⚠️ 为什么 ETL 是关键?
在 AI 领域有一句名言:"Garbage in, garbage out(垃圾进,垃圾出)"。数据清洗(ETL)不仅是 RAG 项目的第一步,更是决定最终生成质量的"灵魂步骤"。
如果不把大段的文本拆解干净,大模型就会把"背景故事"当成"游戏数值"乱缝合。这个项目通过精准的 effect_keywords 特征词提取,展示了你对脏数据处理的实战经验。
💡 展示技巧
- 强调你对"结构化数据"的理解(Effect vs Lore 的分离)
- 展示你对向量数据库的实际应用经验
- 说明你如何通过 Prompt Engineering 引导模型输出
- 量化项目成果(如:生成道具的可玩性、风格一致性等)