ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Local Human Agent:在 ParlAI 中用命令行键盘与对话模型实时交互

Local Human Agent:在 ParlAI 中用命令行键盘与对话模型实时交互 NLP人工智能深度学习【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址https://gitcode.com/gh_mirrors/pa/ParlAI点击查看免费下载Local Human Agentlocal_human是 ParlAI 框架内置的一个特殊 Agent它不在本地执行任何模型推理而是把人类用户接入对话循环——在act()函数里读取命令行键盘输入作为对话中的一方参与parley()回合。本文以 parlai/agents/local_human/README.md 为骨架结合 local_human.py、interactive.py、safe_local_human.py 等源码系统讲解它的工作原理、命令行参数、控制指令、源码级调用链与安全增强用法帮助读者掌握在 ParlAI 中人机对话的完整实践方案。文中图片来自仓库 projects/bb3/anim.gif示意 ParlAI 支持基于命令行文本的交互式人机对话场景。什么是 Local Human AgentLocal Human Agent 是 ParlAI 中的一个 Agent 实现类名为LocalHumanAgent位于 parlai/agents/local_human/local_human.py。它与常规模型 Agent 的本质区别在于不加载任何模型权重它自身不做推理只负责采集人类输入输入源是命令行在act()阶段通过 Python 内置的input()读取键盘输入扮演对话中的人类角色在World.parley()中与另一个模型 Agent 轮流发言模型 Agent 收到它产出的Message后正常推理回复。该 Agent 的核心用途是支撑 ParlAI 的interactive脚本parlai/scripts/interactive.py实现本地人类 预训练模型的命令行实时对话。README 中给出了最简单的用例python projects/personachat/scripts/kvmemnn_interactive.py该命令会启动一个针对 Persona-Chat 数据训练的 KVMemNN 模型的交互式会话该示例源自 projects/personachat/README.md 中 Interact with a pre-trained Key-Value Memory Net model trained on Persona-Chat using persona self 一节。需要注意的是personachat 项目已于 2020-08-01 归档模型与脚本长期未测试README 建议如需使用模型或脚本回退到对应的personachat标签而 Persona-Chat 数据集本身仍可正常使用--task personachat。核心实现act() 中的键盘输入逻辑LocalHumanAgent继承自 ParlAI 基类Agentparlai/core/agents.py其对话逻辑全部浓缩在三个关键方法中。初始化与状态在__init__中local_human.py#L45-L56设置self.id localHuman作为 Message 中的发送者标识初始化episodeDone False、finished False两个状态标志通过load_cands加载固定候选回复文件对应--local-human-candidates-file参数启动时打印一行提示Enter [DONE] if you want to end the episode, [EXIT] to quit.使用colorize高亮。load_cands是 parlai/utils/misc.py#L122-L156 中的通用工具它逐行读取候选文件自动去除行号前缀当首行以1开头时判定lines_have_ids、按 Tab 拆分当行内含 Tab 时按回复列提取label_candidates并把\n转义还原为真实换行。observe把对方消息打印到终端observe方法local_human.py#L61-L69接收模型 Agent 的回复 Message并调用display_messages格式化输出。display_messages定义于 parlai/utils/misc.py#L491它支持多消息渲染与双人对话缩进第二条消息前追加空格prettifyTrue时用 prettytable 展示候选文本label_candidatesverboseTrue时显示id、text、labels、label_candidates等全部字段add_fields追加展示自定义字段如token_losses生成模型逐 token 的 loss可用于调试生成模型见 TorchGeneratorAgent._construct_token_losses 相关实现。act读取键盘并构造回复act方法local_human.py#L71-L92是核心def act(self): reply Message() reply[id] self.getID() try: reply_text input(colorize(Enter Your Message:, text) ) except EOFError: self.finished True return {episode_done: True} reply_text reply_text.replace(\\n, \n) reply[episode_done] False if self.opt.get(single_turn, False): reply.force_set(episode_done, True) reply[label_candidates] self.fixedCands_txt if [DONE] in reply_text: # let interactive know were resetting raise StopIteration reply[text] reply_text if [EXIT] in reply_text: self.finished True raise StopIteration return reply关键行为包括EOF 处理当用户按下 Ctrl-Dinput()抛EOFError时设置finished True并返回{episode_done: True}结束会话换行转义输入中的字面\n会被替换为真实换行支持多行消息单轮模式single_turnTrue时强制episode_doneTrue即每个输入都视为独立回合候选注入label_candidates始终携带--local-human-candidates-file指定的固定候选列表若有供另一侧模型做候选排序控制指令输入包含[DONE]时抛StopIteration通知世界层重置本轮不开新 episode 标志包含[EXIT]时置finished True再抛StopIteration永久退出。回合与轮次终止episode_done()返回self.episodeDone本 Agent 自身一般不主动结束回合默认Falseepoch_done()返回self.finished用于驱动外层while not world.epoch_done()循环退出。命令行参数LocalHumanAgent.add_cmdline_argslocal_human.py#L22-L43注册了两个参数参数别名类型默认值说明--local-human-candidates-file-fixedCandsstrNone候选回复文件路径其内容会作为label_candidates发送给对面的模型 Agent--single_turn—boolFalse开启后假定每个输入都是单轮 episode强制episode_doneTrue此外与 Local Human Agent 配套使用的展示类参数由interactive脚本在 interactive.py#L32-L75 中统一注册-d / --display-examplesbool默认False每回合后打印完整world.display()--display-prettifybool默认False候选文本用 prettytable 展示--display-add-fieldsstr默认verbose 关闭时追加展示的字段例如--display-add-fields label_candidates,beam_texts-it / --interactive-taskbool默认True创建任务的交互版本对话历史按轮次传递--outfilestr默认把全部轮次写入 jsonl 日志文件--save-formatstr默认conversations可选conversations/parlai日志格式conversations 为 jsonlparlai 为文本格式。这些参数与 Local Human Agent 的参数一同被setup_args注入ParlaiParser因此parlai interactive命令行可以直接使用。与 interactive 脚本的完整调用链LocalHumanAgent最常见的启动入口是parlai interactive注册名为interactive别名i见 interactive.py#L111-L118。其核心流程在interactive(opt)函数interactive.py#L78-L108中创建模型 Agentcreate_agent(opt, requireModelExistsTrue)加载用户通过--model-file或-mf指定的预训练模型创建人类 Agenthuman_agent LocalHumanAgent(opt)创建世界create_task(opt, [human_agent, agent])把人类 Agent 与模型 Agent 配对interactive脚本默认taskinteractive且interactive_modeTrue即构建一个交互版任务世界见 parlai/core/worlds.py 中create_task对interactive_mode的处理对话循环while not world.epoch_done(): world.parley()。每轮parley()中模型 Agent 先生成回复人类 Agent 的observe打印该回复随后人类 Agent 的act()读取键盘输入产出消息模型 Agent 收到后再回复。如此往复控制流处理当人类输入[DONE]或[EXIT]触发StopIteration时世界层重置对话world_logger.reset()清除已记录的日志若配置了日志EOFCtrl-D则直接结束epoch_done日志落盘若设置了--outfile循环结束后world_logger.write(opt[outfile], world, file_formatopt[save_format])把全部对话写入文件。一个典型的启动命令来自 interactive.py#L12 的 docstringparlai interactive --model-file zoo:tutorial_transformer_generator/model运行时按提示输入消息例如Bob is Blue.\nWhat is Bob?。注意输入内容往往与任务相关使用-t convai2时任务会自动为模型附带 persona 上下文。测试证据tests/test_interactive.py 通过mock.patch(builtins.input, newFakeInput())替换input()用确定性的假输入Turn 1、Turn 2、[DONE]、[EXIT]/EOFError驱动Interactive.main(modelrepeat_query)与SafeInteractive.main(modelrepeat_query)验证了[DONE]/[EXIT]/EOF 三种退出路径以及--outfile日志的长度与内容TestInteractiveLogging断言len(log) max_episodes、每条len(entry) 2 * max_turns即每回合恰好两轮发言。实战与预训练模型命令行对话除parlai interactive外仓库中的项目脚本也大量使用 Local Human Agent 实现人机对话。例如 convai2 项目的 READMEprojects/convai2/README.md#L43-L55给出python projects/convai2/interactive.py -mf models:convai2/kvmemnn/model以及更换模型为 seq2seq 的写法python projects/convai2/interactive.py -mf models:convai2/seq2seq/convai2_self_seq2seq_model -m legacy:seq2seq:0从源码结构看这些交互脚本同样遵循LocalHumanAgent 预训练模型 配对世界的模式。此外-m local_human也可以作为通用模型参数使用例如 README docstring 中给出的parlai eval_model -m local_human -t babi:Task1k:1 -dt valid即以本地键盘输入作为模型来评测一个任务数据集——每轮从终端读取回复充当模型输出便于人工检查数据集与评测流程。运行前提parlai interactive与上述项目脚本都要求先安装 ParlAI 及其依赖见 setup.py、requirements.txt且--model-file指向已下载的预训练模型zoo:前缀的模型由 parlai/zoo 中的下载脚本自动拉取。交互体验依赖终端是否为 TTYcolorize只在 stdout 连接终端或处于 IPython 环境时输出 ANSI 彩色样式可通过环境变量PARLAI_COLORSTYLE调整配色方案parlai/utils/strings.py#L76-L119。安全增强SafeLocalHumanAgent在纯命令行交互之上仓库还提供了带安全过滤的变体SafeLocalHumanAgentparlai/agents/safe_local_human/safe_local_human.py通过parlai safe_interactive脚本parlai/scripts/safe_interactive.py启动。它继承LocalHumanAgent在保留键盘输入机制的同时对人类输入与模型回复双向做冒犯性语言检测。安全参数safe_interactive脚本会注册SafeLocalHumanAgent.add_cmdline_argssafe_local_human.py#L29-L45其独有参数为参数类型默认值可选值说明--safetystrallnone、string_matcher、classifier、all选择安全过滤方式仅词表匹配、仅分类器、或两者全开双向检测机制初始化时_init_safetysafe_local_human.py#L52-L61按--safety加载两类检测器OffensiveStringMatcherparlai/utils/safety.py#L82基于公开的冒犯性词/短语清单来自 LDNOOBW 数据集做字面匹配首次使用会自动构建数据OffensiveLanguageClassifierparlai/utils/safety.py#L19加载zoo:dialogue_safety/single_turn/model预训练 Transformer 分类器对单轮对话语句做冒犯性判别训练数据含人类对抗样本详见 parlai/utils/safety.py docstring 指向的 Dialogue Safety 项目。对话过程中人类输入被判定冒犯act中check_offensive(reply_text)为真打印[ Sorry, could not process that message. Please try again. ]并循环要求重新输入同时置self_offensive True使observe忽略模型对冒犯输入的回复模型回复被判定冒犯observe中check_offensive(msg.get(text, ))为真打印[ Unsafe model reply detected. Clearing agent history. Please try again. ]并给消息打上bot_offensiveTrue标记safe_interactive主循环检测到该标记后调用agent.reset()清空模型历史safe_interactive.py#L60-L72空文本直接视为安全bot_offensiveFalse正常放行。控制指令[DONE]/[EXIT]的语义与LocalHumanAgent一致[DONE]或single_turn时抛StopIteration重置回合[EXIT]额外置finishedTrue。小结Local Human Agent 是 ParlAI人在回路交互的基础设施机制层面通过act()读取键盘输入、observe()打印对方消息、[DONE]/[EXIT]/EOF 控制回合与退出与interactive/safe_interactive脚本及配对世界构成完整的人机对话闭环参数层面--local-human-candidates-file注入固定候选、--single_turn强制单轮展示与日志参数--display-*、--outfile、--save-format均由脚本层统一提供扩展层面SafeLocalHumanAgent以继承方式叠加双向安全过滤--safety可选词表匹配、分类器或全开为敏感场景提供了开箱即用的防线。无论是快速试玩zoo预训练模型、人工评测任务数据集还是构建带安全护栏的评测环境local_human都是 ParlAI 命令行交互体系中值得优先掌握的一环。赞分享NLP人工智能深度学习【免费下载链接】ParlAIA framework for training and evaluating AI models on a variety of openly available dialogue datasets.项目地址https://gitcode.com/gh_mirrors/pa/ParlAI点击查看免费下载相关推荐PocketFlow 命令行笑话生成器基于 Human-in-the-Loop 的交互式 Agent 流程实战PocketFlow 命令行笑话生成器基于 Human in the Loop 的交互式 Agent 流程实战 本篇技术指南以 PocketFlow 仓库 c人工智能大模型AI Agent工作流自动化RAGParlAI Docker 镜像使用指南一键拉起对话模型训练与交互环境ParlAI Docker 镜像使用指南一键拉起对话模型训练与交互环境 ParlAI 官方提供开箱即用的 Docker 镜像内置已安装好的 ParlAI 框NLP人工智能深度学习ParlAI 中的 K2R 模块化知识对话模型先推理、后回复的训练、评估与交互实战ParlAI 中的 K2R 模块化知识对话模型先推理、后回复的训练、评估与交互实战 导读 K2RKnowledge to Response是 ParlAINLP人工智能深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表