探索基于openAI实现个性化对话机器人(一)

##前情提要

  想要一个电商网站的机器人客服(chatbot),但目前直接引入GPT作为客服可能会被投诉N次,因为他无法基于你的网站信息进行精准回答。

  为此我调研国内(阿里/京东),国外的(欧米茄/戴森)客服小助手,发现目前市面上最成熟(...)的电商机器人应该是问答系统chatbot,这种问答系统有几个特点:

        (1)主要以售后问答为主(像订单、物流、退换货等);

        (2)都并没有接入GPT这类生成式对话机器人(超出了他的问题范围会提示不知道);

        (3)问答推荐商品时理解困难;

        (4)虽然有点笨,但是回答的准确率是很高的。

  但是我们想要的是AIGC下的chatbot,为此我再次调研基于GPT这种生成式对话机器人如何能够落地实现(属于基于私域数据进行生成式对话)?发现主要有两种方案:

        (1)利用openAI的fine-tune训练私域对话数据(格式要求是jsonl);

        (2)利用LangChain、向量数据库(Pinecone) 和 LLM(如 GPT-4 和 ChatGPT)构建基于文                  档的问答系统。

        本文主要介绍第一种方案。fine-tune微调模型实现电商网站(公司内部)chatbot。

        openAI产品价格表:Pricing

     

一、在openAI页面中构建fine-tune模型

     (1)进入openAI官网,点击左侧栏的fine-tuning

        (2)点击右上角 create 创建一个新的微调模型

        model的分类:

        Ada:Ada是一种基础模型,适合用于提示和短对话。
        Babbage:Babbage是一个中等规模的模型,适合于更长的对话和创造性写作。
        Curie:Curie是一个大型模型,适用于复杂的对话和生成性任务。
        Davinci:Davinci是OpenAI提供的最先进的语言模型,适合处理长篇大论、技术文档和创造                           性写作等。

        turbo:没有找到很精确的定义,从字面理解是融合上面4种类型的新模型。

        注明:下面的fine tunes是我已经创建成功的微调模型,你可以基于已有的微调模型继续加入新数据微调。

        这里根据实际需求选择base model(一般肯定选最新的。。),这里我选了turbo-1106。

(3)选择训练集和验证集

        Training data:对话训练集(这里我用gpt帮我想了一些对话);

