十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

沉浸式角色扮演智能体实战:基于 OpenAI 兼容 API 构建可自定义角色的对话 Agent

沉浸式角色扮演智能体实战:基于 OpenAI 兼容 API 构建可自定义角色的对话 Agent 沉浸式角色扮演智能体实战基于 OpenAI 兼容 API 构建可自定义角色的对话 Agent【免费下载链接】hello-agents 《从零开始构建智能体》——从零开始的智能体原理与实践教程项目地址: https://gitcode.com/datawhalechina/hello-agents本文以 Datawhale hello-agents 开源教程社区共创项目 megg-ops-roleplay_agent 为主体完整剖析一个仅用约 170 行 Python 实现的沉浸式角色扮演智能体。文章将带你掌握它的安装配置、角色设定机制、对话控制命令与底层源码实现并学会将其推广到任何兼容 OpenAI API 格式的模型服务快速打造属于自己的第二人格角色对话程序。一、项目概览一个小而美的角色扮演 Agent在 hello-agents 教程的 共创项目区 中megg-ops-roleplay_agent是一个聚焦创意娱乐类别的社区作品它让用户与任意自定义角色进行沉浸式对话。整个项目仅由三个文件构成结构极其精简文件作用roleplay_agent.py程序唯一入口与全部实现约 170 行requirements.txtPython 依赖声明README.md项目说明文档据 README 介绍该智能体具备以下核心功能 高度自定义的角色设定角色名称、来源作品、性格特质、开场白均可自由配置 支持多种 AI 模型凡兼容 OpenAI API 格式的模型服务均可接入 沉浸式对话体验通过精心设计的系统提示词让模型入戏 支持多个角色切换对话中可随时通过命令切换新角色或重置当前角色。从架构上讲这是一个典型的LLM 驱动 Agent没有工具调用、没有外部检索全部智能都来自系统提示词System Prompt与大模型自身的角色扮演能力。正因如此它非常适合作为理解如何用提示词工程塑造 Agent 行为的入门范例与 hello-agents 教程 第一章 初识智能体 中LLM 智能体通过隐式世界模型与涌现能力处理任务的观点直接呼应。二、环境要求与安装步骤2.1 环境要求按 README 说明运行本项目需要满足两个前提Python 3.8 或更高版本支持 OpenAI API 格式的模型服务 API 密钥OpenAI、Azure OpenAI、Ollama、LocalAI 等均可详见后文。2.2 安装依赖在项目目录下执行pip install -r requirements.txtrequirements.txt 中的依赖只有两个且都指定了最低版本openai1.0.0 python-dotenv1.0.0openai官方 Python SDK版本不低于 1.0 以保证OpenAI客户端类与chat.completions接口可用python-dotenv用于从.env文件加载环境变量避免把密钥硬编码进源码。从源码看roleplay_agent.py 在模块顶层便调用了load_dotenv()因此只要项目根目录存在.env文件程序启动时就会自动读取其中的配置。三、API 配置三行环境变量接入任意模型3.1 创建 .env 文件在项目根目录创建.env文件填入以下内容LLM_API_KEY你的实际API密钥 LLM_MODEL_ID模型ID (例如: gpt-3.5-turbo, claude-3-opus 等) LLM_BASE_URLAPI基础URL (可选如果是默认OpenAI则不需要)三个变量的含义如下配置项是否必填说明LLM_API_KEY必填模型服务的 API 密钥LLM_MODEL_ID建议填写要使用的模型 ID如gpt-4、claude-3-opus、qwen-max等LLM_BASE_URL可选API 服务的基础 URL使用默认 OpenAI 服务时无需填写3.2 源码中的读取逻辑在 roleplay_agent.py 的CharacterRoleplayAgent.__init__中配置读取逻辑如下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 环境变量)需要注意三个由代码确认的细节LLM_API_KEY缺失会直接抛异常程序启动即检查未配置密钥时main()会捕获该ValueError并打印错误后退出LLM_MODEL_ID有默认值default-model若忘记配置请求会以default-model这个模型 ID 发出通常会导致服务端报错因此务必显式填写LLM_BASE_URL默认None客户端构造时仅当base_url非空才会传入见 第 25-28 行从而保持与默认 OpenAI 端点的兼容性。这种密钥走.env、端点可选注入的写法正是接入各类兼容服务的关键——换模型服务只需改.env代码完全不动。四、角色扮演机制源码拆解系统提示词如何让模型入戏整个智能体的灵魂在于setup_character()方法第 33-73 行。它接收四个参数构成一份完整的角色档案参数含义示例name角色名称孙悟空source_material角色出自的作品西游记personality性格与特质描述桀骜不驯机智勇敢嫉恶如仇…opening_line开场白可选嘿哪里来的小妖怪…其中opening_line若为空源码会使用默认值opening_line: opening_line or f*注视着你* 你是谁4.1 六条入戏指令构成的系统提示词setup_character()将角色档案拼装为一段结构化的系统提示词第 45-61 行包含身份设定“性格与特质”“关键指令”三部分其中关键指令共六条是保证沉浸感的精髓保持角色设定永远不要打破第四面墙不要表现得像个 AI要完全像角色那样反应、感受和说话积极主动不要仅仅回答用户的话必须主动推动对话发展提问引导几乎每一次回复结尾都应包含相关的问题、观察或行动引导用户继续回复语气风格调整词汇和句式匹配该角色的经典语气语境默认假设用户是在角色的世界里与其互动语言全程使用中文进行对话。这六条指令从身份一致性、主动性、互动性、风格模仿、语境假设、语言约束六个维度约束模型输出是可复用的角色扮演提示词模板。即便不运行代码读者也可以把这段模板直接迁移到其他支持 System Prompt 的对话应用中。4.2 对话历史的初始化与维护系统提示词构建完成后对话历史以消息列表形式初始化第 64-67 行self.chat [ {role: system, content: system_instruction}, {role: assistant, content: self.character_config[opening_line]} ]这里把开场白作为assistant的首条消息注入相当于让角色先开口用户一进入对话便能立刻感受到角色气质——这是提升首次交互沉浸感的小技巧。4.3 消息发送与关键采样参数send_message()第 75-102 行负责真正的模型调用response self.client.chat.completions.create( modelself.model_id, messagesself.chat, temperature0.9, # 增加创造性 max_tokens1024 )两个参数值得关注temperature0.9取值偏高刻意增加输出的随机性与创造性让角色回复更灵动、更有戏感代价是偶发不稳定。README 也提示用户可根据所选模型服务自行调整该参数以获得最佳效果max_tokens1024限制单次回复的最大 token 数避免角色长篇大论拖垮对话节奏。调用成功后用户消息与模型回复都会依次追加进self.chat使对话历史持续累积保证角色记得之前说过什么。4.4 对话重置只清过程保留人设reset_conversation()第 104-113 行实现了精准的重置语义保留系统提示词与开场白仅清空中间的用户与模型对话。system_msg self.chat[0] opening_msg self.chat[1] self.chat [system_msg, opening_msg]这样设计的好处是重置后角色人设不丢还能再次以开场白重新引导对话。此外第 108 行 用len(self.chat) 1做了保护只有确实存在可清空的对话历史时才执行重置。五、运行与交互命令行下的角色扮演主循环5.1 启动程序配置好.env并安装依赖后直接运行python roleplay_agent.py程序启动后会依次提示输入四类角色信息对应main()中 第 122-126 行 的input()调用 欢迎使用沉浸式角色扮演智能体 首先让我们设置一个角色... 请输入角色名称 (例如孙悟空): 请输入角色出自作品 (例如西游记): 请输入角色性格与特质 (例如桀骜不驯机智勇敢嫉恶如仇...): 请输入开场白 (可选直接回车使用默认):5.2 对话控制命令进入对话后主循环第 141-169 行支持四类控制命令命令作用源码实现位置quit/exit/退出/退出对话退出程序并打印告别语第 144-146 行new开始新一轮角色设定实现多角色切换第 147-163 行reset重置当前对话保留人设与开场白第 164-165 行其他输入作为用户消息发送给角色第 166-169 行命令匹配时统一执行了user_input.lower()转换第 144 行因此大小写输入均被接受。另外注意new分支中若角色设置抛错会continue回到循环避免因配置失败而崩溃。从代码结构看多个角色切换正是通过循环内反复调用setup_character()重新覆盖self.character_config与self.chat实现的切换角色即重新构建系统提示词与对话历史是一种简洁轻量的实现方案。六、兼容的模型服务一切 OpenAI API 格式皆可接入由于程序只依赖 OpenAI 官方 SDK 的chat.completions接口README 明确说明其兼容所有支持 OpenAI API 格式的模型服务例如OpenAI GPT 系列GPT-3.5 / GPT-4 等Azure OpenAI通过其 OpenAI 兼容端点Anthropic Claude通过兼容层自托管模型如 Ollama、LocalAI 等本地推理服务以及其他兼容 OpenAI API 格式的模型服务接入方法统一为在.env中设置对应服务的LLM_API_KEY、LLM_MODEL_ID与LLM_BASE_URL。例如本地使用 Ollama 时可将LLM_BASE_URL指向http://localhost:11434/v1LLM_MODEL_ID填本地的模型名即可。这与 hello-agents 教程 第三章 大语言模型基础 中强调的通过统一 API 接口屏蔽底层模型差异的思路一脉相承也让这个不到 200 行的程序具备了极高的模型可移植性。七、完整示例对话与孙悟空过招README 给出了一个完整的运行示例展示了从角色设定到沉浸式对话的全过程 欢迎使用沉浸式角色扮演智能体 首先让我们设置一个角色... 请输入角色名称 (例如孙悟空): 孙悟空 请输入角色出自作品 (例如西游记): 西游记 请输入角色性格与特质 (例如桀骜不驯机智勇敢嫉恶如仇...): 齐天大圣桀骜不驯机智勇敢嫉恶如仇。说话喜欢带俺老孙性格急躁但重情重义。拥有火眼金睛看不起凡夫俗子的繁文缛节。 请输入开场白 (可选直接回车使用默认): 嘿哪里来的小妖怪见到俺老孙还不快快报上名来 ✅ 成功初始化角色: 孙悟空 (来自 西游记) 孙悟空: 嘿哪里来的小妖怪见到俺老孙还不快快报上名来 开始对话吧输入 quit 或 exit 退出输入 new 开始新角色。 你: 你好大圣 孙悟空: *甩了甩金箍棒眯起火眼金睛打量着你* 哼看你倒有几分胆色敢跟俺老孙打招呼。说你是何方神圣来这花果山有何贵干俺老孙最近正愁没人陪我练练武艺呢注意示例中孙悟空回复的几处特征动作描写甩金箍棒、眯眼、人称称谓俺老孙、方言口吻何方神圣、有何贵干以及结尾的引导性提问来这花果山有何贵干——这正是系统提示词六条指令中语气风格与提问引导生效的直接体现示例可作为验证角色扮演效果的直观参照。八、调优建议与使用注意事项8.1 参数调优README 的注意事项部分提示了几条实践要点结合源码可以给出更具体的调优方向创造性调节若角色回复过于天马行空或前后矛盾可适当下调 send_message 中 的temperature如 0.7若回复呆板、缺乏人味可上调至 0.9 以上回复长度控制max_tokens1024可按需调整短句流利的角色可调小需要大段叙述的角色如说书人可调大性格描述越具体角色越立体从示例可见性格字段中补充口头禅俺老孙、行为习惯急躁但重情重义能显著提升扮演质量建议按语言风格 性格标签 独特习惯 价值观的结构编写。8.2 使用注意事项请确保 API 密钥有效且具有相应模型的使用权限AI 生成的内容可能包含虚构信息请理性对待合理使用 API注意配额限制避免因高频对话触发限流不同模型服务对角色扮演的能力差异较大效果不理想时可先尝试更换模型再调整提示词。九、技术栈小结与扩展思路项目的技术栈十分克制Python 3.8程序主体语言OpenAI Python SDK1.0.0完成所有模型调用python-dotenv1.0.0管理环境变量。从源码结构看CharacterRoleplayAgent将配置初始化__init__、角色设定setup_character、对话推理send_message、会话重置reset_conversation清晰分层为后续扩展留足了空间。读者可以在此基础上自然演进增加多角色同场对话将单份self.chat扩展为多角色各自独立的对话历史甚至引入多智能体轮询调度可参考 hello-agents 教程 第六章 框架开发实践 中 AutoGen、LangGraph 的多智能体模式接入记忆持久化将对话历史写入本地文件或数据库让角色跨会话记住用户对应 第八章 记忆与检索 的记忆系统内容引入流式输出与工具调用使用 OpenAI SDK 的stream参数逐字返回回复或为其接上天气、百科等工具让角色活在更大的世界里对应 第九章 上下文工程 与 第十章 智能体通信协议 的 MCP 扩展方向。十、结语megg-ops-roleplay_agent用约 170 行代码完整演示了提示词驱动的沉浸式角色扮演 Agent这一经典范式环境变量注入模型配置、结构化系统提示词塑造角色、对话历史维护上下文、命令循环支撑交互。它既是 hello-agents 教程 第四章 智能体经典范式构建 所讲原理的轻量落地也是学习 LLM Agent 架构设计的绝佳起点。花十分钟跑通它你就迈出了构建有灵魂的 AI 角色的第一步。【免费下载链接】hello-agents 《从零开始构建智能体》——从零开始的智能体原理与实践教程项目地址: https://gitcode.com/datawhalechina/hello-agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表