5分钟打造私人AI编程助手:本地部署 Qwen+vLLM,让代码智能助手更安全、更经济!大模型入门到精通,收藏这篇就足够了!

部署运行你感兴趣的模型镜像

大型语言模型(LLM)已成为广受欢迎的个人编程辅助工具。近期出现的"vibe coding"模式描述了开发者在开发过程中适度依赖LLM构建应用程序的工作方式。

即便不采用这种方式,代码助手也能带来显著价值。它可以提供技术反馈、解答具体问题,甚至在软件工程流程中担任多个角色(如代码审查、测试用例生成),从而提升代码质量和开发效率。

然而,使用云服务的代码助手往往会引发成本和数据隐私问题。对于企业内部项目或包含敏感信息的个人代码,将其发送至外部服务器可能并不合适。在本地环境运行代码助手LLM则可以有效避免这些问题,确保代码和数据的安全性。

本文将指导您逐步搭建一个运行在本地计算机上的聊天机器人,作为您的专属编程助手。我们将使用以下开源技术栈:

  • 模型 (Model): Qwen Code Instruct系列(如Qwen/Qwen2-*-Code-Instruct)。这是阿里巴巴通义千问(Qwen)系列针对代码任务优化的模型,在代码生成、理解和指令遵循方面表现出色,同时对中英文都有良好支持。
  • 推理引擎 (Inference Engine): vLLM。这是一款为大型语言模型设计的高性能推理和服务引擎。通过PagedAttention和持续批处理等技术,它能显著提升LLM在本地GPU上的推理速度和吞吐量,实现流畅的模型交互。
  • 前端框架 (Frontend): Streamlit。这是一个流行的Python库,让开发者能用简单的Python脚本快速创建交互式Web应用,非常适合构建本地LLM助手的用户界面,无需复杂的前端开发。

通过整合这三项技术,我们将构建一个反应迅速、实用且完全私有的本地编码助手。接下来,我们将详细介绍环境配置、使用vLLM部署Qwen Code模型,以及使用Streamlit创建前端聊天界面的具体步骤。

步骤一:环境配置与依赖安装

在开始之前,请确保您的开发环境满足以下要求,并完成必要软件的安装。

    1. Python 环境:
  • • 确认已安装 Python 3.8 或更高版本。

  • • 建议使用虚拟环境(如 venvconda)来管理项目依赖,以避免潜在的版本冲突。

    # 使用 venv 创建虚拟环境 (示例)
    python -m venv qwen_vllm_st_env
    
    # 激活虚拟环境
    # Windows:
    qwen_vllm_st_env\Scripts\activate
    # Linux/macOS:
    source qwen_vllm_st_env/bin/activate
    
    1. 安装 vLLM:
  • • vLLM 需要与您的 CUDA 版本兼容的 PyTorch。通常,直接安装 vLLM 会尝试安装合适的依赖项。

    pip install vllm
    
  • 注意: vLLM 依赖 NVIDIA GPU 和 CUDA 环境。请确保您的计算机配备了合适的 NVIDIA 显卡,并安装了兼容的 CUDA Toolkit 版本。详细的兼容性信息和安装指南可在 vLLM 官方文档) 中查阅。若遇到 CUDA 相关问题,可能需要依据文档指引安装特定版本的 PyTorch。

    1. 安装 Streamlit:
  • • 用于创建前端用户界面。

    pip install streamlit
    
    1. 安装 OpenAI Python 客户端:
  • • 此库将用于与 vLLM 提供的 OpenAI 兼容 API 进行交互。

    pip install openai
    
    1. 硬件要求检查:
  • GPU 显存 (VRAM): 这是运行模型最关键的资源。所需显存大小取决于模型规模和运行精度。
  • • 例如:Qwen/Qwen2-7B-Code-Instruct (70亿参数) 在 bfloat16 或 float16 精度下,通常需要 10-16GB 或更多的可用显存。
  • • 更大的模型(如 57B 参数)则需要显著更多的显存(可能需要 40GB+ 或多 GPU 配置)。
  • 内存 (RAM): 建议至少 16GB
  • CUDA: 确保已安装 NVIDIA 驱动程序和兼容的 CUDA Toolkit。

完成环境配置后,可以进行下一步。


步骤二:启动 vLLM 推理服务器

