基于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
相关产品推荐
相关产品推荐