{"messages": [{"role": "user", "content": "我想知道你们超市有哪些好吃的水果?"}, {"role": "assistant", "content": "我们商店冬季好吃的水果有:草莓"}]}
{"messages": [{"role": "user", "content": "我想知道你们超市有哪些草莓?"}, {"role": "assistant", "content": "目前只有丹东草莓了,亲"}]}
{"messages": [{"role": "user", "content": "你们的丹东草莓多少钱"}, {"role": "assistant", "content": "大草莓66元一斤,中草莓45元一斤"}]}
{"messages": [{"role": "user", "content": "你们超市还有哪些热带水果?"}, {"role": "assistant", "content": "还有芒果,亲"}]}
{"messages": [{"role": "user", "content": "你们超市最甜的是哪种芒果?"}, {"role": "assistant", "content": "目前可售的最甜芒果是贵妃芒"}]}
{"messages": [{"role": "user", "content": "你们超市贵妃芒怎么卖?"}, {"role": "assistant", "content": "只有中型贵妃芒,¥12.8一斤"}]}
{"messages": [{"role": "user", "content": "你们超市有什么蔬菜好吃吗?"}, {"role": "assistant", "content": "我们商店冬季好吃的蔬菜有:秋葵"}]}
{"messages": [{"role": "user", "content": "天哪我不喜欢秋葵,还有别的吗"}, {"role": "assistant", "content": "目前只有秋葵了,亲"}]}
{"messages": [{"role": "user", "content": "你们商店种类少得可怜"}, {"role": "assistant", "content": "我们主打的是零食呢,亲"}]}
{"messages": [{"role": "user", "content": "你们超市有哪些零食?"}, {"role": "assistant", "content": "我们商店热销的零食是卫龙系列,其次是坚果"}]}
{"messages": [{"role": "user", "content": "你们超市有坚果礼盒吗?"}, {"role": "assistant", "content": "目前最热销的坚果礼盒是三只松鼠新春礼盒,亲"}]}
{"messages": [{"role": "user", "content": "你们超市三只松鼠新春礼盒多少钱"}, {"role": "assistant", "content": "¥88一盒"}]}
{"messages": [{"role": "user", "content": "这些新鲜水果你们是怎么运输的?"}, {"role": "assistant", "content": "我们的新鲜水果通过空运/陆运来保证新鲜度。"}]}
{"messages": [{"role": "user", "content": "你们蔬菜的保质期是多久?"}, {"role": "assistant", "content": "这批蔬菜的保质期是7天,我们保证新鲜送达。"}]}
{"messages": [{"role": "user", "content": "你们超市的海鲜的来源地是哪里?"}, {"role": "assistant", "content": "我们的海鲜来自本地渔民或者经过严格挑选的渔场。"}]}
{"messages": [{"role": "user", "content": "QQ星这款牛奶是全脂还是脱脂的?"}, {"role": "assistant", "content": "这款牛奶是全脂牛奶,含有丰富的营养。"}]}
{"messages": [{"role": "user", "content": "你们肉类产品是怎么保存的?"}, {"role": "assistant", "content": "我们的肉类产品在低温环境下密封保存,以确保新鲜和质量。"}]}
{"messages": [{"role": "user", "content": "这个季节最适合购买哪些水果?"}, {"role": "assistant", "content": "这个季节最适合购买草莓、蓝莓和哈密瓜等水果。"}]}
{"messages": [{"role": "user", "content": "这批新鲜蔬菜有机认证吗?"}, {"role": "assistant", "content": "是的,这批蔬菜是有机认证的,不含有害农药。"}]}
{"messages": [{"role": "user", "content": "咯咯香品牌的鸡蛋是放养的吗?"}, {"role": "assistant", "content": "是的,这个品牌的鸡蛋是放养鸡产的,品质优良。"}]}
{"messages": [{"role": "user", "content": "这些冷冻海鲜可以重新冷冻吗?"}, {"role": "assistant", "content": "建议不要重新冷冻,以免影响口感和食品安全。"}]}
{"messages": [{"role": "user", "content": "这个季节你们超市最新鲜的蔬菜有哪些?"}, {"role": "assistant", "content": "这个季节最新鲜的蔬菜包括西兰花、菠菜和胡萝卜等。"}]}

        validation data:对话验证集(用来验证这个微调模型的准确率,和训练集互斥)

{"messages": [{"role": "user", "content": "你们有什么好吃的水果?"}, {"role": "assistant", "content": "我们商店冬季好吃的水果有:草莓"}]}
{"messages": [{"role": "user", "content": "还有别的吗?"}, {"role": "assistant", "content": "还有葡萄"}]}
{"messages": [{"role": "user", "content": "葡萄多少钱"}, {"role": "assistant", "content": "特价¥9.9一斤"}]}
{"messages": [{"role": "user", "content": "咯咯香品牌的鸡蛋是圈养的吗?"}, {"role": "assistant", "content": "不是,是放养鸡产的。"}]}
{"messages": [{"role": "user", "content": "你们的冷冻海鲜必须马上吃掉吗?"}, {"role": "assistant", "content": "是的,直接烹饪口感更好"}]}
{"messages": [{"role": "user", "content": "这个季节不打农药的蔬菜有哪些?"}, {"role": "assistant", "content": "亲,有机蔬菜一般不含农药"}]}

选择upload new加载新文件(或者选择已有的旧文件),两个集合都选好后点击create,等待训练成功。

(4)在python中调用自己的微调模型进行机器人对话

mport gradio as gr
from openai import OpenAI

# 创建 OpenAI 客户端
client = OpenAI(
    organization='org-WqmRLAjW6Ou4shDc2caPi3Qe',
    api_key="你的openai中的apikey"
    )
context = "现在你是客服"
 # 初始上下文

def generate_response(question):
    global context  # 使用全局变量 context
    messages = [
        {"role": "system", "content": context},
        {"role": "user", "content": question}
    ]
    response = client.chat.completions.create(
        model="你的微调模型名称",
        messages=messages,
        max_tokens=100,
        temperature=0.1
    )
    context = response.choices[0].message.content  # 将模型的回复作为下一轮对话的上下文
    return context

# 创建 Gradio 接口
iface = gr.Interface(
    fn=generate_response,
    inputs=gr.Textbox(label="请输入你的问题:"),
    outputs=gr.Textbox(label="回答:")
)

# 启动 Gradio 应用程序
iface.launch(share=True)

运行之后就可以点击端口连接在gradio中进行对话。

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值