当前位置:   article > 正文

如何用OpenAI 接口开发聊天机器人_使用openai api完成聊天机器人开发

使用openai api完成聊天机器人开发

文章首发于博客 OpenAI 接口实践

OpenAI的接口文档十分详细,包括对话补全,文本补全,代码补全等等信息,也包含了最佳生产实践,最佳安全实践等篇章,通读之后十分受用,推荐大家前往阅读。本文就是在接口文档的基础上,将常见的三种OpenAI 接口套壳应用代码展示出来,以帮助读者实现自己的工具。

环境准备

API 状态检查

提供了一个API 状态页面,可以看到接口实时延迟,以及出现大面积宕机时会显示公告。

API费用说明
模型名称context max tokens输入价格输出价格
gpt-3.5-turbo4096$0.0015 / 1K tokens$0.002 / 1K tokens
gpt-3.5-turbo-16k16,384$0.003 / 1K tokens$0.004 / 1K tokens
gpt-3.5-turbo-0613(支持函数调用)4096$0.0015 / 1K tokens$0.002 / 1K tokens
gpt-3.5-turbo-16k-061316,384$0.003 / 1K tokens$0.004 / 1K tokens
gpt-48,192$0.03 / 1K tokens$0.06 / 1K tokens
gpt-4-32k32,768$0.06 / 1K tokens$0.12 / 1K tokens
gpt-4-0613(支持函数调用)8,192$0.03 / 1K tokens$0.06 / 1K tokens
gpt-4-32k-061332,768$0.06 / 1K tokens$0.12 / 1K tokens
Token 计数
  • 可以使用tiktoken 计算原始字符串对应的 token 数;这篇关于ChatGPT如何计算token数的科普文章值得一读
    import tiktoken
    
    def num_tokens_from_string(string: str, encoding_name: str) -> int:
        """Returns the number of tokens in a text string."""
        encoding = tiktoken.get_encoding(encoding_name)
        num_tokens = len(encoding.encode(string))
        return num_tokens
    
    num_tokens_from_string("tiktoken is great!", "cl100k_base")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

代码实现

这里利用 Gradio 实现 Web UI

Gradio介绍

Gradio是一个用于构建交互式机器学习应用程序的Python库,可以快速构建和部署交互式UI,方便与机器学习模型进行交互。Gradio提供了一组简单的API,可以轻松地将代码转化为一个Web应用程序,可以让其他人通过网页界面与模型进行交互。

Gradio支持创建各种类型的交互式UI,例如文本输入框、滑块、下拉菜单等,以及支持多种数据类型,例如图像、音频、视频和表格数据。Gradio还提供了内置的预处理和后处理功能,以确保的输入和输出数据格式正确。

基本的问答实现

使用API将用户的输入发送到OpenAI模型中,然后将模型生成的响应返回给用户,从而实现问答。

import gradio as gr
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")

def get_completion(input_text):
    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=[
            {"role": "user", "content": f"{input_text}"}
        ]
    )
    return completion.choices[0].message["content"]

def chatbot(input_text):
    response = get_completion(input_text)
    return response

iface = gr.Interface(fn=chatbot, inputs="text", outputs="text", title="Chatbot", encoding="utf-8")
iface.launch(share=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
多轮对话实现

在问答的基础上更进一步,在每个轮次中保留用户之前的输入和模型生成的响应,以便将其传递给下一轮对话,这种方式可以实现更加自然的对话流程,并提供更好的用户体验。

import os
import openai
import gradio
openai.api_key = os.getenv("OPENAI_API_KEY")

history_messages = []
def api_calling(input_text, history_conversation):
    if history_conversation:
        history_messages.extend([
			{"role": "user", "content": f"{history_conversation[-1][0]}"},
            {"role": "assistant", "content": f"{history_conversation[-1][1]}"}
		]
		)
    message = history_messages+[{"role": "user", "content": f"{input_text}"}]
    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",          
        messages=message,
		max_tokens=1024,
		n=1,
		stop=None,
		temperature=0.5,
    )
    return completion.choices[0].message["content"]

def message_and_history(input, history):
    history = history or []
    output = api_calling(input, history)
    history.append((input, output))
    return history, history

block = gradio.Blocks(theme=gradio.themes.Monochrome())
with block:
    gradio.Markdown("""<h1><center>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/826989
推荐阅读
相关标签