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

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

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

无尘发布于 2025/2/7更新于 2026/7/2439 浏览
基于 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..();
           ;
      }

        selection = editor.;
        selectedText = editor..(selection);

        (!selectedText) {
           vscode..();
           ;
      }

        {
            result =  (selectedText);
           .(, result);
           
           vscode..();
           editor.( {
               editBuilder.(selection, result);
          });
       }  (: ) {
           vscode..();
       }
   });

   context..(disposable);
}

  () {}


  (): <> {
    url = ; 
    payload = {
       : , 
       : [
          {
               : ,
               :  
          }
      ],
       : 
  };

    {
       
        response =  axios.(url, payload);

       
        completion = response...;
         
       
        (!completion) {
             ();
      }

        completion;
   }  (error) {
       .(, error);
         ();
   }
}
window
showErrorMessage
'请打开一个编辑器并选中代码'
return
const
selection
const
document
getText
if
window
showWarningMessage
'未选中任何代码'
return
try
const
await
getCompletionFromOllama
console
log
"debug: complete result: "
// 在 VS Code 中显示补全结果
window
showInformationMessage
'代码补全结果已生成'
edit
editBuilder =>
replace
catch
error
any
window
showErrorMessage
`请求 Ollama 出错:${error.message}`
subscriptions
push
export
function
deactivate
// 调用 Ollama API 获取补全
async
function
getCompletionFromOllama
code: string
Promise
string
const
'http://localhost:11434/api/chat'
// 替换为你的 Ollama 服务地址
const
model
'llama3.2'
// 替换为实际模型名称
messages
role
'user'
content
`补全以下代码:\n ${code}`
// 将用户输入的代码放入 content 字段
stream
false
try
// 发送 POST 请求到 Ollama API
const
await
post
// 获取返回的 content 字段
const
data
message
content
// 如果返回的 content 为空,抛出错误
if
throw
new
Error
'Ollama API 返回为空的补全结果'
return
catch
console
error
'Error calling Ollama API:'
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. 参考资料
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 2026 主流 AI 大模型横评与选型指南
  • OpenClaw 2026 框架版本迭代与核心功能解析
  • ESP32-S3 部署 MimicLaw 结合 DeepSeek 与飞书机器人
  • Windows 下 MinIO 服务搭建与 Web 控制台访问指南
  • LLM 大模型基础知识与开发实践指南
  • 跨国企业 Git 连接困境分析与智能代理配置方案
  • OpenClaw 自托管 AI 网关安装部署指南
  • 自然语言处理在客户服务领域的应用与实战
  • ToDesk AI 桌面助手 ToClaw 零门槛体验 OpenClaw 自动化能力
  • 如何检查 Git 是否已安装
  • 后端语言性能排行:哪种语言最快及其原因分析
  • VSCode 中配置 DeepSeek 模型接入 Copilot
  • C++ 性能优化实战指南
  • Java 集成 modbus4j 3.0.3 实现 PLC 数据采集与连接管理
  • 企业微信外部群机器人消息推送实现指南
  • 数据结构核心:树与堆的概念及存储实现
  • MySQL 从零开始:基础概念与 Ubuntu 安装指南
  • ToDesk AI 桌面助手 ToClaw:零门槛体验 OpenClaw 自动化能力
  • UE6 项目为何必须支持 C++26:性能红利解析
  • Trae AI IDE 安装与使用教程

相关免费在线工具

  • 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