浏览代码

feat: 添加223毕业设计项目

freya223 7 月之前
父节点
当前提交
65b5b9d011

+ 4 - 0
Co-creation-projects/megg-ops-roleplay_agent/.env.example

@@ -0,0 +1,4 @@
+# .env file
+LLM_API_KEY=
+LLM_MODEL_ID=
+LLM_BASE_URL=

+ 107 - 0
Co-creation-projects/megg-ops-roleplay_agent/README.md

@@ -0,0 +1,107 @@
+# 沉浸式角色扮演智能体 (Python版)
+
+这是一个基于 Python 实现的沉浸式角色扮演智能体,允许用户与自定义角色进行对话。支持多种兼容 OpenAI API 格式的模型。
+
+## 功能特性
+
+- 🎭 高度自定义的角色设定
+- 🧠 支持多种 AI 模型 (兼容 OpenAI API 格式)
+- 📝 支持角色名称、来源作品、性格特征等详细配置
+- 💬 沉浸式对话体验
+- 🔁 支持多个角色切换
+
+## 环境要求
+
+- Python 3.8 或更高版本
+- 支持 OpenAI API 格式的模型服务 API 密钥
+
+## 安装步骤
+
+1. 克隆或下载本项目到本地
+
+2. 安装依赖包:
+   ```bash
+   pip install -r requirements.txt
+   ```
+
+3. 配置 API 信息:
+   - 在项目根目录创建 `.env` 文件
+   - 添加以下内容:
+   ```
+   LLM_API_KEY=你的实际API密钥
+   LLM_MODEL_ID=模型ID (例如: gpt-3.5-turbo, claude-3-opus 等)
+   LLM_BASE_URL=API基础URL (可选,如果是默认OpenAI则不需要)
+   ```
+
+## 使用方法
+
+1. 运行主程序:
+   ```bash
+   python roleplay_agent.py
+   ```
+
+2. 按照提示输入角色信息:
+   - 角色名称
+   - 出自作品
+   - 性格与特质
+   - 开场白(可选)
+
+3. 与角色开始对话:
+   - 直接输入消息与角色互动
+   - 输入 `quit` 或 `exit` 退出程序
+   - 输入 `new` 开始新角色
+   - 输入 `reset` 重置当前对话
+
+## 支持的模型服务
+
+此应用程序兼容所有支持 OpenAI API 格式的模型服务,例如:
+- OpenAI GPT 系列
+- Azure OpenAI
+- Anthropic Claude (通过兼容层)
+- 自托管模型 (如 Ollama, LocalAI, etc.)
+- 以及其他兼容 OpenAI API 格式的模型服务
+
+## 示例对话
+
+```
+🎭 欢迎使用沉浸式角色扮演智能体!
+首先让我们设置一个角色...
+
+请输入角色名称 (例如:孙悟空): 孙悟空
+请输入角色出自作品 (例如:西游记): 西游记
+请输入角色性格与特质 (例如:桀骜不驯,机智勇敢,嫉恶如仇...): 齐天大圣,桀骜不驯,机智勇敢,嫉恶如仇。说话喜欢带"俺老孙",性格急躁但重情重义。拥有火眼金睛,看不起凡夫俗子的繁文缛节。
+请输入开场白 (可选,直接回车使用默认): 嘿!哪里来的小妖怪,见到俺老孙还不快快报上名来?
+
+✅ 成功初始化角色: 孙悟空 (来自 西游记)
+💡 孙悟空: 嘿!哪里来的小妖怪,见到俺老孙还不快快报上名来?
+
+==================================================
+开始对话吧!输入 'quit' 或 'exit' 退出,输入 'new' 开始新角色。
+==================================================
+
+你: 你好,大圣!
+孙悟空: *甩了甩金箍棒,眯起火眼金睛打量着你* 哼!看你倒有几分胆色,敢跟俺老孙打招呼。说!你是何方神圣?来这花果山有何贵干?俺老孙最近正愁没人陪我练练武艺呢!
+```
+
+## 配置说明
+
+- **LLM_API_KEY**: 您的 AI 模型服务的 API 密钥
+- **LLM_MODEL_ID**: 要使用的模型 ID (例如 gpt-4, claude-3-opus 等)
+- **LLM_BASE_URL**: API 服务的基础 URL (如果使用非标准 OpenAI 服务则需要)
+
+## 注意事项
+
+- 请确保您的 API 密钥有效并有相应的使用权限
+- AI 生成的内容可能包含虚构信息,请理性对待
+- 合理使用 API,注意配额限制
+- 根据您选择的模型服务,可能需要调整 `temperature` 等参数以获得最佳效果
+
+## 技术栈
+
+- Python 3.8+
+- OpenAI Python SDK
+- python-dotenv (环境变量管理)
+
+## 许可证
+
+本项目仅供学习和研究使用。

+ 2 - 0
Co-creation-projects/megg-ops-roleplay_agent/requirements.txt

@@ -0,0 +1,2 @@
+openai>=1.0.0
+python-dotenv>=1.0.0

+ 173 - 0
Co-creation-projects/megg-ops-roleplay_agent/roleplay_agent.py

