GPT-4o:实现跨越文本与视觉的智能交互( 三 )


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该函数使用了QianfanLLMEndpoint类来实例化一个名为llm的大语言模型对象,模型名称为Qianfan-Chinese-Llama-2-7B 。其余部分与之前的get_response_from_gpt_4o函数相同,包括模板的定义、PromptTemplate和LLMChain的创建及运行 。
最后,是调用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需要说明的是 , 由于调用了多个平台的大模型,因此需要预先配置多平台模型访问的Key,可以通过创建.env 文件定义这些Key 。可以在程序相同的目录下创建.env 文件,文件内容如下:
OPENAI_API_KEY=sk-3M3Cg1uLVDS7nXXXkFSlNV0Ts1CamgSPQIANFAN_AK=Y5DvSDyyAZKXXXHu719rPQIANFAN_SK=CKsfjtXawcjsg1XXXU3VwpACgZdorIDASHSCOPE_API_KEY=sk-f93952eXXX4b3b65f0906a1e0e7`.env` 文件用于存储应用程序的环境变量,包括访问API的密钥和其他配置参数 。这些变量提供了应用程序在不同平台和服务之间进行交互所需的认证信息和配置 。文件中包含多个API密钥和配置参数,用于不同的服务提供商:

  • OpenAI 密钥 (`OPENAI_API_KEY`):用于访问OpenAI提供的服务 , 例如GPT-4o模型 。
  • 百度千帆密钥 (`QIANFAN_AK` 和 `QIANFAN_SK`):用于验证和访问百度千帆平台的服务 。
  • 阿里灵积密钥 (`DASHSCOPE_API_KEY`):用于验证和访问阿里灵积(Dashscope)平台的服务 。
创建 app.py 文件,添加Web交互功能创建完基本的模型调用函数之后,再来看看Web 页面的交互功能 。创建app.py文件,使用Streamlit创建一个Web交互界面 。用户在界面中可以选择要使用的大模型,并输入他们的问题 。当用户点击“发送”按钮时,app.py 文件将根据用户选择的大模型,调用 selected_model.py 文件中的相应函数来处理问题 。响应结果将显示在界面上,供用户查看和对比不同模型的表现 。
下面来看看代码的实现,如下:
# 定义模型列表models = ["Qianfan-Chinese-Llama-2-7B", "gpt-3.5-turbo", "qwen-plus","gpt-4o"]# 创建一个下拉框,用户可以从中选择一个模型selected_model = st.selectbox("请选择一个大模型:", models)# 显示所选模型# st.write(f"你现在选择了 {selected_model} 大模型")st.markdown(f"你现在选择了 <span style='color:red; font-weight:bold;'>{selected_model}</span> 大模型", unsafe_allow_html=True)# 创建文本输入框让用户输入问题user_question = st.text_input("请输入你的问题:")# 创建一个发送按钮if st.button("发送"):# 根据所选模型调用对应的函数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("]", "$$")# 显示返回的结果st.markdown(response_with_latex, unsafe_allow_html=True)这些代码内容与Web 交互息息相关,我们来逐一解释如下:
(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 。在下拉框选择的时候 , 会用到这个列表的信息 。创建一个下拉框 , 用户可以从中选择一个模型 。使用Streamlit的selectbox函数创建了一个下拉框,供用户选择模型 。selectbox的第一个参数是提示文本,第二个参数是可供选择的选项列表 。用户选择的模型存储在变量selected_model中 。


推荐阅读