0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣使用Streamlit創(chuàng)建AutoGen用戶界面?

冬至子 ? 來源:思否AI ? 作者:思否AI ? 2023-11-08 14:56 ? 次閱讀

AutoGen作為一個(gè)最大化LLM(如GPT-4)能力的框架而脫穎而出。由微軟研究院開發(fā)的AutoGen通過提供一種自動(dòng)化、優(yōu)化和編排工作流的方法,簡(jiǎn)化了復(fù)雜的、基于多代理llm的應(yīng)用程序的創(chuàng)建。我們?cè)谝郧暗奈恼轮幸灿羞^介紹,你可以與許多GPT交談,并且GPT和GPT之間也可以互相交談。每個(gè)GPT都是它自己的“代理”,并在總體業(yè)務(wù)流程中扮演特殊角色。

但是AutoGen是用命令行模式進(jìn)行交互的,這對(duì)我們的輸入來說非常不方便,所以這次我們來對(duì)其進(jìn)行改造,使用Streamlit創(chuàng)建一個(gè)web界面,這樣可以讓我們更好的與其交互。

這個(gè)項(xiàng)目略微粗糙,但它應(yīng)該為為AutoGen代理創(chuàng)建簡(jiǎn)單的ui提供了一個(gè)很好的起點(diǎn)。

這里需要注意的是:

明確要求不要運(yùn)行代碼或?qū)⑽募鎯?chǔ)在本地,因?yàn)檫@是Streamlit限制—而不是AutoGen限制。

簡(jiǎn)單介紹AutoGen

我們之前已經(jīng)介紹過AutoGen,所以這里再做個(gè)簡(jiǎn)單的回顧:

AutoGen自動(dòng)化了LLM工作流,這在開發(fā)人員制作越來越復(fù)雜的基于LLM的應(yīng)用程序時(shí)至關(guān)重要。

它提供了可定制的代理,這些代理不僅可以與用戶進(jìn)行自動(dòng)對(duì)話,還可以在代理之間進(jìn)行自動(dòng)對(duì)話。

AutoGen代理可以合并llm、人工輸入和其他工具的組合,克服每個(gè)組件單獨(dú)的局限性。無論是代碼生成、執(zhí)行、調(diào)試還是復(fù)雜任務(wù)解決,AutoGen代理都可以處理各種高級(jí)操作。

創(chuàng)建Streamlit應(yīng)用

我們的目標(biāo)是這樣的:

我們先安裝如下包:

aiohttp==3.8.6
 aiosignal==1.3.1
 altair==5.1.2
 async-timeout==4.0.3
 attrs==23.1.0
 blinker==1.6.3
 cachetools==5.3.2
 certifi==2023.7.22
 charset-normalizer==3.3.1
 click==8.1.7
 diskcache==5.6.3
 docker==6.1.3
 FLAML==2.1.1
 frozenlist==1.4.0
 gitdb==4.0.11
 GitPython==3.1.40
 idna==3.4
 importlib-metadata==6.8.0
 Jinja2==3.1.2
 jsonschema==4.19.1
 jsonschema-specifications==2023.7.1
 markdown-it-py==3.0.0
 MarkupSafe==2.1.3
 mdurl==0.1.2
 multidict==6.0.4
 numpy==1.26.1
 openai==0.28.1
 packaging==23.2
 pandas==2.1.2
 Pillow==10.1.0
 protobuf==4.24.4
 pyarrow==13.0.0
 pyautogen==0.1.13
 pydeck==0.8.1b0
 Pygments==2.16.1
 python-dateutil==2.8.2
 python-dotenv==1.0.0
 pytz==2023.3.post1
 referencing==0.30.2
 requests==2.31.0
 rich==13.6.0
 rpds-py==0.10.6
 six==1.16.0
 smmap==5.0.1
 streamlit==1.28.0
 tenacity==8.2.3
 termcolor==2.3.0
 toml==0.10.2
 toolz==0.12.0
 tornado==6.3.3
 tqdm==4.66.1
 typing_extensions==4.8.0
 tzdata==2023.3
 tzlocal==5.2
 urllib3==2.0.7
 validators==0.22.0
 websocket-client==1.6.4
 yarl==1.9.2
 zipp==3.17.0

