引言
几天前,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 概述
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 文件中。
首先,将 "xxx" 替换为实际的 GitHub Token。然后,在终端中运行以下命令:
echo 'export GITHUB_TOKEN="xxx"' >> ~/.zshrc
为了使更改生效,你需要重新加载 .zshrc 文件。运行以下命令:
source ~/.zshrc
为了验证 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应用程序,请按照以下步骤操作:
环境准备:确保你的系统中已安装Python(推荐使用Python 3.9或更高版本)。
安装依赖:打开命令行终端,运行以下命令安装必要的库:
pip install streamlit openai
设置环境变量:你需要设置GITHUB_TOKEN环境变量。在终端中运行:
对于macOS(或者参考我上文做法):
export GITHUB_TOKEN=your_github_token_here
对于Windows(命令提示符):
set GITHUB_TOKEN=your_github_token_here
运行应用:在包含app.py文件的目录中,运行以下命令:
streamlit run app.py
访问应用:Streamlit会自动在你的默认web浏览器中打开应用。如果没有自动打开,你可以在浏览器中访问终端显示的URL(通常是http://localhost:8501)。
结语
现在就登录 gh.io/models 申请吧。
广告时间
过去我已写了170+篇AI主题原创长文,我对继续写作充满信心,因为这是我的爱好,我非常热爱这件事。
最近我开通了知识星球,你加入后可以访问公众号收费文章,向我提问,第一时间获取AI资讯。
精选历史文章,请看这里:
Streamlit+Gemini实战教程: 打造多模态AI对话应用 | 支持文本、音频、图片、PDF分析
解锁 Claude 3.5 Sonnet 创意潜能:10+ 个 Web 应用实战