安装 vLLM 后,下一步是使用它加载 Qwen Code 模型并启动一个 API 服务器,用于接收请求并返回模型生成结果。

    1. 选择模型:
  • • 本教程选用 Qwen/Qwen2-7B-Code-Instruct 作为示例,其资源需求相对较低。如果硬件配置允许,可以尝试加载更大的模型。
    1. 启动服务器:
    python -m vllm.entrypoints.openai.api_server \
        --model Qwen/Qwen2-7B-Code-Instruct \
        --trust-remote-code \
        --dtype bfloat16 \
        --gpu-memory-utilization 0.90 \
        --max-model-len 8192
    # --- 以下为常用可选参数 ---
    # --tensor-parallel-size 1  # 指定使用的GPU数量,单卡通常为1 (默认)
    # --port 8000              # API服务器监听端口,默认为 8000
    # --host 127.0.0.1         # API服务器监听地址,默认为 localhost (127.0.0.1)
    # 如需局域网访问可设为 0.0.0.0
    

    参数说明:

  • --model Qwen/Qwen2-7B-Code-Instruct: 指定要加载的 Hugging Face 模型标识符。vLLM 会在本地缓存不存在时自动下载。

  • --trust-remote-code: 必须指定,因为 Qwen 模型仓库包含执行所需的自定义代码。

  • --dtype bfloat16: 指定模型运算的数据类型。bfloat16 在较新的 GPU 架构 (Ampere 及之后) 上通常有较好的性能和显存效益。若 GPU 不支持,可尝试 float16auto

  • --gpu-memory-utilization 0.90: 设置 vLLM 可使用的 GPU 显存比例上限(此处为 90%)。请根据实际可用显存调整。

  • --max-model-len 8192: 模型能处理的最大序列长度(上下文窗口大小)。此值受模型本身和可用 VRAM 的限制。

  • --tensor-parallel-size 1: 用于张量并行处理的 GPU 数量。单 GPU 设置为 1。

  • --port 8000: API 服务器监听的端口号。

  • --host 127.0.0.1: API 服务器绑定的主机地址。使用 127.0.0.1localhost 仅允许本机访问,使用 0.0.0.0 则允许来自局域网内其他设备的访问。

  • • 打开终端(确保已激活之前创建的虚拟环境),运行以下命令:

    1. 验证服务器状态:
  • • 服务器启动过程需要时间,包括下载模型(如果首次运行)和加载到 GPU。
  • • 当终端显示类似 INFO: Uvicorn running on http://<host>:<port> 的日志信息时,表示服务器已成功启动并准备就绪。
  • • 可以尝试在浏览器中访问 http://localhost:8000/docs (假设使用默认 host 和 port),应能看到 vLLM 提供的 OpenAPI (Swagger) 文档界面。

请保持此终端窗口持续运行,vLLM 服务器需要运行以供后续的 Streamlit 应用调用。


步骤三:创建 Streamlit 前端应用

