An AI-powered in-game assistant for AzerothCore that actually queries your game database.
See my other module: mod-llm-chatter, AI-powered ambient bot conversations for mod-playerbots
Ask a question, get an answer with clickable item/quest/spell links, all backed by live data from your server.
- Added Google Gemini support through Google's OpenAI-compatible API, including Gemini 3.1 Flash-Lite defaults and Gemini reasoning/thinking config options.
- Added OpenRouter support through its OpenAI-compatible API, with
optional attribution headers. Recommended OpenRouter models include
anthropic/claude-haiku-4.5,openai/gpt-4o-mini, andopenai/gpt-4.1-mini. - Clarified that Azeroth Guide requires models with reliable tool/function calling, regardless of provider. Plain-chat models or models with weak function argument handling are not suitable for factual guide answers.
It knows where things are, relative to you:
You: .ag where's the closest leatherworking trainer?
Azeroth Guide: [Darianna] is ~120 yards southwest of you in the
Craftsmen's Terrace. She can train you up to Artisan (300).
Your Leatherworking is at 178, so you're good to go.
It chains tools to build complete answers:
You: .ag I just hit 40, what should I be doing?
Azeroth Guide: Congrats on 40! A few things to look into:
• You can now learn [Plate Mail] from your class trainer
[Ander Germaine] (~85 yards northeast)
• The quest [In the Name of the Light] opens up the
Scarlet Monastery chain, pick it up from [Raleigh the Devout]
in Southshore
• At your level, Stranglethorn Vale and Tanaris are solid
zones. You've got 3 quests in STV already in your log
It pulls real data from your server's database, not from memory:
You: .ag where can I mine tin around here?
Azeroth Guide: Tin Ore nodes spawn throughout Darkshore, you'll need
Mining 65+. Your Mining is at 72 so you're set. The densest
spawns are along the cliffs between Auberdine and the Ruins
of Mathystra. You might also pick up some [Shadowgem] and
[Moss Agate] from the nodes.
Every item, quest, spell, and NPC name in responses becomes a clickable WoW link.
Every answer comes from your actual game database, not from AI memory or training data. When the guide says [Riverpaw Leather Vest] drops from [Hogger] at 15%, that's the real drop rate on your server. No guesswork, no approximations, no outdated information.
Ask "where can I learn cooking?" and the guide shows the nearest trainer first, with the area they're in and map coordinates: "Zarrin in Dolanaar (~15 m southeast at 57.1, 61.3)". Works with GPS addons. Supports yards or meters (configurable).
The guide reads your character's live state: level, race, class, zone, gold, professions, gear, and quest log. Ask "what quests can I do here?" and it filters by your level, class, and faction. Ask "where should I train mining?" and it knows your current skill level.
Every item, quest, spell, and NPC name in responses becomes a proper in-game hyperlink. Hover for tooltips, click to inspect, just like links from real players.
Ask questions however you want. "Where can I buy cooking supplies?", "any blacksmith trainer near me?", "I need to find an inn", the guide understands what you're looking for even with typos or casual phrasing.
Works with Anthropic Claude, OpenAI GPT, Google Gemini, or OpenRouter. Haiku, GPT-4o-mini, GPT-4.1-mini, Gemini 3.1 Flash-Lite, and OpenRouter-hosted Haiku 4.5 / GPT mini models are recommended for their speed and low cost.
Model choice matters: Azeroth Guide depends on tool/function calling for factual answers. Regardless of provider, use a model that reliably supports tool calls and structured tool arguments. Models that only do plain chat, ignore tools, or produce malformed function arguments will give poor or incorrect guide answers.
Azeroth Guide is not just a quest bot. It can help with most of the questions players actually ask while leveling, gearing, traveling, and planning what to do next.
-
NPCs and services Find vendors, trainers, innkeepers, bankers, flight masters, battlemasters, and weapon skill trainers near you.
-
Quests Check who starts a quest, what it rewards, what comes next in a chain, and which quests make sense for your level or class.
-
Spells and training See when your class learns a spell, how much it costs to train, and what abilities you should already have by your current level.
-
Items and loot Look up item stats, possible upgrades, boss drops, and creature loot tables.
-
Creatures and rare spawns Find named mobs, hostile creatures in a zone, hunter pets, and rare spawns.
-
Gathering and professions Ask where to fish, mine, pick herbs, or where a recipe comes from.
-
Zones, dungeons, and travel Check zone level ranges, dungeon bosses, nearby zones, and flight paths.
-
Reputation See how to gain rep, what rewards unlock, and whether a faction is worth working on.
- AzerothCore WotLK (3.3.5a)
- Python 3.8+
- An API key from Anthropic, OpenAI, Google AI Studio, or OpenRouter
cp modules/mod-llm-guide/conf/mod_llm_guide.conf.dist \
env/dist/etc/modules/mod_llm_guide.confEdit env/dist/etc/modules/mod_llm_guide.conf:
LLMGuide.Enable = 1
LLMGuide.Anthropic.ApiKey = sk-ant-your-key-here
LLMGuide.Database.Host = ac-databaseservices:
ac-llm-guide-bridge:
container_name: ac-llm-guide-bridge
image: python:3.11-slim
networks:
- ac-network
working_dir: /app
environment:
- PYTHONUNBUFFERED=1
command: >
bash -c "
pip install --quiet -r /app/requirements.txt &&
python llm_guide_bridge.py --config /config/mod_llm_guide.conf
"
volumes:
- ./modules/mod-llm-guide/tools:/app:ro
- ./env/dist/etc/modules:/config:ro
restart: unless-stopped
depends_on:
ac-database:
condition: service_healthy
profiles: [dev]docker compose --profile dev up -ddocker logs ac-llm-guide-bridge --since 5mPlace this repo under modules/ in your AzerothCore source tree, then:
cd azerothcore/build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/install
make -j$(nproc)
make installcp conf/mod_llm_guide.conf.dist /path/to/etc/modules/mod_llm_guide.confEdit mod_llm_guide.conf and set your API key.
cd tools/
pip install -r requirements.txt
python llm_guide_bridge.py --config /path/to/mod_llm_guide.confDatabase tables are created automatically on first run.
Use .ag for both normal questions and saved-history navigation.
.ag <question>
.ag history
.ag history 10
.ag history page 2
.ag history 10 page 2
.ag show 1
.ag show 11
.ag clear
| Command | What it does |
|---|---|
.ag <question> |
Ask Azeroth Guide a question |
.ag history |
Show page 1 of your saved history with 5 numbered entries by default |
.ag history <count> |
Show page 1 with up to <count> entries, capped at 10 |
.ag history page <number> |
Move to another history page while keeping the default page size of 5 |
.ag history <count> page <number> |
Move to a specific history page while also choosing how many entries to show per page, up to 10 |
.ag show <number> |
Open one saved interaction by its history number and show the full stored question and full stored answer |
.ag clear |
Clear this character's saved guide conversation history |
Think of .ag history as your index and .ag show as your open
command.
- Run
.ag historyto see your most recent numbered entries. - If you want older entries, run
.ag history page 2,.ag history page 3, and so on. - If you want more entries per page, use
.ag history 10or.ag history 10 page 2. - When you find the entry you want, run
.ag show <number>with that exact number.
Example flow:
.ag history
1. Q: what are my next spells
2. Q: where is the mining trainer
3. Q: what dungeon should I run
.ag show 2
That will open the full saved question and full saved answer for entry
2.
- History is stored per character
- In
.ag history, entry1is always your most recent interaction - History numbering stays consistent across pages, so if page 2 shows
11., you can open it with.ag show 11 .ag clearonly clears guide conversation memory/history- It does not cancel pending questions or change cooldowns
Key settings in mod_llm_guide.conf:
| Setting | Default | Description |
|---|---|---|
LLMGuide.Enable |
0 | Enable the module |
LLMGuide.Provider |
anthropic | anthropic, openai, google, or openrouter |
LLMGuide.Anthropic.ApiKey |
-- | Your Anthropic API key |
LLMGuide.OpenAI.ApiKey |
-- | Your OpenAI API key |
LLMGuide.Google.ApiKey |
-- | Your Google Gemini API key |
LLMGuide.OpenRouter.ApiKey |
-- | Your OpenRouter API key |
LLMGuide.Database.Host |
localhost | Use ac-database for Docker |
LLMGuide.CooldownSeconds |
10 | Seconds between questions |
LLMGuide.MaxTokens |
300 | Max response tokens |
LLMGuide.Temperature |
0.7 | Creativity (0.0-1.0) |
LLMGuide.DistanceUnit |
yards | yards or meters |
LLMGuide.Memory.Enable |
1 | Remember conversations |
LLMGuide.Memory.MaxPerCharacter |
20 | Max stored memories |
LLMGuide.Memory.ContextCount |
5 | Recent memories in context |
| Provider | Model | Per 1000 questions |
|---|---|---|
| Anthropic | Claude Haiku | ~$0.10-0.15 |
| OpenAI | GPT-4o-mini | ~$0.15-0.20 |
| OpenAI | GPT-4.1-mini | varies by tool use and response length |
| Gemini 3.1 Flash-Lite | varies by tool use and response length | |
| OpenRouter | Claude Haiku 4.5, GPT-4o-mini, or GPT-4.1-mini | varies by routed provider and response length |
Tool/function calling is required. The guide asks the model to call database tools for quests, NPCs, items, spells, trainers, vendors, and other factual lookups. Use a model that reliably supports function calling on your chosen provider. Haiku, GPT-4o-mini, GPT-4.1-mini, Gemini 3.1 Flash-Lite, and OpenRouter-hosted Claude Haiku 4.5 / GPT mini models are the recommended choices.
| Issue | Solution |
|---|---|
| "LLM Chat is currently disabled" | Set LLMGuide.Enable = 1, restart worldserver |
| No response to questions | Check bridge logs for errors |
| "Can't connect to MySQL" | Docker: use ac-database. Non-Docker: use localhost |
| "Please wait X seconds" | Rate limit, adjust CooldownSeconds |
Check logs:
- Docker:
docker logs ac-llm-guide-bridge --since 5m - Non-Docker: check terminal output or redirect to a log file
GNU AGPL v3, same as AzerothCore.
