diff --git a/README.md b/README.md index 9e4964d..8c40e6e 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ ### 🤖 AI增强系统 - ✅ LLM接口集成 - ✅ 角色AI系统(规则AI + LLM AI) -- ✅ 协程化决策机制,异步运行 +- ✅ 协程化决策机制,异步运行,多线程加速ai决策 - [ ] 长期规划和目标导向行为 - [ ] 突发动作响应系统(对外界刺激的即时反应) - [ ] LLM驱动的NPC对话、思考、互动、事件总结 diff --git a/src/classes/ai.py b/src/classes/ai.py index 12fffa8..5e5984b 100644 --- a/src/classes/ai.py +++ b/src/classes/ai.py @@ -32,6 +32,8 @@ class AI(ABC): async def decide(self, world: World, avatars_to_decide: list[Avatar]) -> dict[Avatar, tuple[ACTION_NAME, ACTION_PARAMS, str, Event]]: """ 决定做什么,同时生成对应的事件。 + 一个ai支持批量生成多个avatar的动作。 + 这对LLM AI节省时间和token非常有意义。 """ results = await self._decide(world, avatars_to_decide) @@ -99,10 +101,8 @@ class LLMAI(AI): LLM AI 一些思考: AI动作应该分两类: - 1. 动作链,一定时间内的长期规划,动作按照这个动作链来执行(以及何时终止并执行下一个动作) - 2. 突发情况,比如突然有人要攻击NPC,这个时候的反应 - 不能每个单步step都调用一次LLM来决定下一步做什么。这样子一方面动作一直乱变,另一方面也太费token了。 - decide的作用是,拉取既有的动作链(如果没有了就call_llm),再根据动作链决定动作,以及动作之间的衔接。 + 1. 长期动作,比如要持续很长一段时间的行为 + 2. 突发应对动作,比如突然有人要攻击NPC,这个时候的反应 """ async def _decide(self, world: World, avatars_to_decide: list[Avatar]) -> dict[Avatar, tuple[ACTION_NAME, ACTION_PARAMS, str]]: diff --git a/static/config.yml b/static/config.yml index 1f7a01b..822fe99 100644 --- a/static/config.yml +++ b/static/config.yml @@ -7,7 +7,7 @@ paths: templates: static/templates/ ai: - mode: "rule" # "rule" or "llm" + mode: "llm" # "rule" or "llm" game: init_npc_num: 3