























如何真正理解他人的生活?这款名为'魂穿:体验TA的一天'的智能体给出了全新答案。通过AI模拟不同角色的完整一天,在5-8个关键决策点做出选择,用户能沉浸式体验外卖员、历史人物甚至3岁孩童的日常生活。本文将深度拆解这个基于工作流架构的LLM应用,揭秘其人物解析、决策循环与复盘总结三大核心模块的技术实现。

你有没有想过,真正理解另一个人是什么感受?
不是站在外面观察,而是真正”成为”他们——感受他们的疲惫、他们的纠结、他们的喜悦,体验他们一天中遇到的每一个关键决策。
这就是我最近搭建的智能体:”魂穿:体验TA的一天”。
这篇文章分享一下这个智能体的搭建过程,帮助大家了解一下工作流架构和LLM应用开发的玩法。
共情是人类最珍贵的能力之一,但也是最难培养的。
所以我做了这个智能体:通过AI模拟另一个人完整的一天,让你在5-8个关键决策点做出选择,体验每个选择带来的连锁反应,最后获得一天的总结和决策复盘。
它不想取代真实的体验,而是把体验的门槛降低——让你能够低成本、低风险地”穿越”到不同身份、不同时代的人身上。
智能体的体验链接在文章最后。

目标用户:想要理解不同群体的人、对历史和人物感兴趣的用户、教育工作者、想要提升共情能力的人
核心价值:通过AI模拟生成沉浸式的身份体验,让用户在决策中理解另一个人的处境和选择逻辑
能力边界:
交互流程非常简单直观:

整个智能体基于工作流架构搭建,分为三个核心模块:
输入:用户想要体验的角色(如”体验外卖员的一天”)
处理流程:
1. 人物解析节点(LLM):识别人物类型和关键特征
2. 角色档案生成节点(LLM):生成详细的角色档案
3. 一天规划节点(LLM):规划一天的事件序列
流程非常简单,一路走到底型:

输入:单个事件对象(包含时间、地点、事件描述、决策主题等)
这是整个体验的核心,通过循环节点调用这个子工作流。
子工作流的处理逻辑:

这个工作流会被循环调用5-8次,每次处理一个事件。
关键技术点:
1. 状态管理:状态完全在循环体内管理
2. 场景生成的沉浸感:
3. 决策选项的设计:
4. 结果描述的自然过渡:
当所有决策循环完成后,进入总结阶段:

