在2.3节中,已经介绍了如何通过API调用百度千帆平台的Llama2模型来增强应用。然而,随着业务场景的不断变化,可能需要在不同的场景中使用不同的大模型。例如,一些模型擅长执行复杂的文本生成任务,适用于内容创作或对话系统,而另外一些模型更适合执行命令和处理功能性调用,如自动编程或数据查询。此外,其他模型可能专注于图像或语音生成,每种模型根据其设计和训练的特点适用于不同的应用场景。
本节将详细探讨如何整合这些大模型,如阿里灵积(DashScope)的qwen-plus模型和OpenAI的gpt-3.5- turbo,以及百度千帆平台的Llama2模型。下面用2.4节中介绍的Streamlit案例将其剩余的部分实现。在选择不同的大模型时,要调用不同大模型的API代码,让不同的模型完成用户请求的回应。
这里除了需要在2.3节中使用过的百度千帆平台的Llama2模型之外,还需要使用阿里灵积平台以及OpenAI,所以在使用这些平台之前需要先申请访问的密钥(Key)。
阿里灵积平台需要先开通模型服务,然后才能申请密钥(Key),可以参考链接
的内容执行。
如图2-10所示,在登录阿里灵积平台之后,首先访问API-KEY管理页面,然后单击“创建新的API-KEY”按钮。
图2-10 创建阿里灵积平台的API-KEY
单击“创建新的API-KEY”按钮后,系统会生成API-KEY,并在弹出的对话框中展示,此处用户可以单击“复制”按钮将API-KEY的内容复制保存,如图2-11所示。
在OpenAI平台中可以通过链接
申请Key。在Project API keys的页面中单击Create new secret key按钮,然后在弹出的对话框中单击Create secret key按钮就可以获取OpenAI的Key了,如图2-12所示。
图2-11 查看阿里灵积平台的API-KEY
图2-12 生成OpenAI Key
接着会弹出图2-13所示的对话框,在该对话框中可以查看生成的key,并且可以通过单击Copy按钮复制key的内容。建议将key的内容另行保存,因为只有这一次查看key的内容的机会。
图2-13 查看OpenAI Key
获取阿里灵积和OpenAI平台的密钥(Key)之后,需要更新.env文件。代码如下:
在chapter02目录下创建selected_model.py文件,在该文件中加入三个函数,分别对应2.4节中三种不同的模型。代码如下:
以上代码创建了函数get_response_from_qwen,输入参数是用户提出的问题,返回大模型的回应。代码的整体思路和2.3节中利用LangChain调用大模型一致,唯一不同的地方是使用了Tongyi的类创建通义千问平台的大模型qwen-plus,它是通义千问超大型语言模型增强版,支持中文、英文等不同语言输入。qwen-plus模型支持32k tokens上下文,为了保证正常的使用和输出,API限定用户输入为30k tokens。
接着定义百度千帆平台Llama2模型的调用。代码如下:
在以上代码中,定义了函数get_response_from_llama2,输入参数的处理过程以及返回内容都和2.3节中描述的get_response_from_llm函数保持一致。
最后,再定义对GPT模型的调用。代码如下:
以上代码定义的get_response_from_gpt函数调用OpenAI的gpt-3.5-turbo模型。
定义完以上三个函数之后,接着生成Web交互页面,在chapter02目录下创建app.py文件。添加以下代码。
(1)选择模型。
这部分代码和2.4节中streamlit_basic.py的代码一致,主要定义了三个模型的名字,并且在下拉列表框中显示,当选择其中任意一个模型时,通过Streamlit的write函数显示所选择的模型。
(2)调用模型。
以上代码会添加一个text_input作为文本输入框,用来输入用户的请求。同时定义一个button按钮,当单击该按钮时,会通过选择模型的名字判断调用的函数。然后,将用户的请求发送给定义好的大模型函数,最后将大模型的回应通过write展示。
完成代码之后测试一下功能,应保证在chapter02目录下执行以下命令,启动Streamlit。
如图2-14所示,在Streamlit生成的Web交互界面中,选择Qianfan-Chinese-Llama-2-7B模型之后,接着输入用户请求:“如何制作一碗热干面”,在单击“发送”按钮之后,千帆平台的Llama2模型会返回详细步骤,并且显示在下方。
然后,还可以测试其他模型,如图2-15所示,在选择阿里灵积的qwen-plus模型之后,得到了不同的答案。
图2-14 调用千帆平台的Llama2模型
图2-15 调用阿里灵积的qwen-plus模型
上面通过一个简单的例子调用三个不同平台的大模型来回答用户的提问。在后面的章节中,基本会延续这种方式,Streamlit用于解决Web页面交互的功能,LangChain的架构用于解决大模型项目的调用,通过两者相结合完成项目的开发。