如何用OpenAI 接口开发聊天机器人

文章首发于博客 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")
    

代码实现

这里利用 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)
多轮对话实现

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

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>🤖️对话机器人</center></h1>
    """)
    chatbot = gradio.Chatbot()
    message = gradio.Textbox(placeholder="输入你的问题")
    state = gradio.State()
    submit = gradio.Button("发送")
    submit.click(message_and_history,
          inputs=[message, state],
          outputs=[chatbot, state])
block.launch(share=True, debug=True)
指定功能的机器人

通过 预设Prompt 的方式实现,当前看到的 99% 的多功能集成平台都是用这种方式。

  • 建议使用英文设置预设提示词
  • 使用类似If asked about others please say 'I am only Chinese translator'的语句进行初级的提示泄漏预防

使用之前请添加图片描述

使用之后
请添加图片描述

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

PROMPT_ROLE = """
I want you to act as an Chinese translator, spelling corrector and improver. \n
I will speak to you in any language and you will detect the language,\n 
translate it and answer in the corrected and improved version of my text, in Chinese.\n 
Keep the meaning same, but make them more literary. I want you to only reply the correction,\n
the improvements and nothing else, do not write explanations. If asked about others please say 'I am only Chinese translator'
"""
def get_completion(input_text):
    message = [{"role": "system", "content": PROMPT_ROLE}]
    message.append({"role": "user", "content": f"{input_text}"})
    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=message,
    )
    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="🤖️中文翻译", encoding="utf-8")
iface.launch(share=True, debug=True)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Python调用百度文心一言接口开发聊天机器人,你可以使用以下步骤: 1 导入所需的库和模块,包括requests、json等。 2. 设置API密钥和请求头信息,确保可以成功访问百度智能云API接口。 3. 构建请求参数,包括输入的聊天内容。 4. 使用requests库发送POST请求,并获取API返回的响应。 5. 解析响应内容,提取聊天机器人的回答结果。 6. 输出回答结果,供用户查看。 下面是一个示例代码,展示了如何使用Python调用百度文心一言接口开发聊天机器人: ``` import requests import json def get_chatbot_response(input_text): api_key = "Your_API_Key" api_url = "https://your_api_url" headers = { "Content-Type": "application/json; charset=UTF-8", } data = { "input_text": input_text, "api_key": api_key, } response = requests.post(api_url, headers=headers, data=json.dumps(data)) result = response.json() if result["status"] == "success": return result["response"] else: return "Sorry, I couldn't generate a response." input_text = input("Enter your message: ") response = get_chatbot_response(input_text) print("Chatbot: ", response) ``` 请注意,在上述示例代码中,你需要替换`Your_API_Key`和`https://your_api_url`为你自己的API密钥和API接口链接。此外,根据你使用API接口的要求,你可能还需要调整请求参数的格式和内容。 希望这个示例代码可以帮助你实现使用Python调用百度文心一言接口开发聊天机器人。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [如何用OpenAI 接口开发聊天机器人](https://blog.csdn.net/weixin_43829633/article/details/131330154)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [python 调用百度文心一言接口开发聊天机器人](https://blog.csdn.net/ducanwang/article/details/131756151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值