AI 大模型之美
徐文浩
bothub 创始人
32335 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
AI 大模型之美
15
15
1.0x
00:00/00:00
登录|注册

06|ChatGPT来了,让我们快速做个AI应用

OPENAI_API_KEY
requirements.txt
app.py
创建聊天界面
封装聊天函数
定义系统提示语
免费部署到HuggingFace
Jupyter Notebook集成
无需前端知识
管理对话轮数
保留历史对话
assistant:AI回答
user:用户输入
system:系统指令
优势:易用性、速度、成本
模型:gpt-3.5-turbo
直接进行对话聊天
实现聊天机器人功能
完成文本分类功能
优化上下文记忆策略
不限轮数的聊天机器人
注意模型与编码器匹配
Tiktoken库计算Token数
API返回Token数
设置环境变量
提交代码
创建Space
注册账号
实现步骤
优势
控制对话轮数
动态管理对话历史
封装聊天逻辑
上下文管理
角色定义
查看示例代码
下载最新开源模型
深度模型社区
ChatCompletion接口
Completion接口
Embedding接口
课后练习
Token计算
HuggingFace部署
Gradio界面搭建
Conversation类
ChatGPT特性
HuggingFace平台
OpenAI接口
ChatGPT应用开发快速入门

该思维导图由 AI 生成,仅供参考

你好,我是徐文浩。
过去的两讲,我带着你通过 OpenAI 提供的 Embedding 接口,完成了文本分类的功能。那么,这一讲里,我们重新回到 Completion 接口。而且这一讲里,我们还会快速搭建出一个有界面的聊天机器人来给你用。在这个过程里,你也会第一次使用 HuggingFace 这个平台。
HuggingFace 是现在最流行的深度模型的社区,你可以在里面下载到最新开源的模型,以及看到别人提供的示例代码。

ChatGPT 来了,更快的速度更低的价格

我在第 03 讲里,已经给你看了如何通过 Completion 的接口,实现一个聊天机器人的功能。在那个时候,我们采用的是自己将整个对话拼接起来,将整个上下文都发送给 OpenAI 的 Completion API 的方式。不过,在 3 月 2 日,因为 ChatGPT 的火热,OpenAI 放出了一个直接可以进行对话聊天的接口。这个接口叫做 ChatCompletion,对应的模型叫做 gpt-3.5-turbo,不但用起来更容易了,速度还快,而且价格也是我们之前使用的 text-davinci-003 的十分之一,可谓是物美价廉了。
import openai
openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

