大模型实战教程 | Ollama+TS实现私有化代码助手(本地运行)

大模型实战教程 | Ollama+TS实现私有化代码助手(本地运行)

概述

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

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

插件功能设计

插件实现的功能很简单:在vs code中选择一段代码,然后发起一个命令(这个后续可以优化,或则变成快捷键),根据代码上下文来对代码进行补全。

设计的考虑

设计其实分为两个层面的,一个前端,一个后端服务。这个插件是一个简单的可用的demo,其实就是两个端:一个前端,一个基于大模型的后端服务。

补一个图:前端->Ollama->大模型

前端开发

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

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

获取当前选择的代码片段;

根据获取到的代码片段,构建提示词请求;

发送补全代码的提示词请求;

获取大模型的返回代码;

覆盖现有代码;

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

代码实现

import\*asvscodefrom'vscode';  
importaxiosfrom'axios';  
  
exportfunctionactivate(context:vscode.ExtensionContext) {  
   letdisposable\=vscode.commands.registerCommand('extension.askOllama',async ()\=> {  
       consteditor\=vscode.window.activeTextEditor;  
       if (!editor) {  
           vscode.window.showErrorMessage('请打开一个编辑器并选中代码');  
           return;  
      }  
  
       constselection\=editor.selection;  
       constselectedText\=editor.document.getText(selection);  
  
       if (!selectedText) {  
           vscode.window.showWarningMessage('未选中任何代码');  
           return;  
      }  
  
       try {  
           constresult\=awaitgetCompletionFromOllama(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);  
}  
  
exportfunctiondeactivate() {}  
  
// 调用 Ollama API 获取补全  
asyncfunctiongetCompletionFromOllama(code:string):Promise<string\> {  
   consturl\='http://172.16.1.54:11434/api/chat';// 替换为你的 Ollama 服务地址  
   constpayload\= {  
       model:'llama3.2',// 替换为实际模型名称  
       messages: \[  
          {  
               role:'user',  
               content:\`补全以下代码:\\n ${code}\`// 将用户输入的代码放入 content 字段  
          }  
      \],  
       stream:false  
  };  
  
   try {  
       // 发送 POST 请求到 Ollama API  
       constresponse\=awaitaxios.post(url,payload);  
  
       // 获取返回的 content 字段  
       constcompletion\=response.data.message.content;  
         
       // 如果返回的 content 为空,抛出错误  
       if (!completion) {  
           thrownewError('Ollama API 返回为空的补全结果');  
      }  
  
       returncompletion;  
  }catch (error) {  
       console.error('Error calling Ollama API:',error);  
       thrownewError('请求 Ollama API 出错');  
  }  
}

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

3.后端服务

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

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)编写一个函数

www.zeeklog.com  - 大模型实战教程 | Ollama+TS实现私有化代码助手(本地运行)

(2)按下ctl+shift+p,输入Ask Ollama for Code Complete,得到如下结果:

www.zeeklog.com  - 大模型实战教程 | Ollama+TS实现私有化代码助手(本地运行)

后续改进

该插件只是一个demo,通过本地Ollama来搭建大模型服务,可以实现私有化部署的代码助手。

但这里要注意的是:这里是完全基于大模型的能力,而在实际的使用过程中,还需要结合外部知识库和本地代码库才能更好的完成代码补全,也就是要借助RAG框架的能力。通用大模型的能力是有限的,通过本地代码库来构建外部知识库,这也是代码助手的难点。

参考资料:

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

Read more

基于FPGA的北斗导航自适应抗干扰算法的设计与实现(任务书+开题报告+文献综述+代码+仿真+实物+毕业论文)

基于FPGA的北斗导航自适应抗干扰算法的设计与实现(任务书+开题报告+文献综述+代码+仿真+实物+毕业论文)

摘   要 如今,随着卫星导航技术的飞速发展,位置信息服务已经融入到我们的日常生活中,导航目前被称为继移动互联网后第三大产业。卫星导航在维护国家的安全中也发挥着不可替代的作用。为了使导航系统不受干扰的影响,本文以北斗导航系统为平台,研究基于阵列天线的自适应抗干扰算法。 首先,文章就自适应抗干扰算法的原理和方法进行了系统介绍,并在MATLAB中建立阵列模型,对基于功率倒置算法的空域抗干扰算法和空时联合抗干扰算法进行性能仿真。然后根据系统的指标,确定了在FPGA中实现抗干扰算法的方案,包括数字下变频、权值计算、数据加权、数字上变频等模块。根据权值计算模块实现方式的不同,本文提供了两种抗干扰算法在FPGA中实现的方案:一种是基于FPGA嵌入式软核NIOS II的抗干扰实现,将权值计算的过程放在NIOS II软核中,用C语言进行实现;另一种是基于逻辑语言的抗干扰算法的实现,即用硬件描述语言Verilog HDL进行权值的计算。权值计算涉及到浮点数运算和Hermite矩阵求逆,本文给出了各模块的设计方法和仿真结果,并与MATLAB仿真结果进行对比。最后给出了两种实现方案的实测结果,表明两种实

FPGA 工程师到底有哪些方向?每个岗位都在干什么?一篇给你讲清楚

FPGA 工程师到底有哪些方向?每个岗位都在干什么?一篇给你讲清楚

很多人说“学 FPGA 就是写 Verilog”,但真正进了行业才发现—— FPGA 工程师并不是一个岗位,而是一整个岗位族群。 不同公司、不同项目,对 FPGA 工程师的要求差异非常大。 如果方向选错,可能学了半年发现岗位根本不对口。 这篇文章就系统地给你拆一拆: 👉 FPGA 工程师到底有哪些岗位? 👉 每个岗位具体干什么? 👉 需要掌握哪些能力? 👉 适合什么样的人? 一、FPGA 工程师整体岗位划分(先给结论) 从企业招聘角度来看,FPGA 岗位大致可以分为 6 类: 岗位方向关键词偏向FPGA 逻辑设计工程师Verilog / 时序 / 接口核心开发FPGA 算法 / 加速工程师图像 / AI / DSP算法落地FPGA 底层驱动工程师DDR / PCIe / SerDes硬件接口FPGA 系统应用工程师Linux + FPGA系统集成FPGA 验证 / 测试仿真 / 验证质量保障FPGA 技术支持 / FA客户 / 项目支持应用型

OpenClaw-多飞书机器人与多Agent团队实战复盘

OpenClaw-多飞书机器人与多Agent团队实战复盘

OpenClaw 多飞书机器人与多 Agent 团队实战复盘 这篇文章完整记录一次从单机安装到多机器人协作落地的真实过程: 包括 Windows 安装报错、Gateway 连通、模型切换、Feishu 配对、多 Agent 路由、身份错位修复,以及最终形成“产品-开发-测试-评审-文档-运维”团队。 一、目标与结果 这次实践的目标很明确: 1. 在 Windows 上稳定跑通 OpenClaw 2. 接入飞书机器人 3. 做到一个机器人对应一个 Agent 角色 4. 支持多模型并行(OpenAI + Ollama) 5. 最终形成可执行的多 Agent 团队 最终落地状态(已验证): * 渠道:Feishu 多账号在线 * 路由:按 accountId

宇树 G1 机器人开发入门:有线 & 无线连接完整指南

宇树 G1 机器人开发入门:有线 & 无线连接完整指南

适用读者:机器人二次开发者、科研人员 开发环境:Ubuntu 20.04(推荐) 机器人型号:Unitree G1 EDU+ 前言 宇树 G1 是一款面向科研与商业应用的高性能人形机器人,支持丰富的二次开发接口。在正式进行算法调试与功能开发之前,首要任务是建立稳定的开发连接。本文将详细介绍两种主流连接方式:有线(网线直连) 与 无线(WiFi + SSH),并附上完整的配置流程,帮助开发者快速上手。 一、有线连接(推荐新手优先使用) 有线连接通过网线直接将开发电脑与 G1 机器人相连,具有延迟低、稳定性高、不依赖外部网络的优势,是新手入门和底层调试的首选方式。 1.1 前置条件 所需物品说明开发电脑推荐安装 Ubuntu 20.04,或在 Windows 上使用虚拟机宇树 G1 机器人确保已开机且处于正常状态网线(