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://www.geeksforgeeks.org/how-to-build-a-chatgpt-like-app-in-android-using-openai-api/
以上是关于openai的的API如何使用的主要内容,如果未能解决你的问题,请参考以下文章