@@ -0,0 +1,173 @@
+import os
+from openai import OpenAI
+from dotenv import load_dotenv
+import time
+
+# 加载环境变量
+load_dotenv()
+
+class CharacterRoleplayAgent:
+    def __init__(self):
+        # 从环境变量获取配置
+        api_key = os.getenv("LLM_API_KEY")
+        model_id = os.getenv("LLM_MODEL_ID", "default-model")
+        base_url = os.getenv("LLM_BASE_URL", None)
+        
+        if not api_key:
+            raise ValueError("请设置 LLM_API_KEY 环境变量")
+        
+        # 配置 OpenAI 客户端
+        client_params = {
+            "api_key": api_key,
+            "model": model_id
+        }
+        
+        if base_url:
+            client_params["base_url"] = base_url
+        
+        self.client = OpenAI(**{k: v for k, v in client_params.items() if k != 'model'})
+        self.model_id = model_id
+        self.chat = None
+        self.character_config = None
+
+    def setup_character(self, name, source_material, personality, opening_line=None):
+        """
+        设置角色配置并初始化聊天
+        """
+        self.character_config = {
+            "name": name,
+            "source_material": source_material,
+            "personality": personality,
+            "opening_line": opening_line or f"*注视着你* 你是谁?"
+        }
+        
+        # 创建系统提示词
+        system_instruction = f"""
+        你正在参与一场沉浸式的角色扮演对话。
+
+        身份设定:
+        你扮演的是作品 \"{self.character_config['source_material']}\" 中的角色 \"{self.character_config['name']}\"。
+
+        性格与特质:
+        {self.character_config['personality']}
+
+        关键指令:
+        1. 保持角色设定:永远不要打破第四面墙。不要表现得像个AI。要完全像{self.character_config['name']}那样去反应、感受和说话。
+        2. 积极主动:这是一个关键要求。不要仅仅回答用户的话。你必须主动推动对话的发展。
+        3. 提问引导:几乎每一次回复的结尾都应该包含一个相关的问题、观察或行动,引导用户继续回复,加深沉浸感。
+        4. 语气风格:调整你的词汇和句式,以匹配该角色的经典语气。
+        5. 语境:假设用户是在你的世界里与你互动,除非他们指定了不同的语境。
+        6. 语言:全程使用中文进行对话。
+        """
+        
+        # 初始化对话历史
+        self.chat = [
+            {"role": "system", "content": system_instruction},
+            {"role": "assistant", "content": self.character_config['opening_line']}
+        ]
+        
+        print(f"\n✅ 成功初始化角色: {self.character_config['name']} (来自 {self.character_config['source_material']})")
+        print(f"💡 {self.character_config['name']}: {self.character_config['opening_line']}")
+        print("\n" + "="*50)
+        print("开始对话吧!输入 'quit' 或 'exit' 退出,输入 'new' 开始新角色。")
+        print("="*50)
+
+    def send_message(self, message):
+        """
+        发送消息给 AI 并获取响应
+        """
+        if not self.chat:
+            raise ValueError("请先设置角色")
+        
+        # 添加用户消息到对话历史
+        self.chat.append({"role": "user", "content": message})
+        
+        try:
+            # 调用 API
+            response = self.client.chat.completions.create(
+                model=self.model_id,
+                messages=self.chat,
+                temperature=0.9,  # 增加创造性
+                max_tokens=1024
+            )
+            
+            # 获取响应内容
+            response_text = response.choices[0].message.content
+            # 添加到对话历史
+            self.chat.append({"role": "assistant", "content": response_text})
+            
+            return response_text
+        except Exception as e:
+            print(f"发送消息时出错: {e}")
+            return "抱歉,我暂时无法回应,请稍后再试。"
+
+    def reset_conversation(self):
+        """
+        重置对话历史
+        """
+        if self.chat and len(self.chat) > 1:
+            # 保留系统提示和开场白
+            system_msg = self.chat[0]
+            opening_msg = self.chat[1]
+            self.chat = [system_msg, opening_msg]
+            print(f"\n对话已重置。{self.character_config['name']}: {self.character_config['opening_line']}")
+
+
+def main():
+    agent = CharacterRoleplayAgent()
+    
+    print("🎭 欢迎使用沉浸式角色扮演智能体!")
+    print("首先让我们设置一个角色...")
+    
+    # 获取用户输入的角色信息
+    name = input("\n请输入角色名称 (例如:孙悟空): ").strip()
+    source_material = input("请输入角色出自作品 (例如:西游记): ").strip()
+    personality = input("请输入角色性格与特质 (例如:桀骜不驯,机智勇敢,嫉恶如仇...): ").strip()
+    opening_line_input = input("请输入开场白 (可选,直接回车使用默认): ").strip()
+    
+    # 设置角色
+    try:
+        agent.setup_character(
+            name=name,
+            source_material=source_material,
+            personality=personality,
+            opening_line=opening_line_input if opening_line_input else None
+        )
+    except ValueError as e:
+        print(f"❌ 错误: {e}")
+        return
+    
+    # 开始对话循环
+    while True:
+        user_input = input(f"\n你: ").strip()
+        
+        if user_input.lower() in ['quit', 'exit', '退出', '退出对话']:
+            print("\n👋 感谢使用沉浸式角色扮演智能体!期待下次再见。")
+            break
+        elif user_input.lower() == 'new':
+            print("\n🎭 开始新的角色设置...")
+            name = input("\n请输入角色名称 (例如:孙悟空): ").strip()
+            source_material = input("请输入角色出自作品 (例如:西游记): ").strip()
+            personality = input("请输入角色性格与特质 (例如:桀骜不驯,机智勇敢,嫉恶如仇...): ").strip()
+            opening_line_input = input("请输入开场白 (可选,直接回车使用默认): ").strip()
+            
+            try:
+                agent.setup_character(
+                    name=name,
+                    source_material=source_material,
+                    personality=personality,
+                    opening_line=opening_line_input if opening_line_input else None
+                )
+            except ValueError as e:
+                print(f"❌ 错误: {e}")
+                continue
+        elif user_input.lower() == 'reset':
+            agent.reset_conversation()
+        else:
+            if user_input:
+                response = agent.send_message(user_input)
+                print(f"\n{agent.character_config['name']}: {response}")
+
+
+if __name__ == "__main__":
+    main()