自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

GPT-4o:實(shí)現(xiàn)跨越文本與視覺的智能交互

原創(chuàng) 精選
人工智能
本文通過具體的應(yīng)用實(shí)例和對比測試,展示了GPT-4o在問答系統(tǒng)和圖像理解方面的實(shí)際應(yīng)用,并提供了詳細(xì)的集成方法和代碼實(shí)現(xiàn)。無論是個人用戶還是企業(yè)開發(fā)者,都能通過GPT-4o體驗(yàn)到更智能、更自然的人機(jī)交互。

想了解更多AIGC的內(nèi)容,請訪問:

51CTO AI.x社區(qū)

http://scjtxx.cn/aigc/

摘要

OpenAI最新發(fā)布的GPT-4o模型及其在多模態(tài)處理上的卓越能力,標(biāo)志著人機(jī)交互邁向新的高度。GPT-4o能夠處理文本、音頻、圖片和視頻,響應(yīng)速度極快,且在多語言處理上表現(xiàn)優(yōu)異。本文通過具體的應(yīng)用實(shí)例和對比測試,展示了GPT-4o在問答系統(tǒng)和圖像理解方面的實(shí)際應(yīng)用,并提供了詳細(xì)的集成方法和代碼實(shí)現(xiàn)。無論是個人用戶還是企業(yè)開發(fā)者,都能通過GPT-4o體驗(yàn)到更智能、更自然的人機(jī)交互。

GPT-4的發(fā)布及其特性

OpenAI 最近發(fā)布了GPT-4o(“o”代表“omni”,中文中可以讀作“歐姆尼”),這標(biāo)志著人機(jī)交互朝著更自然的方向邁出了一大步。GPT-4o能夠接受任意組合的文本、音頻、圖片和視頻輸入,并生成任意組合的文本、音頻和圖片輸出。它能夠在232毫秒內(nèi)對音頻輸入做出反應(yīng),平均響應(yīng)時間為320毫秒,這與人類對話中的反應(yīng)時間相似。在文本和代碼處理方面,GPT-4o的性能與GPT-4 Turbo相當(dāng),并且在處理非英語語言文本時有顯著提升,同時速度更快,API調(diào)用成本降低了50%。

相比之前的模型,GPT-4o在視覺和音頻理解方面表現(xiàn)尤為出色。在GPT-4o之前,使用語音模式與ChatGPT對話的延遲分別為2.8秒(GPT-3.5)和5.4秒(GPT-4),這個過程涉及三個獨(dú)立的模型:一個簡單的模型將音頻轉(zhuǎn)錄為文本,GPT-3.5或GPT-4處理文本并生成響應(yīng),最后一個模型將文本轉(zhuǎn)換回音頻。這種模式導(dǎo)致主要的智能源——GPT-4無法直接觀察語調(diào)、多名講話者或背景噪音,也無法輸出笑聲、歌聲或情感表達(dá)。GPT-4o通過端到端訓(xùn)練一個新模型,統(tǒng)一處理文本、視覺和音頻輸入輸出。這是我們首次將所有這些模態(tài)結(jié)合在一個模型中,因此我們?nèi)栽谔剿髌淠芰途窒扌浴?/p>

可以通過這個例子來感受GPT-4o給我們帶來了什么。假設(shè)你在外國旅游,遇到了一家當(dāng)?shù)夭宛^。你拿起手機(jī)拍下菜單的照片,過去的模型可能需要幾秒鐘來處理這張圖片,然后再翻譯成中文,過程中可能會有延遲和信息丟失。而現(xiàn)在有了GPT-4o,你拍下照片后,模型能夠立即識別圖片內(nèi)容,快速翻譯菜單,并告訴你每道菜的歷史和推薦。更重要的是,GPT-4o響應(yīng)速度更快,能夠在幾百毫秒內(nèi)做出反應(yīng)。同時,它還能感知周圍的環(huán)境和背景噪音,理解你的情感和語調(diào),甚至能夠回應(yīng)你的情緒,比如通過語音識別你的疑問或驚喜,提供更貼心的建議。

GPT-4o的發(fā)布不僅展示了OpenAI在技術(shù)上的突破,也預(yù)示著人機(jī)交互的新時代。通過這篇文章,我們將探討如何將GPT-4o集成到實(shí)際應(yīng)用中,實(shí)現(xiàn)問答和圖像理解功能。

如何將GPT-4集成到應(yīng)用中

