在这篇博客文章中,我们将探讨创建原型或MVP的方法,这些方法表明使用Chatgpt API在喂食的查询上检索响应,对某些关键字进行了优化,并介绍了对响应的探索。<<<<<<<<<<<<<<<< /p>
ChatGpt是由OpenAI构建的非常流行的模型,对大量数据进行了培训,可以为提示提供类似人类的响应,最近发行了OpenAI团队,使我们能够从应用程序中调用此功能。
要构建这样的网站应用程序,我们将使用简化的Python库,该库是一个开源应用程序框架,也许对于希望创建快速原型的任何人来说都是最好的,在这篇文章中,我们会在工作中看到它。
这个项目分为主要部分:
从OpenAi创建API键
此应用程序的第一部分是熟悉OpenAi Chatgpt API,首先,在此处创建一个帐户,然后导航到创建您的API键,使我们可以使用此功能强大的模型运行查询。
您的API键应该看起来像Openai_SECRET_KEY = "sk-123oNeTwoTHRee"
,您应该将其保密。接下来,我们开始构建我们的Web应用程序。
设置简化环境和包装安装
在开始之前,导航到您的工作目录并更新您的软件包,然后我们可以从导入/安装所需的库开始,让我们看看如何使用Pipenv和Conda环境来实现此目标。
pipenv
MacOS和Linux的Streamlit正式支持的环境经理是Pipenv。
导航到包含您的PIPENV环境的项目文件夹:
cd myproject
激活该环境,升级简化并验证您具有最后版本(至少1.10.1):
pipenv shell
pip install --upgrade streamlit
pip install --upgrade openai
streamlit version
或如果您想使用易于复制的环境,请每次安装或更新软件包时用PipEnv替换PIP:
pipenv update streamlit
pipenv update openai
pipenv run streamlit version
conda
激活安装简化的Conda环境:
conda activate $ENVIRONMENT_NAME
请确保用conda环境的名称替换 $ emoventing_name !
更新在Active Conda环境中简化并验证您具有最新版本:
conda update -c conda-forge streamlit -y
conda install -c anaconda openai
streamlit version
构建Web应用程序
在您的工作目录中,创建一个称为 app.py 的文件,然后开始导入必要的软件包,例如。
import streamlit
import openai
然后,对于我们的秘密键,创建一个名为 .streamlit 的dir,在此文件夹中创建 secret.toml 文件并将键放入此文件中,最后don' t忘了创建一个包含 **。toml *的git.ignore文件,以忽略该文件。
接下来,我们开始调用API。从我们的app.py文件中输入以下代码
def ChatGPT(user_query):
'''
This function uses the OpenAI API to generate a response to the given
user_query using the ChatGPT model
:param user_query:
:return:
'''
# Use the OpenAI API to generate a response
completion = openai.Completion.create(
engine=model_engine,
prompt=user_query,
max_tokens=1024,
n=1,
temperature=0.5,
)
response = completion.choices[0].text
return response
@st.cache_data
def api_call_on(query):
'''
This function gets the user input, pass it to ChatGPT function and
displays the response
'''
response = ChatGPT(query)
return response
# Set the model engine and your OpenAI API key
model_engine = "text-davinci-003"
openai.api_key = st.secrets["Openai_SECRET_KEY"]
简单地,第一个函数创建了对API的交互节点,并且API_CALL_ON检索查询响应St.Cache_data,这是管理重复API调用的另一个简化方法。
在此阶段,您可以简单地创建一个文本输入元素并像这样在其上运行查询:
# Get user input
user_query = st.text_input("Enter query here, to exit enter :q",
"what is ChatGPT?")
# Retrieve response on input
response = api_call_on(prefix_query)
# Present response
st.success(f"{response}")
简单,此练习是完整的,并且对Yasser Mustafa's教程的债务也很债务。但是,这可以改进,对于这个特定的项目,我们正在调整特定关键字,以支持我们的用户输入以及管理和监视这些条目和响应的机制。
您可以在这里停下来或跟随如何实现这一目标。
构建网络应用II
创建和修改关键字
在您的工作目录中创建一个新目录, ,并添加 csv 单词列表的文件,例如动作单词。
导航到您的app.py文件,并添加以下内容以显示一个侧边栏,我们可以在其中与这些单词进行交互,并与我们的用户输入合并:
import pandas as pd
## Function to create list of words selected
def create_action(response_type):
strList = [str(i) for i in response_type]
myString = ", ".join(strList)
prefix_keyword = myString + " and " + str(response_type)
return prefix_keyword
## Read a list of adjectives and actions
actions = pd.read_csv('./<keyword_dir>/<action_words.>csv')
response_type = st.sidebar.selectbox("Please specify action", actions)
## Main Statement
if response_type != "":
prefix_keyword = create_action(response_type)
prefix_query = f'A {prefix_keyword} response to {user_query}'
st.sidebar.markdown('##') ##-> Empty Space Divider
if st.sidebar.button("Run"):
with st.spinner('Your query is running...'):
response = api_call_on(prefix_query)
st.success(f"{response}")
请注意,此“ 主语句”,我们将很快回到此。
修改关键字
要修改我们创建的关键字文件,我们将使用 st_experimentim_data_editor premation premation 功能,这使我们能够打开 csv 值的数据框架,更改,更改,更改,更改,删除甚至添加新项目并将其自动保存到我们的文件中,更改是实时的,以下可以帮助我们实现这一目标:
if st.sidebar.button("Edit Keywords"):
### Lifecycle of Editable Dataframe
## Read csv
df = pd.read_csv('./<keyword_dir>/<action_words.>csv', names=['ACTIONS'], header=1)
## Editable Dataframe
editable_df = st.sidebar.experimental_data_editor(df, axis=1), num_rows="dynamic")
## Update csv
editable_df['ACTIONS'].to_csv('./<keyword_dir>/<action_words.>csv', index=False)
注意,我们如何将手柄保持在侧边栏中,这是为了保持这种整洁且容易对帐。
监视响应
在本节中,我们正在为应用程序添加最终触摸,这些功能是为了帮助我们查看查询时间和结果的快速分解。 ,这是另一个演讲。
为了实现查询时间和单词分布,我们实施以下内容:
查询时间
为了实现这一目标,请用像SO
这样的计时器包装“主语句”
import time
## start timer
start = time.time()
##=> "Main Statement" comes here
...
response = api_call_on(user_query)
st.success(f"{response}")
## End Timer
end = time.time()
## Query Time
query_time = end - start
单词count
我们创建一个函数,该函数收集从我们的查询中检索到的单词并剥离它们,然后考虑频率。我们甚至可能会提供一个数据框架,显示每个单词以及它发生多少次。
## Word count
def word_count(string):
strip_words = (len(string.strip().split(" ")))
return strip_words
col1, col2 = st.columns(2)
with col1:
st.warning("Query Data")
st.write('Keywords: ', prefix_keyword)
with col2:
st.warning("Basic Text Analysis")
st.write("Query Time : s", round(query_time / 1000, 2), "-", round(query_time, 2), "ms")
st.write("Word Count: ", word_count(response) - 1)
将我们带到本实现的末尾,您可以在评论中分享您在这里创建的内容。
请查看Web应用程序和GitHub存储库。