聊天机器人可以帮助传达我们的USP吗?
#教程 #python #openai #聊天机器人

Can a chatbot help to communicate your USPs?

随着Chatgpt的发布以及随后的生成AI的普遍兴奋,聊天机器人也收到了新的炒作。上一代聊天机器人没有期望,有些人已经被称为中等死亡。好吧,似乎他们错了。

今天,我们将尝试使用聊天机器人来解决许多SaaS创业公司面对的关键问题 - 产品越复杂 - 解释它的作用以及它与竞争对手的差异越难。我们可以向LLM模型传授所需的知识并构建聊天机器人,该聊天机器人可以可靠地回答How is Codesphere's service different from Vercel?类型的问题,以便后来将其嵌入着陆页中?让我们找出答案。

我们的示例聊天机器人的代码将少于500行,并将使用Python和Flask作为Web服务器实现。关于模型,我们有两个可用的选项:

1。创建自定义模型:

  • 它将针对我们的特定用例进行专门培训。
  • 培训过程可能很昂贵。
  • 我们需要自己创建数据集。

2。使用多功能的预训练模型,例如chatgpt:

  • 它已经受过训练。
  • 它需要少量使用费用。
  • 它没有专门为我们的用例培训。
  • 模型的培训数据仅延长到一定日期。

目前,我们将使用OpenAi的Chatgpt API,因为它非常容易入门,这对跟随的任何人都非常有用。

代码:https://github.com/codesphere-cloud/usp-chatbot-blog

Live Demo(受我们API信用的可用性约束):https://41764-3000.2.codesphere.com/

您也可以单击一键在CodeSphere中部署免费工作区。如果您没有创建一个免费帐户:https://signup.codesphere.com/

然后使用它直接部署:https://codesphere.com/https://github.com/codesphere-cloud/usp-chatbot-blog

我们已经在考虑使用CodeSphere中的自托管Llama2测试相同的用例 - 请在我们即将发行的博客文章之一中关注它。

用户界面的开发

我们的网站需要一种表格,用户可以通过该表格向聊天机器人提出问题。通过使用HTML表单可以轻松实现这一点。然后,我们将使用JavaScript拦截表单提交。用户的问题将插入HTML模板中,并添加到聊天历史记录中。随后,我们将向API发送get请求,并以相同的方式将收到的答案附加到聊天记录中。

python脚本:

app = Flask( __name__ )
app.static_folder = 'static'
@app.route("/")
def home():
    now=datetime.now()
    time=now.strftime("%H:%M")
    return render_template("index.html", time=time)

@app.route("/get")
def get_bot_response():
    userText = request.args.get('msg')
    response = chatbot_response(userText)
    return response

if __name__ == " __main__":
    port=int(os.environ.get("PORT", 3000))
    app.run(host="0.0.0.0", port=port)

Web服务器的第一个功能是使用HTML文件向用户显示接口。我们将当前时间添加到网页中,以便聊天机器人的第一条消息将具有当前的时间戳。第二个功能负责接收用户问的问题并寄回聊天机器人的响应。在第三行中,我们从GET请求中得到问题。然后,这个问题将传递给chatbot_response函数,该功能生成答案。最后,我们将生成的答案发送回用户。

生成响应:

f=open("onepager_developer.txt", "r")
onepager_developer=f.read()
f.close()

def chatbot_response(question):
    input_data=[
    {"role": "system", "content" : str("You are a chatbot on codespheres website.You need to compare codesphere with alternatives in 3 short bullet points. With the following context:\n"+onepager_developer)},
    {"role":"user", "content": str(question)}]

    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo", 
        messages = input_data
    )

    response_gpt=json.loads(str(completion))
    data=response_gpt["choices"][0]
    reason_to_stop=data["finish_reason"]

    if reason_to_stop == "stop":
        response=data["message"]["content"]
        response=response.replace("\n", "<br>")
    else:
        response="An error occurred."

    return response

对于此项目,我们将使用OpenAI的“ GPT-3.5-Turbo”模型。首先,我们需要使用命令pipenv install openai下一步安装库,我们为库提供了我们的API密钥来提出请求。我们创建一个对话列表,为模型提供其他信息。这使我们能够克服未针对此应用程序进行专门培训的模型的限制,并且缺乏截止日期后发生的信息。在对话列表中,我们首先告诉模型如何响应以及响应的外观。

然后,我们为模型提供有关我们主题的信息,在这种情况下,代码。之后,用户的问题包含在对话中,并以user的角色向模型呈现,我们将OpenAI库的角色告知我们要使用的模型并提供先前生成的数据,因此该模型具有更多信息来生成响应。由于响应以JSON格式返回,因此将字符串转换为JSON以方便访问数据。

处理JSON响应:

如果模型将stop返回为finish_reason,则意味着不会发生错误,我们可以提取消息。但是,如果在一代期间发生错误,则响应将为An error occurred.。要在网页上正确显示答案,我们使用<br>创建新的行而不是\n。使用替换函数替换。

改善响应:

OpenAI的答案仍然相对通用。为了改善它们,我们将提供TXT文件的上下文放置到存储库中。 CHATGPT或更好的聊天机器人将在字面上使用此文件中提供的上下文,我们必须使用几个版本来获得一些可接受的结果,并且我们相信这里仍然有很大的改进空间。我们的背景越好 - 我们的聊天机器人朋友作为事实提出的结果越好。

在实际将其显示在登陆页面上之前,UI设计也需要改进,但这是我要说的另一篇文章的话题。

结论:

创建聊天机器人并不像人们想象的那样困难,尤其是在使用预训练模型时。尽管这些模型可能没有精确的知识并且有一定的截止日期,但在给定信息中运行时,它们仍然可以提供良好的答案。

快乐编码!