GPT-4o的發(fā)布不僅展示了其在多模態(tài)處理上的強(qiáng)大能力,也為開發(fā)者提供了全新的API接口,使得集成GPT-4o變得更加簡便和高效。通過調(diào)用OpenAI提供的API,開發(fā)者可以輕松地將GPT-4o的強(qiáng)大功能融入到自己的應(yīng)用中,無論是實(shí)現(xiàn)快速響應(yīng)的問答系統(tǒng),還是增強(qiáng)的圖像理解功能,GPT-4o都能提供卓越的性能。

GPT-4o最初將在ChatGPT和API中作為文本和視覺模型提供。具體來說,GPT-4o將在ChatGPT Free、Plus和Team(即將推出Enterprise)以及Chat Completions API、Assistants API和Batch API中提供。這意味著不僅普通用戶(ToC)可以通過ChatGPT體驗(yàn)到GPT-4o的強(qiáng)大功能,企業(yè)用戶(ToB)也可以通過API訪問新模型,將其集成到各自的業(yè)務(wù)應(yīng)用中,滿足不同場景的需求。

對于IT從業(yè)者來說,看到GPT-4o在文本和視覺上的強(qiáng)大功能,是否已經(jīng)躍躍欲試了呢?接下來,我們將詳細(xì)介紹如何通過API調(diào)用實(shí)現(xiàn)GPT-4o的集成,并通過具體的示例代碼,展示如何將其問答功能和圖像理解能力整合到實(shí)際應(yīng)用中。

既然要測試GPT-4o在文本和視覺方面的能力,我們需要嘗試調(diào)用新模型進(jìn)行提問。例如,可以提出一個復(fù)雜的數(shù)學(xué)題目,看看GPT-4o能否準(zhǔn)確地解答。這樣的測試不僅可以檢驗(yàn)GPT-4o在數(shù)學(xué)推理和計算上的能力,也能展示其處理復(fù)雜文本問題的性能。

不僅如此,我們還應(yīng)該引入其他幾個模型進(jìn)行對比測試,例如百度千帆的Llama2-Chinese-7b版本、Qwen-Plus以及GPT-3.5-Turbo。通過對比這些模型在相同任務(wù)上的表現(xiàn),這種對比測試可以幫助我們確定GPT-4o在實(shí)際應(yīng)用中的可靠性和有效性。

另外,為了全面評估GPT-4o的視覺理解能力,我們還可以通過輸入一張風(fēng)景圖片和一張數(shù)學(xué)公式圖片來測試其圖像識別和理解的能力。通過這種方式,我們能夠直觀地看到GPT-4o在處理視覺信息上的表現(xiàn),驗(yàn)證其在多模態(tài)處理上的卓越性能。

通過這些步驟,我們將能夠測試GPT-4o在文本和視覺處理上的強(qiáng)大能力,接下來,將詳細(xì)介紹具體的測試方法和代碼實(shí)現(xiàn)。

問答功能的實(shí)現(xiàn)

前面已經(jīng)說明了,需要測試GPT-4o模型在問答方面與其他模型的異同,同時還要測試其在視覺方面的能力。基于如上的思路,我們需要梳理執(zhí)行步驟。首先,創(chuàng)建一個 selected_model.py 文件,用來存放訪問不同大模型的函數(shù)。為了簡化代碼并統(tǒng)一調(diào)用這些大模型,我們使用LangChain框架。LangChain框架能夠幫助我們方便地切換和管理不同模型的調(diào)用邏輯,使代碼更加簡潔和易于維護(hù)。接著,創(chuàng)建 app.py 文件,利用Streamlit創(chuàng)建一個Web交互界面。在這個界面中,用戶可以通過選擇框選擇對應(yīng)的大模型,然后在提供的窗口中輸入問題。當(dāng)用戶提交問題請求時(點(diǎn)擊“發(fā)送”按鈕),app.py 文件將調(diào)用 selected_model.py 文件中寫好的大模型函數(shù),對用戶的請求進(jìn)行響應(yīng),并將響應(yīng)內(nèi)容返回到 app.py 文件中進(jìn)行展示。

創(chuàng)建selected_model.py 文件,添加模型調(diào)用方法

這個文件包含所有訪問不同大模型的函數(shù)。每個函數(shù)對應(yīng)一個大模型,并通過LangChain框架進(jìn)行調(diào)用。這些函數(shù)負(fù)責(zé)接受用戶的問題并返回相應(yīng)的答案。

先創(chuàng)建調(diào)用gpt-4o的函數(shù),如下:

