跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
TypeScriptAI大前端

基于 Ollama 与 TypeScript 实现本地私有化代码助手

介绍如何利用 Ollama 本地部署的大模型服务,结合 TypeScript 开发 VS Code 插件,实现私有化的代码补全功能。方案涵盖环境准备、插件架构设计、核心代码实现及 API 交互细节。通过本地运行模型保障数据隐私,支持自定义提示词模板,并可进一步结合 RAG 技术增强代码理解能力。

无尘发布于 2025/2/7更新于 2026/5/2317 浏览
基于 Ollama 与 TypeScript 实现本地私有化代码助手

概述

基于大模型的能力可以理解文本或代码的上下文,然后根据代码上下文实现代码注释、代码补全等功能,从而构建一个代码助手。

本文实现了一个简单的 VS Code 代码助手插件,通过该插件可以对代码进行补全。后台大模型服务是在本地 CPU 机器上搭建的,通过 Ollama 实现通过接口来访问大模型。

插件功能设计

插件实现的功能很简单:在 VS Code 中选择一段代码,然后发起一个命令(后续可优化为快捷键),根据代码上下文对代码进行补全。

设计考虑

设计分为两个层面:前端和后端服务。这个插件是一个简单的可用 Demo,包含两个端:一个前端,一个基于大模型的后端服务。 流程:前端 -> Ollama -> 大模型

环境准备

  1. 安装 Ollama:访问官网下载并安装 Ollama,启动服务。
  2. 拉取模型:使用命令行拉取模型,例如 ollama pull llama3.2。
  3. 开发环境:确保已安装 Node.js 和 TypeScript 环境。
  4. VS Code 扩展开发:安装 Yeoman Generator for VS Code 等工具。

前端开发

通过 TypeScript 开发 VS Code 插件。目前前端实现的功能非常简单:选择一段代码,然后发起 ask Ollama 的命令,此时就会把代码片段放到提示词模板中发送给后台大模型服务。并等待后台大模型的返回,然后使用返回的代码覆盖现有代码。

前端要实现的步骤和逻辑如下:

  1. 获取当前选择的代码片段;
  2. 根据获取到的代码片段,构建提示词请求;
  3. 发送补全代码的提示词请求;
  4. 获取大模型的返回代码;
  5. 覆盖现有代码。

根据目前实现的功能,还可以对功能进行继续扩展,比如实现:可以撤销返回的代码,获取光标所在的代码片段补全光标所在代码,基于代码实现智能聊天功能,等等。

代码实现

插件入口文件

import * as vscode from 'vscode';
import axios from 'axios';

export function activate(context: vscode.ExtensionContext) {
   let disposable = vscode.commands.registerCommand('extension.askOllama', async () => {
       const editor = vscode.window.activeTextEditor;
       if (!editor) {
           vscode.window.showErrorMessage('请打开一个编辑器并选中代码');
           return;
      }

       const selection = editor.selection;
       const selectedText = editor.document.getText(selection);

       if (!selectedText) {
           vscode.window.showWarningMessage('未选中任何代码');
           return;
      }

       try {
           const result = await getCompletionFromOllama(selectedText);
           console.log("debug: complete result: ", result);
           // 在 VS Code 中显示补全结果
           vscode.window.showInformationMessage('代码补全结果已生成');
           editor.edit(editBuilder => {
               editBuilder.replace(selection, result);
          });
       } catch (error: any) {
           vscode.window.showErrorMessage(`请求 Ollama 出错:${error.message}`);
       }
   });

   context.subscriptions.push(disposable);
}

export function deactivate() {}

