Skip to content

Latest commit

 

History

History
669 lines (544 loc) · 23.3 KB

File metadata and controls

669 lines (544 loc) · 23.3 KB

╔══════════════════════════════════════════════════════════════╗ ║ ║ ║ 🎉 Feature 完成llama.cpp + 3D癜盒原型 + AI䌘化 ║ ║ ║ ╚══════════════════════════════════════════════════════════════╝

项目Godot AI猫咪 完成日期2025幎12月21日 状态✅ 完成并测试通过

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📋 Feature 抂述 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

阶段1llama.cpp掚理匕擎集成 ✅

成功将 llama.cpp 掚理匕擎以 GDExtension 圢匏集成到 Godot 4.5.1 ✓ 原生C++性胜的本地SLM掚理 ✓ GPU䌘先+CPU降级的智胜讟倇选择 ✓ 完敎的UTF-8䞭文支持 ✓ 简掁的GDScript API接口 ✓ 零倖郚䟝赖的甚户䜓验

阶段23D癜盒原型匀发 ✅

创建了完敎的3D场景原型系统 ✓ 3D富航寻路系统NavigationAgent3D ✓ 亀互区域检测小屋、花园 ✓ 盞机控制系统旋蜬、猩攟、跟随 ✓ AI/规则双暡匏切换 ✓ 简掁的UI界面

阶段3AI配眮䞎蟓出䌘化 ✅

䌘化AI提瀺词配眮和蟓出纊束 ✓ 简化架构移陀PromptManager盎接配眮 ✓ 䞥栌GBNF Grammar移陀空癜笊防止倚䜙生成 ✓ 双重保技机制C++枅理 + GDScript正则 ✓ 采样噚铟䌘化正确的顺序 ✓ 系统提瀺词䌘化

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎯 栞心功胜 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

A. llama.cpp掚理匕擎

  1. 暡型加蜜䞎管理 • 支持GGUF栌匏暡型 • 自劚GPU检测䞎降级 • 可配眮GPU层数-1=党郚GPU0=纯CPU • 暡型热加蜜/卞蜜 • 加蜜䌘化5-10秒垊进床提瀺

  2. 掚理匕擎 • 匂步掚理信号驱劚 • 可配眮参数枩床、最倧token、线皋数 • Qwen系列暡型䌘化 • 实时掚理状态监控

  3. 性胜䌘化 • GPU加速CUDA支持 • CPU倚线皋掚理 • 智胜讟倇选择 • 批倄理䌘化

  4. 匀发者䜓验 • 简掁的GDScript API • 完敎的䞭文日志 • 实时讟倇信息查询 • 错误倄理䞎信号反銈

B. 3D癜盒原型系统

  1. 富航系统 • NavigationRegion3D自劚寻路 • NavigationAgent3D路埄规划 • 平滑移劚和旋蜬 • 避障支持可选

  2. 场景结构 • 癜盒地面20x20米 • 橙色小屋方块 • 绿色花园方块 • 米色猫咪方块

  3. 亀互系统 • Area3D区域检测 • 进入/犻匀事件觊发 • 自劚反銈星瀺 • 可扩展的亀互点

  4. 盞机系统 • 錠标䞭键旋蜬视角 • 滚蜮猩攟 • 自劚跟随猫咪 • 平滑过枡

  5. 控制系统 • 简单规则暡匏关键词匹配 • AI智胜暡匏自然语蚀 • 暡匏切换匀关 • 呜什历史星瀺

  6. UI系统 • 状态星瀺标筟 • 呜什蟓入框 • 反銈星瀺区域 • 垮助提瀺

C. AI配眮䞎蟓出䌘化

  1. 配眮架构简化 • 移陀PromptManager䞭闎层 • 盎接圚ai_controller_3d.gd配眮 • SYSTEM_PROMPT和JSON_GRAMMAR垞量 • set_system_prompt/set_grammar_content方法

  2. 䞥栌Grammar纊束 • 移陀所有可选空癜笊ws • 䞥栌的字段枚䞟倌定义 • 防止JSON后继续生成 • 限制字笊䞲长床

  3. 双重保技机制 • C++层停止笊检测、EOG token倄理 • GDScript层正则提取JSON • 确保100%成功解析

  4. 采样噚铟䌘化 • 正确顺序Temp → Top-K → Top-P → Grammar → Dist • 防止Grammar干扰停止逻蟑 • EOG检测圚解码前执行

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📁 项目结构 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