def get_response_from_gpt_4o(question:str):
    llm = ChatOpenAI(model="gpt-4o")
    template = """問題: {question}
    回答: 請一步一步思考,然后回答."""
    prompt = PromptTemplate(template=template, input_variables=["question"])
    llm_chain = LLMChain(prompt=prompt, llm=llm)
    response = llm_chain.run(question)         
    return response

代碼整體比較簡單,我們對其進(jìn)行解釋如下:

(1) 定義函數(shù)get_response_from_gpt_4o

代碼,def get_response_from_gpt_4o(question:str):,定義了一個名為get_response_from_gpt_4o的函數(shù),該函數(shù)接受一個字符串類型的參數(shù)question作為用戶的提問,并返回一個響應(yīng)。

(2) 實(shí)例化ChatOpenAI

通過llm = ChatOpenAI(model="gpt-4o", base_url="https://api.chatanywhere.tech/v1")語句,實(shí)例化了一個ChatOpenAI對象,并將其賦值給變量llm(Large Language Model ,大語言模型)。通過初始化對象的model參數(shù)指定該對象使用了模型gpt-4o。

(3)定義模板字符串

template = """問題: {question}
回答: 請一步一步思考,然后回答."""

定義了一個模板字符串并將其賦值給變量template。該模板用于生成提示,其中包含占位符{question},表示將問題插入其中。

(4)創(chuàng)建PromptTemplate實(shí)例

prompt = PromptTemplate(template=template, input_variables=["question"])

創(chuàng)建了一個PromptTemplate對象,并將其賦值給變量prompt。該對象使用之前定義的template字符串,并指定question為輸入變量。

(5) 創(chuàng)建LLMChain實(shí)例

llm_chain = LLMChain(prompt=prompt, llm=llm)

創(chuàng)建了一個LLMChain對象,并將其賦值給變量llm_chain。該對象使用之前定義的prompt和llm。

(6) 運(yùn)行LLMChain并獲取響應(yīng)

response = llm_chain.run(question)
return response

調(diào)用llm_chain的run方法,傳入question參數(shù),并將返回的響應(yīng)賦值給變量response。同時,返回response變量的值,即函數(shù)get_response_from_gpt_4o的輸出。

該函數(shù)首先初始化一個ChatOpenAI對象以使用gpt-4o模型,然后定義一個包含問題和指示的模板字符串。接著,它創(chuàng)建一個PromptTemplate實(shí)例,并用它和ChatOpenAI對象創(chuàng)建一個LLMChain實(shí)例。最后,函數(shù)運(yùn)行LLMChain實(shí)例,生成并返回一個基于輸入問題的響應(yīng)。我們可以按照這個套路生成調(diào)用其他大模型的函數(shù)。

創(chuàng)建調(diào)用通義千問大模型的函數(shù)代碼,如下:

def get_response_from_qwen(question:str):
    #創(chuàng)建模版
    template = """問題: {question}
    回答: 請一步一步思考,然后回答."""
    #定義模版輸入變量
    prompt = PromptTemplate(template=template, input_variables=["question"])
    llm = Tongyi(model_name = "qwen-plus")
    llm_chain = LLMChain(prompt=prompt, llm=llm)
    response = llm_chain.run(question)
    return response

該函數(shù)使用了Tongyi類來實(shí)例化一個名為llm的大語言模型對象,模型名稱為qwen-plus。它與之前的get_response_from_gpt_4o函數(shù)相同的地方在于,它們都創(chuàng)建了一個模板字符串,定義了一個PromptTemplate對象,并使用一個LLMChain對象來生成響應(yīng)。

接著是百度千帆平臺微調(diào)的Llama2-Chinese-7B 版本的模型調(diào)用函數(shù),代碼如下:

def get_response_from_llama2(question:str):
    llm = QianfanLLMEndpoint(model="Qianfan-Chinese-Llama-2-7B")
    template = """問題: {question}
    回答: 請一步一步思考,然后回答."""
    prompt = PromptTemplate(template=template, input_variables=["question"])
    llm_chain = LLMChain(prompt=prompt, llm=llm)
    response = llm_chain.run(question)
    return response

該函數(shù)使用了QianfanLLMEndpoint類來實(shí)例化一個名為llm的大語言模型對象,模型名稱為Qianfan-Chinese-Llama-2-7B。其余部分與之前的get_response_from_gpt_4o函數(shù)相同,包括模板的定義、PromptTemplate和LLMChain的創(chuàng)建及運(yùn)行。

最后,是調(diào)用gpt-3.5-turbo模型,代碼如下:

