
大型语言模型(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创建前端聊天界面的具体步骤。
步骤一:环境配置与依赖安装
在开始之前,请确保您的开发环境满足以下要求,并完成必要软件的安装。
-
- Python 环境:
-
• 确认已安装 Python 3.8 或更高版本。
-
• 建议使用虚拟环境(如
venv或conda)来管理项目依赖,以避免潜在的版本冲突。# 使用 venv 创建虚拟环境 (示例) python -m venv qwen_vllm_st_env # 激活虚拟环境 # Windows: qwen_vllm_st_env\Scripts\activate # Linux/macOS: source qwen_vllm_st_env/bin/activate
-
- 安装 vLLM:
-
• vLLM 需要与您的 CUDA 版本兼容的 PyTorch。通常,直接安装 vLLM 会尝试安装合适的依赖项。
pip install vllm -
• 注意: vLLM 依赖 NVIDIA GPU 和 CUDA 环境。请确保您的计算机配备了合适的 NVIDIA 显卡,并安装了兼容的 CUDA Toolkit 版本。详细的兼容性信息和安装指南可在 vLLM 官方文档) 中查阅。若遇到 CUDA 相关问题,可能需要依据文档指引安装特定版本的 PyTorch。
-
- 安装 Streamlit:
-
• 用于创建前端用户界面。
pip install streamlit
-
- 安装 OpenAI Python 客户端:
-
• 此库将用于与 vLLM 提供的 OpenAI 兼容 API 进行交互。
pip install openai
-
- 硬件要求检查:
- • 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 服务器,用于接收请求并返回模型生成结果。
-
- 选择模型:
- • 本教程选用 Qwen/Qwen2-7B-Code-Instruct 作为示例,其资源需求相对较低。如果硬件配置允许,可以尝试加载更大的模型。
-
- 启动服务器:
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 不支持,可尝试float16或auto。 -
•
--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.1或localhost仅允许本机访问,使用0.0.0.0则允许来自局域网内其他设备的访问。 -
• 打开终端(确保已激活之前创建的虚拟环境),运行以下命令:
-
- 验证服务器状态:
- • 服务器启动过程需要时间,包括下载模型(如果首次运行)和加载到 GPU。
- • 当终端显示类似
INFO: Uvicorn running on http://<host>:<port>的日志信息时,表示服务器已成功启动并准备就绪。 - • 可以尝试在浏览器中访问
http://localhost:8000/docs(假设使用默认 host 和 port),应能看到 vLLM 提供的 OpenAPI (Swagger) 文档界面。
请保持此终端窗口持续运行,vLLM 服务器需要运行以供后续的 Streamlit 应用调用。
步骤三:创建 Streamlit 前端应用
在 vLLM 服务器运行后,我们开始编写 Streamlit 代码来创建用户交互界面。
-
- 创建 Python 文件:
- • 在您的项目目录下创建一个 Python 文件,例如命名为
app.py。
-
- 编写 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文件中:
步骤四:运行本地编码助手
所有组件准备就绪后,按以下步骤运行应用程序:
-
- 启动 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)。
-
- 运行 Streamlit 应用:
# 终端 2: streamlit run app.py
- • 打开第二个终端窗口(同样需要激活虚拟环境)。
- • 切换到包含
app.py文件的目录。 - • 执行以下命令:
-
- 交互使用:
- • 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大模型的学习路线完善出来!

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

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

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

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

四、2025最新大模型学习路线(免费分享)
我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代
L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

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

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

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

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

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

9059

被折叠的 条评论
为什么被折叠?



