一、引言

在日常开发工作中,无论是写Python、Java还是前端代码,我都经常需要用到在线的AI代码助手,一直用的是免费版GPT、Gemini,最近发现豆包写代码也还行,就是废话很多。我想自己本地搭建一个代码助手玩玩看。

经过仔细对比,我选择了Qwen2.5-Coder 14B Q6_K 量化版 + Ollama+Anaconda这个组合。这个阿里千问模型是16G显存下的最强写代码模型了,而且中文友好。

二、技术选型与环境搭建

1. 技术选型原因

在选择本地部署方案时,我对比了三种主流方式:

方案一:原生transformers+pytorch部署Qwen2.5-Coder
  • 问题Windows环境下依赖冲突多,显卡显存调度差。即便是32G内存的配置,在运行大模型时也会容易爆内存。
方案二:Docker+WSL2部署
  • 问题Windows10开启WSL2繁琐且新手不易上手,同时额外占用磁盘空间。不能完整发挥出硬件性能。
方案三:Anaconda+Ollama部署(最终选择)
  • 优势
  • OllamaWindows10 64位原生完美支持,一键部署大模型无需手动配置CUDA/显存参数。
  • AnacondaPython环境隔离,彻底避免版本冲突。
  • 对消费级硬件友好,刚好适配我的配置。

此外,Qwen2.5-Coder相比CodeLlama/StarCoder的优势在于:

  • 中文支持极佳:对国内开发者的代码习惯更加友好。
  • 14B量化版性能足够:在消费级显卡上也能达到较高的性能。

2. 硬件配置

  • 操作系统Windows 10 专业版 64位(版本22H2)
  • CPUIntel i5-14代处理器
  • 显卡NVIDIA RTX 5060Ti 独立显卡(核心,做模型推理加速)
  • 内存32GB DDR5
  • 硬盘NVMe固态(模型文件约13GB,建议预留20GB以上空间)

3. 完整环境搭建步骤+命令

步骤一:安装 Anaconda 并创建虚拟环境
# 下载并安装Anacondahttps://www.anaconda.com/products/distribution#windows# 创建Python 3.10虚拟环境conda create -n ai_code_env python=3.10conda activate ai_code_env
步骤二:安装 Ollama Windows 官方版
# 下载并安装Ollamahttps://ollama.com/download# 配置环境变量(假设Ollama安装在C:\Program Files\Ollama)set PATH=%PATH%;D:\Program Files\Ollama
步骤三:配置 CUDA 驱动

其实不需要这一步,安装NVIDIA app自动解决这一步,没有安装的就需要单独安装 cuda

# 下载并安装NVIDIA RTX 5060Ti的CUDA驱动https://www.nvidia.com/Download/index.aspx?lang=en-us# 验证CUDA是否安装成功nvcc --version
步骤四:拉取 Qwen2.5-Coder 模型
# 使用Ollama拉取qwen2.5-coder:14b-instruct-q6_K模型ollama pull qwen2.5-coder:14b-instruct-q6_K
步骤五:环境校验
# 启动Ollama服务ollama start# 验证Ollama是否正常运行curl http://localhost:8080/api/health# 验证显卡是否被调用nvidia-smi

注意事项

  • 确保以管理员权限运行CMD,否则可能遇到驱动或环境变量配置问题。

三、核心代码实现

模块一:环境校验模块

import requestsimport subprocessdef check_ollama_service():    try:        response = requests.get("http://localhost:8080/api/health")        if response.status_code == 200:            print("Ollama服务正常运行")        else:            print("Ollama服务未启动,请检查配置")    except requests.exceptions.RequestException as e:        print(f"请求异常: {e}")def check_cuda_usage():    try:        output = subprocess.check_output(["nvidia-smi", "--query-gpu=utilization.gpu,memory.used", "--format=csv,nounits,noheader"])        gpu_util, mem_used = map(int, output.decode().strip().split(','))        print(f"GPU使用率: {gpu_util}%, 显存使用: {mem_used}MB")    except subprocess.CalledProcessError as e:        print(f"CUDA命令执行错误: {e}")# 调用环境校验函数check_ollama_service()check_cuda_usage()

模块二:Ollama核心调用模块

