简单实现:在简化和监视查询响应时进行chatgpt
#python #streamlit #chatgpt #exploratorydataanalysis

在这篇博客文章中,我们将探讨创建原型或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存储库。