def get_response_from_gpt(question:str):
    llm = ChatOpenAI(model="gpt-3.5-turbo",base_url="https://api.chatanywhere.tech/v1")
    template = """問題: {question}
    回答: 請一步一步思考,然后回答."""
    prompt = PromptTemplate(template=template, input_variables=["question"])
    llm_chain = LLMChain(prompt=prompt, llm=llm)
    response = llm_chain.run(question)         
    return response

需要說明的是,由于調(diào)用了多個平臺的大模型,因此需要預(yù)先配置多平臺模型訪問的Key,可以通過創(chuàng)建.env 文件定義這些Key??梢栽诔绦蛳嗤哪夸浵聞?chuàng)建.env 文件,文件內(nèi)容如下:

OPENAI_API_KEY=sk-3M3Cg1uLVDS7nXXXkFSlNV0Ts1CamgSP
QIANFAN_AK=Y5DvSDyyAZKXXXHu719rP
QIANFAN_SK=CKsfjtXawcjsg1XXXU3VwpACgZdorI
DASHSCOPE_API_KEY=sk-f93952eXXX4b3b65f0906a1e0e7

`.env` 文件用于存儲應(yīng)用程序的環(huán)境變量,包括訪問API的密鑰和其他配置參數(shù)。這些變量提供了應(yīng)用程序在不同平臺和服務(wù)之間進(jìn)行交互所需的認(rèn)證信息和配置。文件中包含多個API密鑰和配置參數(shù),用于不同的服務(wù)提供商:

  • OpenAI 密鑰 (`OPENAI_API_KEY`):用于訪問OpenAI提供的服務(wù),例如GPT-4o模型。
  • 百度千帆密鑰 (`QIANFAN_AK` 和 `QIANFAN_SK`):用于驗(yàn)證和訪問百度千帆平臺的服務(wù)。
  • 阿里靈積密鑰 (`DASHSCOPE_API_KEY`):用于驗(yàn)證和訪問阿里靈積(Dashscope)平臺的服務(wù)。

創(chuàng)建 app.py 文件,添加Web交互功能

創(chuàng)建完基本的模型調(diào)用函數(shù)之后,再來看看Web 頁面的交互功能。創(chuàng)建app.py文件,使用Streamlit創(chuàng)建一個Web交互界面。用戶在界面中可以選擇要使用的大模型,并輸入他們的問題。當(dāng)用戶點(diǎn)擊“發(fā)送”按鈕時,app.py 文件將根據(jù)用戶選擇的大模型,調(diào)用 selected_model.py 文件中的相應(yīng)函數(shù)來處理問題。響應(yīng)結(jié)果將顯示在界面上,供用戶查看和對比不同模型的表現(xiàn)。

下面來看看代碼的實(shí)現(xiàn),如下:

# 定義模型列表
models = ["Qianfan-Chinese-Llama-2-7B", "gpt-3.5-turbo", "qwen-plus","gpt-4o"]
# 創(chuàng)建一個下拉框,用戶可以從中選擇一個模型
selected_model = st.selectbox("請選擇一個大模型:", models)
# 顯示所選模型
# st.write(f"你現(xiàn)在選擇了 {selected_model} 大模型")
st.markdown(f"你現(xiàn)在選擇了 <span style='color:red; font-weight:bold;'>{selected_model}</span> 大模型", unsafe_allow_html=True)
# 創(chuàng)建文本輸入框讓用戶輸入問題
user_question = st.text_input("請輸入你的問題:")
# 創(chuàng)建一個發(fā)送按鈕
if st.button("發(fā)送"):
    # 根據(jù)所選模型調(diào)用對應(yīng)的函數(shù)
    if selected_model == "Qianfan-Chinese-Llama-2-7B":
        response = get_response_from_llama2(user_question)
    elif selected_model == "gpt-3.5-turbo":
        response = get_response_from_gpt(user_question)
    elif selected_model == "qwen-plus":
        response = get_response_from_qwen(user_question)
    elif selected_model == "gpt-4o":
        response = get_response_from_gpt_4o(user_question)
    else:
        response = "未知模型,請重新選擇。"
    # 確保LaTeX公式用雙美元符號包圍,并正確處理反斜杠
    response_with_latex = response.replace("\\(", "$$").replace("\\)", "$$")
    response_with_latex = response_with_latex.replace("\[", "$$").replace("\]", "$$")
    # 顯示返回的結(jié)果
    st.markdown(response_with_latex, unsafe_allow_html=True)

這些代碼內(nèi)容與Web 交互息息相關(guān),我們來逐一解釋如下:

(1) 定義模型列表和下拉框