ChatGPT是一个新的聊天机器人接口,利用OpenAI提供的ChatCompletion接口和gpt-3.5-turbo模型,用户可以更快速、更便宜地实现对话聊天功能。本文介绍了如何使用HuggingFace平台下载最新的开源模型,并提供了示例代码。通过传入role和content两个字段,用户可以指定系统、用户和AI的角色,并构建对话的上下文。作者还封装了一个Conversation类,用于向ChatGPT发起请求并保留对话历史。通过示例代码演示了如何使用Conversation类与ChatGPT进行交互,实现了一个有界面的聊天机器人。此外,文章还介绍了ChatGPT的对话模型的使用方法和技术特点,以及如何快速搭建AI应用。同时,还提到了在使用ChatGPT时需要注意的成本计算和如何通过API或Tiktoken库计算Token数量。最后,文章展示了如何使用Gradio库快速搭建一个聊天界面,使得用户可以方便地与ChatGPT进行交互。 文章还介绍了如何将机器人部署到HuggingFace平台上,以便他人也能够使用。通过注册HuggingFace账号,创建项目空间,并提交代码部署App的方式,用户可以将ChatGPT应用分享给他人。在部署过程中,还介绍了如何设置OpenAI的API Key环境变量以及重新加载应用,确保聊天机器人可以正常工作。 总的来说,本文通过介绍ChatGPT的接口使用、技术特点、部署到HuggingFace平台以及相关注意事项,为读者提供了全面的了解和操作指南。同时,通过示例代码和实际操作步骤,使读者能够快速上手并应用于实际项目中。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 大模型之美》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(44)

  • 最新
  • 精选
  • Geek_19eca2
    置顶
    最新代码: import os from openai import OpenAI client = OpenAI() class Conversation: def __init__(self, prompt, num_of_round): self.prompt = prompt self.num_of_round = num_of_round self.messages = [] self.messages.append({"role": "system", "content": self.prompt}) def ask(self, question): try: self.messages.append({"role": "user", "content": question}) response = client.chat.completions.create( model="gpt-3.5-turbo", messages=self.messages, temperature=0.5, max_tokens=2048, top_p=1, ) except Exception as e: print(e) return e message = response.choices[0].message.content self.messages.append({"role": "assistant", "content": message}) if len(self.messages) > self.num_of_round*2 + 1: del self.messages[1:3] # Remove the first round conversation left. return message 不然跑不过去。。openai改了。。。
    2024-01-23归属地:浙江
    2
  • 我自己带盐
    可以认模型总结一下,全部的对话,再发过去

    作者回复: 👍

    2023-03-29归属地:广东
    2
    28
  • 黄琨
    问题1: 为了防止超标,可能需要在对话开始前设置一个允许最大的token阈值,比如 MAX_TOKEN_LIMIT = 2000,再设置一个小于某个数量就需要提醒的警告值,比如 MIN_TOKEN_LIMIT = 200,对话前初始化一个最大值,对话过程中减去每轮所消耗的token数量,当结果少于最小值的时候,再调用删减对话数组的代码。 问题2: 限制文本长度。或许可以把对话中的大段文本缩减为精简摘要,以减少token数量,比如把“鱼香肉丝的做法是......”这种精简后的文本带入到上下文中去。别的暂时想不到 =_=!

    作者回复: 👍

    2023-03-29归属地:北京
    14
  • LiuHu
    用向量数据库把历史回话保存到本地,新的问题先转向量,从向量库中搜出相关内容,再把搜出的内容作为上下文+新问题一起带过去

    作者回复: 对话场景用这个方式其实不太合适。专门的确定的资料库这样做可以。

    2023-03-30归属地:江苏
    2
    8
  • 浩仔是程序员
    目前chatGPT的上下文功能也是这么实现的吗?每次都要发之前的问题和答案,感觉很蠢

    作者回复: 是的,这是由现在的GPT类型模型的原理决定的。

    2023-04-01归属地:广东
    2
    6
  • 胡萝卜
    输入文本超长时需要不能直接截断,不然可能不听指令直接续写。截断后把最后一个句子去掉,并以句号结尾防止出现奇怪的回复。

    作者回复: 👍 这个技巧也是很有用的。

    2023-03-29归属地:上海
    5
  • Allan
    老师可以把每节课的项目都放到一个工程里面吗?然后我们可以下载这样是不是方便一些。

    作者回复: 所有代码都以Jupyter Notebook的文件格式放在 https://github.com/xuwenhao/geektime-ai-course 里 导读那一讲里放了对应的链接。

    2023-04-07归属地:北京
    2
  • new one
    出现SSL握手失败的问题,请教一下应该怎么解决,问了chatgpt,使用了: import ssl context = ssl.create_default_context() context.load_verify_locations("D:\Anaconda\Library\ssl\cert.pem") 并没有得到解决 具体报错如下: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1129)'))) Assistant : Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by SSLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1129)')))

    作者回复: 感觉还是SSL握手失败,先在Colab上看看能不能跑通?再看看简单HTTPS请求别的网站是否正常来定位问题?

    2023-04-03归属地:江苏
    1
  • 川月
    del self.messages[1:3] //Remove the first round conversation left. ^ SyntaxError: cannot delete operator 为什么这个报错啊

    作者回复: 正好你可以试着把问题扔给ChatGPT看看它会怎么解答?

    2023-03-31归属地:四川
    6
    1
  • Bonnenult丶凉煜
    安装gradio需要使用这个命令conda install -c conda-forge gradio

    作者回复: 👍

    2023-03-30归属地:中国台湾
    1
收起评论
显示
设置
留言
44
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部