在 vLLM 服务器运行后,我们开始编写 Streamlit 代码来创建用户交互界面。

    1. 创建 Python 文件:
  • • 在您的项目目录下创建一个 Python 文件,例如命名为 app.py
    1. 编写 Streamlit 代码:
    import streamlit as st
    from openai import OpenAI # 使用 OpenAI 库连接 vLLM 的兼容 API
    
    # --- 配置参数 ---
    VLLM_API_BASE = "http://localhost:8000/v1"# vLLM 服务器 API 地址
    VLLM_API_KEY = "dummy"# OpenAI 库需要一个 API Key,但 vLLM 不需要,填入任意非空字符串即可
    MODEL_NAME = "Qwen/Qwen2-7B-Code-Instruct"# 用于界面显示的模型名称
    SYSTEM_PROMPT = "You are a helpful AI coding assistant based on Qwen. Respond concisely and focus on the code or explanation requested."# 系统提示语
    
    # --- Streamlit 页面配置 ---
    st.set_page_config(
        page_title="本地 Qwen 代码助手",
        page_icon="🤖",
        layout="wide"
    )
    st.title("本地 Qwen 代码助手 (vLLM 驱动)")
    st.caption(f"当前模型: {MODEL_NAME}")
    
    # --- 初始化 OpenAI 客户端,指向本地 vLLM 服务器 ---
    try:
        client = OpenAI(
            api_key=VLLM_API_KEY,
            base_url=VLLM_API_BASE,
        )
    except Exception as e:
        st.error(f"初始化 OpenAI 客户端失败: {e}")
        st.stop() # 如果客户端初始化失败,则停止执行
    
    # --- 初始化聊天记录 (使用 Streamlit session state) ---
    if"messages"notin st.session_state:
        st.session_state.messages = [{"role": "system", "content": SYSTEM_PROMPT}]
    
    # --- 显示历史消息 ---
    # 跳过系统消息,仅显示 user 和 assistant 的对话
    for message in st.session_state.messages:
    if message["role"] != "system":
    with st.chat_message(message["role"]):
                st.markdown(message["content"])
    
    # --- 处理用户输入 ---
    if prompt := st.chat_input("请输入您的问题..."):
    # 1. 将用户消息添加到聊天记录并显示
        st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
            st.markdown(prompt)
    
    # 2. 准备发送给 vLLM 的消息列表
        messages_for_api = st.session_state.messages
    
    # 3. 调用 vLLM API
    try:
    with st.chat_message("assistant"):
                message_placeholder = st.empty() # 创建占位符以流式显示响应
                full_response = ""
    
    # 使用流式 API 获取响应
                stream = client.chat.completions.create(
                    model=MODEL_NAME, # 此参数对于vLLM的OpenAI兼容API通常是必需的,但vLLM会使用启动时加载的模型
                    messages=messages_for_api,
                    stream=True,
                    max_tokens=2048, # 设置最大生成 token 数量
                    temperature=0.7, # 控制生成文本的随机性
    # top_p=0.9, # 可选的采样参数
                )
    
    for chunk in stream:
                    content = chunk.choices[0].delta.content
    if content:
                        full_response += content
    # 更新占位符内容,模拟打字效果
                        message_placeholder.markdown(full_response + "▌")
    
    # 显示最终完整响应
                message_placeholder.markdown(full_response)
    
    # 4. 将助手响应添加到聊天记录
            st.session_state.messages.append({"role": "assistant", "content": full_response})
    
    except Exception as e:
            st.error(f"与 vLLM 服务器通信时发生错误: {e}")
    # 如果发生错误,考虑移除最后一条用户消息以允许重试
    if st.session_state.messages and st.session_state.messages[-1]["role"] == "user":
                 st.session_state.messages.pop()
    
    # --- (可选) 添加清除聊天记录的功能 ---
    iflen(st.session_state.messages) > 1: # 仅当有对话记录时显示
    if st.sidebar.button("清除聊天记录"):
    # 重置聊天记录为仅包含系统提示
            st.session_state.messages = [{"role": "system", "content": SYSTEM_PROMPT}]
            st.rerun() # 重新运行脚本以刷新界面
    

    代码说明:

  • 配置部分: 定义了连接 vLLM 服务器所需的基本信息。

  • Streamlit 界面: 使用 st.set_page_config, st.title, st.caption 设置页面基本元素。

  • OpenAI 客户端: 初始化 openai 客户端实例,将其 base_url 指向本地运行的 vLLM 服务器地址。

  • 会话状态管理: 利用 st.session_state 来存储和维护 messages 列表,确保在用户多次交互之间聊天记录得以保留。

  • 消息显示: 遍历 st.session_state.messages,使用 st.chat_message 区分用户和助手消息,并以 Markdown 格式渲染内容。

  • 输入处理: st.chat_input 组件用于接收用户在界面底部的输入。

  • API 调用与流式响应: 调用 client.chat.completions.create 方法与 vLLM 服务器通信。设置 stream=True 以启用流式传输。通过迭代返回的 stream 对象,逐步接收模型生成的响应片段 (chunk),并使用 st.empty()markdown() 动态更新界面,提供实时反馈。

  • 状态更新: 将模型生成的完整响应添加到 st.session_state.messages 中。

  • 错误处理: 使用 try...except 块捕获与 vLLM 服务器通信过程中可能出现的异常。

  • 清除功能 (可选): 在侧边栏添加一个按钮,用于重置聊天记录。

  • • 将以下代码复制并粘贴到 app.py 文件中:


步骤四:运行本地编码助手