models = ["Qianfan-Chinese-Llama-2-7B", "gpt-3.5-turbo", "qwen-plus", "gpt-4o"]
selected_model = st.selectbox("請選擇一個大模型:", models)

定義了一個包含模型名稱的列表,命名為models,其中包括四個模型:Qianfan-Chinese-Llama-2-7B,gpt-3.5-turbo,qwen-plus,和gpt-4o。在下拉框選擇的時候,會用到這個列表的信息。創(chuàng)建一個下拉框,用戶可以從中選擇一個模型。使用Streamlit的selectbox函數(shù)創(chuàng)建了一個下拉框,供用戶選擇模型。selectbox的第一個參數(shù)是提示文本,第二個參數(shù)是可供選擇的選項(xiàng)列表。用戶選擇的模型存儲在變量selected_model中。

(2) 顯示所選模型

st.markdown(f"你現(xiàn)在選擇了 <span style='color:red; font-weight:bold;'>{selected_model}</span> 大模型", unsafe_allow_html=True)

使用st.markdown函數(shù)顯示用戶所選的模型,并通過HTML標(biāo)簽使所選模型的名稱以紅色和加粗的樣式顯示。unsafe_allow_html=True參數(shù)允許使用HTML標(biāo)簽。

(3) 創(chuàng)建文本輸入框讓用戶輸入問題

user_question = st.text_input("請輸入你的問題:")

使用Streamlit的text_input函數(shù)創(chuàng)建了一個文本輸入框,提示用戶輸入問題。用戶輸入的問題存儲在變量user_question中。

(4) 創(chuàng)建“發(fā)送”按鈕,調(diào)用模型

if st.button("發(fā)送"):
if selected_model == "Qianfan-Chinese-Llama-2-7B":
    response = get_response_from_llama2(user_question)
elif selected_model == "gpt-3.5-turbo":
    response = get_response_from_gpt(user_question)
elif selected_model == "qwen-plus":
    response = get_response_from_qwen(user_question)
elif selected_model == "gpt-4o":
    response = get_response_from_gpt_4o(user_question)
else:
    response = "未知模型,請重新選擇。"

使用Streamlit的button函數(shù)創(chuàng)建了一個按鈕,按鈕標(biāo)簽為“發(fā)送”。當(dāng)用戶點(diǎn)擊按鈕時,執(zhí)行后續(xù)邏輯:

  • 如果選擇了Qianfan-Chinese-Llama-2-7B,則調(diào)用get_response_from_llama2函數(shù)。
  • 如果選擇了gpt-3.5-turbo,則調(diào)用get_response_from_gpt函數(shù)。
  • 如果選擇了qwen-plus,則調(diào)用get_response_from_qwen函數(shù)。
  • 如果選擇了gpt-4o,則調(diào)用get_response_from_gpt_4o函數(shù)。
  • 如果選擇了未知模型,返回提示信息“未知模型,請重新選擇?!?/li>

(5) 處理輸出并展示響應(yīng)結(jié)果

response_with_latex = response.replace("\\(", "$$").replace("\\)", "$$")
response_with_latex = response_with_latex.replace("\[", "$$").replace("\]", "$$")
st.markdown(response_with_latex, unsafe_allow_html=True)

由于每類模型返回的響應(yīng)格式各不相同,為了確保顯示的效果需要確保LaTeX公式用雙美元符號包圍,并正確處理反斜杠。代碼中,將返回的響應(yīng)中的LaTeX公式進(jìn)行替換處理,將“\(”替換為“$$”,將“\)”替換為“$$”,同時將“\[”替換為“$$”,將“\]”替換為$$,進(jìn)行了一些列處理。其目的是為了確保LaTeX公式在Markdown中能夠正確渲染。

最后,使用st.markdown函數(shù)顯示處理過的響應(yīng),并允許HTML標(biāo)簽通過設(shè)置unsafe_allow_html=True。這樣可以確保返回的結(jié)果在界面上正確顯示,包括可能的LaTeX公式。

對比測試

完成代碼之后,進(jìn)入命令行工具保證在app.py 同一級目錄下面,執(zhí)行如下命令進(jìn)行測試。

streamlit run app.py

看到如下圖所示,說明Streamlit 已經(jīng)在 本機(jī)的8502 端口啟動了,此時會自動彈出瀏覽器并訪問對應(yīng)的Web頁面地址。如果沒有自動訪問,可以手動在瀏覽器中輸入http://localhost:8502 進(jìn)行訪問。

接下來,我們希望模型回答一個方程求解的問題:“求解下列方程組的所有實(shí)數(shù)解: 2x + 3y = 7 4x y = 1”。看看我們定義的4個模型的表現(xiàn)如何。

