前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码分享|如何构建一个对话机器人

代码分享|如何构建一个对话机器人

作者头像
做数据的二号姬
发布2023-09-06 12:52:14
2170
发布2023-09-06 12:52:14
举报
文章被收录于专栏:HR大数据HR大数据

23

2023-06

代码分享|如何构建一个对话机器人

以下代码适用于jupyter notebook~由于我自己也是边学边做的,有可能有一些地方的代码是错误或者有问题的~

LEARN MORE

图片由Stable Diffusion绘制

首先是导入所需要的包,因为我没做复杂的前端可视化界面,所以用到了open ai、os和panel三个包。

代码语言:javascript
复制
import openai
import os
import panel as pn

os和panel这两个包是anaconda默认就有的,但是openai这个包不是,需要装一下,两种方法,第一种是打开anaconda powershell进行安装,第二种是直接在jupyter中进行安装。

代码语言:javascript
复制
#写法1,在powershell中进行安装
conda install openai
pip install openai
#写法2:在jupyter中直接进行安装
! pip install openai

顺便说一句,下载并安装包不需要访问国外网站,直接安装就可以。

装好包之后就可以录入自己的api key了,不知道怎么获取api key的同学可以加入唠嗑群细聊~

方法也是非常的简单,这样写就可以了

代码语言:javascript
复制
openai.api_key = ("你的api key")

然后是构造两个function用于调取API并实现对话的功能:

代码语言:javascript
复制
def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message["content"]

再定义一个function用于实现连续对话的功能,或者说让AI记住之前的对话是什么。

代码语言:javascript
复制
def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, # this is the degree of randomness of the model'
s output
    )
#     print(str(response.choices[0].message))
    return response.choices[0].message["content"]

再构造一个函数让它有一个对话的感觉

代码语言:javascript
复制
import panel as pn def collect_messages(_):
    prompt = inp.value_input
    inp.value = ''
    context.append({'role':'user', 'content':f"{prompt}"})
    response = get_completion_from_messages(context) 
    context.append({'role':'assistant', 'content':f"{response}"})
    panels.append(
        pn.Row('User:', pn.pane.Markdown(prompt, width=600)))
    panels.append(
        pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))
    return pn.Column(*panels)

最后就是调用这些函数,让它运转

代码语言:javascript
复制
pn.extension()
panels = [] # collect display 
context = [ {'role':'system', 'content':"""
你是一个数据分析专家,现在想把自己的分析经验写成微信公众号文章进行推送

"""} ]  # accumulate messages


inp = pn.widgets.TextInput(value="Hi", placeholder='在这里开始聊天')
button_conversation = pn.widgets.Button(name="发送")

interactive_conversation = pn.bind(collect_messages, button_conversation)

dashboard = pn.Column(
    inp,
    pn.Row(button_conversation),
    pn.panel(interactive_conversation, loading_indicator=True, height=300),
)

dashboard

这样一来,一个简易的对话机器人就完成啦~不过上面这个代码,如果没有访问国外网站话,会下面这个错:

不知道怎么访问国外网站的同学,或者就是单纯想白嫖的同学,可以去看我6月21日推送发布的文章,azure虚拟机踩坑指南。毕竟有些话不能说得太明白,至于是怎么实现合法访问国外网站且白嫖的,你细品就知道了。除了这种办法以外,6月19日的推文中还提到了一个浏览器插件神器,媲美调接口的体验且不需要访问国外网站,有兴趣的同学自己体会。

总之呢,运行出来的效果是这样的:

虽然UI寒碜了一点,但是它确实能用且好用,对我而言已经足够了。虽然把代码放出来了,但是访问国外网站这个事情确实有点麻烦,我还是推荐浏览器插件那个做法,好用很多。

THANKS

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 做数据的二号姬 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对话机器人
对话机器人(Conversation Robot,ICR),是基于人工智能技术,面向企业场景的 AI 服务,可应用于智能客服、服务咨询、业务办理等场景。本产品旨在帮助企业快速构建,满足自身业务诉求的对话机器人,从而减少企业人力成本或解决服务不及时问题。用户可通过对话机器人用户端引擎,实现高准确率的对话服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档