然后創(chuàng)建

app.py

首先是導(dǎo)入包:

import streamlit as st
 import asyncio
 from autogen import AssistantAgent, UserProxyAgent

streamlit用于創(chuàng)建UI。Asyncio對(duì)于異步控制流是必需的,它允許聊天響應(yīng)。Autogen為聊天代理提供了類。

然后使用Streamlit的write函數(shù)設(shè)置應(yīng)用的標(biāo)題:

st.write("# AutoGen Chat Agents")

這一行將在UI的頂部顯示標(biāo)題“AutoGen Chat Agents”。

然后就是創(chuàng)建自定義代理類,需要擴(kuò)展AutoGen的AssistantAgent和UserProxyAgent:

class TrackableAssistantAgent(AssistantAgent):
     def _process_received_message(self, message, sender, silent):
         with st.chat_message(sender.name):
             st.markdown(message)
         return super()._process_received_message(message, sender, silent)
 
 class TrackableUserProxyAgent(UserProxyAgent):
     def _process_received_message(self, message, sender, silent):
         with st.chat_message(sender.name):
             st.markdown(message)
         return super()._process_received_message(message, sender, silent)

這些類覆蓋一個(gè)_process_received_message方法,在Streamlit聊天小部件中顯示接收到的消息,為用戶提供實(shí)時(shí)更新。

然后就是使用Streamlit的側(cè)邊欄功能進(jìn)行配置:

selected_model = None
 selected_key = None
 
 with st.sidebar:
     st.header("OpenAI Configuration")
     selected_model = st.selectbox("Model", ['gpt-3.5-turbo', 'gpt-4'], index=1)
     selected_key = st.text_input("API Key", type="password")

這里可以使用我們上次文章的本地 LLM 方案,這樣就不用使用openai的付費(fèi)API了

然后就是創(chuàng)建主聊天界面并處理輸入:

with st.container():
     # for message in st.session_state["messages"]:
     #    st.markdown(message)
 
     user_input = st.chat_input("Type something...")
     if user_input:
         if not selected_key or not selected_model:
             st.warning(
                 'You must provide valid OpenAI API key and choose preferred model', icon="??")
             st.stop()
 
         llm_config = {
             "request_timeout": 600,
             "config_list": [
                 {
                     "model": selected_model,
                     "api_key": selected_key
                 }
             ]
         }

上面代碼創(chuàng)建一個(gè)聊天輸入字段,如果用戶沒有完成配置,將顯示一個(gè)警告。

自定義我們的代理,并為異步聊天設(shè)置事件循環(huán):

# create an AssistantAgent instance named "assistant"
 assistant = TrackableAssistantAgent(
 name="assistant", llm_config=llm_config)
 
 # create a UserProxyAgent instance named "user"
 user_proxy = TrackableUserProxyAgent(
 name="user", human_input_mode="NEVER", llm_config=llm_config)
 
 # Create an event loop
 loop = asyncio.new_event_loop()
 asyncio.set_event_loop(loop)

代理的配置需要根據(jù)我們的需求自行定義,我們這里只給一個(gè)演示。除此以外還要使用asyncio為應(yīng)用程序處理異步操作做好準(zhǔn)備。

最后定義并運(yùn)行異步函數(shù)來啟動(dòng)聊天:

async def initiate_chat():
 await user_proxy.a_initiate_chat(
 assistant,
 message=user_input,
 )
 
 # Run the asynchronous function within the event loop
 loop.run_until_complete(initiate_chat())

當(dāng)發(fā)送消息時(shí),就可以在用戶代理和助理代理之間發(fā)起聊天,結(jié)果如下:

總結(jié)

