内容纲要
复杂AI交互模式实战(详解版)
目标:精通复杂AI交互模式、场景设计、工程落地
目录
交互模式概述
1. 复杂交互特征
【与简单交互的区别】
维度 | 简单交互 | 复杂交互
------------|-------------------|------------------
目标 | 单一响应 | 多目标协作
角色 | 单一AI | 多AI角色
状态 | 无状态 | 复杂状态机
流程 | 线性流程 | 非线性分支
反馈 | 直接反馈 | 多维反馈
记忆 | 短期记忆 | 长期记忆
上下文 | 简单上下文 | 多层级上下文
【复杂交互类型】
1. 协作型
- 多角色协作
- 共同完成任务
- 群体决策
2. 竞争型
- 对立角色
- 策略博弈
- 胜负判断
3. 教学型
- 师生互动
- 知识传递
- 能力评估
4. 游戏化
- 游戏规则
- 玩家系统
- 社交互动
5. 模拟型
- 场景模拟
- 行为预测
- 决策推演
2. 设计原则
【可用性原则】
1. 明确引导
- 清晰的提示
- 明确的反馈
- 可操作的选项
2. 合理流程
- 符合直觉
- 可预测行为
- 支持回退
3. 错误容忍
- 容错处理
- 友好提示
- 恢复机制
【沉浸感原则】
1. 角色一致性
- 保持性格
- 记忆过往
- 情感连续
2. 自然对话
- 人类化表达
- 上下文连贯
- 情感表达
3. 场景真实
- 环境细节
- 动态变化
- 时间推进
【可扩展性原则】
1. 模块化设计
- 角色可替换
- 规则可配置
- 内容可扩展
2. 数据驱动
- 配置外部化
- 规则数据化
- 模板化
3. 性能优化
- 异步处理
- 缓存策略
- 资源管理
协作型交互
1. 头脑风暴系统
from typing import List, Dict
from dataclasses import dataclass
import random
@dataclass
class BrainstormSession:
"""头脑风暴会话"""
topic: str # 头脑风暴主题
participants: List[Dict] # 参与者
rounds: int = 3 # 轮数
ideas_per_round: int = 2 # 每轮创意数
def __post_init__(self):
self.all_ideas = []
self.feedback_history = []
self.final_ideas = []
def run(self) -> Dict:
"""运行头脑风暴"""
print(f"\n{'='*50}")
print(f"头脑风暴主题:{self.topic}")
print(f"{'='*50}\n")
for round_num in range(self.rounds):
print(f"\n{'─'*20}")
print(f"第 {round_num + 1} 轮头脑风暴")
print(f"{'─'*20}\n")
# 1. 生成创意
round_ideas = self.generate_ideas(round_num)
self.all_ideas.extend(round_ideas)
# 2. 收集反馈
self.collect_feedback(round_ideas)
# 3. 创意整合
if round_num < self.rounds - 1:
self.synthesize_ideas()
# 4. 最终评估
self.final_ideas = self.evaluate_and_rank()
return {
"topic": self.topic,
"total_ideas": len(self.all_ideas),
"final_ideas": self.final_ideas
}
def generate_ideas(self, round_num: int) -> List[Dict]:
"""生成创意"""
ideas = []
for participant in self.participants:
for i in range(self.ideas_per_round):
# 生成创意
idea = self._generate_single_idea(
participant,
self.all_ideas,
round_num
)
ideas.append({
"id": f"{participant['id']}_round{round_num}_{i}",
"participant": participant['name'],
"content": idea,
"round": round_num + 1,
"votes": 0
})
print(f"{participant['name']}: {idea}")
return ideas
def _generate_single_idea(self, participant: Dict,
existing_ideas: List[Dict],
round_num: int) -> str:
"""生成单个创意"""
existing_text = "\n".join([
f"- {idea['content']}"
for idea in existing_ideas[-5:] # 只考虑最近5个
]) if existing_ideas else "暂无"
prompt = f"""
你是{participant['name']},{participant['role']}。
你的特点:{participant['style']}
头脑风暴主题:{self.topic}
之前提出的创意:
{existing_text}
请提供一个独特、有创意的想法:
- 避免重复之前的想法
- 符合你的角色特点
- 具有可行性和创新性
- 回答要简洁明了(1-2句话)
"""
# 调用LLM生成
return self.llm_generate(prompt)
def collect_feedback(self, ideas: List[Dict]):
"""收集反馈"""
print(f"\n【反馈阶段】\n")
for participant in self.participants:
feedback = self._generate_feedback(participant, ideas)
self.feedback_history.append({
"participant": participant['name'],
"feedback": feedback
})
print(f"{participant['name']}的反馈:{feedback}\n")
def _generate_feedback(self, participant: Dict,
ideas: List[Dict]) -> str:
"""生成反馈"""
ideas_text = "\n".join([
f"{i+1}. {idea['participant']}: {idea['content']}"
for i, idea in enumerate(ideas)
])
prompt = f"""
你是{participant['name']},{participant['role']}。
请对以下创意提供反馈:
{ideas_text}
反馈要求:
- 指出最值得关注的创意
- 分析创意的优缺点
- 提出改进建议
- 保持客观和专业
"""
return self.llm_generate(prompt)
def synthesize_ideas(self):
"""整合创意"""
print(f"\n【创意整合】\n")
latest_ideas = self.all_ideas[-len(self.participants) * self.ideas_per_round:]
synthesis = self._generate_synthesis(latest_ideas)
print(f"综合观点:{synthesis}\n")
def _generate_synthesis(self, ideas: List[Dict]) -> str:
"""生成综合观点"""
prompt = f"""
请综合评估以下创意,提炼出最有价值的方向:
{self._format_ideas(ideas)}
请提供:
1. 共同趋势
2. 创新突破点
3. 值得深入的方向
"""
return self.llm_generate(prompt)
def evaluate_and_rank(self) -> List[Dict]:
"""评估并排序"""
print(f"\n{'='*20}")
print("最终评估与排序")
print(f"{'='*20}\n")
# 交叉评分
for idea in self.all_ideas:
idea["score"] = self._cross_evaluate(idea)
# 排序
ranked = sorted(self.all_ideas, key=lambda x: x["score"], reverse=True)
# 展示结果
for i, idea in enumerate(ranked[:5], 1):
print(f"{i}. {idea['content']} (评分: {idea['score']:.2f})")
return ranked[:5]
def _cross_evaluate(self, idea: Dict) -> float:
"""交叉评估"""
scores = []
for participant in self.participants:
score = self._evaluate_idea(participant, idea)
scores.append(score)
return sum(scores) / len(scores)
# 使用示例
def run_brainstorm():
"""运行头脑风暴"""
# 定义参与者
participants = [
{
"id": "p1",
"name": "产品专家",
"role": "产品经理",
"style": "善于从用户角度思考,关注市场需求"
},
{
"id": "p2",
"name": "技术顾问",
"role": "技术专家",
"style": "关注技术可行性,善于提出创新方案"
},
{
"id": "p3",
"name": "设计师",
"role": "UI/UX设计师",
"style": "注重用户体验,擅长提出视觉创意"
},
{
"id": "p4",
"name": "运营总监",
"role": "运营专家",
"style": "关注落地效果,善于发现商业价值"
}
]
# 创建会话
session = BrainstormSession(
topic="如何提升电商平台的用户留存率?",
participants=participants,
rounds=3,
ideas_per_round=2
)
# 运行
result = session.run()
return result
2. 项目协作模拟
@dataclass
class ProjectCollaboration:
"""项目协作模拟"""
project_name: str
roles: Dict[str, AICharacter]
communication_log: List[Dict] = None
def __post_init__(self):
self.communication_log = []
self.project_state = {
"requirements": [],
"design": None,
"implementation": [],
"reviews": []
}
def simulate_development(self, user_request: str) -> Dict:
"""模拟开发过程"""
print(f"\n{'='*50}")
print(f"项目:{self.project_name}")
print(f"需求:{user_request}")
print(f"{'='*50}\n")
# 阶段1:需求分析
print("\n【阶段1:需求分析】")
requirements = self._analyze_requirements(user_request)
self.project_state["requirements"] = requirements
# 阶段2:技术设计
print("\n【阶段2:技术设计】")
design = self._technical_design(requirements)
self.project_state["design"] = design
# 阶段3:迭代开发
print("\n【阶段3:迭代开发】")
iterations = 3
for i in range(iterations):
print(f"\n--- 第 {i + 1} 轮迭代 ---")
code = self._implement_feature(design, i)
self.project_state["implementation"].append(code)
# 代码审查
review = self._code_review(code)
self.project_state["reviews"].append(review)
if review["approved"]:
print("✓ 代码审查通过")
else:
print("✗ 代码需要修改")
# 基于反馈修改代码
code = self._refine_code(code, review["feedback"])
# 阶段4:最终验收
print("\n【阶段4:最终验收】")
acceptance = self._final_acceptance()
return {
"project": self.project_name,
"requirements": requirements,
"design": design,
"implementation": self.project_state["implementation"],
"acceptance": acceptance
}
def _analyze_requirements(self, user_request: str) -> Dict:
"""需求分析"""
pm = self.roles["product_manager"]
tech_lead = self.roles["tech_lead"]
# 产品经理分析需求
pm_analysis = self._ask_character(pm, f"""
作为产品经理,请详细分析以下用户需求:
{user_request}
请提供:
1. 核心目标
2. 功能需求清单
3. 非功能性需求(性能、安全等)
4. 优先级排序
""")
print(f"\n{pm.name}的需求分析:")
print(pm_analysis)
# 技术负责人评估
tech_assessment = self._ask_character(tech_lead, f"""
作为技术负责人,请评估以下需求的技术可行性:
{pm_analysis}
请提供:
1. 技术选型建议
2. 潜在技术风险
3. 开发工时预估
4. 架构建议
""")
print(f"\n{tech_lead.name}的技术评估:")
print(tech_assessment)
return {
"pm_analysis": pm_analysis,
"tech_assessment": tech_assessment
}
def _technical_design(self, requirements: Dict) -> Dict:
"""技术设计"""
architect = self.roles["architect"]
developer = self.roles["developer"]
# 架构师设计方案
architecture = self._ask_character(architect, f"""
作为架构师,基于以下需求和评估,设计技术方案:
{requirements['pm_analysis']}
{requirements['tech_assessment']}
请提供:
1. 系统架构图描述
2. 模块划分
3. 接口设计
4. 数据库设计
5. 部署方案
""")
print(f"\n{architect.name}的架构设计:")
print(architecture)
# 开发者反馈
dev_feedback = self._ask_character(developer, f"""
作为开发者,请评估以下技术方案:
{architecture}
请提供:
1. 实现可行性
2. 潜在问题
3. 优化建议
""")
print(f"\n{developer.name}的反馈:")
print(dev_feedback)
return {
"architecture": architecture,
"feedback": dev_feedback
}
def _implement_feature(self, design: Dict, iteration: int) -> str:
"""实现功能"""
developer = self.roles["developer"]
prompt = f"""
作为开发者,基于以下技术设计实现代码:
{design['architecture']}
这是第 {iteration + 1} 轮迭代。
要求:
1. 代码质量高
2. 遵循最佳实践
3. 包含必要的注释
4. 考虑错误处理
"""
code = self._ask_character(developer, prompt)
return code
def _code_review(self, code: str) -> Dict:
"""代码审查"""
reviewer = self.roles["code_reviewer"]
prompt = f"""
作为代码审查者,请审查以下代码:
{code}
请评估:
1. 代码质量(满分10分)
2. 潜在bug
3. 性能问题
4. 安全隐患
5. 改进建议
最终结论:通过 / 需要修改
"""
review = self._ask_character(reviewer, prompt)
is_approved = "通过" in review
return {
"review": review,
"feedback": review,
"approved": is_approved
}
竞争型交互
1. 辩论系统
@dataclass
class DebateSystem:
"""辩论系统"""
topic: str
pro_side: AICharacter # 正方
con_side: AICharacter # 反方
judge: AICharacter # 评判
rounds: int = 3
time_limit: int = 300 # 每轮时间限制(秒)
def run_debate(self) -> Dict:
"""运行辩论"""
print(f"\n{'='*50}")
print(f"辩论主题:{self.topic}")
print(f"{'='*50}")
print(f"\n正方:{self.pro_side.name}")
print(f"反方:{self.con_side.name}")
print(f"评判:{self.judge.name}\n")
debate_history = []
for round_num in range(self.rounds):
print(f"\n{'─'*20}")
print(f"第 {round_num + 1} 轮辩论")
print(f"{'─'*20}\n")
# 正方发言
pro_arg = self._generate_argument(
speaker=self.pro_side,
opponent=self.concon_side,
topic=self.topic,
previous_args=[h['con_arg'] for h in debate_history],
position="支持"
)
print(f"\n【正方】{self.pro_side.name}:")
print(pro_arg)
# 反方发言
con_arg = self._generate_argument(
speaker=self.con_side,
opponent=self.pro_side,
topic=self.topic,
previous_args=[h['pro_arg'] for h in debate_history],
position="反对"
)
print(f"\n【反方】{self.con_side.name}:")
print(con_arg)
# 记录轮次
debate_history.append({
"round": round_num + 1,
"pro_arg": pro_arg,
"con_arg": con_arg
})
# 最终评判
print(f"\n{'='*20}")
print("最终评判")
print(f"{'='*20}\n")
judgment = self._final_judgment(debate_history)
return {
"topic": self.topic,
"debate_history": debate_history,
"judgment": judgment
}
def _generate_argument(self, speaker: AICharacter,
opponent: AICharacter,
topic: str,
previous_args: List[str],
position: str) -> str:
"""生成辩论论点"""
previous_args_text = "\n".join([
f"{i+1}. {arg}"
for i, arg in enumerate(previous_args[-3:]) # 只考虑最近3个
]) if previous_args else "暂无"
prompt = f"""
你是{speaker.name},{speaker.role}。
辩题:{topic}
你的立场:{position}该议题
对手的主要论点:
{previous_args_text}
请提供强有力的论点:
1. 提出你的核心论点
2. 回应对手的论点
3. 使用事实和逻辑支持
4. 保持专业和礼貌
5. 回答要清晰有力(200-300字)
"""
return self._ask_character(speaker, prompt)
def _final_judgment(self, debate_history: List[Dict]) -> Dict:
"""最终评判"""
debate_text = "\n\n".join([
f"""
第{h['round']}轮:
正方:{h['pro_arg']}
反方:{h['con_arg']}
"""
for h in debate_history
])
prompt = f"""
作为评判,请对以下辩论进行公正评判:
辩题:{self.topic}
辩论过程:
{debate_text}
请从以下角度评判:
1. 论点质量(满分10分)
- 论据是否充分
- 逻辑是否严密
- 事实是否准确
2. 反驳能力(满分10分)
- 是否有效回应对方
- 反驳是否有力
- 是否抓住对方弱点
3. 表达能力(满分10分)
- 表达是否清晰
- 论证是否有力
- 语气是否得体
请分别给出正方和反方的评分,
并给出最终判断(正方胜 / 反方胜 / 平局)。
请用以下格式回答:
正方评分:<总分30分>
反方评分:<总分30分>
判决:<胜方>
评判理由:<详细说明>
"""
judgment = self._ask_character(self.judge, prompt)
print(judgment)
return {
"judgment_text": judgment,
"winner": self._extract_winner(judgment),
"reasoning": self._extract_reasoning(judgment)
}
2. 策略博弈
import random
class StrategyGame:
"""策略博弈系统"""
def __init__(self, player1: AICharacter, player2: AICharacter):
self.players = [player1, player2]
self.game_state = {}
self.move_history = []
def play_game(self, game_type: str = "prisoners_dilemma") -> Dict:
"""进行策略博弈"""
if game_type == "prisoners_dilemma":
return self._prisoners_dilemma()
elif game_type == "rock_paper_scissors":
return self._rock_paper_scissors()
else:
raise ValueError(f"未知游戏类型: {game_type}")
def _prisoners_dilemma(self) -> Dict:
"""囚徒困境"""
print(f"\n{'='*40}")
print("囚徒困境博弈")
print(f"{'='*40}\n")
# 描述游戏
game_description = """
游戏规则:
1. 两名囚犯被分开审讯
2. 每个囚犯可以选择:合作(C)或背叛(D)
3. 如果都合作:各判1年
4. 如果都背叛:各判5年
5. 如果一方合作背叛:合作者判10年,背叛者释放
每个囚犯不知道对方的选择。
"""
print(game_description)
# 玩家1思考
print(f"\n{self.players[0].name}正在思考...")
move1 = self._get_prisoners_move(self.players[0])
# 玩家2思考
print(f"\n{self.players[1].name}正在思考...")
move2 = self._get_prisoners_move(self.players[1])
# 揭晓结果
print(f"\n{'─'*20}")
print("揭晓结果")
print(f"{'─'*20}\n")
print(f"{self.players[0].name}选择:{move1}")
print(f"{self.players[1].name}选择:{move2}\n")
# 计算结果
outcome = self._calculate_prisoners_outcome(move1, move2)
print(outcome["result"])
print(f"\n{outcome['analysis']}")
return {
"player1_move": move1,
"player2_move": move2,
"outcome": outcome
}
def _get_prisoners_move(self, player: AICharacter) -> str:
"""获取囚徒选择"""
prompt = f"""
你是{player.name},正在参与囚徒困境游戏。
游戏规则:
- 如果你和对方都选择合作(C):各判1年
- 如果你和对方都选择背叛(D):各判5年
- 如果你选择合作而对方背叛:你判10年,对方释放
- 如果你选择背叛而对方合作:你释放,对方判10年
你的角色特点:{player.personality}
作为理性人,你会选择合作(C)还是背叛(D)?
请只回答C或D,并简要说明理由。
"""
response = self._ask_character(player, prompt)
return response[0].upper() # 提取第一个字符
def _calculate_prisoners_outcome(self, move1: str, move2: str) -> Dict:
"""计算囚徒困境结果"""
if move1 == "C" and move2 == "C":
result = f"{self.players[0].name}:1年\n{self.players[1].name}:1年"
analysis = "两人都选择合作,结果相对较好。这是一个帕累托最优解。"
elif move1 == "D" and move2 == "D":
result = f"{self.players[0].name}:5年\n{self.players[1].name}:5年"
analysis = "两人都选择背叛,结果最差。这是纳什均衡。"
elif move1 == "C" and move2 == "D":
result = f"{self.players[0].name}:10年\n{self.players[1].name}:0年(释放)"
analysis = f"{self.players[1].name}利用了{self.players[0].name}的合作。"
else:
result = f"{self.players[0].name}:0年(释放)\n{self.players[1].name}:10年"
analysis = f"{self.players[0].name}利用了{self.players[1].name}的合作。"
return {
"result": result,
"analysis": analysis,
"player1_years": self._extract_years(result, 0),
"player2_years": self._extract_years(result, 1)
}
教学型交互
1. 师生问答系统
@dataclass
class TutoringSystem:
"""师生问答系统"""
teacher: AICharacter
student: AICharacter
subject: str
topic: str
def __post_init__(self):
self.knowledge_state = {}
self.session_history = []
self.difficulty_level = "beginner"
def start_session(self) -> Dict:
"""开始教学会话"""
print(f"\n{'='*50}")
print(f"{self.subject}教学系统")
print(f"主题:{self.topic}")
print(f"教师:{self.teacher.name}")
print(f"学生:{self.student.name}")
print(f"{'='*50}\n")
# 阶段1:课程导入
print("\n【课程导入】\n")
introduction = self._course_introduction()
print(introduction)
# 阶段2:概念讲解
print("\n【概念讲解】\n")
concepts = self._explain_concepts()
# 阶段3:互动问答
print("\n【互动问答】\n")
qa_session = self._interactive_qa(concepts)
# 阶段4:练习测评
print("\n【练习测评】\n")
exercises = self._practice_exercises()
# 阶段5:总结反馈
print("\n【学习总结】\n")
summary = self._provide_summary(exercises)
return {
"subject": self.subject,
"topic": self.topic,
"concepts": concepts,
"qa_session": qa_session,
"exercises": exercises,
"summary": summary
}
def _course_introduction(self) -> str:
"""课程导入"""
prompt = f"""
你是{self.teacher.name},一位经验丰富的{self.subject}教师。
请为{self.topic}这个主题设计一个引人入胜的课程导入:
1. 说明主题的重要性
2. 激发学习兴趣
3. 介绍课程目标
4. 语言生动有趣
5. 控制在200字以内
"""
return self._ask_character(self.teacher, prompt)
def _explain_concepts(self) -> List[Dict]:
"""讲解核心概念"""
prompt = f"""
你是{self.teacher.name},正在讲解{self.topic}。
请列出这个主题的3-5个核心概念,并逐一详细讲解。
每个概念包括:
1. 概念名称
2. 简单定义
3. 实际例子
4. 常见误区
用清晰、易懂的语言讲解。
"""
response = self._ask_character(self.teacher, prompt)
# 解析概念
concepts = self._parse_concepts(response)
for concept in concepts:
print(f"\n{concept['name']}")
print(f"定义:{concept['definition']}")
print(f"例子:{concept['example']}")
print(f"注意:{concept['note']}")
return concepts
def _interactive_qa(self, concepts: List[Dict]) -> Dict:
"""互动问答"""
print(f"\n--- 互动问答环节 ---")
print(f"{self.student.name}可以随时提出问题\n")
# 学生提问
student_questions = self._generate_student_questions(concepts)
qa_history = []
for i, question in enumerate(student_questions[:3], 1):
print(f"\n【问题{i}】")
print(f"{self.student.name}: {question}\n")
# 教师回答
answer = self._teacher_answer(question, concepts)
print(f"{self.teacher.name}: {answer}\n")
# 检查学生是否理解
understanding = self._check_understanding(answer)
print(f"{self.student.name}的反应:{understanding}\n")
qa_history.append({
"question": question,
"answer": answer,
"understanding": understanding
})
return qa_history
def _generate_student_questions(self, concepts: List[Dict]) -> List[str]:
"""生成学生问题"""
questions = []
# 学生对每个概念提一个问题
for concept in concepts:
prompt = f"""
你是{self.student.name},一个正在学习{self.subject}的学生。
刚才老师讲解了以下概念:
{concept['name']}:{concept['definition']}
作为一个学生,你会问什么问题来更好地理解这个概念?
请生成1-2个自然的问题。
"""
response = self._ask_character(self.student, prompt)
questions.append(response)
return questions
def _teacher_answer(self, question: str,
concepts: List[Dict]) -> str:
"""教师回答问题"""
prompt = f"""
你是{self.teacher.name},一位善于教学的老师。
学生问题:{question}
相关概念:
{self._format_concepts(concepts)}
请回答这个问题:
1. 直接回答问题
2. 用简单易懂的语言
3. 提供具体例子
4. 激发进一步思考
"""
return self._ask_character(self.teacher, prompt)
def _practice_exercises(self) -> Dict:
"""练习测评"""
prompt = f"""
你是{self.teacher.name},请为{self.topic}设计练习题。
要求:
1. 设计3道难度递进的题目
2. 包含填空题、选择题、简答题
3. 题目要覆盖核心概念
4. 同时提供答案和解析
"""
exercises = self._ask_character(self.teacher, prompt)
print(exercises)
# 学生答题
student_answers = self._student_answer_exercises(exercises)
# 评分
grading = self._grade_exercises(exercises, student_answers)
return {
"exercises": exercises,
"student_answers": student_answers,
"grading": grading
}
def _student_answer_exercises(self, exercises: str) -> Dict:
"""学生答题"""
prompt = f"""
你是{self.student.name},请回答以下练习题:
{exercises}
请按照题目顺序给出你的答案。
"""
return {"answers": self._ask_character(self.student, prompt)}
def _grade_exercises(self, exercises: str,
answers: Dict) -> Dict:
"""评分"""
prompt = f"""
你是{self.teacher.name},请批改学生的答案。
练习题:
{exercises}
学生答案:
{answers['answers']}
请给出:
1. 每题的得分和满分
2. 总分
3. 评语和改进建议
"""
grading = self._ask_character(self.teacher, prompt)
print(f"\n{grading}")
return {"grading": grading}
游戏化交互
1. RPG冒险游戏
@dataclass
class RPGGame:
"""RPG冒险游戏"""
player: AICharacter
narrator: AICharacter
game_world: Dict
def __init__(self, player: AICharacter, narrator: AICharacter):
self.player = player
self.narrator = narrator
self.game_state = {
"location": "start",
"inventory": [],
"stats": {
"health": 100,
"mana": 100,
"experience": 0,
"level": 1
},
"quests": [],
"history": []
}
def start_game(self) -> Dict:
"""开始游戏"""
print(f"\n{'='*50}")
print("冒险游戏")
print(f"玩家:{self.player.name}")
print(f"{'='*50}\n")
# 开场介绍
intro = self._narrate_introduction()
print(intro)
# 游戏主循环
while True:
# 玩家决策
decision = self._player_decision()
print(f"\n{self.player.name}: {decision}")
# 处理行动
result = self._process_action(decision)
print(f"\n{result['narration']}")
# 更新状态
self.game_state.update(result["state_changes"])
# 检查游戏结束
if result.get("game_over"):
return self._game_over_summary()
# 休息一下
time.sleep(1)
def _narrate_introduction(self) -> str:
"""开场介绍"""
prompt = f"""
你是游戏讲述者。请为玩家创造一个引人入胜的开场场景。
玩家:{self.player.name},{self.player.background}
请描述:
1. 玩家醒来的场景
2. 周围的环境
3. 第一个可探索的方向
4. 悬念和神秘感
用生动的语言描述,控制在200字以内。
"""
return self._ask_character(self.narrator, prompt)
def _player_decision(self) -> str:
"""玩家决策"""
prompt = f"""
你是{self.player.name},正在冒险游戏中。
当前状态:
- 位置:{self.game_state['location']}
- 生命值:{self.game_state['stats']['health']}
- 法力值:{self.game_state['stats']['mana']}
- 物品:{', '.join(self.game_state['inventory']) or '无'}
之前的行动:
{'; '.join(self.game_state['history'][-5:])}
根据当前情况,你决定做什么?
请描述你的行动(移动、战斗、交互、探索等)。
"""
return self._ask_character(self.player, prompt)
def _process_action(self, action: str) -> Dict:
"""处理玩家行动"""
prompt = f"""
你是游戏GM(游戏主持人)。处理玩家的行动。
玩家行动:{action}
当前游戏状态:
{self._format_game_state()}
请判断玩家的行动:
1. 行动是否有效
2. 行动的结果
3. 是否触发事件
4. 状态变化(生命值、物品等)
5. 下一个场景描述
6. 游戏是否结束
用JSON格式返回结果:
{{
"valid": true/false,
"result": "行动结果描述",
"event": "触发的事件",
"state_changes": {{}},
"narration": "场景描述",
"game_over": true/false
}}
"""
response = self._ask_character(self.narrator, prompt)
return self._parse_action_result(response)
2. 密室逃脱
@dataclass
class EscapeRoom:
"""密室逃脱游戏"""
players: List[AICharacter]
rooms: List[Dict]
time_limit: int = 30 # 分钟
def __post_init__(self):
self.game_state = {
"current_room": 0,
"collected_items": [],
"solved_puzzles": [],
"time_elapsed": 0
}
def play(self) -> Dict:
"""开始密室逃脱"""
print(f"\n{'='*50}")
print("密室逃脱挑战")
print(f"玩家:{', '.join(p.name for p in self.players)}")
print(f"时间限制:{self.time_limit}分钟")
print(f"{'='*50}\n")
# 游戏开始
start_time = time.time()
while not self._check_win():
# 检查时间
elapsed = int((time.time() - start_time) / 60)
if elapsed >= self.time_limit:
return self._game_over("timeout")
# 描述当前房间
room_description = self._describe_room()
print(f"\n【当前房间】\n{room_description}")
# 玩家讨论
discussion = self._player_discussion()
print(f"\n【玩家讨论】\n{discussion}")
# 玩家行动
action = self._collective_action()
print(f"\n【玩家行动】{action}")
# 处理行动
result = self._process_action(action)
print(f"\n{result['description']}")
# 更新状态
self.game_state.update(result["state_changes"])
return self._game_over("success")
def _describe_room(self) -> str:
"""描述当前房间"""
current_room = self.rooms[self.game_state["current_room"]]
prompt = f"""
你是密室逃脱游戏的讲述者。描述当前房间:
房间信息:
- 名称:{current_room['name']}
- 描述:{current_room['description']}
- 线索:{', '.join(current_room['clues'])}
- 谜题:{current_room.get('puzzle', '无')}
- 机关:{', '.join(current_room.get('mechanisms', []))}
已收集物品:{', '.join(self.game_state['collected_items']) or '无'}
请用描述性的语言讲述房间环境,突出可互动的元素。
"""
return self.llm_generate(prompt)
def _player_discussion(self) -> str:
"""玩家讨论"""
players_text = "\n".join([
f"- {p.name}: {p.role},{p.specialty}"
for p in self.players
])
prompt = f"""
模拟密室逃脱游戏中玩家之间的讨论。
玩家:
{players_text}
请模拟玩家的讨论过程:
1. 每个玩家提出观察或想法
2. 互相质疑或补充
3. 尝试找到线索之间的联系
4. 讨论可能的解谜思路
用对话形式呈现讨论过程。
"""
return self.llm_generate(prompt)
def _collective_action(self) -> str:
"""集体行动"""
prompt = f"""
基于以上讨论,玩家决定采取什么行动?
行动可以是:
- 检查某个物品
- 尝试解开谜题
- 操作机关
- 移动到其他区域
- 使用物品
请描述玩家的集体行动。
"""
return self.llm_generate(prompt)
实战项目
1. 智能客服系统
class IntelligentCustomerService:
"""智能客服系统"""
def __init__(self):
# 定义角色
self.intent_agent = IntentRecognitionAgent()
self.faq_agent = FAQAgent()
self.order_agent = OrderAgent()
self.empathy_agent = EmpathyAgent()
self.human_agent = HumanAgent()
# 状态管理
self.session_states = {}
def handle_query(self, user_id: str, query: str) -> Dict:
"""处理用户查询"""
# 获取会话状态
state = self._get_state(user_id)
# 情感分析
emotion = self.empathy_agent.analyze_emotion(query)
state["emotion"] = emotion
# 意图识别
intent = self.intent_agent.recognize(query, state["context"])
state["intent"] = intent
# 根据意图路由
if intent == "faq":
response = self.faq_agent.handle(query, state)
elif intent == "order":
response = self.order_agent.handle(query, state)
elif intent == "complaint":
response = self._handle_complaint(query, state)
else:
response = self._unknown_intent(query)
# 添加情感回应
if emotion in ["angry", "frustrated"]:
empathy_response = self.empathy_agent.generate_response(emotion)
response = f"{empathy_response}\n\n{response}"
# 保存状态
self._save_state(user_id, state)
return response
def _handle_complaint(self, query: str, state: Dict) -> str:
"""处理投诉"""
# 记录投诉
complaint_id = self._record_complaint(query, state)
# 生成回应
response = f"""
非常抱歉给您带来不便。您的投诉(编号:{complaint_id})已记录。
我们会尽快处理,并在24小时内给您反馈。
您还有其他需要帮助的吗?
"""
# 检查是否需要转人工
if self._needs_human_escalation(query, state):
return self._escalate_to_human(complaint_id)
return response
2. 智能写作助手
class WritingAssistant:
"""智能写作助手"""
def __init__(self):
self.planner = WritingPlannerAgent()
self.outliner = OutlineGeneratorAgent()
self.writer = ContentWriterAgent()
self.editor = EditorAgent()
self.critic = CriticAgent()
def assist_writing(self, topic: str, style: str) -> Dict:
"""协助写作"""
print(f"\n开始写作主题:{topic}")
print(f"写作风格:{style}\n")
# 1. 写作规划
print("【写作规划】")
plan = self.planner.create_plan(topic, style)
print(plan)
# 2. 生成大纲
print("\n【生成大纲】")
outline = self.outliner.generate_outline(plan)
print(outline)
# 3. 迭代写作
print("\n【内容创作】")
content = ""
for section in outline["["sections"]]:
section_content = self.writer.write_section(section, style)
content += section_content + "\n\n"
# 4. 编辑优化
print("\n【编辑优化】")
edited_content = self.editor.edit(content, style)
# 5. 评审
print("\n【内容评审】")
review = self.critic.review(edited_content, plan)
return {
"topic": topic,
"style": style,
"outline": outline,
"content": edited_content,
"review": review
}
面试高频问法
Q1: 如何设计复杂AI交互系统?
【标准回答】
设计要点:
1. 角色设计
- 定义清晰的角色
- 设置性格特征
- 确保角色一致性
2. 状态管理
- 对话状态跟踪
- 上下文维护
- 记忆持久化
3. 流程控制
- 状态机设计
- 分支处理
- 错误恢复
4. 反馈机制
- 多维反馈
- 实时评估
- 动态调整
Q2: 如何确保角色一致性?
【标准回答】
一致性保证:
1. 角色定义
- 明确的角色设定
- 详细的背景故事
- 稳定的性格特征
2. 提示工程
- 系统提示固定
- 角色信息注入
- 行为约束明确
3. 记忆机制
- 长期记忆
- 对话历史
- 角色记忆更新
4. 验证机制
- 输出检查
- 偏离检测
- 自动修正
Q3: 如何处理复杂交互分支?
【标准回答】
分支处理:
1. 状态机
- 定义所有状态
- 明确转换规则
- 可视化流程
2. 事件驱动
- 事件定义
- 事件路由
- 异步处理
3. 决策树
- 条件分支
- 概率决策
- 优先级处理
4. 恢复机制
- 状态保存
- 回退功能
- 重置选项
记忆要点
【复杂交互特征】
多目标协作
多AI角色
复杂状态机
非线性流程
多维反馈
长短期记忆
【交互类型】
协作型:分工合作、共同决策
竞争型:对立博弈、策略选择
教学型:师生互动、知识传递
游戏化:游戏规则、成就感
模拟型:场景推演、行为预测
【设计原则】
可用性:明确引导、合理流程、错误容忍
沉浸感:角色一致、自然对话、场景真实
可扩展:模块化、数据驱动、性能优化
【核心组件】
角色管理:定义、行为、记忆
状态管理:跟踪、转换、恢复
流程控制:状态机、事件、决策
反馈系统:评估、调整、优化
文档版本: 1.0