openai的的API如何使用

Posted openwin_top

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openai的的API如何使用相关的知识,希望对你有一定的参考价值。

openai的的API如何使用

import os
import openai

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

response = openai.Completion.create(
  model="text-davinci-003",
  prompt="I am a highly intelligent question answering bot. If you ask me a question that is rooted in truth, I will give you the answer. If you ask me a question that is nonsense, trickery, or has no clear answer, I will respond with \\"Unknown\\".\\n\\nQ: What is human life expectancy in the United States?\\nA: Human life expectancy in the United States is 78 years.\\n\\nQ: Who was president of the United States in 1955?\\nA: Dwight D. Eisenhower was president of the United States in 1955.\\n\\nQ: Which party did he belong to?\\nA: He belonged to the Republican Party.\\n\\nQ: What is the square root of banana?\\nA: Unknown\\n\\nQ: How does a telescope work?\\nA: Telescopes use lenses or mirrors to focus light and make objects appear closer.\\n\\nQ: Where were the 1992 Olympics held?\\nA: The 1992 Olympics were held in Barcelona, Spain.\\n\\nQ: How many squigs are in a bonk?\\nA: Unknown\\n\\nQ: Where is the Valley of Kings?\\nA:",
  temperature=0,
  max_tokens=100,
  top_p=1,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=["\\n"]
)

OpenAI API 有几种不同的接口,具体的参数依赖于您选择的接口。以下是一些常见接口的简要说明和参数:

GPT-3 API:
endpoint: https://api.openai.com/v1/engines/gpt-3
参数:

  • engine: 模型的名称,例如 “davinci” 或 “curie”。
  • prompt: 文本提示,作为模型生成内容的上下文。
  • max_tokens: 生成文本的最大长度。
  • n: 生成的响应数量,默认为 1。
  • stop: 是否停止生成文本,当模型生成指定字符时停止。
  • temperature: 生成文本的随机性,取值从 0 到 1 。
  • frequency_penalty: 控制生成的文本的选择性,使用词频惩罚。
  • presence_penalty: 控制生成的文本的选择性,使用存在惩罚。

engine 的取值范围取决于 OpenAI 支持的模型。OpenAI 允许通过 API 访问多种不同的模型,包括 GPT-3、DALL·E 等。

通常,您可以从以下值中选择:

“davinci”:这是 OpenAI 最强大的模型,拥有最大的语言理解和生成能力。

“curie”:这是 OpenAI 一种较小的模型,具有较低的延迟和资源需求。

temperature 参数用于控制生成的文本的多样性和随机性。具体而言,它控制模型生成文本时对不同选项的偏好程度。如果 temperature 值较高,则模型将更倾向于生成不同的、随机的文本;如果 temperature 值较低,则模型将更倾向于生成相对安全的、可预测的文本。

通常,temperature 取值范围为 0 到 1。值越高,生成的文本就越具有随机性;值越低,生成的文本就越不随机。默认值为 1.0。

请注意,设置适当的 temperature 值可能需要一些试验和试错,因此请在使用前了解如何操作。

presence_penalty 的取值范围为 0 到 1。该值用于控制生成的文本的选择性,通过使用存在惩罚。
如果 presence_penalty 设置为 0,则模型将生成更简单、更可预测的文本。如果将其设置为 1,则模型将生成更加复杂、不可预测的文本。具体取值可以根据您的需求和应用场景进行调整。

frequency_penalty 的取值范围为 0 到 1。该值用于控制生成的文本的选择性,通过使用词频惩罚。
如果 frequency_penalty 设置为 0,则模型将生成更简单、更可预测的文本。如果将其设置为 1,则模型将生成更加复杂、不可预测的文本。具体取值可以根据您的需求和应用场景进行调整。

stop 参数用于指定结束生成文本的条件。它可以是一个字符串数组,其中的每个字符串都表示结束生成文本的条件。例如,如果您希望生成的文本在遇到 “end of story” 时停止,则可以将 stop 参数设置为:

