
孤独感在当下社会已经成为一个很普遍的体验而大模型驱动的 AI 对话助手又刚好为“随时聊天”提供了一种近乎零成本的解决方案。于是很多人开始关心一个问题个人 AI 对话到底能不能减少孤独感网上相关讨论不少但大多停留在“和 ChatGPT 聊天感觉很温暖”或者“AI 只是虚假陪伴”这种感性层面。本文想换一个角度把这个问题当作一个可拆解的技术问题来处理如何用 Python 读取并整理 PDF 格式的研究资料如何基于大模型 API 搭建一个个人 AI 对话实验系统如何记录对话数据并设计一套可评估的孤独感变化实验。整个过程既有概念分析也有完整代码示例适合对大模型应用、AI 情感陪伴、数据处理感兴趣的开发者阅读。1. 背景与核心概念1.1 “个人 AI 对话”指什么“个人 AI 对话”通常指用户与某个由大语言模型驱动的虚拟助手之间的连续对话而不是那种搜索引擎式的问答。它强调的是“个体专属”对话助手可以记住你之前说过的话会围绕你当前的情绪状态调整回应方式甚至会主动提起你感兴趣的话题。从产品形态上讲个人 AI 对话可以是一个聊天机器人、一个语音助手、一个“AI 搭子”也可以是集成在智能眼镜或手机里的小程序。只要满足以下特征都可以算作个人 AI 对话对话主体是单一用户和 AI。对话具备上下文记忆能力。系统能根据用户反馈进行个性化调整。对话目标是建立长期交互关系而不仅仅是完成一次任务。这和我们日常理解的“AI 客服”有本质区别。AI 客服的目标是高效解决问题而个人 AI 对话的目标是“让用户感到被倾听、被理解”。1.2 孤独感为什么可以被研究孤独感在心理学中是一个主观体验指个人感知到的社交关系质量低于期望从而产生的一种消极情感体验。它并不等于“没有朋友”一个身处人群的人也可能感到孤独。正因为孤独感是主观的、可测量的研究者才能通过标准化量表来观察它在不同干预条件下的变化。在“AI 是否能减少孤独感”这个问题中核心评估对象并不是 AI 本身是否“聪明”而是用户在持续使用 AI 对话之后主观孤独感评分是否出现可观测的变化。这就意味着我们需要一套完整的研究型工具链能够把问卷、论文等 PDF 资料数字化能够执行对话实验能够记录行为数据最后还要能输出统计结果。1.3 为什么需要动手实现一个验证系统如果只停留在“AI 能不能缓解孤独”的概念讨论我们很难得到有价值的信息。不同性格的人、不同质量的 AI 回复、不同交互频率带来的结果可能差异很大。更好的方式是构建一个小型验证系统把研究问题变成可执行流程从 PDF 中提取问卷题目生成前测问卷和后测问卷。让参与者在实验前填写孤独感量表。让参与者和 AI 对话系统进行若干次交互。采集对话记录、对话时长、情感倾向等行为指标。实验后再次填写量表对比前后得分变化。这套流程本身就是一个典型的技术开发任务涉及文件解析、大模型 API 调用、数据存储、统计分析和可视化。即使你不是心理学研究者也能从中学到如何把“想法”变成“可运行系统”。2. 环境准备与版本说明为了让后续代码可以顺利运行我们先准备好开发环境。本文的示例以 Python 为主因为它的数据处理生态最完整适合快速搭建实验原型。2.1 基础环境操作系统Windows 10/11、macOS 或 Linux 均可。Python 版本建议 3.10 及以上。包管理工具pip。可以使用下面命令检查 Python 环境python --version pip --version如果你的系统同时安装了 Python 2可能需要使用python3和pip3这个根据实际环境调整即可。2.2 需要安装的核心依赖在项目目录下创建虚拟环境是推荐做法python -m venv venv激活虚拟环境Windowsvenv\Scripts\activatemacOS / Linuxsource venv/bin/activate然后安装依赖pip install pdfplumber openai pandas matplotlib flask各依赖的主要用途如下依赖库版本说明用途pdfplumber较新的稳定版即可从 PDF 中提取文本比如论文和问卷openai1.x 或兼容版本调用大模型对话接口pandas1.5处理对话日志和问卷数据matplotlib3.x可视化前后测得分对比flask3.x搭建简单的 Web 演示页面方便实验参与者使用需要注意openai 包的接口在 1.x 版本之后发生了较大调整旧代码中的openai.ChatCompletion.create写法已经不可用。本文代码以新版写法为准你可以根据实际安装版本做微调。2.3 大模型 API 的准备本文示例会调用大模型 API。由于各家服务提供商经常调整接口地址、模型名称和计费方式这里不写死某个具体厂商而是以“OpenAI 兼容接口”为例。你需要准备一个可用的 API Key并在代码中设置环境变量避免把密钥写进代码仓库。export OPENAI_API_KEY你的key export OPENAI_BASE_URLhttps://你的服务商地址如果你使用的平台不提供OPENAI_BASE_URL也可以直接在代码里写base_url参数。必须说明的是请确认你使用的 API 服务符合当地法律法规和平台服务条款且在合法授权范围内使用。不要在未经授权的情况下抓取、分析或生成涉及个人隐私的对话数据。3. 核心原理拆解3.1 大模型对话系统如何产生“陪伴感”要让 AI 对话减缓解用户孤独感系统首先要提供“被听见”的体验。这并不仅仅来自大模型本身的理解能力还来自提示词设计和交互策略。一个有效的陪伴型 AI 通常会做三件事情绪识别从用户文本中识别出当前情绪状态比如开心、焦虑、疲惫、难过。共情回应先表达理解再提供支持或建议。支持不等于给出标准答案而是在情感层面接住用户。记忆与延续在后续对话中提及用户之前提过的事情让用户感受到连续性。从技术角度看这些能力都可以通过提示词约束大模型产生。比如在 System Prompt 中明确告诉模型“先识别用户情绪再回应”和“不要急着给建议”模型输出的风格会明显不同。3.2 孤独感的测量方式在心理学研究中UCLA 孤独感量表UCLA Loneliness Scale是最常用的自评量表之一包含 20 个题目例如“你多久感到缺少陪伴”“你多久感到自己是外向的人”“你多久觉得让别人走近自己是困难的”这类题目通常采用 4 级频率评分“从不”“很少”“有时”“一直”。计分时部分题目需要反向计分最后得到总分。总分越高代表孤独感越强。我们并不需要在这里讨论量表的版权和具体内容只需要知道一个技术思路把量表题目数字化让参与者在线作答系统自动计算得分再对比实验前后的分数变化。3.3 为什么需要处理 PDF很多心理学期刊文章、量表文档、研究手册都以 PDF 形式分发。如果需要把 PDF 里的问卷自动化处理就必须先做文本提取。举例来说假设我们的研究资料loneliness_survey.pdf中包含问卷题目和相关说明用 pdfplumber 可以快速提取文本# 文件路径extract_pdf.py import pdfplumber with pdfplumber.open(loneliness_survey.pdf) as pdf: text_list [] for page in pdf.pages: page_text page.extract_text() if page_text: text_list.append(page_text) full_text \n.join(text_list) with open(survey_text.txt, w, encodingutf-8) as f: f.write(full_text) print(PDF 文本提取完成总字符数, len(full_text))这里需要注意pdfplumber 对“文本型 PDF”效果很好也就是 PDF 中本身包含可选文本。如果是扫描件或图片型 PDF提取出来会是空字符串或乱码这种情况下需要先做 OCR 识别常配合pytesseract使用。3.4 实验设计的基本思路要回答“个人 AI 对话能否减少孤独感”不能只靠几个人聊几天就下结论。比较稳妥的做法是设计一个分组对照实验实验组与 AI 对话助手进行为期一周、每天 10 分钟左右的非结构化聊心。对照组不进行 AI 对话或者只使用普通搜索引擎进行信息查询。实验前后分别测量参与者的孤独感得分。实验组和对照组在性别、年龄、基线孤独感等维度尽量匹配。实际实现中还需要采集对话质量、情绪变化等中间变量。把流程放在代码里就体现为问卷模块、对话引擎模块、日志模块、分析模块。4. 完整实战案例构建个人 AI 对话孤独感实验系统接下来我们落地一个最小可用系统。它包含 PDF 问卷读取、AI 对话、日志记录、分数统计和简单可视化五个核心模块。4.1 创建项目结构建议项目目录如下ai_loneliness_project/ ├── data/ │ ├── loneliness_survey.pdf │ └── ... ├── output/ │ ├── logs/ │ └── figures/ ├── code/ │ ├── extract_pdf.py │ ├── chat_engine.py │ ├── run_experiment.py │ └── analyze.py ├── venv/ └── requirements.txt这样每个模块职责清晰extract_pdf.py处理 PDF 资料chat_engine.py负责大模型对话run_experiment.py串联整个实验流程analyze.py做前后测分析。4.2 使用 pdfplumber 提取问卷题目假设data/loneliness_survey.pdf是一份包含问卷题目的 PDF 文档。我们可以先提取文本再用正则表达式把题目解析出来。# 文件路径code/extract_pdf.py import re import pdfplumber def extract_text_from_pdf(pdf_path: str) - str: 从 PDF 中提取全部文本 with pdfplumber.open(pdf_path) as pdf: pages_text [] for page in pdf.pages: page_text page.extract_text() if page_text: pages_text.append(page_text) return \n.join(pages_text) def extract_questions(text: str) - list: 用正则粗略提取问卷题目 # 这里假设题目以数字加顿号或点号开头 pattern r\n?\s*(\d)[、.]\s*(.{10,200}?)(?\n\s*\d[、.]|$) matches re.findall(pattern, text, re.S) questions [f{num}. {content.strip()} for num, content in matches] return questions if __name__ __main__: raw_text extract_text_from_pdf(../data/loneliness_survey.pdf) questions extract_questions(raw_text) print(提取到题目数量, len(questions)) for q in questions[:5]: print(q)这段代码的目的是把 PDF 中散落的题目结构化方便后续把题目插入到前测问卷页面中。实际问卷可能包含选项文本、计分说明、指导语正则规则需要按文档结构调整。在实验中我更建议人工校验一次提取结果避免题目遗漏或截断错位。4.3 构建 AI 对话引擎对话引擎是整个系统的核心。我们需要设计一个既能让用户敞开心扉又不会越界给出医疗建议的 System Prompt。# 文件路径code/chat_engine.py import os from openai import OpenAI SYSTEM_PROMPT 你是一个温暖、耐心、真诚的个人 AI 陪伴助手。你的任务是 1. 先识别用户当前的情绪并用自己的话表达理解 2. 不要急于给出建议而是先陪伴用户梳理感受 3. 对话要自然、亲切不要像客服一样机械 4. 如果用户表现出强烈的自伤、自杀倾向请明确建议其联系专业心理援助机构不要安慰过度 5. 不要声称自己可以代替心理咨询师或医生。 class PersonalChatAgent: def __init__(self, api_key: str None, base_url: str None): self.client OpenAI( api_keyapi_key or os.getenv(OPENAI_API_KEY), base_urlbase_url or os.getenv(OPENAI_BASE_URL), ) self.history [{role: system, content: SYSTEM_PROMPT}] def add_message(self, content: str, role: str user): self.history.append({role: role, content: content}) def reply(self, user_input: str, temperature: float 0.7) - str: 接收用户输入并返回 AI 回复 self.add_message(user_input, roleuser) response self.client.chat.completions.create( modelos.getenv(OPENAI_MODEL, gpt-4o-mini), messagesself.history, temperaturetemperature, max_tokens300, ) assistant_message response.choices[0].message.content self.add_message(assistant_message, roleassistant) return assistant_message def reset(self): self.history [{role: system, content: SYSTEM_PROMPT}]这里有几个小细节需要说明temperature设为 0.7 左右既能让回复有温度又不会过于发散。长对话中max_tokens不宜太大否则模型容易输出冗长回复用户反而觉得有压力。系统中应内置安全兜底逻辑当检测到用户处于极端情绪时应提示其联系专业机构。4.4 设计前测/后测问卷交互模块为了评估孤独感变化我们需要在实验前后给用户呈现量表。由于不同问卷的题目数量、选项描述不同我们可以把问卷题目保存在 JSON 文件中。下面的代码演示了如何把 PDF 提取后的题目转换成 JSON 配置。# 文件路径code/build_survey_json.py import json questions [ 你多久感到缺少陪伴, 你多久感到自己是外向的人, 你多久觉得让别人走近自己是困难的, 你多久感到被他人理解, ] survey_config { title: 孤独感自评量表示例, instructions: 请根据最近两周的实际感受选择一个最符合你的频率。, options: [从不, 很少, 有时, 一直], questions: questions, reverse_scores: [2], # 第 2 题为反向计分 } with open(../data/survey_config.json, w, encodingutf-8) as f: json.dump(survey_config, f, ensure_asciiFalse, indent2) print(问卷配置文件已生成)如果实际项目中有正式量表 PDF可以先用 4.2 节的方法提取题目再人工修正后输出为 JSON避免手动录入大量文本。4.5 记录对话日志每次对话后把用户输入、AI 回复、时间戳保存到本地为后续分析保留原始数据。这里使用最简单的 JSON 行格式每行一条记录方便用 pandas 读取。# 文件路径code/log_utils.py import json import os from datetime import datetime def save_interaction_to_log(log_path: str, user_id: str, user_message: str, ai_reply: str): 把一轮对话记录追加写入日志文件 record { user_id: user_id, timestamp: datetime.now().isoformat(), user_message: user_message, ai_reply: ai_reply, } os.makedirs(os.path.dirname(log_path), exist_okTrue) with open(log_path, a, encodingutf-8) as f: f.write(json.dumps(record, ensure_asciiFalse) \n)4.6 串联实验主流程下面把前面的模块整合起来实现一个简单的命令行实验流程用户先做前测然后与 AI 连续对话 5 轮最后填写后测。# 文件路径code/run_experiment.py import json from chat_engine import PersonalChatAgent from log_utils import save_interaction_to_log def load_survey(path: str) - dict: with open(path, r, encodingutf-8) as f: return json.load(f) def run_survey(survey: dict, label: str) - dict: 简单的命令行问卷作答返回题目索引和得分 print(f\n {label} ) print(survey[instructions]) answers {} for idx, question in enumerate(survey[questions]): print(f\n{idx 1}. {question}) for opt_idx, opt in enumerate(survey[options]): print(f{opt_idx}: {opt}) choice int(input(请输入选项编号)) answers[idx] choice return answers def calculate_score(survey: dict, answers: dict) - int: 计算总分处理反向计分 total 0 for idx, question in enumerate(survey[questions]): score answers[idx] if idx 1 in survey.get(reverse_scores, []): score len(survey[options]) - 1 - score total score return total def main(): user_id input(请输入参与者编号) survey load_survey(../data/survey_config.json) pre_answers run_survey(survey, 前测问卷) pre_score calculate_score(survey, pre_answers) print(f前测得分{pre_score}) agent PersonalChatAgent() print(\n 开始与 AI 对话 ) print(你可以聊任何想聊的话题输入 exit 结束本轮实验。) rounds 0 while rounds 5: user_input input(\n你说) if user_input.strip().lower() exit: break ai_reply agent.reply(user_input) print(f\nAI 助手{ai_reply}) save_interaction_to_log( log_pathf../output/logs/{user_id}.jsonl, user_iduser_id, user_messageuser_input, ai_replyai_reply, ) rounds 1 post_answers run_survey(survey, 后测问卷) post_score calculate_score(survey, post_answers) print(f后测得分{post_score}) print(f前后测得分变化{post_score - pre_score}) if __name__ __main__: main()这个主流程看起来比较简单但它已经具备了一个实验雏形前测、干预、后测、日志记录。需要特别指出的是真实心理学实验还需要考虑洗脱期、随机分组、安慰剂对照等问题这里只做技术演示不能直接当作严谨的科研结论。4.7 分析对话日志并可视化实验结束后我们可以读取多个参与者的日志统计平均对话轮数、平均回复长度以及使用一个简单的情感关键词词典做粗粒度情感分析。# 文件路径code/analyze.py import json import os from collections import defaultdict import matplotlib.pyplot as plt import pandas as pd POSITIVE_WORDS [开心, 放松, 感谢, 温暖, 安心, 舒服] NEGATIVE_WORDS [难过, 焦虑, 孤独, 烦躁, 害怕, 压力, 累] def analyze_logs(log_dir: str): records [] for filename in os.listdir(log_dir): if not filename.endswith(.jsonl): continue user_id filename.split(.)[0] with open(os.path.join(log_dir, filename), r, encodingutf-8) as f: for line in f: record json.loads(line.strip()) record[user_id] user_id records.append(record) df pd.DataFrame(records) print(对话记录总数, len(df)) print(参与者数量, df[user_id].nunique()) df[user_positive_count] df[user_message].apply( lambda x: sum(1 for w in POSITIVE_WORDS if w in x) ) df[user_negative_count] df[user_message].apply( lambda x: sum(1 for w in NEGATIVE_WORDS if w in x) ) grouped df.groupby(user_id)[[user_positive_count, user_negative_count]].mean() print(\n每位参与者平均每轮情感词出现频次) print(grouped) return df if __name__ __main__: df analyze_logs(../output/logs) # 绘制每位参与者的情感词频次对比 grouped df.groupby(user_id)[[user_positive_count, user_negative_count]].mean() grouped.plot(kindbar, figsize(10, 6)) plt.title(参与者每轮平均情感词频次) plt.xlabel(参与者ID) plt.ylabel(平均出现次数) plt.tight_layout() plt.savefig(../output/figures/emotion_analysis.png) print(图片已保存到 output/figures/emotion_analysis.png)这个分析脚本并没有直接测量孤独感变化而是提供观察窗口如果参与者在实验过程中负面情感词逐渐减少、正面情感词逐渐增加这可能是一个值得深入研究的信号。不过情感词典方式非常粗糙更严谨的做法是使用大模型对每条对话进行情感维度评估或者使用情绪分类模型。5. 常见问题与排查思路在实际运行这个实验系统时可能会遇到下面这些问题。我按现象、原因、解决思路整理成一个表格方便大家快速排查。问题现象常见原因解决思路pdfplumber 提取不到文本PDF 是扫描件或图片型 PDF先使用 OCR 工具识别文字再用 pdfplumber 或 pytesseract 提取PDF 提取文本乱码字体编码特殊或使用了自定义编码尝试更换 PDF 解析库比如 PyMuPDF必要时人工对照API 调用报 401 错误API Key 错误或环境变量未设置检查环境变量是否已加载不要在代码里硬编码密钥API 返回超时网络不稳定或模型服务端负载高增加重试机制和超时时间比如 timeout60retry3对话历史越来越长成本变高没有进行上下文裁剪限制 messages 数量超过一定轮数后丢弃早期非关键内容用户输入“我想自杀”等极端内容系统缺少安全兜底在回复前增加敏感词检测或调用内容审核紧急情况下提示寻求专业帮助前测后测得分差异不明显实验干预时间太短拉长实验周期增加对话次数控制对照组变量有几条需要重点展开。问题 1PDF 扫描件无法提取文本。这种情况在校验问卷扫描版时非常常见。如果 PDF 本身就是图片pdfplumber 提取不到文字那么文本化就没有意义。解决办法是先调用 OCR。一般流程是先用pymupdf把 PDF 页面导出为高分辨率图片再用pytesseract做文字识别。需要注意OCR 需要安装本地 Tesseract 程序不同语言需要对应语言包否则中文识别结果会很差。问题 2大模型回复过于“官方”。有时即使 System Prompt 写得很像一个知心朋友模型输出仍然像客服。这可能是因为基础模型的对话风格太偏向一致性回答。解决方法是在提示词里加入“使用口语化表达不要使用第一第二第三”。在示例中给出一个高共情回复样例让模型模仿语气。调高 temperature 到 0.8 到 0.9。在回复生成后用另一个本地规则过滤掉明显的“AI 味”词汇比如“作为一个人工智能”。问题 3隐私和伦理风险。很多人担心个人 AI 对话会诱导情感依赖或者泄露用户隐私。这正是实验系统需要重点考虑的问题。工程上可以做到对话记录本地存储、参与者匿名编号、数据导出前脱敏以及在使用说明中强调 AI 不能替代心理医生。如果研究涉及大学或机构必须经过伦理审查。6. 最佳实践与工程建议6.1 安全边界优先在我个人看来做“AI 陪伴”类应用的开发者最应该在意的不是模型多聪明而是回答的安全边界。用户一旦把 AI 当作情感寄托就可能在脆弱状态下说出非常私密甚至危险的信息。建议在代码层面做两层保护第一层是敏感事件检测。可以用关键词规则拦截“自杀”“不想活”“伤害自己”等表达并立即输出求助信息同时终止常规对话流程。第二层是免责声明。在实验说明页、对话开场白和每次长时间对话后都可以温和提醒“我只是一个 AI 程序无法替代专业心理咨询师”。# 文件路径code/safety_check.py CRISIS_KEYWORDS [自杀, 不想活, 结束生命, 伤害自己, 活着没意思] def safety_check(user_input: str) - bool: 返回 True 表示检测到高危表达 for keyword in CRISIS_KEYWORDS: if keyword in user_input: return True return False def crisis_response() - str: return 我听到你现在的状态非常痛苦。虽然我无法完全理解你的感受但我们非常在乎你的安全。请你一定要联系身边信任的人或者拨打当地心理援助热线接受专业帮助。在高危场景下宁可“回复说得不合适”也不能漏掉提示求助的环节。6.2 数据存储与最小权限原则处理参与者数据时建议遵守两个原则最小化只采集完成实验所必需的字段比如参与者编号、对话内容、问卷得分。不要采集姓名、手机号等敏感身份信息。本地化默认将日志保存在本地文件夹不要上传到第三方平台。如果必须做云端统计也要先完成脱敏。代码中可以把用户 ID 设计成随机哈希值而不是真实编号import hashlib def anonymize(user_name: str) - str: return hashlib.sha256(user_name.encode(utf-8)).hexdigest()[:16]6.3 如何提升系统的实验可信度从工程角度我们可能无法控制样本量但可以控制“评估过程不被污染”。最好的做法是引入盲评机制让评估者只看到对话文本不知道文本来自实验组还是对照组也不知道对话前后的得分。这样可以减少主观偏差。另外不要只看总分变化这一个指标。可以细化分析 AI 回复里的共情表达数量、对话中用户发言长度的变化、参与者的流失率等。如果实验组后期发言明显变长、负面情绪词减少即使前后测得分差异不显著也值得写进结论建议里。6.4 个性化记忆设计真正能让人产生陪伴感的 AI往往具备长期记忆能力。当前对话系统如果不做任何处理每次实验都会从零开始用户可能会感到 AI “很健忘”。生产级应用通常会引入短期记忆保留最近 10 轮历史。长期记忆用户重要偏好、提到过的朋友、难忘事件写入向量数据库。定时总结每隔一段对话时间用大模型生成一份用户画像摘要。在实验系统中可以先用简单的 JSON 文件保存用户偏好# 文件路径code/memory.py import json import os MEMORY_FILE ../data/user_memory.json def save_user_memory(user_id: str, key: str, value: str): memory {} if os.path.exists(MEMORY_FILE): with open(MEMORY_FILE, r, encodingutf-8) as f: memory json.load(f) memory.setdefault(user_id, {})[key] value with open(MEMORY_FILE, w, encodingutf-8) as f: json.dump(memory, f, ensure_asciiFalse, indent2) def load_user_memory(user_id: str) - dict: if not os.path.exists(MEMORY_FILE): return {} with open(MEMORY_FILE, r, encodingutf-8) as f: memory json.load(f) return memory.get(user_id, {})存储内容推荐用“事实描述”而不存储过度主观评价比如保存“用户养了一只叫豆包的猫”比保存“用户喜欢猫”更安全也更有用。6.5 可观测性与复现实验系统的可观测性也很重要。每次 API 调用除了记录对话文本还应该记录模型名称、temperature、max_tokens、响应耗时以及当时使用的 System Prompt 版本。在单独文件中保存这些运行参数可以极大提升实验的可复现性。否则三个月后再看日志你可能完全不知道当时用的是哪个模型版本。run_params { model: os.getenv(OPENAI_MODEL, gpt-4o-mini), temperature: 0.7, max_tokens: 300, system_prompt_version: v1.2, created_at: datetime.now().isoformat(), }7. 总结与下一步回到最开始的问题个人 AI 对话是否能减少孤独感从技术实现角度看这个问题的答案并不是简单的“能”或“不能”而是需要被拆解成可测量的指标。本文做了一遍完整的技术演示用 pdfplumber 从 PDF 中提取问卷资料用大模型 API 搭建个人对话引擎用 JSON 文件管理系统记忆和实验配置用 SQLite/JSON 记录对话日志最后用 pandas 和 matplotlib 做前后测分析和可视化。如果你想把这套原型继续深化下面几个方向值得关注接入长期记忆系统比如向量数据库和 RAG 检索让 AI 记住用户的真实生活细节。引入情绪计算模型对大模型输出做情绪质量和共情能力的自动评估。设计更严谨的实验方案包括随机分组、双盲评估、更长的实验周期。把命令行交互升级为 Web 页面方便实验对象在自然环境中使用。最后想提醒大家这类应用最终面对的是真实的人。在追求对话流畅度的同时一定要把安全边界、隐私保护和伦理责任放在前面。如果你对本文中的代码有疑问或者在实际调试中遇到问题欢迎在评论区聊聊你的场景一起把方案打磨得更完整。