所有组件准备就绪后,按以下步骤运行应用程序:

    1. 启动 vLLM 服务器 (若未运行):
    # (参考命令) 终端 1:
    # python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2-7B-Code-Instruct --trust-remote-code --dtype bfloat16 --gpu-memory-utilization 0.90
    
  • • 确保在第一个终端窗口中,vLLM 服务器正在运行并监听在预期的地址(例如 http://localhost:8000)。
    1. 运行 Streamlit 应用:
    # 终端 2:
    streamlit run app.py
    
  • • 打开第二个终端窗口(同样需要激活虚拟环境)。
  • • 切换到包含 app.py 文件的目录。
  • • 执行以下命令:
    1. 交互使用:
  • • Streamlit 会自动在默认浏览器中打开一个新的标签页,并加载由 app.py 创建的Web界面。您应能看到应用标题和底部的聊天输入框。
  • • 现在,您可以在输入框中输入编程相关的问题,例如:
  • • “请提供一个计算斐波那契数列第 n 项的 Python 函数。”
  • • “如何在 JavaScript 中发起 GET 请求?”
  • • “请解释 Rust 语言中的所有权概念。”
  • • “用 C++ 实现快速排序算法。”
  • • 模型通过 vLLM 生成的回答将实时显示在聊天界面中。

总结与后续改进方向

至此,您已成功使用 Qwen Code 模型、vLLM 推理引擎和 Streamlit 框架,构建并运行了一个基础的、完全本地化的私有 LLM 编程助手。

该基础版本能够满足许多常见的编码辅助需求。未来可以考虑从以下几个方面进行改进和扩展:

  • 上下文长度管理: 当前实现发送完整的聊天历史。对于长对话,可能需要实现更复杂的上下文截断或摘要策略,以适应模型的 max-model-len 限制。
  • 参数可配置化: 在 Streamlit 界面中添加控件,允许用户动态调整模型的生成参数(如 temperature, max_tokens 等)。
  • 代码格式化与高亮: 对模型返回的代码片段应用语法高亮(Streamlit 的 st.markdown 已支持多种语言),或集成外部代码格式化工具。
  • 文件处理能力: 扩展应用功能,允许用户上传代码文件,让助手针对特定文件内容进行分析或修改。
  • 多模型支持: 若硬件资源允许,可探索通过 vLLM 同时服务多个不同模型,并在前端提供模型切换选项。
  • 错误处理与用户反馈: 实现更细致的错误处理机制和更友好的用户反馈信息。

希望本教程能为您探索和应用本地化大型语言模型提供有益的参考。

大模型算是目前当之无愧最火的一个方向了,算是新时代的风口!有小伙伴觉得,作为新领域、新方向人才需求必然相当大,与之相应的人才缺乏、人才竞争自然也会更少,那转行去做大模型是不是一个更好的选择呢?是不是更好就业呢?是不是就暂时能抵抗35岁中年危机呢?

答案当然是这样,大模型必然是新风口!

那如何学习大模型 ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。但是具体到个人,只能说是:

最先掌握AI的人,将会比较晚掌握AI的人有竞争优势。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

但现在很多想入行大模型的人苦于现在网上的大模型老课程老教材,学也不是不学也不是,基于此我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近100余次后,终于把整个AI大模型的学习路线完善出来!

在这里插入图片描述

在这个版本当中:

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型路线+学习教程已经给大家整理并打包分享出来, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉优快云大礼包🎁:全网最全《LLM大模型学习资源包》免费分享(安全咨料,放心领取)👈

一、大模型经典书籍(免费分享)

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源

在这里插入图片描述

二、640套大模型报告(免费分享)

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、大模型系列视频教程(免费分享)

在这里插入图片描述

四、2025最新大模型学习路线(免费分享)

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

img

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

img

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

img

L5阶段:专题集丨特训篇 【录播课】

img

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方二维码免费领取

👉优快云大礼包🎁:全网最全《LLM大模型学习资源包》免费分享(安全资料,放心领取)👈

您可能感兴趣的与本文相关的镜像

Vllm-v0.11.0

Vllm-v0.11.0

Vllm

vLLM是伯克利大学LMSYS组织开源的大语言模型高速推理框架,旨在极大地提升实时场景下的语言模型服务的吞吐与内存使用效率。vLLM是一个快速且易于使用的库,用于 LLM 推理和服务,可以和HuggingFace 无缝集成。vLLM利用了全新的注意力算法「PagedAttention」,有效地管理注意力键和值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值