import requestsdef call_qwen2_5_coder(prompt, max_length=2048, temperature=0.7):    url = "http://localhost:8080/api/generate"    payload = {        "model": "qwen2.5-coder:14b-instruct-q6_K",        "prompt": prompt,        "max_length": max_length,        "temperature": temperature    }    try:        response = requests.post(url, json=payload)        response.raise_for_status()        return response.json().get("generated_text")    except requests.exceptions.RequestException as e:        print(f"请求异常: {e}")        returnNone# 使用示例prompt_template = "请生成一个Python函数,计算两个数的和。"generated_code = call_qwen2_5_coder(prompt_template)print(generated_code)

模块三:代码助手功能封装

import refrom pygments import highlight, lexers, formattersdef format_code(code):    lexer = lexers.get_lexer_by_name("python")    formatter = formatters.TerminalFormatter()    return highlight(code, lexer, formatter)def generate_and_format_code(prompt_template):    code = call_qwen2_5_coder(prompt_template)    if code:        formatted_code = format_code(code)        print(formatted_code)    else:        print("代码生成失败,请重试")# 调用示例prompt_template = "请生成一个Python函数,计算两个数的和。"generate_and_format_code(prompt_template)

模块四:Gradio可视化UI模块

import gradio as grdef code_generation_ui(prompt):    generated_code = call_qwen2_5_coder(prompt)    if generated_code:        return format_code(generated_code)    else:        return "代码生成失败,请重试"# 启动Gradio界面iface = gr.Interface(fn=code_generation_ui, inputs="text", outputs="text")iface.launch(server_name="0.0.0.0")

实操思考

  • Gradio搭建的UI非常轻量,无需前端知识就能实现可视化交互。

模块五:最终完整可用的代码(可以直接复制)

需要安装 pip install requests gradio

# -*- coding: utf-8 -*-import sysimport requestsimport jsonimport gradio as grimport argparsesys.stdout.reconfigure(encoding='utf-8')# 固定配置-这是ollama的相关配置OLLAMA_API_URL = "http://127.0.0.1:11434/api/generate"MODEL_NAME = "qwen2.5-coder:14b-instruct-q6_K"def call_qwen2_5_coder_stream(prompt, max_tokens=4096, temperature=0.7):    """流式生成核心函数"""    full_answer = ""    try:        headers = {"Content-Type": "application/json; charset=utf-8"}        payload = {            "model": MODEL_NAME,            "prompt": prompt,            "max_tokens": max_tokens,            "temperature": temperature,            "stream": True        }        res = requests.post(            OLLAMA_API_URL,             headers=headers,             data=json.dumps(payload),             stream=True,             timeout=300,            allow_redirects=False        )        res.raise_for_status()                for line in res.iter_lines():            if line:                json_data = json.loads(line.decode("utf-8").strip())                if"response"in json_data and json_data["response"]:                    full_answer += json_data["response"]                    # 流式逐段返回内容                    yield full_answer                if json_data.get("done", False):                    break    except Exception as e:        yield f"\n❌ 调用异常:{str(e)}"# 适配Gradio4.x Chatbotdef generate_content(prompt):    """    Gradio4.x Chatbot强制格式:    [{"role": "user", "content": 用户提问}, {"role": "assistant", "content": 模型回答}]    """    # 遍历流式生成器,逐段更新回答内容    for stream_content in call_qwen2_5_coder_stream(prompt):        yield [            {"role": "user", "content": prompt},          # 用户角色-提问内容            {"role": "assistant", "content": stream_content}  # 助手角色-流式回答        ]# ================ CLI 命令行模式核心函数================def cli_run(prompt=None):    """CLI命令行专用运行函数,支持交互式输入+命令行传参,终端流式输出"""    # 交互式输入需求    if not prompt or len(prompt.strip()) == 0:        print("="*70)        print(f"🐍 Qwen2.5-Coder [命令行模式] | 模型:{MODEL_NAME}")        print("="*70)        prompt = input("\n请输入你的代码需求:").strip()        if not prompt:            print("❌ 错误:代码需求不能为空!")            return        print(f"\n🚀 正在流式生成回答...\n{'-'*70}\n")    # 终端流式输出-打字机效果,只打印新增内容    last_content_len = 0    for content in call_qwen2_5_coder_stream(prompt):        print(content[last_content_len:], end="", flush=True)        last_content_len = len(content)    print(f"\n\n{'-'*70}\n✅ 生成完成!")# ================ main函数:参数解析+自动双模式判断 ================if __name__ == "__main__":    #创建命令行参数解析器    parser = argparse.ArgumentParser(description="Qwen2.5-Coder 代码生成器 | Web网页+CLI命令行双模式")    parser.add_argument("-p", "--prompt", type=str, help="CLI模式:直接传入你的代码需求文本")    args = parser.parse_args()    # 自动判断运行模式    if args.prompt:        # 传参了 = 启动 CLI命令行模式        cli_run(args.prompt)    else:        # 不传参 = 启动 原Web网页模式        with gr.Blocks(title="代码生成助手-最终完美版 | 无任何报错") as iface:            gr.Markdown("### 🐍 Qwen2.5-Coder 代码生成器【全能版】")            gr.Markdown("✅ 流式输出 | ✅ MD语法全生效 | ✅ 代码高亮 | ✅ 一键复制 | ✅ 按钮位置优化")                        input_prompt = gr.Textbox(                label="请输入你的代码需求",                lines=5,                placeholder="示例:写一个Python冒泡排序函数,带详细注释,用MD格式说明代码逻辑,代码用```python```包裹",                value="写一个Python快速排序函数,带详细注释,用Markdown格式说明思路,代码块带注释"            )                        gen_btn = gr.Button("🚀 开始生成代码", variant="primary", size="lg")                        output_box = gr.Chatbot(                show_label=False,                height=800,            )                        input_prompt.submit(generate_content, inputs=input_prompt, outputs=output_box)            gen_btn.click(generate_content, inputs=input_prompt, outputs=output_box)        iface.launch(            server_name="0.0.0.0",            server_port=7860,            inbrowser=True,            share=False,            theme=gr.themes.Monochrome()        )

