资讯动态

山东大学项目实训-创新实训-个人博客(四)

发布时间:2026/10/26 16:07:11 来源:尧图企业网站定制
山东大学项目实训-创新实训-个人博客四系统架构概览本项目构建了一套基于 LLM 的情绪驱动机器人交互系统整体采用事件驱动架构分为三层Web 端通过 HTTP POST 将自然语言文本发送至 Agent 服务Agent 端OpenClaw调用大语言模型完成 NLU自然语言理解并将结果序列化为动作指令推入内存队列机器人端DuoS以 2 秒为间隔轮询 Webhook Server 的/poll/{client_id}端点取到指令后执行对应动作并通过/ack/{client_id}回调确认。我负责 Agent 端的设计与实现核心职责是构建从自然语言到结构化动作序列的推理链路。原有方案的瓶颈初版方案采用的是情绪分类 规则映射的 pipeline将输入文本通过 LLM 分类为预定义情绪标签happy、sad、angry 等共 8 类再通过硬编码的查找表lookup table映射到固定动作序列。这套方案存在两个根本性缺陷语义压缩损失过大。情绪标签本质上是一种有损编码将连续的语义空间强行离散化为 8 个类别。“我很开心与老师当众表扬了我我激动地冲出教室告诉朋友”在分类器眼中都是happy输出的动作序列完全相同丢失了所有叙事细节。长文本处理能力缺失。规则映射方案的输入是单一情绪标签无法处理包含情节转折的长文本。系统对整段故事只能输出一个静态动作序列无法体现叙事的时序结构。新方案基于 LLM 的两阶段故事解析新方案放弃情绪分类中间层改为让 LLM 直接承担叙事理解与动作编排的职责形成端到端的 story-to-action 推理链路。第一阶段语义分段Semantic Segmentation第一次 LLM 调用执行叙事分段任务。系统提示词system prompt将模型定义为故事情节分析师要求其按情节节点plot node对输入文本进行分段而非按句法边界句号/逗号切割。输出约束为纯 JSON 字符串数组强制去除解释性文本降低后续解析的不确定性。分段失败时触发降级策略fallback将原始输入作为单一片段继续处理保证 pipeline 不中断。第二阶段动作序列生成Action Sequence Generation对每个情节片段执行第二次 LLM 调用模型角色定义为机器人动作编导。可用动作集合共 11 个原子动作atomic action编号 0-10覆盖位移前进/后退、姿态下蹲/站立、交互挥手/致谢、高强度表达舞蹈/飞翔等类别。prompt 中明确规定输出格式为纯 JSON 整数数组并注入以下编排约束动作排列须符合物理直觉与叙事逻辑locomotion 动作先于 interaction 动作高强度动作编号 6/7须置于段落高潮位置禁止出现在序列首位末位动作必须为 0待机作为状态复位信号last_action 跨段上下文传递多段生成的核心挑战是段间连续性inter-segment continuity。若每段独立生成相邻片段的边界处极易出现语义跳跃semantic jump导致动作序列在视觉上产生卡顿感。解决方案是在每次调用generate_actions()时将上一段最后一个非零动作编号作为last_action参数注入 prompt约束当前段首个动作与其语义距离不能过大。每段执行完毕后更新last_action状态形成滑动窗口式的上下文链。动作时长约束与差异化 Prompt 策略实测发现动作6舞蹈执行时长为 60 秒若在叙事中途触发会严重破坏故事节奏导致观众注意力完全转移。针对这一问题设计了单段/多段差异化 prompt 注入策略is_multi_segmentFalse单段输入不注入铺垫约束允许[6, 0]直接输出is_multi_segmentTrue多段故事在 user prompt 中追加强约束——动作6前必须存在至少一个铺垫动作禁止[6, 0]直接结尾此策略在不修改动作编号定义的前提下通过 prompt engineering 实现了场景感知的动作编排控制。序列拼接与 normalize 兜底多段序列通过merge_sequences()合并中间段去除结尾的 0最后一段保留。合并后统一经过normalize_action_sequence()处理过滤非整数值、过滤超出 0-10 范围的编号、强制末位补 0。这一兜底机制确保无论上游 LLM 输出何种异常下游机器人端始终接收到合法指令。效果对比输入小明走进教室老师表扬了他他激动地跑去告诉朋友方案动作序列说明情绪分类映射[1, 6, 0]整体 happy查表输出固定序列故事解析新[9, 3, 9, 1, 0]前进→致谢→前进→挥手→站立还原叙事节奏工程实践Provider 抽象层将 LLM 调用封装为可替换 provider 接口支持dashscope通义千问与mock本地测试两种实现通过环境变量EMOTION_PROVIDER切换输出 schema 完全一致为后续模型迁移提供零侵入替换能力。配置安全化去除所有硬编码 API Key 与绝对路径统一通过.env文件注入并实现了无第三方依赖的轻量 dotenv 解析器兼容 Windows/Linux 跨平台部署。接口向后兼容所有重构发生在 skill 内部逻辑层对外暴露的 Webhook 接口端点路径、请求/响应 JSON schema、动作编号定义完全冻结机器人端代码零改动。segments调试字段仅在analyze_emotion.py内部输出server.py对外响应时剥离避免接口污染。当前进度与下一步Agent 端故事解析链路已完成本地开发、真实 API通义千问端到端验证并通过 SSH 部署至生产服务器。系统当前可处理包含多情节转折的中文叙事文本输出具备叙事弧线narrative arc的动作序列。下一步计划联调机器人端在真实硬件执行环境中验证动作编排效果并根据实际帧间表现进一步调优 prompt 约束与序列长度参数。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