学习如何创建一个将Langchain框架与Streamlit和OpenAI的GPT3模型集成的Web应用程序。

Streamlit 🔥
Streamlit是一个开源的Python库,它可以轻松创建和共享用于机器学习和数据科学的美观自定义Web应用程序。只需几分钟,您就可以构建和部署强大的数据应用。
我们将使用它为我们的应用程序创建一个基本的用户界面,然后通过Langchain和OpenAI客户端连接用户界面组件以提供LLM响应。🙌
Streamlit文档
Langchain 🔗
LangChain是一个基于语言模型开发应用程序的框架。它可以实现以下功能:
- 数据感知:将语言模型连接到其他数据源
- 主动性:允许语言模型与其环境交互
我们将使用Langchain框架来构建使用单个提示/任务的链。LLM将按顺序处理链中的每个链接🔗,这将允许我们通过模型运行更复杂的查询。一个提示的输出将成为下一个提示的输入,依此类推。
Langchain文档
OpenAI | GPT3.5 🤖
Langchain中的OpenAI客户端将使我们能够利用他们最先进的GPT模型的能力。我们将使用“gpt-3.5-turbo”模型,但您可以使用任何您想要的模型。
以下是我们将要使用的模型的OpenAI网站上的简短描述:
最强大的GPT-3.5模型,经过优化,适用于与
text-davinci-003
相比仅为1/10的聊天成本。在发布后2周内,将使用我们最新的模型迭代进行更新。最大4,096个令牌
在这里阅读更多!
🧑💻让我们从代码开始吧</>
首先,关于应用程序 —
我们将创建一个Rap歌曲生成器。这将是我们自己的LLM驱动的Web应用程序。
根据给定的主题,它将生成一个适当的歌曲标题,然后还将为该标题生成歌词。以下是应用程序的演示:

令人兴奋吗?让我们开始构建吧!🧑🏻💻💪🏻
🙋🏻 导入语句和初始设置 —
这个项目需要3个主要的包。安装它们和其他需要的包。
之后,我们将导入API KEY并将其设置为环境变量。另外,由于我们的应用程序可以选择多个GPT模型,我已经在一个变量中定义了我想要的模型。您可以根据需要进行更改。
#pip3 install streamlit#pip3 install langchain#pip3 install openaiimport osimport streamlit as stfrom langchain.prompts import PromptTemplatefrom langchain.chains import LLMChain, SimpleSequentialChain, SequentialChainfrom langchain.chat_models import ChatOpenAI#import API key from config filefrom config import OPEN_API # environment variable & the model to usemodel_id = 'gpt-3.5-turbo'os.environ["OPENAI_API_KEY"] = OPEN_API
✒️ UI 元素(streamlit)-
Streamlit拥有非常用户友好的API,可以轻松为我们的ML /数据科学应用程序创建前端。
在下面的代码中,我们首先为我们的应用程序创建了一个标题,正下方是一个用户输入框,用户将在其中输入歌曲的主题。
之后,我们还有两个标题,一个是标题,另一个是诗句。每个标题都有自己的输出框,一旦生成,输出将附加在其中。
# 主标题和输入框st.title("🎙️ 说唱歌曲生成器 🎙️🔥") prompt = st.text_input("歌曲主题?") # 第二个标题和歌曲标题的输出区域st.markdown("#### 歌曲标题")title_box = st.empty()# 第三个标题和诗句的输出区域st.markdown("#### 诗句")verse_box = st.empty()
当输入提供时,它将存储在“prompt”变量中。稍后将使用此变量生成输出。
💥 提示模板,链条和LLM(langchain,OpenAI)-
现在我们需要为标题生成和诗句生成分别创建模板。
- 在第一个提示中,输入是用户从UI中输入的“主题”。此“主题”将用于格式化模板字符串。此模板将用于输出歌曲的“标题”。
- 第二个提示将使用上面生成的“标题”作为输入,并使用它来格式化第二个模板字符串,该模板基于此输入“标题”生成诗句。此模板(链)的输出将是“诗句”。
一旦我们有了2个模板,我们将为每个模板创建2个链。第一个链将是标题链,它将使用标题模板。
同样,第二个链将是诗句链,它将使用诗句模板。
我们将得到的输出将以字典格式呈现,因此对于每个链,我们可以指定要用作键的内容。“output_key = something”可以在两个链上设置以实现此目的。
# 生成标题的提示模板title_template = PromptTemplate( input_variables = ["topic"], template = "在主题上生成一首说唱歌曲的标题:{topic}")# 生成诗句的提示模板verse_template = PromptTemplate( input_variables = ["title"], template = "为名为:{title}的说唱歌曲生成2个押韵的诗句")# 构建链条stitle_chain = LLMChain(llm=llm, prompt=title_template, verbose=True, output_key="title") verse_chain = LLMChain(llm=llm, prompt=verse_template, verbose=True, output_key="verse") # 组合链条sequential_chain = SequentialChain( chains=[title_chain, verse_chain], input_variables=["topic"], output_variables=["title", "verse"], verbose=True,)
最后,我们将两个链组合在一起,并在开始执行时按顺序运行它们。此组合链中的输入变量将为[“topic”],输出变量将为[“title”,“verse”],如在组合链时定义的。
📺 输出到屏幕-
一旦我们从用户那里获得输入,我们将运行刚刚创建的组合链。我们将将提示作为“topic”传递,因为这是我们为“input_variables”参数定义的名称。
响应将是一个字典,我们可以使用之前在“output_variables”和“output_keys”变量中定义的键从中提取所需的文本。
# 如果提供了提示,则运行链条if prompt: response = sequential_chain({ "topic" : prompt }) title = response["title"] body = response["verse"] # 在单独的输出框中显示每个输出 title_box.markdown(title) verse_box.markdown(body)
要运行应用程序,请使用以下命令-
streamlit运行filename.py
这就是本文的全部内容。希望您觉得值得花时间阅读,并关注我以获取更多未来的更新!
🖤 感谢阅读,请查看以下相关帖子 —
生成式人工智能的早期采用:拥抱机遇与降低风险
让我们探索为什么公司尽管生成式人工智能存在缺陷,仍将其纳入业务,并了解它们如何…
krnk97.medium.com
如何创建一个YouTube克隆 — YouTube API
如何使用HTML、CSS和JavaScript(jQuery)和YouTube API开发一个YouTube视频搜索WebApp。
enlear.academy