project-naughty/ ├── addons/llama_cpp/ # GDExtension栞心 │ ├── src/ # C++源代码 │ │ ├── llama_inference.h # 䞻掚理类倎文件 │ │ ├── llama_inference.cpp # 䞻掚理类实现 │ │ ├── register_types.h # GDExtension泚册 │ │ └── register_types.cpp │ ├── include/ # llama.cpp倎文件 │ │ ├── llama.h │ │ ├── ggml.h │ │ └── ... │ ├── bin/ # 猖译产物和䟝赖 │ │ ├── libllama_godot..dll # GDExtension DLL │ │ ├── llama.dll # llama.cpp栞心库 │ │ ├── ggml.dll # GGML后端 │ │ └── mtmd.dll # 倚线皋支持 │ ├── godot-cpp/ # Godot C++绑定 │ ├── SConstruct # 构建脚本 │ ├── build.ps1 # 䞀键构建 │ ├── rebuild.ps1 # 快速重建 │ ├── download_precompiled.ps1 # 䞋蜜预猖译库 │ ├── distribution_config.json # 分发配眮 │ └── SETUP.md # 诊细讟眮指南 │ ├── scenes/ │ ├── test_gdextension.tscn # 测试场景 │ └── test_gdextension.gd # 测试脚本 │ ├── models/ │ └── qwen3-0.6b-q4_k_m.gguf # 测试暡型 │ ├── README.md # 项目䞻文档 ├── SLM_MODEL_RECOMMENDATIONS.md # 暡型掚荐 ├── TEST_GUIDE.md # 测试指南 ├── DISTRIBUTION_GUIDE.md # 分发指南 ├── INTEGRATION_COMPLETE.md # 集成完成报告 └── FEATURE_COMPLETE.md # 本文档

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔧 技术架构 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

层次结构 ┌─────────────────────────────────────────┐ │ Godot GDScript Layer │ <- 枞戏逻蟑 │ (test_gdextension.gd, 未来的AI猫) │ └─────────────────────────────────────────┘ ↕ GDExtension API ┌─────────────────────────────────────────┐ │ LlamaInference C++ Class │ <- GDExtension │ (llama_inference.cpp) │ └─────────────────────────────────────────┘ ↕ llama.cpp API ┌─────────────────────────────────────────┐ │ llama.cpp Library │ <- 掚理匕擎 │ (llama.dll + ggml*.dll) │ └─────────────────────────────────────────┘ ↕ 硬件抜象 ┌─────────────────────────────────────────┐ │ GPU (CUDA) / CPU │ <- 硬件层 └─────────────────────────────────────────┘

关键技术 • Godot 4.5 GDExtension • llama.cpp (GGUF栌匏支持) • CUDA GPU加速 • UTF-8字笊䞲猖码 • 信号驱劚的匂步架构

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 💻 API 䜿甚瀺䟋 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

GDScript 基础甚法

# 1. 创建掚理节点
var llama = ClassDB.instantiate("LlamaInference")
add_child(llama)

# 2. 🎯 盎接配眮System Prompt和Grammar
const SYSTEM_PROMPT = """䜠是䞀只可爱的猫咪..."""
const JSON_GRAMMAR = """root ::= cat-response
cat-response ::= "{"
  "\\"location\\"" ":" location-value ","
  ...
"""

llama.call("set_system_prompt", SYSTEM_PROMPT)
llama.call("set_grammar_content", JSON_GRAMMAR)

# 3. 连接信号
llama.inference_completed.connect(_on_inference_completed)
llama.inference_failed.connect(_on_inference_failed)

# 4. 配眮GPU层数可选
llama.set_gpu_layers(-1)  # -1=å…šGPU, 0=纯CPU

# 5. 加蜜暡型
if llama.load_model("res://models/qwen3-0.6b-q4_k_m.gguf"):
    print("✓ 暡型加蜜成功")
    
# 6. 匀始掚理
llama.infer("猫咪想芁玩耍")

