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

教育   2024-08-12 18:00   湖北  

引言

几天前,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工程师
  • 核心功能
    • 模型playground:免费测试不同提示和模型参数
    • Codespaces集成:将模型引入开发环境
    • Azure AI支持:生产环境部署,提供负责任的AI、企业级安全和数据隐私
  • 主要特点
    • 交互式模型playground
    • 多模型比较和测试
    • Codespaces集成,提供样例代码
    • GitHub Actions支持
    • 生产环境部署到Azure AI
  • 隐私和安全承诺
    • 提示和输出不会与模型提供商共享
    • 不用于训练或改进模型

    使用限制

    对于个人用户,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 集成

    从视频里看出,还可以通过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 申请吧。

    广告时间

    过去我已写了170+篇AI主题原创长文,我对继续写作充满信心,因为这是我的爱好,我非常热爱这件事。

    最近我开通了知识星球,你加入后可以访问公众号收费文章,向我提问,第一时间获取AI资讯。

    精选历史文章,请看这里:

    推荐一款编程辅助工具:AI驱动的3倍效率提升

    Streamlit+Gemini实战教程: 打造多模态AI对话应用 | 支持文本、音频、图片、PDF分析

    效率提升N倍!分享我正在使用的AI编程新工具

    打造更可靠的 AI :解析 7 种减少幻觉的高效策略

    解锁 Claude 3.5 Sonnet 创意潜能:10+ 个 Web 应用实战

    Poe x Claude:零代码创建交互式 Web 应用,完整操作带你轻松上手

    AI 驱动的网页开发:用 Claude 3.5 Sonnet 打造趣味互动应用并轻松部署


    算法数据侠
    Hi, 今日的你比昨日更优秀!算法数据侠致力于最全最优质的AI算法与数据集分享,不定期更新AI算法/数据集、竞赛TOP方案和前沿学术速递,期待各位小侠客共勉!
     最新文章