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

基于ChatGPT/OpenAI实现对话式用户信息收集与验证的方案咨询

基于OpenAI实现对话式用户信息收集的方案

核心思路

通过状态机跟踪收集进度,结合OpenAI的对话补全能力驱动机器人主动提问,同时整合你已有的输入验证逻辑,实现按顺序收集姓名、邮箱、性别并校验的完整流程。

具体实现步骤

1. 定义对话状态

先明确收集顺序(可自定义调整,示例为:姓名→邮箱→性别),用状态变量记录当前待收集的字段:

  • current_step: "name"(初始状态)
  • current_step: "email"
  • current_step: "gender"
  • current_step: "completed"(收集完成)

同时维护对话历史和已收集信息的存储结构,确保上下文连贯。

2. 设计针对性Prompt模板

根据当前状态生成精准指令,让OpenAI输出符合要求的自然对话内容。示例模板:

你是负责收集用户信息的助手,需按「姓名→邮箱→性别」的顺序依次收集。
当前需收集的字段:{current_field}
规则:
1. 若用户未提供当前字段,用自然语气主动询问。
2. 若用户提供了当前字段,先校验是否符合规范:姓名不能为空,邮箱需符合xxx@xxx.xx格式,性别为「男/女/其他」。校验通过则告知用户并切换到下一字段提问;不通过则明确说明错误原因,引导重新输入。
3. 回复简洁自然,避免冗余。

历史对话:
{history}
用户最新回复:{user_input}

模板中的{current_field}、{history}、{user_input}为动态替换变量。

3. 整合验证逻辑

你已实现的输入验证功能可通过两种方式整合:

  • 预验证:用户回复后先调用本地验证函数,若通过则更新状态并生成下一轮提问Prompt;若不通过,直接生成错误提示或传给OpenAI生成自然引导语。
  • Prompt嵌入验证规则:把验证逻辑写入Prompt,让OpenAI直接判断用户输入是否合规,减少本地代码复杂度。

4. 代码示例(Python)

基于OpenAI gpt-3.5-turbo模型的完整流程框架:

import openai
import re

openai.api_key = "你的API密钥"

# 初始化对话状态
conversation = {
    "current_step": "name",
    "collected": {},
    "history": [{"role": "assistant", "content": "你好!我需要收集你的一些信息,首先请告诉我你的姓名。"}]
}

# 验证函数(你已实现的逻辑)
def validate(field, value):
    if field == "name":
        return len(value.strip()) > 0, "姓名不能为空"
    elif field == "email":
        pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
        return re.match(pattern, value) is not None, "邮箱格式不正确"
    elif field == "gender":
        valid = ["男", "女", "其他"]
        return value.strip() in valid, f"性别请输入「{'/'.join(valid)}」"
    return True, ""

def process_user_input(user_msg):
    step = conversation["current_step"]
    history = conversation["history"]
    collected = conversation["collected"]

    # 验证用户输入
    is_valid, err_msg = validate(step, user_msg)
    history.append({"role": "user", "content": user_msg})

    if is_valid:
        # 保存信息并切换状态
        collected[step] = user_msg
        history.append({"role": "assistant", "content": f"已记录你的{step}:{user_msg}"})

        # 生成下一步指令
        if step == "name":
            conversation["current_step"] = "email"
            prompt = "接下来请告诉我你的邮箱地址。"
        elif step == "email":
            conversation["current_step"] = "gender"
            prompt = "最后请告诉我你的性别(男/女/其他)。"
        else:
            conversation["current_step"] = "completed"
            prompt = "所有信息已收集完成,感谢配合!"

        # 调用OpenAI生成自然回复
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=history + [{"role": "user", "content": prompt}]
        )
        reply = response.choices[0].message["content"]
        history.append({"role": "assistant", "content": reply})
        return reply
    else:
        # 验证不通过,生成引导语
        prompt = f"输入不符合要求:{err_msg},请重新输入你的{step}。"
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=history + [{"role": "assistant", "content": prompt}]
        )
        reply = response.choices[0].message["content"]
        history.append({"role": "assistant", "content": reply})
        return reply

# 模拟对话
print("助手:", conversation["history"][0]["content"])
while conversation["current_step"] != "completed":
    user_input = input("用户:")
    assistant_reply = process_user_input(user_input)
    print("助手:", assistant_reply)

5. 优化方向

  • 处理用户跳步回复:在Prompt中加入规则,若用户一次性提供多个信息,优先提取当前需要的字段,后续再逐步收集剩余信息。
  • 动态调整提问语气:通过Prompt引导OpenAI根据用户回复风格调整语气,提升交互自然度。
  • 异常处理:加入对用户无意义回复(如乱码、重复内容)的处理逻辑,避免流程卡住。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:53:27