如何在 Python 中使用 GPT-4o

更新时间:2024/07/17, 10:57

如果你一直关注当前的人工智能新闻,你会知道 OpenAI 最近发布了他们最先进的模型,GPT-4o。尽管它最令人印象深刻的新功能是其新的多模态性,但这些功能很遗憾目前还没有面向公众发布。

在我们等待这些多模态功能推出的时候,我将向你展示如何最轻松地为你自己的数据使用 GPT-4o,一个助手!

OpenAI 最近还更新了他们的助手,大大增加了它们摄取数据的能力。由于 GPT-4o 的效率使其更加经济实惠,再加上助手现在能够摄取多达 10,000 个文件,现在是创建你自己的助手的最佳时机。

在本文中,我将向你展示我发现的使用 GPT-4o 创建助手的最简单方法。

步骤 1:准备我们的数据

在开始之前,重要的是要注意,如果你想为自己的网站或应用程序使用助手,你将需要一个 OpenAI API 密钥

首先登录到 OpenAI 平台并转到仪表板。然后点击下面显示的 "Storage"。

一旦到达存储页面,选择 "Vector Store",然后点击 "Create"。使用向量存储可以实现语义搜索、高效检索、更好的上下文理解、可扩展性,并与 OpenAI 的 API 无缝集成。

创建向量存储后,添加你希望助手访问的文件,并复制向量存储 ID,因为你以后会需要它

步骤 2:创建助手

使用左侧导航栏转到 "Assistants" 平台。选择 "Create assistant"。

创建助手后,确保复制并粘贴助手 ID 代码,因为我们以后会用到它。

给你的助手明确的指示,并使用 "Model" 选择你想要的模型,在我们的情况下将是 "gpt-4o"。

选择助手将用于查看我们文件的 "File search" 工具。

点击下面显示的 "Files"。

点击 "Select vector store"。

最后,你将使用我们之前复制的向量存储 ID 并粘贴到字段中,选择完你想要的向量存储后点击选择。

将你的助手连接到你的向量存储后,随时可以通过向它提问特定于向量存储中的文件来测试你的代理。

在我的助手案例中,我让它连接到一个 Colleen Hoover 的小说《Verity》的向量存储,这是我伴侣的要求,正如你所看到的,它使用这个答案并引用了答案来源!

虽然对于一些人来说这已经足够使用了,但我们可以更深入地展示如何使用 Python 将助手集成到你的应用程序中!

步骤 3:检查 API

在集成到我们的应用程序之前,我们可以先看看 API 调用是否正常工作,我们可以通过使用一些简单的代码来实现这一点。如果你想要整个脚本,请滚动到最后。

首先,使用这些导入,因为它们将被需要。如果你在 Windows 上,请记得使用 "pip install openai",如果你在 Mac 上,请使用 "pip3 install openai"。

import time
from openai import OpenAI

我们首先使用我们的 API 密钥创建一个客户端

client = OpenAI(api_key='YOUR KEY HERE')

然后我们创建一个 "thread" 来存储我们的对话

empty_thread = client.beta.threads.create()
print(empty_thread)

然后我们获取 Thread id,这样我们就可以将我们的消息添加到其中

thread_id= empty_thread.id

创建一条消息并将其添加到线程中

thread_message = client.beta.threads.messages.create(
  thread_id=thread_id,
  role="user",
  content="YOUR MESSAGE GOES HERE",
)
print(thread_message)

这部分代码用于跟踪 "run" 的状态。当我第一次运行它时,响应加载花了很长时间,我不确定它是否在工作或只是慢。这会在运行状态不完整时打印运行状态。

while run.status != "completed":
    run=client.beta.threads.runs.retrieve(thread_id=empty_thread.id, run_id=run.id)
    print(f" run status: {run.status}")
    time.sleep(0.5)
else:
    print(f"Run Complete! ")

为了从线程获取响应和从运行获取消息,我们使用以下代码。

message_response = client.beta.threads.messages.list(thread_id=empty_thread.id) 
messages = message_response.data