stop=["end of story"]

当模型生成的文本遇到第一个 “end of story” 时,它将停止生成并返回已生成的文本。

请注意,当模型生成的文本与 stop 参数中的任意一个字符串匹配时,它将停止生成,因此请确保所选字符串是您希望结束生成文本的合适条件。

如何在Android中使用OpenAI API构建一个ChatGPT类的应用程序

ChatGPT是当今著名的人工智能工具之一,类似于聊天机器人。这个聊天机器人回答所有发送给它的查询。在本文中,我们将通过集成OpenAI API(ChatGPT)来构建一个简单的类似ChatGPT的android应用程序,我们可以在其中提出任何问题并得到适当的答案

我已经创建了一个示例应用程序,并将看看它的输出,然后我们将进一步在android studio中创建一个新项目。

一步一步的实现

步骤1:在Android Studio中创建一个新项目

要在Android Studio中创建一个新项目,请参考How to Create/Start a New Project in Android Studio。注意,选择Kotlin作为编程语言。

步骤2:添加以下依赖项build.gradle 文件

下面是Volley的依赖关系,我们将使用它从API获取数据。要添加此依赖项,app > Gradle Scripts > build.gradle(app),并在依赖项部分添加以下依赖项。我们已经使用了Picasso依赖项来从URL加载图像

// below line is used for volley library

implementation ‘com.android.volley:volley:1.2.0’

添加这个依赖后,同步你的项目,现在转移到AndroidManifest.xml部分。

步骤3:在AndroidManifest.xml文件中添加网络访问权限

app > AndroidManifest.xml,并将以下代码添加到其中

<!--permissions for INTERNET-->
<uses-permission android:name="android.permission.INTERNET"/>

步骤4:使用activity_main.xml文件

app > res > layout > activity_main.xml并将以下代码添加到该文件中。下面是activity_main.xml文件的代码。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/back_color"
    tools:context=".MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/idTILQuery"
        android:layout_alignParentTop="true"
        android:layout_margin="5dp"
        android:padding="5dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <!-- text view for displaying question-->
            <TextView
                android:id="@+id/idTVQuestion"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginTop="30dp"
                android:padding="4dp"
                android:text="Question"
                android:textColor="@color/white"
                android:textSize="17sp" />

            <!-- text view for displaying response-->
            <TextView
                android:id="@+id/idTVResponse"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginTop="5dp"
                android:padding="4dp"
                android:text="Response"
                android:textColor="@color/white"
                android:textSize="15sp" />
        </LinearLayout>

    </ScrollView>
    <!-- text field for asking question-->
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/idTILQuery"
        style="@style/TextInputLayoutStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_margin="5dp"
        android:hint="Enter your query"
        android:padding="5dp"
        android:textColorHint="@color/white"
        app:hintTextColor="@color/white">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/idEdtQuery"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/edt_back_color"
            android:drawableEnd="@drawable/ic_send"
            android:drawableTint="@color/white"
            android:ems="10"
            android:imeOptions="actionSend"
            android:importantForAutofill="no"
            android:inputType="textEmailAddress"
            android:textColor="@color/white"
            android:textColorHint="@color/white"
            android:textSize="14sp" />
    </com.google.android.material.textfield.TextInputLayout>
</RelativeLayout>

步骤5:生成使用API的记名令牌。

导航到下面的 URL ,只需注册您的电子邮件和密码。在此屏幕上单击Create a new secret key以生成新密钥。一旦你的密钥生成,我们必须使用它作为一个令牌,使我们的API密钥。

步骤6:使用MainActivity。kt文件。

导航到app > java > your app’s package name > MainActivity.kt 文件,并添加下面的代码。代码中添加了注释以详细了解它。

import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.inputmethod.EditorInfo
import android.widget.TextView
import android.widget.TextView.OnEditorActionListener
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.android.volley.RequestQueue
import com.android.volley.Response
import com.android.volley.RetryPolicy
import com.android.volley.VolleyError
import com.android.volley.toolbox.JsonObjectRequest
import com.android.volley.toolbox.Volley
import com.google.android.material.textfield.TextInputEditText
import org.json.JSONObject

