基于Qwen2.5-Coder+Ollama 自建本地AI代码助手
一、引言
在日常开发工作中,无论是写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部署(最终选择)
- 优势:
Ollama对Windows10 64位原生完美支持,一键部署大模型无需手动配置CUDA/显存参数。Anaconda做Python环境隔离,彻底避免版本冲突。- 对消费级硬件友好,刚好适配我的配置。
此外,Qwen2.5-Coder相比CodeLlama/StarCoder的优势在于:
- 中文支持极佳:对国内开发者的代码习惯更加友好。
- 14B量化版性能足够:在消费级显卡上也能达到较高的性能。
2. 硬件配置
- 操作系统:
Windows 10 专业版 64位(版本22H2) - CPU:
Intel 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.0、OLLAMA_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界面时响应较慢。
完整错误信息:
启动中...
排查过程:
- 检查服务器配置是否足够。
- 确认网络环境是否稳定。
解决办法:
- 优化服务器配置,提高带宽。
核心经验总结
- Ollama的显存分配技巧:确保显卡驱动版本最新,合理设置
CUDA参数。 - Anaconda虚拟环境的最佳配置:使用特定
Python 3.10版本。 - 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 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

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 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇

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


所有评论(0)