latest_message = messages[0]
print(f" response: {latest_message.content[0].text.value}")

将所有代码放在一起,我们可以问它与之前使用 OpenAI 助手界面问的同一个问题,它应该给出相同的答案,而它确实给出了!

这就是整个脚本!

import time
from openai import OpenAI
 
client = OpenAI(api_key='YOUR KEY HERE')

# Create Thread
empty_thread = client.beta.threads.create()
print(empty_thread)

# Get thread id
thread_id= empty_thread.id

# Create message to add to Thread
thread_message = client.beta.threads.messages.create(
  thread_id=thread_id,
  role="user",
  content="USER QUESTION HERE",
)
print(thread_message)

# Create a Run
run = client.beta.threads.runs.create(
  thread_id=thread_id,
  assistant_id='YOUR ASSISTANT ID HERE'
)

run_id=run.id

while run.status != "completed":
    run=client.beta.threads.runs.retrieve(thread_id=empty_thread.id, run_id=run.id)
    print(f" run status: {run.status}")
    time.sleep(0.5)
else:
    print(f"Run Complete! ")

message_response = client.beta.threads.messages.list(thread_id=empty_thread.id) 
messages = message_response.data

latest_message = messages[0]
print(f" response: {latest_message.content[0].text.value}")

步骤 4:集成

如果你想将助手 API 集成到你的应用程序中,你可以采取无数种方式。这是为 API 提供一个界面的最简单方法。

Streamlit 为我们提供了一个易于显示助手的前端。如果你选择通过 streamlit 托管你的网站,请使用以下代码作为示例。

免责声明!这里只是使用 Streamlit 在本地托管网站以提供一个快速用户界面。

在运行此代码之前,请不要忘记在终端中使用 pip install streamlit 安装该包。

import streamlit as st
from openai import OpenAI
import time

# Create client
client = OpenAI(api_key='YOUR KEY HERE')

st.title(':book: Book Bot')

# Initialize chat history (using session_state)
if "messages" not in st.session_state:
    st.session_state.messages = []

# Display chat history
for message in st.session_state.messages:
    with st.container():
        st.markdown(f"**{message['role']}:** {message['content']}")

# Input text box
user_input = st.text_input("You:", "")

if st.button("Send") and user_input:
    # Add user message to chat history
    st.session_state.messages.append({"role": "user", "content": user_input})
    
    # Display user message immediately
    with st.container():
        st.markdown(f"**You:** {user_input}")

    # Create thread and message 
    thread = client.beta.threads.create()
    thread_message = client.beta.threads.messages.create(
        thread_id=thread.id,
        role="user",
        content=user_input,
    )
    run = client.beta.threads.runs.create(
        thread_id=thread.id,
        assistant_id='YOUR ASSISTANT ID'  # Replace with your assistant ID
    )
    
    # Wait for the run to complete
    with st.spinner("Thinking..."):
        while run.status != "completed":
            run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
            time.sleep(0.5)

    # Retrieve and display the response
    messages = client.beta.threads.messages.list(thread_id=thread.id).data
    latest_message = messages[0]
    response_text = latest_message.content[0].text.value

    # Add assistant message to chat history
    st.session_state.messages.append({"role": "assistant", "content": response_text})
    
    # Clear the input text box after sending
    user_input = ""

    # Display assistant message immediately
    with st.container():
        st.markdown(f"**Assistant:** {response_text}")

要运行此代码,你需要在终端中键入 "streamlit run app.py",然后它将自动打开页面。如果页面没有自动打开,你可以复制并粘贴本地 URL 到你的浏览器中。

这就是页面的样子!

AI奇想空间
AI奇想空间
https://aimazing.site
AI惊奇站是一个汇聚人工智能工具、资源和教程的导航网站。 在这里,你可以发现最新的AI技术、工具和应用,学习如何使用各种AI平台和框架,获取丰富的AI资源。 欢迎广大AI爱好者加入我们的社区,开启你的AI之旅!
AI交流群
Copyright © 2024 AI奇想空间.微信