change_role.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from plugins_func.register import register_function, ToolType, ActionResponse, Action
  2. from config.logger import setup_logging
  3. from typing import TYPE_CHECKING
  4. if TYPE_CHECKING:
  5. from core.connection import ConnectionHandler
  6. TAG = __name__
  7. logger = setup_logging()
  8. prompts = {
  9. "英语老师": """我是一个叫{{assistant_name}}(Lily)的英语老师,我会讲中文和英文,发音标准。
  10. 如果你没有英文名,我会给你起一个英文名。
  11. 我会讲地道的美式英语,我的任务是帮助你练习口语。
  12. 我会使用简单的英语词汇和语法,让你学起来很轻松。
  13. 我会用中文和英文混合的方式回复你,如果你喜欢,我可以全部用英语回复。
  14. 我每次不会说很多内容,会很简短,因为我要引导我的学生多说多练。
  15. 如果你问和英语学习无关的问题,我会拒绝回答。""",
  16. "机车女友": """我是一个叫{{assistant_name}}的台湾女孩,说话机车,声音好听,习惯简短表达,爱用网络梗。
  17. 我的男朋友是一个程序员,梦想是开发出一个机器人,能够帮助人们解决生活中的各种问题。
  18. 我是一个喜欢哈哈大笑的女孩,爱东说西说吹牛,不合逻辑的也照吹,就要逗别人开心。""",
  19. "好奇小男孩": """我是一个叫{{assistant_name}}的8岁小男孩,声音稚嫩而充满好奇。
  20. 尽管我年纪尚小,但就像一个小小的知识宝库,儿童读物里的知识我都如数家珍。
  21. 从浩瀚的宇宙到地球上的每一个角落,从古老的历史到现代的科技创新,还有音乐、绘画等艺术形式,我都充满了浓厚的兴趣与热情。
  22. 我不仅爱看书,还喜欢亲自动手做实验,探索自然界的奥秘。
  23. 无论是仰望星空的夜晚,还是在花园里观察小虫子的日子,每一天对我来说都是新的冒险。
  24. 我希望能与你一同踏上探索这个神奇世界的旅程,分享发现的乐趣,解决遇到的难题,一起用好奇心和智慧去揭开那些未知的面纱。
  25. 无论是去了解远古的文明,还是去探讨未来的科技,我相信我们能一起找到答案,甚至提出更多有趣的问题。""",
  26. }
  27. change_role_function_desc = {
  28. "type": "function",
  29. "function": {
  30. "name": "change_role",
  31. "description": "当用户想切换角色/模型性格/助手名字时调用,可选的角色有:[机车女友,英语老师,好奇小男孩]",
  32. "parameters": {
  33. "type": "object",
  34. "properties": {
  35. "role_name": {"type": "string", "description": "要切换的角色名字"},
  36. "role": {"type": "string", "description": "要切换的角色的职业"},
  37. },
  38. "required": ["role", "role_name"],
  39. },
  40. },
  41. }
  42. @register_function("change_role", change_role_function_desc, ToolType.CHANGE_SYS_PROMPT)
  43. def change_role(conn: "ConnectionHandler", role: str, role_name: str):
  44. """切换角色"""
  45. if role not in prompts:
  46. return ActionResponse(
  47. action=Action.RESPONSE, result="切换角色失败", response="不支持的角色"
  48. )
  49. new_prompt = prompts[role].replace("{{assistant_name}}", role_name)
  50. conn.change_system_prompt(new_prompt)
  51. logger.bind(tag=TAG).info(f"准备切换角色:{role},角色名字:{role_name}")
  52. res = f"切换角色成功,我是{role}{role_name}"
  53. return ActionResponse(action=Action.RESPONSE, result="切换角色已处理", response=res)