如下圖所示,在展示的界面中,選擇了“Qianfan-Chinese-Llama-2-7B”的模型,這個是百度千帆平臺對Llama2模型進(jìn)行中文訓(xùn)練集微調(diào)之后的模型,其參數(shù)是7B,也就是70億。然后輸入對應(yīng)的問題,點(diǎn)擊“發(fā)送”按鈕,可以看到結(jié)果如下:

從顯示結(jié)果來看Llama2模型返回了一些解題的思路,并給出了一個解:(5,-1)。我們把該解帶入到第一個式子:2x+3y=7 發(fā)現(xiàn)沒有問題,但是帶入第二個式子:4x-y=1 發(fā)現(xiàn)明顯不對(有興趣大家可以自己算算哈)。

再來到第二個測試模型:“gpt-3.5-turbo”,如下圖所示,輸入同樣的問題并且點(diǎn)擊“發(fā)送”。

從結(jié)果上看x=-4, y=5 將其帶入到第一個式子結(jié)果是正確的,再將其帶入到第二個式子好像不太對了。

接著,看看“qwen-plus”文心一言模型的表現(xiàn),如下圖所示,輸入問題,并且通過發(fā)送按鈕請求結(jié)果。

如下圖所示,結(jié)果是x=5/7 y=13/7。

我們可以將 x=5/7 y=13/7 都帶入到方程式 2x + 3y = 7 4x y = 1 進(jìn)行演算,發(fā)現(xiàn)結(jié)果同時滿足兩個方程式,“Qwen-plus”完成數(shù)學(xué)題。

最后,來看看gpt-4o的表現(xiàn),如下圖所示,選擇“gpt-4o”然后提交同樣的問題。

如下圖所示,gpt-4o得到了和“Qwen-plus”相同的結(jié)果,從執(zhí)行過程上看,gpt-4o通過三步計算出方程的解之后,還加了一個“第四步”將計算的結(jié)果帶入原方程進(jìn)行演算,顯得比較“嚴(yán)謹(jǐn)”。

通過上面的實(shí)驗(yàn),我們發(fā)現(xiàn)GPT-4o在解決方程組的問題上表現(xiàn)出了強(qiáng)大的能力。它不僅能夠準(zhǔn)確地識別并理解輸入的方程組,還能夠逐步地提供詳細(xì)的解題過程。這充分展示了GPT-4o在以下幾個方面的優(yōu)勢:

  • 精確的數(shù)學(xué)運(yùn)算能力:GPT-4o能夠準(zhǔn)確地進(jìn)行代數(shù)運(yùn)算,包括加減乘除以及分?jǐn)?shù)運(yùn)算。在解題過程中,它清晰地展示了每一步的計算步驟,確保結(jié)果的正確性。
  • 邏輯推理和問題分解能力:在解決方程組時,GPT-4o展示了良好的邏輯推理能力。它首先通過消元法簡化方程,然后逐步解出每一個變量的值,整個過程條理清晰,步驟分明。
  • 文本生成和解釋能力:除了數(shù)學(xué)運(yùn)算,GPT-4o還能夠生成易于理解的文本解釋。這對于幫助用戶理解解題過程和結(jié)果非常有用,特別是在教育和學(xué)習(xí)場景中,能夠起到很好的輔導(dǎo)作用。

雖然此次展示的是文本和數(shù)學(xué)能力,但是從響應(yīng)速度上看GPT-4o比之前的GPT-4有明顯的提升。但是這些能力還是在文字生成方面,通過前面的介紹GPT-4o還具備處理圖像、音頻等多模態(tài)信息的能力。它能夠綜合利用多種信息源,提供更加全面和準(zhǔn)確的解決方案。接下來我們還要介紹其在多模態(tài)處理方面的能力。

圖片理解功能的實(shí)現(xiàn)

上面我們已經(jīng)詳細(xì)介紹了GPT-4o在文本理解、推理和生成方面的強(qiáng)大能力。通過對復(fù)雜數(shù)學(xué)問題的準(zhǔn)確解答,GPT-4o展示了其在處理復(fù)雜文本任務(wù)上的卓越性能。接下來,我們將深入探討GPT-4o的視覺處理能力。

為了全面評估其在這一方面的表現(xiàn),我們準(zhǔn)備了兩張圖片進(jìn)行測試。首先,我們將展示一張風(fēng)景圖片,看看GPT-4o是否能夠準(zhǔn)確理解圖片內(nèi)容,識別出其中的細(xì)節(jié)和場景信息。其次,我們將測試一張包含多個數(shù)學(xué)公式的圖片,檢驗(yàn)GPT-4o是否能夠識別這些公式并理解它們的含義,甚至進(jìn)一步解答其中涉及的數(shù)學(xué)方程式。

