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ā)人員友好的途徑。
-
GPT
+關(guān)注
關(guān)注
0文章
354瀏覽量
15379 -
LLM
+關(guān)注
關(guān)注
0文章
288瀏覽量
338
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論