1. 一天总结节点(LLM):
2. 决策复盘报告节点(LLM):
接下来逐个功能点拆分。
整个工作流中,大部分LLM节点输出JSON格式:
{
“user_message”: “用户看到的内容(Markdown格式)”,
“context_data”: {
// 后续节点需要的结构化数据
}
}
每个LLM节点后都跟着一个Python代码节点来解析JSON,提取context_data供后续节点使用,同时提取user_message用于展示给用户。
关键设计:user_message必须是对当前步骤执行结果的概括,而不是”正在处理”等过程性提示,这样用户能实时看到进度。
JSON解析节点的通用代码:
import json
import re
def main(params: dict) -> dict:
input_str = params.get(‘llm_output’) or params.get(‘input’, ”)
if not input_str:
return {}
# 处理可能被markdown代码块包裹的情况
input_str = re.sub(r’^“`json\s*’, ”, input_str, flags=re.MULTILINE)
input_str = re.sub(r’“`\s*$’, ”, input_str, flags=re.MULTILINE)
input_str = input_str.strip()
try:
parsed_data = json.loads(input_str)
context_data = parsed_data.get(‘context_data’, {})
user_message = parsed_data.get(‘user_message’, ”)
return {
‘context_data’: context_data,
‘user_message’: user_message
}
except json.JSONDecodeError:
return {}
这里有三个细节,需要做到位:
循环节点的设计,本质上是让你用工作流构造一个”工具插件”,循环调用、处理事件。
关键设计:状态完全在循环体内管理,不依赖循环体外的全局变量。
状态管理方式:
循环参数组装节点的代码:
def main(params: dict) -> dict:
parsed_person = params.get(‘parsed_person’, {})
character_profile = params.get(‘character_profile’, {})
day_plan = params.get(‘day_plan’, {})
# 从day_plan中获取事件列表,数组长度即为循环次数
events = day_plan.get(‘events’, [])
# 组装循环参数数组(只包含静态参数,不包含动态状态)
event_loop_params = []
for i in range(len(events)):
loop_param = {
‘parsed_person’: parsed_person,
‘character_profile’: character_profile,
‘day_plan’: day_plan,
‘current_event’: events[i],
‘current_event_index’: i
}
event_loop_params.append(loop_param)
return {‘event_loop_params’: event_loop_params}
循环结束后,通过代码节点将循环的返回结果(数组)转换为event_history和decision_history:
def main(params: dict) -> dict:
# 获取循环返回的数组,支持多种可能的字段名
answer_data = params.get(‘Results’) or params.get(‘Answer’) or params.get(‘loop_output’, [])
event_history = []
decision_history = []
for item in answer_data:
# 提取事件信息和决策信息,组装成event_history和decision_history
# …
return {
‘event_history’: event_history,
‘decision_history’: decision_history
}
为了确保前端能够正确渲染,所有LLM节点的输出都严格遵循Markdown格式规范:
特别注意的是,节点7(决策复盘报告)直接输出纯Markdown文本,而不是JSON包装,这样可以避免JSON转义导致的Markdown渲染问题。
每个LLM节点都有详细的提示词,包含:
场景生成节点的提示词关键部分:
角色信息:
{{parsed_person}}
角色档案:
{{character_profile}}
当前事件:
{{current_event}}
请生成一个生动的场景,要求:
1. 使用第一人称描述(”我蹲在…””我跨上电动车…”)
2. 场景描述要生动具体,包含时间、地点、环境细节(80-120字)
3. 内心思考要符合角色身份和处境,使用” 我在想”标记(50-100字)
4. 决策选项要有明显的利弊权衡,每个选项10-20字
5. 使用Markdown格式输出,包含三级标题和列表
请严格按照以下JSON格式返回:
{
“user_message”: “### [时间] ([时间段]) [地点]\n\n[场景描述]\n\n### 我在想\n\n[角色思考]\n\n### [决策问题]\n\n1. [选项1]\n2. [选项2]\n3. [选项3]\n4. [选项4]”,
“context_data”: {
“scene_context”: “…”,
“location”: “…”,
“decision_point”: {
“question”: “…”,
“options”: […]
}
}
}
关键点:
[配图建议6:可以展示场景生成节点的完整提示词,或者展示输出示例]
代码节点中实现了完善的错误处理,确保流程不会因为数据格式问题中断。
JSON解析失败时的降级处理:
try:
parsed_data = json.loads(input_str)
context_data = parsed_data.get(‘context_data’, {})
except json.JSONDecodeError:
# 解析失败时返回空字典,而不是抛出异常
return {‘context_data’: {}}
数据格式不一致时的类型检查:
# 确保体力精力值在0-100范围内
updated_physical_energy = context_data.get(‘updated_physical_energy’, 100)
if isinstance(updated_physical_energy, str):
try:
updated_physical_energy = int(updated_physical_energy)
except ValueError:
updated_physical_energy = 100
updated_physical_energy = max(0, min(100, int(updated_physical_energy)))
循环返回结果的结构化解析,支持多种可能的字段名:
# 兼容不同的返回结构
answer_data = params.get(‘Results’) or params.get(‘Answer’) or params.get(‘loop_output’, [])
if not isinstance(answer_data, list):
if isinstance(answer_data, dict) and ‘Results’ in answer_data:
answer_data = answer_data[‘Results’]
else:
answer_data = []




体验一个完整流程后,用户能够:
这个智能体的核心是基于LLM的场景生成和决策模拟能力。
类似的玩法可以延伸到:
工作流架构的优势在于模块化和可扩展性:
搭建这个智能体使用的是工作流平台,它提供了完整的工作流搭建能力:
最关键的是,你可以把搭建好的智能体直接发布到小程序,不需要自己搞备案、买服务器,用户体验流畅,价值完全不同。
(主工作流)

(子工作流)

这个智能体的核心价值不在于技术有多复杂,而在于它把”理解他人”这件事的门槛降低了。
通过AI模拟,我们可以在几十分钟内体验另一个人完整的一天,感受他们的处境和选择。这种体验虽然不能完全替代真实经历,但足以让我们获得宝贵的共情和理解。
如果你也想搭建类似的智能体,或者对技术实现细节感兴趣,欢迎交流。
体验链接:https://yuanqi.tencent.com/webim/?sessionid=#/chat/SgGAyd?appid=2003750988803319040&experience=true
欢迎体验”魂穿:体验TA的一天”,并反馈任何建议或BUG。
本文由 @崔峻 原创发布于人人都是产品经理。未经作者许可,禁止转载
题图来自Pexels,基于CC0协议
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。