用Python+LLM复刻斯坦福AI小镇:手把手教你搭建自己的25个智能体沙盒
2026/6/11 3:41:22 网站建设 项目流程

用Python+LLM构建智能体沙盒:从零实现25个AI角色的行为模拟

在游戏开发、社交模拟和自动化测试领域,构建可信的AI行为一直是个技术难题。传统方法要么依赖繁琐的状态机规则,要么需要海量的训练数据。现在,借助大语言模型(LLM)和Python生态,开发者可以快速创建具有记忆、规划和社交能力的智能体系统。本文将带你用不到200行核心代码,搭建一个简化版的斯坦福AI小镇模拟环境。

1. 环境搭建与基础架构

我们需要三个核心组件:LLM交互层、记忆管理系统和沙盒环境接口。以下是推荐的技术栈:

# 基础依赖 pip install openai python-dotenv numpy sentence-transformers fastapi uvicorn

系统架构对比表

模块传统方法LLM方案优势比较
行为生成有限状态机自然语言指令无需预定义所有可能性
记忆系统数据库固定字段动态记忆流支持模糊检索
社交交互预设对话树实时生成对话更自然的上下文延续

创建基础Agent类时,我们需要定义几个关键属性:

class GenerativeAgent: def __init__(self, name, description): self.name = name self.description = description # 角色背景设定 self.memory_stream = [] # 记忆列表 self.current_plan = [] # 当前行动计划 self.location = "广场" # 初始位置

提示:使用.env文件管理API密钥,避免硬编码。国内开发者可以考虑使用Moonshot、DeepSeek等兼容OpenAI API的国产大模型。

2. 记忆系统的工程实现

记忆流(Memory Stream)是智能体的核心组件,需要处理三种关键特性:

  1. 近期性(Recency):最近的事件权重更高
  2. 重要性(Importance):关键事件需要长期记住
  3. 相关性(Relevance):与当前情境关联的内容

实现记忆检索的函数示例:

def retrieve_memories(self, query_embedding, top_k=5): # 计算记忆的相关性得分 scores = [] for memory in self.memory_stream: recency = math.exp(-0.1 * (time.now() - memory.timestamp).hours) importance = memory.importance / 10 # 0-10分制 relevance = cosine_similarity(query_embedding, memory.embedding) composite_score = recency + importance + relevance scores.append((composite_score, memory)) # 返回得分最高的记忆 return sorted(scores, reverse=True)[:top_k]

记忆系统优化技巧

  • 对长期记忆进行定期摘要(Reflection)
  • 为不同类型记忆设置不同衰减系数
  • 使用向量数据库优化大规模记忆检索

3. 行为规划与决策引擎

智能体的日常行为需要分层规划:

  1. 每日大纲:早晨生成的粗略计划(如"上午工作,下午社交")
  2. 小时计划:分解为具体活动(如"9:00-10:00 在咖啡厅写作")
  3. 即时动作:根据环境变化实时调整(如"与遇到的熟人聊天")

实现计划生成的代码框架:

def generate_plan(self): # 生成每日大纲 prompt = f"{self.description}\n当前时间:早上8点\n请生成今日计划大纲:" daily_plan = llm_query(prompt) self.add_memory(f"制定每日计划:{daily_plan}", importance=7) # 分解为具体时段计划 for chunk in split_daily_plan(daily_plan): detail_prompt = f"将'{chunk}'分解为具体活动,考虑角色特点:{self.description}" detailed_actions = llm_query(detail_prompt) self.current_plan.extend(parse_actions(detailed_actions))

注意:实际项目中应该添加计划冲突检测和资源占用检查,避免多个智能体同时前往同一地点。

4. 多智能体社交模拟

当两个智能体相遇时,对话系统按以下流程工作:

  1. 检索彼此相关的记忆(过去互动、共同朋友等)
  2. 生成符合角色性格的初始对话
  3. 根据对方回应动态延续话题
  4. 将对话内容存入双方记忆
def generate_dialogue(self, other_agent): # 检索与对方相关的记忆 context_memories = self.retrieve_memories(other_agent.name) # 构建对话提示 prompt = f""" {self.description} 相关背景:{context_memories} 当前地点:{self.location} 遇到:{other_agent.name}({other_agent.description}) 请生成自然对话开场白: """ opening_line = llm_query(prompt) self.add_memory(f"与{other_agent.name}对话:{opening_line}", importance=5) return opening_line

社交行为优化点

  • 为不同关系级别设置对话风格(陌生/朋友/亲密)
  • 添加非语言交互(表情符号、肢体动作)
  • 模拟信息传播的保真度

5. 沙盒环境与可视化

使用FastAPI搭建简单的Web界面:

from fastapi import FastAPI from fastapi.staticfiles import StaticFiles app = FastAPI() app.mount("/static", StaticFiles(directory="static"), name="static") @app.get("/agent/{agent_id}") async def get_agent_state(agent_id: int): agent = agents[agent_id] return { "name": agent.name, "location": agent.location, "current_action": agent.current_plan[0] if agent.current_plan else "空闲", "recent_memories": [m.text for m in agent.memory_stream[:3]] }

前端可以使用Three.js或Phaser.js实现2D/3D可视化,关键是要显示:

  • 智能体的实时位置
  • 当前执行的动作
  • 最近的重要记忆
  • 社交关系网络图

在项目后期,可以添加以下高级功能:

  • 环境物品的交互系统
  • 天气和时间的影响因子
  • 突发事件模拟(如公共活动)
  • 长期关系发展算法

开发这类系统时最常见的挑战是LLM的响应延迟和API成本。我们可以通过以下方式优化:

  1. 对非关键决策使用较小模型
  2. 实现对话和计划的本地缓存
  3. 批量处理多个智能体的请求
  4. 设置合理的速率限制和退避策略

一个实用的调试技巧是为每个智能体创建日志文件,记录其决策过程和内存状态变化。当出现不符合预期的行为时,可以追溯完整的推理链条。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询