圖片識別代碼執(zhí)行

直接上代碼, 在原有的selected_model.py文件中加入新函數(shù),讓gpt-4o進(jìn)行視覺識別。代碼如下:

def get_response_from_pic_by_gpt_4o(question:str,url: str):
    human_message = HumanMessage(content=[
    { "type": "text", "text": question },
    { "type": "image_url", "image_url": { "url": url }}
    ])
    llm = ChatOpenAI(model="gpt-4o")
    response = llm.invoke([ human_message ])
    print(response.content)
    return response.content

(1) 定義視覺處理函數(shù)

定義了一個名為get_response_from_pic_by_gpt_4o的函數(shù),該函數(shù)接受兩個參數(shù):一個字符串類型的question用來接收用戶的提問,另一個字符串類型的url用來接收圖片的URL地址。函數(shù)將根據(jù)這兩個參數(shù)生成并返回一個響應(yīng),也就是識別圖片的內(nèi)容信息。

(2) 創(chuàng)建HumanMessage對象

human_message = HumanMessage(content=[
    { "type": "text", "text": question },
    { "type": "image_url", "image_url": { "url": url }}
])

創(chuàng)建了一個HumanMessage對象,并將其賦值給變量human_message。該對象包含一個content列表,列表中的第一個元素是包含文本問題的字典,第二個元素是包含圖片URL的字典。這種結(jié)構(gòu)將文本和圖片信息組合在一起,以便傳遞給大語言模型。

(3) 調(diào)用gpt-4o處理圖片信息

llm = ChatOpenAI(model="gpt-4o")
response = llm.invoke([ human_message ])
return response.content

實(shí)例化一個ChatOpenAI對象,并將其賦值給變量llm。該對象使用了模型gpt-4o,用于處理輸入的human_message并生成響應(yīng)。接著,調(diào)用llm對象的invoke方法,傳入包含human_message的列表。該方法會處理輸入的消息并返回一個響應(yīng)。返回的響應(yīng)賦值給變量response,并將識別圖片的內(nèi)容信息content通過response.content的方式返回給調(diào)用者。

除了在selected_model.py 文件中添加函數(shù)之外,還需要修改app.py的部分代碼,如下:

(1) 創(chuàng)建文本輸入框讓用戶輸入圖片的URL

image_url = st.text_input("請輸入圖片的URL:")

使用Streamlit的text_input函數(shù)創(chuàng)建了一個文本輸入框,提示用戶輸入圖片的URL。用戶輸入的URL存儲在變量image_url中。

(2) 定義函數(shù)is_valid_url,驗(yàn)證輸入的URL

def is_valid_url(url):
    regex = re.compile(
        r'^(?:http|ftp)s?://'  # http:// 或 https://
        r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|'  # 域名
        r'localhost|'  # 本地地址
        r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|'  # IPv4 地址
        r'\[?[A-F0-9]*:[A-F0-9:]+\]?)'  # IPv6 地址
        r'(?::\d+)?'  # 可選端口號
        r'(?:/?|[/?]\S+)$', re.IGNORECASE)
    return re.match(regex, url) is not None

定義了一個名為is_valid_url的函數(shù),該函數(shù)接受一個URL字符串作為參數(shù)。通過正則表達(dá)式regex驗(yàn)證URL的格式是否有效。如果URL匹配正則表達(dá)式,函數(shù)返回True,否則返回False。有了這個函數(shù)就可以判斷我們輸入的URL是否是符合規(guī)則的。

(3) 調(diào)用模型識別圖片

if st.button("發(fā)送"):
if selected_model == "gpt-4o":
      if image_url.strip() and is_valid_url(image_url):
          response = get_response_from_pic_by_gpt_4o(user_question, image_url)
      else:
          response = get_response_from_gpt_4o(user_question)

這部分代碼是在原來代碼基礎(chǔ)上進(jìn)行了修改,根據(jù)用戶選擇的模型調(diào)用相應(yīng)的函數(shù)處理問題。如果選擇了gpt-4o,首先檢查用戶是否輸入了圖片URL且URL格式有效。如果滿足條件,則調(diào)用get_response_from_pic_by_gpt_4o函數(shù),傳入用戶輸入的問題和圖片URL,獲取響應(yīng)。如果未輸入圖片URL或URL格式無效,則調(diào)用get_response_from_gpt_4o函數(shù),傳入用戶輸入的問題,獲取響應(yīng)。