// 调用 Ollama API 获取补全
async function getCompletionFromOllama(code: string): Promise<string> {
   const url = 'http://localhost:11434/api/chat'; // 替换为你的 Ollama 服务地址
   const payload = {
       model: 'llama3.2', // 替换为实际模型名称
       messages: [
          {
               role: 'user',
               content: `补全以下代码:\n ${code}` // 将用户输入的代码放入 content 字段
          }
      ],
       stream: false
  };

   try {
       // 发送 POST 请求到 Ollama API
       const response = await axios.post(url, payload);

       // 获取返回的 content 字段
       const completion = response.data.message.content;
         
       // 如果返回的 content 为空,抛出错误
       if (!completion) {
           throw new Error('Ollama API 返回为空的补全结果');
      }

       return completion;
   } catch (error) {
       console.error('Error calling Ollama API:', error);
       throw new Error('请求 Ollama API 出错');
   }
}

说明:后台的 URL 可以换成自己的 Ollama 本地访问的 URL 地址。

后端服务

后端使用 Ollama 提供的框架来实现通过接口请求大模型,该接口在 Ollama 的官方网站上有说明。

API 示例

curl http://localhost:11434/api/chat -d '{
 "model":"llama3.2",
 "messages": [
  {
     "role":"user",
     "content":"why is the sky blue?"
  }
 ],
 "stream":false
}'

返回值示例

{
 "model":"llama3.2",
 "created_at":"2023-12-12T14:13:43.416799Z",
 "message": {
   "role":"assistant",
   "content":"Hello! How are you today?"
 },
 "done":true,
 "total_duration":5191566416,
 "load_duration":2154458,
 "prompt_eval_count":26,
 "prompt_eval_duration":383809000,
 "eval_count":298,
 "eval_duration":4799921000
}

效果演示

(1)编写一个函数,选中代码后触发命令。 (2)按下 Ctrl+Shift+P,输入 Ask Ollama for Code Complete,得到补全结果。

后续改进

该插件只是一个 Demo,通过本地 Ollama 来搭建大模型服务,可以实现私有化部署的代码助手。 但这里要注意的是:这里是完全基于大模型的能力,而在实际的使用过程中,还需要结合外部知识库和本地代码库才能更好的完成代码补全,也就是要借助 RAG 框架的能力。通用大模型的能力是有限的,通过本地代码库来构建外部知识库,这也是代码助手的难点。

参考资料

  • https://github.com/ollama/ollama/blob/main/docs/api.md

目录

  1. 概述
  2. 插件功能设计
  3. 设计考虑
  4. 环境准备
  5. 前端开发
  6. 代码实现
  7. 插件入口文件
  8. 后端服务
  9. API 示例
  10. 返回值示例
  11. 效果演示
  12. 后续改进
  13. 参考资料
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2024 国内最新完整 AI 大模型清单及介绍
  • EhViewer 安卓客户端安装与使用指南
  • MCP 协议详解:与 Function Call 区别及使用方式
  • OpenClaw 集成飞书机器人配置实战
  • 腾讯混元图像3.0图生图开源,LMArena评测跻身全球第一梯队
  • C++进阶:深入理解 unordered_set 与 unordered_map(含哈希表模拟实现)
  • Java 数据结构:ArrayList 与顺序表详解
  • 基于 RAG 的生成式 AI:使用 LlamaIndex、Deep Lake 和 Pinecone 构建检索增强生成管道
  • 法律人使用 AI 大模型指南:Prompt 工程与场景应用
  • 论文查重通过却被判 AI 生成?解析降重与去 AI 痕迹的技术差异
  • Kafka 核心架构解析:Topic 与 Partition 映射逻辑详解
  • Claude Code 中 CLAUDE.md 的加载时机与书写最佳实践
  • jQuery 从入门到实战全解:前端高效开发核心
  • AI 辅助游戏开发:使用 DeepSeek 构建贪吃蛇游戏
  • 使用 DeepSeek API 构建贪吃蛇游戏实战
  • eBay 商品数据采集实战:Python 调用网页抓取 API 接入方案
  • 秋叶绘世 Stable Diffusion 整合包与 ComfyUI 环境配置说明
  • 2026 届学位论文 AIGC 检测率标准与应对策略
  • OpenClaw 是一个开源的、面向具身智能(Embodied AI)与机器人操作研究的多模态大模型框架
  • FPGA 任意角度图像旋转原理与实现

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online