將AutoGen代理集成到Streamlit應(yīng)用程序中,為創(chuàng)建由大型語言模型驅(qū)動(dòng)的交互式智能ui提供了無數(shù)可能性。通過我們的以上代碼可以建立一個(gè)響應(yīng)式聊天界面,利用AutoGen的高級(jí)功能。AutoGen和Streamlit的結(jié)合為實(shí)現(xiàn)我們的需求提供了一個(gè)強(qiáng)大且對(duì)開發(fā)人員友好的途徑。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • GPT
    GPT
    +關(guān)注

    關(guān)注

    0

    文章

    354

    瀏覽量

    15379
  • LLM
    LLM
    +關(guān)注

    關(guān)注

    0

    文章

    288

    瀏覽量

    338
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux中的用戶創(chuàng)建

    Linux中的用戶創(chuàng)建 用戶的類型 超級(jí)管理用戶: 權(quán)限最高的用戶(uid:0) #uid:是用戶
    的頭像 發(fā)表于 12-20 14:24 ?215次閱讀
    Linux中的<b class='flag-5'>用戶</b>與<b class='flag-5'>創(chuàng)建</b>

    SOLIDWORKS 2025直觀的用戶界面

    在工程設(shè)計(jì)領(lǐng)域,SOLIDWORKS作為三維CAD軟件的佼佼者,一直致力于通過技術(shù)創(chuàng)新提升用戶體驗(yàn)。隨著SOLIDWORKS 2025版本的發(fā)布,其在界面設(shè)計(jì)上的直觀性與易用性再次成為行業(yè)關(guān)注的焦點(diǎn)
    的頭像 發(fā)表于 12-12 17:22 ?147次閱讀

    DRV8821-23 EVM圖形用戶界面

    電子發(fā)燒友網(wǎng)站提供《DRV8821-23 EVM圖形用戶界面.pdf》資料免費(fèi)下載
    發(fā)表于 12-05 15:08 ?0次下載
    DRV8821-23 EVM圖形<b class='flag-5'>用戶</b><b class='flag-5'>界面</b>

    DRV8800-01 EVM圖形用戶界面

    電子發(fā)燒友網(wǎng)站提供《DRV8800-01 EVM圖形用戶界面.pdf》資料免費(fèi)下載
    發(fā)表于 12-02 11:07 ?0次下載
    DRV8800-01 EVM圖形<b class='flag-5'>用戶</b><b class='flag-5'>界面</b>

    把YOLOv11和Python Qt做個(gè)用戶界面程序

    早些時(shí)間,小編想把PID控制器優(yōu)化部分通過Py Qt來實(shí)現(xiàn)用戶界面化,不過看著窗口一堆參數(shù),有點(diǎn)發(fā)怵:這玩意誰用??? 參考《PID控制器參數(shù)自動(dòng)優(yōu)化示例和比較》 后來就擱置了。 在通過Python
    的頭像 發(fā)表于 11-28 10:18 ?355次閱讀
    把YOLOv11和Python Qt做個(gè)<b class='flag-5'>用戶</b><b class='flag-5'>界面</b>程序

    圖形用戶界面與命令行接口的比較

    在計(jì)算機(jī)科學(xué)和信息技術(shù)領(lǐng)域,用戶與計(jì)算機(jī)交互的方式主要分為兩種:圖形用戶界面(GUI)和命令行接口(CLI)。這兩種界面各有優(yōu)勢(shì)和局限性,適用于不同的場(chǎng)景和
    的頭像 發(fā)表于 11-12 14:38 ?348次閱讀

    Molex莫仕助力推動(dòng)高級(jí)用戶界面發(fā)展

    家電的未來將不再依賴按鈕和儀表盤,而是朝向更加直觀和互動(dòng)的方向發(fā)展。受消費(fèi)者期望的驅(qū)動(dòng),高級(jí)用戶界面(UI)正致力于呈現(xiàn)智能手機(jī)和家庭助手的簡(jiǎn)單易用性。
    的頭像 發(fā)表于 11-05 16:00 ?415次閱讀

    加賀富儀艾電子CGI Studio助您創(chuàng)建嵌入式用戶界面解決方案

    人機(jī)交互界面(HMI)作為人與技術(shù)之間的溝通界面,正不斷拓展其在各行業(yè)的應(yīng)用邊界,成為數(shù)字時(shí)代不可或缺的一部分。從工業(yè)控制、汽車儀表盤到智能家居、醫(yī)療設(shè)備,HMI技術(shù)的應(yīng)用市場(chǎng)呈現(xiàn)出多元化和深度滲透的特點(diǎn)。
    的頭像 發(fā)表于 08-22 14:48 ?523次閱讀

    如何使用MATLAB創(chuàng)建預(yù)測(cè)模型

    MATLAB 簡(jiǎn)介 MATLAB 是由 MathWorks 公司開發(fā)的,它提供了一個(gè)集成的計(jì)算環(huán)境,包括一個(gè)命令行界面、一個(gè)圖形用戶界面、一個(gè)編程語言和一個(gè)調(diào)試器。MATLAB 的主要優(yōu)勢(shì)在于其矩陣運(yùn)算能力,這使得它在處理大規(guī)
    的頭像 發(fā)表于 07-11 14:29 ?682次閱讀

    人機(jī)界面應(yīng)具備的特性是什么

    人機(jī)界面(Human-Machine Interface,簡(jiǎn)稱HMI)是人與機(jī)器之間進(jìn)行信息交流和控制的媒介。一個(gè)優(yōu)秀的人機(jī)界面能夠提高工作效率、降低操作難度、增強(qiáng)用戶體驗(yàn)。本文將從多個(gè)方面探討人機(jī)
    的頭像 發(fā)表于 07-01 14:24 ?709次閱讀

    上位機(jī)軟件的用戶界面設(shè)計(jì)技巧

    在工業(yè)自動(dòng)化、監(jiān)控和控制系統(tǒng)等領(lǐng)域,上位機(jī)軟件扮演著至關(guān)重要的角色。作為用戶與系統(tǒng)交互的橋梁,上位機(jī)軟件的用戶界面(UI)設(shè)計(jì)不僅影響著用戶的使用體驗(yàn),還直接關(guān)系到系統(tǒng)的整體效率和可靠
    的頭像 發(fā)表于 06-28 16:37 ?1426次閱讀

    人機(jī)交互界面是什么_人機(jī)交互界面的功能

    人機(jī)交互界面(Human-Computer Interaction Interface,簡(jiǎn)稱HCI或HMI),也被稱為人機(jī)界面(MMI)、操作員界面終端(OIT)、本地操作員界面(LO
    的頭像 發(fā)表于 06-22 11:03 ?2536次閱讀

    上位機(jī)控制界面用什么做好

    在設(shè)計(jì)上位機(jī)控制界面時(shí),選擇合適的開發(fā)工具和框架至關(guān)重要。本文介紹如何創(chuàng)建一個(gè)優(yōu)秀的上位機(jī)控制界面。 引言 上位機(jī)控制界面是實(shí)現(xiàn)人機(jī)交互的關(guān)鍵環(huán)節(jié),它允許
    的頭像 發(fā)表于 06-06 10:54 ?951次閱讀

    OpenAI發(fā)布ChatGPT桌面版,優(yōu)化用戶界面,免費(fèi)提供GPT-4o模型

    此外,ChatGPT 集成了優(yōu)化后的用戶界面,支持用戶在同一界面下同時(shí)運(yùn)行 ChatGPT 及其它程序,并可通過語音或文字方式向其提問。
    的頭像 發(fā)表于 05-14 11:12 ?642次閱讀

    如何在資源有限的 MCU 上實(shí)現(xiàn)語音用戶界面

    系統(tǒng),并且出于隱私問題,人們對(duì)持續(xù)的云連接越來越不舒服。 然而,強(qiáng)大且安全的語音用戶界面 (VUI) 通常需要強(qiáng)大的硬件和復(fù)雜的軟件來進(jìn)行語音識(shí)別。任何不足都可能導(dǎo)致性能不佳和用戶體驗(yàn)不佳。此外,許多智能揚(yáng)聲器和集線器都是電池供
    的頭像 發(fā)表于 01-01 14:11 ?679次閱讀
    如何在資源有限的 MCU 上實(shí)現(xiàn)語音<b class='flag-5'>用戶</b><b class='flag-5'>界面</b>