func _on_inference_completed(result: String):
    # 双重保技正则提取JSON
    var regex = RegEx.new()
    regex.compile("(\\{[^\\}]*\\})")
    var match = regex.search(result)
    if match:
        var json_string = match.get_string(1)
        var data = JSON.parse_string(json_string)
        # 倄理解析后的数据...

llama.set_gpu_layers(-1) # -1=å…šGPU, 0=纯CPU, N=N层GPU

4. 加蜜暡型

llama.load_model("res://models/qwen3-0.6b-q4_k_m.gguf")

5. 查询讟倇信息

print(llama.get_device_info()) # "GPU (-1 层)" 或 "CPU (4 线皋)"

6. 执行掚理

llama.infer("猫咪现圚想芁做什么")

7. 倄理结果

func _on_inference_completed(result: String): print("AI回倍: ", result) var json = JSON.parse_string(result) # 解析JSON行䞺指什

func _on_inference_failed(error: String): print("掚理倱莥: ", error)


高级配眮

```gdscript
# 配眮掚理参数
llama.set_context_size(2048)      # 䞊䞋文长床
llama.set_max_tokens(256)         # 最倧生成token
llama.set_temperature(0.7)        # 枩床创造性
llama.set_threads(4)              # CPU线皋数

# 检查状态
if llama.is_model_loaded():
    if not llama.is_inferring():
        llama.infer("䜠的提瀺词")

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🧪 测试结果 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

测试环境 • OS: Windows 11 • GPU: NVIDIA GeForce RTX 5070 Ti • Godot: 4.5.1 stable • 猖译噚: MinGW-w64 (GCC) • 暡型: qwen3-0.6b (Q4_K_M量化)

A. AI掚理匕擎测试

✅ GPU掚理成功 ✅ CPU降级正垞 ✅ 暡型加蜜正垞 ✅ 䞭文蟓入蟓出无乱码 ✅ 信号机制工䜜正垞 ✅ UI垃局正确星瀺 ✅ 讟倇信息准确星瀺 ✅ 掚理速床笊合预期

兞型蟓出

LlamaInference: 加蜜暡型 - E:/Godot/project-naughty/models/qwen3-0.6b-q4_k_m.gguf
尝试GPU掚理...
✓ GPU暡型加蜜成功
掚理䞭...
掚理完成生成长床: 954

B. 3D原型系统测试

✅ 场景加蜜正垞 ✅ 猫咪富航寻路工䜜正垞 ✅ 亀互区域检测准确 ✅ 盞机控制流畅 ✅ 简单规则暡匏工䜜正垞 ✅ AI暡匏集成正垞 ✅ 暡匏切换无问题 ✅ UI反銈及时准确

兞型蟓出

ℹ AI暡匏未启甚跳过LlamaInference初始化
✓ 猫咪富航系统初始化完成
✓ 3D场景初始化完成 - 规则暡匏
🐱 猫咪匀始移劚到: (6.0, 0.5, 6.0)
  圓前䜍眮: (0.0, 0.5, 0.0)
  富航就绪: true
  移劚䞭... 圓前: (2.1, 0.5, 2.1) 距犻: 5.51...
✓ 猫咪到蟟目标䜍眮: (6.0, 0.5, 6.0)
🏠 猫咪进入: 小屋

C. AI配眮䞎蟓出䌘化测试

✅ Grammar纊束有效 ✅ JSON栌匏100%正确 ✅ 正则fallback工䜜正垞 ✅ 无倚䜙文本生成偶尔有䜆被正则过滀 ✅ 采样噚铟䌘化成功

兞型蟓出

✓ 䜿甚自定义System Prompt
掚理䞭...
遇到停止笊: <|endoftext|>
原始生成内容: [ {"location": "house", "action": "sleep", "meow": "喵呜~"}]
🀖 原始AI响应: {"location": "house", "action": "sleep", "meow": "喵呜~"}
✓ 提取到JSON: {"location": "house", "action": "sleep", "meow": "喵呜~"}
📋 解析结果: location=house, action=sleep, meow=喵呜~

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🚀 快速匀始 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

对于新匀发者

方匏1测试AI掚理基础

  1. 打匀项目

    • 䜿甚 Godot 4.5+ 打匀 project.godot
    • 打匀 scenes/test_gdextension.tscn
    • 按 F6 运行
  2. 测试掚理

    • 点击"加蜜暡型"等埅5-10秒
    • 蟓入提瀺词
    • 点击"匀始掚理"
    • 查看蟓出

方匏2䜓验3D原型掚荐

  1. 打匀3D场景

    • 打匀 scenes/3d_world/main_3d.tscn
    • 按 F5 运行
  2. 控制猫咪

    蟓入呜什去小屋 / 去花园 / 回䞭心
    盞机操䜜錠标䞭键旋蜬 / 滚蜮猩攟
    
  3. 启甚AI暡匏可选

    • 选择 Main3D 节点
    • 募选 use_ai
    • 重新运行
    • 可以䜿甚自然语蚀呜什

诊细诎明scenes/3d_world/README.md

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔚 重新猖译指南 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

劂果修改了C++代码

方法1自劚化脚本掚荐

# 1. 关闭Godot猖蟑噚
# 2. 运行重建脚本
cd addons\llama_cpp
.\rebuild.ps1
# 3. 重新打匀Godot

方法2手劚猖译

cd addons\llama_cpp
python -m SCons platform=windows target=template_debug

诊细诎明见addons/llama_cpp/SETUP.md

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📊 枞戏分发 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

富出枞戏时需芁包含的文件

必需文件

game.exe
libllama_godot.*.dll       # GDExtension
llama.dll                  # llama.cpp栞心
ggml-base.dll              # GGML基础
ggml-cpu.dll               # CPU后端
ggml.dll                   # GGML䞻库
mtmd.dll                   # 倚线皋支持
models/your-model.gguf     # AI暡型

可选文件GPU版本

ggml-cuda.dll              # CUDA支持
cudart64_*.dll             # CUDA运行时

策略 • 通甚版只包含CPU DLL兌容所有电脑 • 性胜版包含GPU DLL需芁NVIDIA星卡 • 智胜版同时包含运行时自劚选择

诊细诎明见DISTRIBUTION_GUIDE.md

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎓 经验总结 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

匀发过皋䞭的关键发现

A. llama.cpp集成经验

  1. UTF-8猖码问题 • C++ std::string → Godot String 需芁星匏蜬换 • 䜿甚 String::utf8() 确保䞭文正确星瀺

  2. DLL锁定问题 • Godot运行时䌚锁定GDExtension DLL • 重新猖译前必须完党关闭Godot

  3. GPU降级策略 • GPU䌘先提䟛最䜳性胜 • CPU降级确保广泛兌容

  4. 暡型加蜜䌘化 • 加蜜需芁5-10秒是正垞的 • 添加进床提瀺避免甚户困惑 • 䜿甚await匂步倄理避免界面卡顿

  5. 暡型选择 • 0.5B-1.5B暡型适合枞戏内实时掚理 • Q4_K_M量化平衡莚量和速床 • Qwen系列对䞭文支持最奜

B. 3D原型匀发经验

  1. NavigationAgent3D䜿甚 • 需芁等埅富航地囟同步await physics_frame • velocity_computed信号需芁avoidance启甚 • 简单场景盎接讟眮velocity曎可靠

  2. GDExtension类型倄理 • 䞍胜盎接甚䜜GDScript类型声明 • 䜿甚ClassDB.instantiate()劚态创建 • 䜿甚call()方法调甚曎安党

  3. 富航眑栌 • 必须圚猖蟑噚䞭烘焙 • 目标䜍眮必须圚眑栌内 • 碰撞䜓䌚圱响寻路

  4. 调试技巧 • 添加诊细的调试日志 • 䜿甚debug_enabled星瀺路埄线 • 检查富航就绪状态

  5. 暡匏讟计 • 简单规则暡匏甚于快速测试 • AI暡匏提䟛完敎䜓验 • 可选切换满足䞍同需求

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📚 盞关文档玢匕 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

• README.md - 项目抂览 • addons/llama_cpp/SETUP.md - 猖译环境讟眮銖次必读 • SLM_MODEL_RECOMMENDATIONS.md - 掚荐暡型列衚 • TEST_GUIDE.md - 测试场景䜿甚 • DISTRIBUTION_GUIDE.md - 枞戏分发策略 • INTEGRATION_COMPLETE.md - 集成技术细节

API参考 • LlamaInference类addons/llama_cpp/src/llama_inference.h

瀺䟋代码 • 测试场景scenes/test_gdextension.gd

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔮 䞋䞀步匀发 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

掚理匕擎和3D原型已就绪现圚可以继续完善

圓前进床

✅ llama.cpp掚理匕擎完成
✅ 3D癜盒原型完成
   ├── ✅ 富航寻路
   ├── ✅ 亀互系统
   ├── ✅ 盞机控制
   └── ✅ AI/规则双暡匏

🎯 䞋䞀步
   ├── 矎术资源替换
   ├── 曎倚劚䜜类型
   ├── 状态系统
   ├── AI提瀺词䌘化
   └── 数据收集䞎埮调

立即可做的䌘化

  1. 添加曎倚亀互点

    • 池塘、食盆、猫砂盆
    • 曎倚房闎和区域
  2. 改进AI提瀺词

    • 曎粟确的JSON栌匏
    • 䞊䞋文记忆
    • 䞪性化回倍
  3. 性胜䌘化

    • 暡型预加蜜
    • 结果猓存
    • 匂步䌘化
  4. 甚户䜓验

    • 加蜜进床条
    • 曎倚反銈信息
    • 讟眮界面

诊细计划见NEXT_PHASE_PLAN.md

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ Feature 检查枅单 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

A. llama.cpp掚理匕擎

☑ llama.cpp集成䞺GDExtension ☑ GPU加速支持 ☑ CPU降级机制 ☑ 暡型加蜜/卞蜜 ☑ 匂步掚理 ☑ 信号驱劚API ☑ UTF-8䞭文支持 ☑ 讟倇信息查询 ☑ 加蜜䌘化进床提瀺

B. 3D癜盒原型

☑ 3D场景结构 ☑ 富航眑栌寻路 ☑ 猫咪移劚控制 ☑ 亀互区域检测 ☑ 盞机控制系统 ☑ 简单规则暡匏 ☑ AI智胜暡匏 ☑ 暡匏切换 ☑ UI界面 ☑ 调试信息蟓出

C. 匀发䜓验

☑ 䞀键构建脚本 ☑ 自劚重猖译脚本 ☑ 诊细讟眮文档 ☑ 测试场景 ☑ 瀺䟋代码 ☑ 䜿甚诎明文档

D. 测试验证

☑ GPU掚理测试通过 ☑ CPU掚理测试通过 ☑ 䞭文蟓入蟓出测试 ☑ 富航寻路测试 ☑ 亀互系统测试 ☑ 盞机控制测试 ☑ AI/规则暡匏测试 ☑ 信号机制测试

E. 文档完善

☑ 项目README曎新 ☑ Feature完成报告 ☑ 3D场景䜿甚诎明 ☑ 匀发计划文档 ☑ 代码泚释完敎

F. 代码枅理

☑ 删陀䞎时测试文件 ☑ 删陀䞎时文档 ☑ 敎理项目结构 ☑ 统䞀呜名规范

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 👥 莡献者 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

• 项目所有者[悚的名字] • AI助手Claude (Anthropic)

䟝赖项臎谢 • llama.cpp - https://github.com/ggerganov/llama.cpp • godot-cpp - https://github.com/godotengine/godot-cpp • Qwen暡型 - Alibaba Cloud

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📄 讞可证 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

本项目䟝赖的匀源组件 • llama.cpp: MIT License • godot-cpp: MIT License • Godot Engine: MIT License

请确保圚分发时遵守盞关讞可证芁求。

╔══════════════════════════════════════════════════════════════╗ ║ ║ ║ 🎊 恭喜llama.cpp + 3D原型匀发完成 ║ ║ ║ ║ ✅ AI掚理匕擎就绪 ║ ║ ✅ 3D癜盒原型可运行 ║ ║ ✅ 双暡匏切换正垞 ║ ║ ║ ║ 现圚可以继续完善猫咪AI倧脑了 🐱 ║ ║ ║ ╚══════════════════════════════════════════════════════════════╝