大模型应用开发五:官网卡顿?Cherry Studio+火山引擎获得满血可联网R1使用体验

一.前言:

  • 本文章代码基于该系列前文章,如果是0基础小白建议先学习之前文章,至少把python环境配置完成按照代码流程一步一步进行
  • 目前deepseek热度不减,但是官网使用时总是出现“服务器繁忙,请稍后再试”的卡顿现象,大大降低了用户的使用体验。也可以理解,毕竟他们专注于模型能力,且初创公司也没有大规模流量承载的工程经验。好在deepseek开源!!!所以很多大厂都在自己的服务器上部署了满血版deepseek并提供api供下游用户使用,例如阿里百炼、字节火山引擎、硅基流动等。目前小编使用下来,发现火山引擎提供的服务最快也最稳定(至少写稿的当下是这样的……)所以接下来小编将演示如何申请火山引擎的deepseek api以及在第三方平台(以cherry studio和前系列的gradio界面为例)使用。

二.火山引擎API申请

点击该链接:火山方舟大模型体验中心-火山引擎,进入注册界面,输入手机号和验证码就可以进入火山方舟的欢迎界面(tips:该链接是小编的邀请链接,注册后会获得15元的代金券,约可抵扣375万R1模型tokens~)​​​​      这里小编使用的微信APP扫脸认证:实名认证成功后,点击该界面下的开通模型:开通模型之后我们就可以调用R1的api接入第三方平台进行交互。

三.cherry studio介绍及使用

cherry studio是国产的第三方模型调用平台,一站式调用各大主流模型,例如openai系列、deepseek系列等,并且配置简单,特别适合0基础使用,搭建例如个人知识库的AI助理,并且每个模型支持联网,强烈推荐。

官网Cherry Studio - 全能的AI助手,目前支持Windows、macos和Linux,可以按照自己的需求进行选择下载安装,安装过程一直下一步即可,这里不过多赘述。

安装之后进入的界面如下,我们点击左下方的设置,找到火山引擎:

这里的api密钥填入刚才我们申请的R1密钥即可,点击右方的“检查”确定后显示“连接成功”后说明配置成功!!!

之后在聊天界面的默认助手里,点击上方的模型即可切换我们刚才的R1模型,切换后模型我们即可流畅的与R1进行对话!!!

Tips:cherry studio有很多好玩的设置,例如联网搜索、知识库配置、智能体配置等,有兴趣的伙伴可以多多探索一下。

四.基于gradio界面的调用

如果看了小编之前的模型开发系列,便会立马想到也可以使用我们的基于gradio界面调用api与R1进行交互。

我发现很多厂商(如火山引擎、XAI)不再支持小于1.0.0版本的openai调用规则,之前的代码示例都是0.28版本的,所以这里我们先升级一下,在终端输入:

pip install --upgrade openai ,等待升级成功即可。

完整代码如下:

from openai import OpenAI
import gradio as gr



OPENAI_API_KEY = "e****7ea" 
OPENAI_API_BASE = "https://ark.cn-beijing.volces.com/api/v3/"

client = OpenAI(
    api_key=OPENAI_API_KEY,
    base_url=OPENAI_API_BASE
)

# 添加自定义CSS样式
custom_css = """
<style>
details {
    background: #f8f9fa;
    padding: 10px;
    border-radius: 5px;
    margin: 5px 0;
}

details > summary {
    cursor: pointer;
    padding: 8px;
    user-select: none;
}

details[open] > summary {
    margin-bottom: 10px;
}

.reasoning-text {
    font-size: 0.85em;
    color: #666;
    white-space: pre-wrap;
    line-height: 1.5;
}

.answer-text {
    font-size: 1.1em;
    line-height: 1.6;
}
</style>
"""

def chat_with_llm(message, history):
    history = history or []
    # 构建完整的对话历史
    prompt = []
    for human, assistant in history:
        prompt.append({"role": "user", "content": human})
        prompt.append({"role": "assistant", "content": assistant})
    prompt.append({"role": "user", "content": message})
    
    try:
        reasoning_content = ""
        content = ""
        for chunk in client.chat.completions.create(
            model="deepseek-r1-250120",
            messages=prompt,
            temperature=0.7,
            stream=True
        ):
            delta = chunk.choices[0].delta
            # 打印调试信息
            print(f"Chunk delta: {delta}")
            
            # 检查并更新 reasoning_content
            if hasattr(delta, 'reasoning_content') and delta.reasoning_content:
                reasoning_content += delta.reasoning_content
            
            # 检查并更新 content
            if hasattr(delta, 'content') and delta.content:
                content += delta.content
            
            # 每次更新都yield完整的内容
            current_response = ""
            if reasoning_content:
                current_response += f"""
<details>
<summary>💭 思维链(点击展开/折叠)</summary>
<div class="reasoning-text">
{reasoning_content}
</div>
</details>
"""
            if content:
                current_response += f'\n\n<div class="answer-text">\n{content}</div>'
            
            if current_response:
                yield current_response

    except Exception as e:
        print(f"Error details: {str(e)}")  # 打印详细错误信息
        yield f"发生错误: {str(e)}"

# 创建一个支持流式输出的Gradio界面
with gr.Blocks(css=custom_css) as demo:
    gr.Markdown("# DeepSeek AI 助手")
    gr.Markdown("欢迎与AI助手进行对话")
    
    chatbot = gr.Chatbot(
        height=600,
        render_markdown=True,
        bubble_full_width=False,
        show_label=False,
        sanitize_html=False, 
    )
    msg = gr.Textbox(label="输入消息", placeholder="请输入您的问题...")
    clear = gr.Button("清除对话")

    def user(user_message, history):
        return "", history + [[user_message, None]]

    def bot(history):
        history[-1][1] = ""
        for partial_response in chat_with_llm(history[-1][0], history[:-1]):
            history[-1][1] = partial_response
            yield history

    msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, chatbot, chatbot
    )
    clear.click(lambda: None, None, chatbot, queue=False)

if __name__ == "__main__":
    demo.launch(share=True)

实现效果如下:(思维链的输出UI不太美观,有兴趣的伙伴可以结合AI完善一下UI)

五.总结

目前适合普通用户的满血R1的解决方法就是第三方平台API+第三方平台调用,自己本地部署满血R1对电脑配置要求太高了……

希望对大家有帮助~

下一篇我打算好好介绍下cherry studio的用法,特别是如何配置知识库,那样就有一个拥有个人数据的AI小助理了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值