模块六:运行效果

网页模式效果
cli模式效果

模块七:创建对话使用模型

就像使用GPT一样让它可以对话使用

步骤一: 让ollama 开启远程访问

默认ollama是只能本地访问的,需要添加环境变量OLLAMA_HOST=0.0.0.0OLLAMA_ORIGINS=*,然后重启ollama

步骤二: 使用docker 部署open-webui
version: '3.8'services:  open-webui:    image: ghcr.io/open-webui/open-webui:main    container_name: open-webui    restart: always    ports:      - "3000:8080"    environment:      - 'OLLAMA_BASE_URL=http://192.168.50.178:11434'# 这里改成`ollama`的地址,我的这个docker不在本机上    volumes:      - open-webui:/app/backend/datavolumes:  open-webui:
对话效果

四、问题排查与经验总结

问题一:显存不足报错

错误现象:运行模型时提示显存不足。

完整错误信息

RuntimeError: CUDA out of memory. Tried to allocate 2048.00 MiB (GPU 0; 16.00 GiB total capacity; 3.57 GiB already allocated; 975.00 MiB free; 3.57 GiB reserved in total by PyTorch)

排查过程

  • 关闭所有占用显存的软件。
  • 检查显卡驱动版本,发现是过低的版本。

解决办法

  • 更新显卡驱动到最新版本。

问题二:环境变量配置错误

错误现象:运行Ollama时提示找不到相关命令。

完整错误信息

'ollama' 不是内部或外部命令,也不是可运行的程序或批处理文件。

排查过程

  • 检查Ollama是否安装成功。
  • 确认环境变量配置是否正确。

解决办法

  • 重新配置环境变量,确保路径正确。

问题三:代码生成为空

错误现象:调用Qwen2.5-Coder后返回空字符串。

完整错误信息

generated_text: ''

排查过程

  • 检查prompt模板是否正确。
  • 确认Ollama服务正常运行。

解决办法

  • 调整prompt模板,确保格式正确。

问题四:Gradio界面启动缓慢

错误现象:启动Gradio界面时响应较慢。

完整错误信息

启动中...

排查过程

  • 检查服务器配置是否足够。
  • 确认网络环境是否稳定。

解决办法

  • 优化服务器配置,提高带宽。

核心经验总结

  1. Ollama的显存分配技巧:确保显卡驱动版本最新,合理设置CUDA参数。
  2. Anaconda虚拟环境的最佳配置:使用特定Python 3.10版本。
  3. Qwen2.5-Coder的prompt优化建议:明确需求,避免模板过于复杂。

避坑指南

  • 仔细检查每一步安装命令和环境变量配置,确保路径正确。
  • 关注显存和内存使用情况,合理调整CUDA参数以提高性能。
  • 显卡电源一定要插稳固,我开始没插好,推理的时候显卡功率一上来直接黑屏了,吓我一跳。

效果还凑合,主要可以用来集成固定代码模板,或者给它一直喂项目代码,不必考虑安全风险。

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年 AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享

👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI

1. 100+本大模型方向电子书

在这里插入图片描述

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

在这里插入图片描述

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

在这里插入图片描述

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

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 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