class MainActivity : AppCompatActivity() 

    // creating variables on below line.
    lateinit var responseTV: TextView
    lateinit var questionTV: TextView
    lateinit var queryEdt: TextInputEditText

    var url = "https://api.openai.com/v1/completions"

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // initializing variables on below line.
        responseTV = findViewById(R.id.idTVResponse)
        questionTV = findViewById(R.id.idTVQuestion)
        queryEdt = findViewById(R.id.idEdtQuery)

        // adding editor action listener for edit text on below line.
        queryEdt.setOnEditorActionListener(OnEditorActionListener  v, actionId, event ->
            if (actionId == EditorInfo.IME_ACTION_SEND) 
                // setting response tv on below line.
                responseTV.text = "Please wait.."
                // validating text
                if (queryEdt.text.toString().length > 0) 
                    // calling get response to get the response.
                    getResponse(queryEdt.text.toString())
                 else 
                    Toast.makeText(this, "Please enter your query..", Toast.LENGTH_SHORT).show()
                
                return@OnEditorActionListener true
            
            false
        )
    

    private fun getResponse(query: String) 
        // setting text on for question on below line.
        questionTV.text = query
        queryEdt.setText("")
        // creating a queue for request queue.
        val queue: RequestQueue = Volley.newRequestQueue(applicationContext)
        // creating a json object on below line.
        val jsonObject: JSONObject? = JSONObject()
        // adding params to json object.
        jsonObject?.put("model", "text-davinci-003")
        jsonObject?.put("prompt", query)
        jsonObject?.put("temperature", 0)
        jsonObject?.put("max_tokens", 100)
        jsonObject?.put("top_p", 1)
        jsonObject?.put("frequency_penalty", 0.0)
        jsonObject?.put("presence_penalty", 0.0)

        // on below line making json object request.
        val postRequest: JsonObjectRequest =
            // on below line making json object request.
            object : JsonObjectRequest(Method.POST, url, jsonObject,
                Response.Listener  response ->
                    // on below line getting response message and setting it to text view.
                    val responseMsg: String =
                        response.getJSONArray("choices").getJSONObject(0).getString("text")
                    responseTV.text = responseMsg
                ,
                // adding on error listener
                Response.ErrorListener  error ->
                    Log.e("TAGAPI", "Error is : " + error.message + "\\n" + error)
                ) 
                override fun getHeaders(): kotlin.collections.MutableMap<kotlin.String, kotlin.String> 
                    val params: MutableMap<String, String> = HashMap()
                    // adding headers on below line.
                    params["Content-Type"] = "application/json"
                    params["Authorization"] =
                        "Bearer Enter your token here"
                    return params;
                
            

        // on below line adding retry policy for our request.
        postRequest.setRetryPolicy(object : RetryPolicy 
            override fun getCurrentTimeout(): Int 
                return 50000
            

            override fun getCurrentRetryCount(): Int 
                return 50000
            

            @Throws(VolleyError::class)
            override fun retry(error: VolleyError) 
            
        )
        // on below line adding our request to queue.
        queue.add(postRequest)
    

输出参考

https://media.geeksforgeeks.org/wp-content/uploads/20230118003207/Screenrecorder-2023-01-18-00-28-57-186.mp4?_=1

参考文章:https://www.geeksforgeeks.org/how-to-build-a-chatgpt-like-app-in-android-using-openai-api/

以上是关于openai的的API如何使用的主要内容,如果未能解决你的问题,请参考以下文章

OpenAi[ChatGPT] 使用Python对接OpenAi APi 实现智能QQ机器人-学习详解篇

python使用openai生成图像教程详解

用ChatGPT创建一个REST API

如何在 OpenAI 的 Answer api 中使用文件

如何使用ChatGPT API 及 问题解决

基于ChatGPT+Python快速打造前后端分离的OpenAI人工智能聊天机器人