实测 Github Models:GPT-4o、Llama 3.1 405B等大模型免费使用 | 附本地部署教程

366 阅读4分钟

引言

几天前,Github发布了Github Models,提供免费测试不同提示和模型参数。

GitHub 的初衷是让开发者在开发生成式 AI 应用程序时,可以使用 GitHub Models 免费查找和试验 AI 模型。当你准备将应用程序投入生产环境时,可以切换到付费的 Azure 帐户。

今天我收到邮件通知可以体验Github Models了。

图片

还没有申请的小伙伴们,可以登录  gh.io/models 申请。

GitHub playground只支持文字和模型对话,我写了简单的Streamlit应用,可以选择GPT-4o或4o mini,文字或图片对话。

文章最后,我将分享完整代码。

可用模型

可以免费使用GPT-4o,llama 3.1 405B和Mistral Large 2等模型。

图片

GitHub Models 概述

  1. GitHub Models 简介
    • 为超过1亿用户提供领先的大型和小型语言模型
    • 目标:让每个开发者都能成为AI工程师
  2. 核心功能
    • 模型playground:免费测试不同提示和模型参数
    • Codespaces集成:将模型引入开发环境
    • Azure AI支持:生产环境部署,提供负责任的AI、企业级安全和数据隐私
  3. 主要特点
    • 交互式模型playground
    • 多模型比较和测试
    • Codespaces集成,提供样例代码
    • GitHub Actions支持
    • 生产环境部署到Azure AI
  4. 隐私和安全承诺
    • 提示和输出不会与模型提供商共享
    • 不用于训练或改进模型

使用限制

图片

对于个人用户,GPT-4o属于Rate limit tier,每天最多可使用50次,GPT-4o mini最多可使用150次。

图片

开始使用

申请通过后,则可以在playground和模型对话。

图片

点击"get started"可以了解如何在本地运行。

图片

图片

本地配置

以我Mac电脑为例,通过命令将 GITHUB_TOKEN 写入到 ~/.zshrc 文件中。

  1. 首先,将 "xxx" 替换为实际的 GitHub Token。然后,在终端中运行以下命令:
echo 'export GITHUB_TOKEN="xxx"' >> ~/.zshrc
  1. 为了使更改生效,你需要重新加载 .zshrc 文件。运行以下命令:
source ~/.zshrc
  1. 为了验证 token 是否已正确设置,你可以运行:
echo $GITHUB_TOKEN

这应该会显示你的 token。

GitHub CLI 集成

www.youtube.com/watch?v=WiB…

从视频里看出,还可以通过GitHub CLI和Github Models对话,但我试了下,现在还不支持。

图片

图片

自定义 Streamlit 应用

GitHub playground只支持文字和模型交流,我做了简单的程序,可以选择GPT-4o或4o mini,文字或图片对话。

图片

图片

完整代码

分享完整代码 app.py

import os
import base64
import streamlit as st
from openai import OpenAI

# 设置环境变量和OpenAI客户端
token = os.environ["GITHUB_TOKEN"]
endpoint = "https://models.inference.ai.azure.com"
model_name = st.sidebar.selectbox("选择模型:", ["gpt-4o""gpt-4o-mini"])

client = OpenAI(
    base_url=endpoint,
    api_key=token,
)

def get_image_data_url(image_file, image_format):
    """将图片文件转换为数据URL字符串"""
    try:
        return f"data:image/{image_format};base64,{base64.b64encode(image_file.read()).decode('utf-8')}"
    except Exception as e:
        st.error(f"读取图片时出错: {e}")
        return None

def text_chat():
    """处理文字聊天"""
    if "messages" not in st.session_state:
        st.session_state.messages = [
            {"role""system""content""You are a helpful assistant."}
        ]

    for message in st.session_state.messages[1:]:
        with st.chat_message(message["role"]):
            st.markdown(message["content"])

    user_input = st.chat_input("请输入你的问题:")
    if user_input:
        st.session_state.messages.append({"role""user""content": user_input})
        with st.chat_message("user"):
            st.markdown(user_input)

        with st.spinner("AI正在思考..."):
            try:
                response = client.chat.completions.create(
                    messages=st.session_state.messages,
                    model=model_name,
                )
                assistant_response = response.choices[0].message.content
                st.session_state.messages.append({"role""assistant""content": assistant_response})
                with st.chat_message("assistant"):
                    st.markdown(assistant_response)
            except Exception as e:
                st.error(f"处理消息时发生错误: {e}")

def image_chat():
    """处理图片聊天"""
    if "image_messages" not in st.session_state:
        st.session_state.image_messages = [
            {"role""system""content""You are a helpful assistant that describes images in details."}
        ]

    uploaded_file = st.file_uploader("选择一张图片"type=["png""jpg""jpeg"])
    
    if uploaded_file:
        st.image(uploaded_file, caption="上传的图片", use_column_width=True)
        
        if "image_url" not in st.session_state:
            image_url = get_image_data_url(uploaded_file, uploaded_file.type.split('/')[1])
            if image_url:
                st.session_state.image_url = image_url

    for message in st.session_state.image_messages[1:]:
        with st.chat_message(message["role"]):
            st.markdown(message["content"])

    prompt = st.chat_input("请输入关于图片的提示词:")
    
    if prompt and "image_url" in st.session_state:
        st.session_state.image_messages.append({"role""user""content": prompt})
        with st.chat_message("user"):
            st.markdown(prompt)

        with st.spinner("AI正在分析图片..."):
            try:
                response = client.chat.completions.create(
                    messages=st.session_state.image_messages + [
                        {
                            "role""user",
                            "content": [
                                {"type""text""text": prompt},
                                {"type""image_url""image_url": {"url": st.session_state.image_url, "detail""low"}},
                            ],
                        },
                    ],
                    model=model_name,
                )
                assistant_response = response.choices[0].message.content
                st.session_state.image_messages.append({"role""assistant""content": assistant_response})
                with st.chat_message("assistant"):
                    st.markdown(assistant_response)
            except Exception as e:
                st.error(f"处理图片时发生错误: {e}")

def main():
    st.title("AI聊天助手")
    
    chat_mode = st.radio("选择聊天模式:", ("文字聊天""图片聊天"))
    
    if chat_mode == "文字聊天":
        text_chat()
    else:
        image_chat()

    if st.button("清除对话历史"):
        if "messages" in st.session_state:
            del st.session_state.messages
        if "image_messages" in st.session_state:
            del st.session_state.image_messages
        if "image_url" in st.session_state:
            del st.session_state.image_url
        st.success("对话历史已清除")

if __name__ == "__main__":
    main()

运行说明

要运行这个Streamlit应用程序,请按照以下步骤操作:

  1. 环境准备:确保你的系统中已安装Python(推荐使用Python 3.9或更高版本)。

  2. 安装依赖:打开命令行终端,运行以下命令安装必要的库:

    pip install streamlit openai
    
  3. 设置环境变量:你需要设置GITHUB_TOKEN环境变量。在终端中运行:

    对于macOS(或者参考我上文做法):

    export GITHUB_TOKEN=your_github_token_here
    

    对于Windows(命令提示符):

    set GITHUB_TOKEN=your_github_token_here
    
  4. 运行应用:在包含app.py文件的目录中,运行以下命令:

    streamlit run app.py
    
  5. 访问应用:Streamlit会自动在你的默认web浏览器中打开应用。如果没有自动打开,你可以在浏览器中访问终端显示的URL(通常是http://localhost:8501)。

结语

现在就登录  gh.io/models 申请吧。

欢迎关注我的公众号:kate人不错