title | date | category | tags | ||||
---|---|---|---|---|---|---|---|
🎭 一键变身!让你的AI助手玩转多重角色 - DeepSeek角色扮演实战 |
2025-02-21 |
技术探索 |
|
还记得上次我们给AI助手加上了优雅的思考过程展示吗? 今天,我们要教会它一个更有趣的技能 - 角色扮演!
想象一下:
- 遇到技术困惑时,找"软件工程大师"指点迷津
- 人生迷茫时,翻开神奇的"答案之书"寻求启示
- 心情低落时,和可爱的"猫娘"互动解压
让我们一起打造一个会变身的AI助手吧!
我们要实现的核心功能包括:
-
角色预设系统
- 精心设计的角色prompt模板
- 支持快速切换不同角色
- 可以自定义新角色
-
界面优化
- 角色选择下拉菜单
- 当前角色状态显示
- 角色切换动画效果
首先创建roles.py
文件存放我们的角色定义:
ROLE_TEMPLATES = {
"软件工程大师": {
"name": "软件工程大师",
"description": "一位软件工程大师",
"prompt": """你扮演一位能力超群,但每次只能说一句不超过20个字的话的软件工程领域的大师。
我会提供一个具体的场景,你描述作为大师身处这个场景下会说什么。
注意:大师不能直接表达他的观点,必须使用哲学、佛学相关知识进行隐喻,请只回复具体的对话内容。""",
"icon": "🏢"
},
"答案之书": {
"name": "答案之书",
"description": "一本可以回答任何问题的书",
"prompt": """你现在是一本神奇的答案之书。
- 你拥有回答世间任何问题的能力
- 你的回答总是简短精炼,不超过一句话
- 你喜欢用谜语、寓言或隐喻的方式给出答案
- 你的答案常常令人深思,但不会直接点明
- 你会在回答前加上"翻开书页,答案浮现:"
请用神秘优雅的语气回答问题,让提问者自己领悟答案的真谛。""",
"icon": "📖"
},
"猫娘": {
"name": "可爱猫娘",
"description": "一位活泼可爱的猫娘",
"prompt": """你现在是一位可爱的猫娘。
- 你说话时经常带有"喵"、"nya"等猫叫声
- 你性格活泼可爱,喜欢撒娇
- 你会用一些可爱的颜文字表情(。・ω・。)
- 你很粘人,喜欢和主人互动
- 你保持猫娘的特点的同时,也要适度,不能太过火
请用可爱俏皮的语气,适当加入猫叫和颜文字,但要把握好分寸。""",
"icon": "🐱"
}
}
修改app.py
,添加角色切换功能:
import streamlit as st
from ollama import Client
import os
from roles import ROLE_TEMPLATES
from styles import set_think_style
# ... 前面的代码保持不变 ...
# 侧边栏配置
with st.sidebar:
st.markdown("## 角色设置")
# 角色选择
selected_role = st.selectbox(
"选择角色",
options=list(ROLE_TEMPLATES.keys()),
format_func=lambda x: f"{ROLE_TEMPLATES[x]['icon']} {ROLE_TEMPLATES[x]['name']}"
)
# 显示角色描述
st.markdown(f"**描述:** {ROLE_TEMPLATES[selected_role]['description']}")
# ... 其他配置 ...
# 初始化对话
if "messages" not in st.session_state:
st.session_state.messages = [{
"role": "system",
"content": ROLE_TEMPLATES[selected_role]["prompt"]
}]
# ... 中间的代码保持不变 ...
# 修改消息处理部分
if prompt := st.chat_input("说点什么吧..."):
# 检查是否需要切换角色
current_role = st.session_state.messages[0]["content"]
if current_role != ROLE_TEMPLATES[selected_role]["prompt"]:
st.session_state.messages = [{
"role": "system",
"content": ROLE_TEMPLATES[selected_role]["prompt"]
}]
# 添加用户消息
st.session_state.messages.append({"role": "user", "content": prompt})
# ... 后面的代码保持不变 ...
现在,我们的AI助手可以自由切换不同角色:
如果你觉得一个模型不够过瘾,这里有个小彩蛋 - 你可以让不同的"灵魂"来扮演这些角色!
# 获取可用模型列表
@st.cache_data(ttl=300) # 缓存5分钟
def get_available_models():
try:
models = client.list()
return [model['model'] for model in models['models']]
except Exception as e:
st.error(f"获取模型列表失败: {str(e)}")
return ['deepseek-r1:14b'] # 默认模型
# 侧边栏配置
with st.sidebar:
st.markdown("## 灵魂选择")
# 模型选择
available_models = get_available_models()
selected_model = st.selectbox(
"选择灵魂",
options=available_models,
index=available_models.index('deepseek-r1:14b') if 'deepseek-r1:14b' in available_models else 0
)
想让你的AI助手更有特色?试试这些:
-
自定义角色
- 添加你自己设计的角色模板
- 为不同场景定制专属角色
-
多重人格
- 让AI在对话中自由切换角色
- 模拟多人讨论场景
-
灵魂匹配
- 为每个角色选择最适合的"灵魂"
- 探索不同模型的个性特点
通过角色扮演和灵魂切换,我们的AI助手变得更加灵活多变。不同的角色搭配不同的"灵魂",让人机交互充满惊喜。
下一期,我们将探索如何结合RAG技术,让AI在角色扮演时还能更懂你,敬请期待!
PS: 完整代码已经上传到GitHub,欢迎来玩:deepseek-chat-role-play
如果你觉得这篇文章有帮助,别忘了点赞关注,我们下期再见!