說白了,這段代碼通過以下步驟實(shí)現(xiàn)了用戶輸入圖片URL并調(diào)用相應(yīng)函數(shù)生成響應(yīng)的功能:

  • 創(chuàng)建一個文本輸入框讓用戶輸入圖片的URL。
  • 定義一個函數(shù)is_valid_url來驗(yàn)證輸入的URL格式是否有效。
  • 創(chuàng)建一個發(fā)送按鈕,用戶點(diǎn)擊按鈕后執(zhí)行代碼。
  • 根據(jù)所選模型和圖片URL的有效性,調(diào)用相應(yīng)的函數(shù)生成并返回響應(yīng)。

圖片識別功能測試

完成代碼編寫之后,我們開始功能的測試,首先確定要識別的圖片,我們通過地址得到如下圖所示的圖片。

然后,通過streamlit run app.py 啟動Web 交互界面,如下圖所示,輸入問題和圖片的URL地址,然后點(diǎn)擊“發(fā)送”按鈕,請求gpt-4o模型。

從輸出的內(nèi)容可以看出,gpt-4o識別出了整個圖片,包括:步道、草地、樹木、藍(lán)天、白云、陽光等信息。

看來gpt-4o的表現(xiàn)還不錯,接著我們上點(diǎn)難度,提交一張多個數(shù)學(xué)公式組成的圖片,如下圖所示,圖片包含了多個數(shù)學(xué)公式,我們可以通過地址訪問。

看看gpt-4o能否理解、分析、計算出圖片中的數(shù)學(xué)公式,如下圖所示,在問題的部分我們告訴大模型“理解并求解圖片中的數(shù)學(xué)題”,然后給出圖片的URL地址,最后點(diǎn)擊“發(fā)送”按鈕請求大模型。

由于圖片中的公式眾多,我們?nèi)∏懊嬉徊糠终故窘o大家。 如下圖所示,gpt-4o 解析出圖片的公式按照圖片公式的序號:(a) (b) (c) 進(jìn)行排列,針對每個公式提供了詳細(xì)的解題步驟,檢查了一下結(jié)果是正確的。

總結(jié)

通過本文的詳細(xì)探討和實(shí)例展示,我們看到了GPT-4o在多模態(tài)處理上的強(qiáng)大能力,以及它在實(shí)際應(yīng)用中的廣泛潛力。無論是處理復(fù)雜的數(shù)學(xué)問題還是進(jìn)行精確的圖像識別,GPT-4o都展現(xiàn)了卓越的性能和速度。本文提供的集成方法和代碼實(shí)現(xiàn)為開發(fā)者提供了實(shí)用的參考,幫助他們將GPT-4o的強(qiáng)大功能融入到自己的應(yīng)用中。展望未來,GPT-4o的發(fā)布預(yù)示著AI技術(shù)的又一次飛躍,它將引領(lǐng)人機(jī)交互進(jìn)入一個更加智能和自然的新時代。

參考

https://platform.openai.com/docs/guides/vision

https://openai.com/index/hello-gpt-4o/

https://openai.com/index/gpt-4o-and-more-tools-to-chatgpt-free/

https://github.com/sugarforever/LangChain-。Tutorials/blob/main/langchain_openai_gpt4o.ipynb

作者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。

想了解更多AIGC的內(nèi)容,請訪問:

51CTO AI.x社區(qū)

http://scjtxx.cn/aigc/

責(zé)任編輯:姜華 來源: 51CTO內(nèi)容精選
相關(guān)推薦

2025-03-31 08:44:00

GPT-4o模型技術(shù)

2024-05-14 08:23:27

GPT-4oAI技術(shù)

2024-06-05 08:29:35

2025-04-08 02:26:00

2024-05-21 12:23:17

2024-06-05 13:09:26

2024-05-14 19:16:52

ChatGPTGPT-4oOpenAI

2025-04-15 08:01:12

2024-05-24 14:04:04

2024-12-26 07:10:00

2024-06-21 09:51:17

2024-06-27 12:45:30

2025-04-23 15:25:27

語言模型Eagle 2.5英偉達(dá)

2024-11-11 09:47:00

AI開源

2025-03-31 08:50:00

AI生成模型

2024-08-22 13:40:08

開發(fā)者GPT-4oepoch

2024-05-30 13:13:43

2024-06-21 09:57:00

2024-09-03 14:30:00

機(jī)器人模型

2024-11-22 15:00:00

模型數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號