You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Replit DB实现虚拟Therapist电话对话跨会话记忆?

实现虚拟心理咨询师的对话记忆方案(基于Replit DB)

核心逻辑梳理

每次来电时,通过Twilio获取来电手机号作为唯一标识,从Replit DB读取该号码的历史对话;将历史对话与本次用户输入拼接后传给ChatGPT,生成回复;通话结束后,把本次对话追加到该号码的记录中,实现跨会话的记忆功能。


分步实现代码与说明

1. 获取来电手机号(Twilio请求解析)

Twilio触发的来电请求会携带来电号码,用Flask即可快速提取:

from flask import Flask, request
from replit import db
import os
import openai

app = Flask(__name__)
# 用Replit Secrets存储API密钥,避免硬编码
openai.api_key = os.getenv("OPENAI_API_KEY")

@app.route("/incoming-call", methods=["POST"])
def handle_call():
    # 提取Twilio传入的来电号码(格式为带国家码的字符串,如+86138xxxxxxx)
    caller_number = request.form.get("From")
    # 后续对话逻辑写在这里
    return "OK", 200

2. 设计对话存储结构

不要用纯字符串存储,改用角色+内容的列表字典结构,适配ChatGPT的messages参数格式:

# 示例存储结构(自动序列化/反序列化,Replit DB直接支持)
conversation_history = [
    {"role": "user", "content": "我最近工作压力好大"},
    {"role": "assistant", "content": "能具体说说压力主要来自哪些方面吗?"}
]

3. 读取历史对话

每次来电先检查DB中是否存在该号码的记录,无则初始化空列表:

# 读取历史对话,不存在则创建空列表
if caller_number in db:
    history = db[caller_number]
else:
    history = []

4. 传递历史对话给ChatGPT

将历史对话与本次用户输入拼接后调用API,实现上下文延续:

# 假设user_input是Whisper转录的用户语音文本
user_input = "最近天天加班到凌晨,身体也吃不消"

# 追加本次用户输入到历史
history.append({"role": "user", "content": user_input})

# 调用ChatGPT,直接传入包含历史的messages参数
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=history
)

# 提取助理回复并追加到历史
assistant_reply = response.choices[0].message["content"]
history.append({"role": "assistant", "content": assistant_reply})

5. 保存更新后的对话到DB

通话结束(或每轮交互后),将更新后的历史记录存回DB:

# 覆盖原记录,保存最新对话历史
db[caller_number] = history

新手必看注意事项

  • 密钥安全:所有API密钥(OpenAI、Twilio、ElevenLabs)都要存在Replit左侧栏的「Secrets」中,用os.getenv("密钥名称")读取,绝对不能硬编码。
  • 号码格式一致性:不要修改Twilio返回的号码格式(如删除+号),否则同一个用户的号码会被识别为不同键,导致历史记录错乱。
  • 上下文长度限制:ChatGPT有token数量上限(gpt-3.5-turbo为4096),对话过长会触发报错,可简单截断历史:
    # 只保留最近20条消息(10轮对话),避免超出限制
    if len(history) > 20:
        history = history[-20:]
    
  • DB测试:可在Replit Shell中直接测试DB读写,比如输入from replit import db,然后db['+86138xxxxxxx'] = [{"role":"user","content":"测试"}],再print(db['+86138xxxxxxx'])验证功能。

内容的提问来源于stack exchange,提问作者Alessandro David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:05:21