如果你一直关注当前的人工智能新闻,你会知道 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 到你的浏览器中。
这就是页面的样子!