continue调用1.5B小模型实现代码fast-apply

news/2024/11/6 17:28:58/文章来源:https://www.cnblogs.com/mesopotamiaa/p/18524948

100tok/s生成速度,就问够不够fast?用过cursor的小伙伴一定对有个功能印象深刻,那就是fast apply功能。只要点一下,就可以把对话框中AI生成的代码快速地应用到编辑器的当前代码文件里, 然后下一步就是对比变更,accept或者reject代码块,相比于要手动从对话框复制代码到编辑器里粘贴修改,这个方式非常高效方便,是cursor的杀手锏功能.

现在可以通过vscode插件continue使用本地的小模型来实现这个功能,这个模型就是Qwen2.5-Coder-1.5b。1.5B的GGUF量化模型在我本地电脑M2 Max上通过LMStudio来跑,测试速度大约是q8_0 100 tok/s,q4_0 140 tok/s,fp16 70 tok/s,7B版本的q4_0 40 tok/s。兼顾性能和速度的话,我还是选择了1.5B的q8_0版本。

这件事起因是我看到一个专门用于fast apply的微调模型FastApply-1.5B-v1.0,是通过微调qwen2.5-coder-1.5B和7B模型实现的,专门用于代码合并fast apply功能的模型,准确率比原版有提升。

性能优化

我试图把它接入到continue里,不知道continue的小伙伴可以看这个视频入门(continue开源AI代码编程助手-自定义api-SiliconFlow硅基流动与deepseek配置教程-哔哩哔哩)。可惜它的输出格式是<updated-code>[Full-complete updated file]</updated-code>,要通过修改continue源码来解析模型生成的代码,这太复杂了,我就放弃折腾,直接用原版qwen2.5-coder-1.5B好了。

经过我粗略对比,原版容易删除注释和换行空格,没有那么守规矩。微调版输出更准确,但是原版能力也不差,可以使用,200行内的简单代码合并轻轻松松,并且1.5B既能支持fast apply,也可以支持代码补全fim,一个模型两个用途,本地运行非常划算。

下面是如何配置continue:

// ~/.continue/config.json
{"models": [{"title": "fastapply-1.5b-v1.0@f16","model": "qwen2.5-coder-1.5b-instruct@q8_0","apiBase": "http://192.168.8.110:5000/v1","provider": "lmstudio","contextLength": 4000,"completionOptions": {"maxTokens": 4000,"stop": ["<|endoftext|>"],"temperature": 0.01}}],"tabAutocompleteModel": {"title": "ollama_model","provider": "lmstudio","model": "qwen2.5-coder-1.5b-instruct@q8_0","template": "qwen","apiBase": "http://192.168.8.110:5000/v1"},"modelRoles": {"applyCodeBlock": "fastapply-1.5b-v1.0@f16","inlineEdit": "fastapply-1.5b-v1.0@f16"}
}
// ~/.continue/config.ts
export function modifyConfig(config: Config): Config {const gptEditPrompt: PromptTemplate = (_, otherData) => {// 原版enclosed within <updated-code> and </updated-code> tags// system You are a coding assistant that helps merge code updates// Do not include any additional text, explanations, placeholders, ellipses, or code fences.// 为了方便兼容改成markdown格式的// enclosed within markdown \`\`\`your update code\`\`\`const systemMessage =`<|im_start|>system You are a coding assistant that helps fix code and merge code updates, ensuring every modification is fully integrated.<|im_end|>`;const userMessage =`<|im_start|>user Merge all changes from the <update> snippet into the <code> below. - Preserve the code's structure, order, comments, and indentation exactly. - Output only the updated code, enclosed within markdown \`\`\`your update code\`\`\`. - Do not include any additional text, explanations, placeholders, ellipses.`;if (otherData ? .codeToEdit ? .trim().length === 0) {return `${systemMessage}
${userMessage}
<code>${otherData.prefix}[BLANK]${otherData.suffix}</code>
<update>${otherData.userInput}</update>
Provide the complete updated code.<|im_end|>
<|im_start|>assistant `;}// const codeBlock = `${otherData.prefix}<code>${otherData.codeToEdit}$</code>{otherData.suffix}`;  // 使用prefix, suffixconst codeBlock = `<code>${otherData.codeToEdit}</code>`;const updateBlock = `<update>${otherData.userInput}</update>`;return `${systemMessage}
${userMessage}
${codeBlock}
${updateBlock}
Provide the complete updated code.<|im_end|>
<|im_start|>assistant `;};let modelName = "fastapply-1.5b-v1.0@f16"// Fix the model finding logiclet applyModel = config.models.find(model => model.title === modelName);if (applyModel) {applyModel.promptTemplates = {edit: gptEditPrompt,};// console.log('done')} else {// console.warn('Model "fastapply-1.5b-v1.0@f16" not found in config.models');}return config;
}

我还向continue仓库提了一个issue,希望能兼容fastApply微调模型,欢迎跟踪进度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/826577.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

节省50%人工录入时间!免费开源AI工具让法律文件数据提取更高效

法律行业痛点:处理大量的合同、诉讼材料和财务报告等文件是一项繁琐且耗时的工作。这些文件中的表格常包含关键信息,如费用清单、时效统计和条款列表等,手动录入和整理这些数据不仅效率低下,而且容易出错。思通数科的表格识别技术,结合深度学习和计算机视觉,能够自动提取…

10.28 每日总结(软考ing)

今天继续软考,时长2小时。 看看错题吧:

如何区分实例化网格中的每个实例

1)如何区分实例化网格中的每个实例2)项目在模拟器上切换程序后有概率画面冻结3)Unity工程导入团结引擎,GUID会变化,导致引用关系丢失4)Mask在Android平台下渲染异常这是第407篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助…

亚马逊-专利投诉系统-批量投诉-开发-流程引擎

系统图如图所示 所需数据直接通过xls导入。 开发过程:导入xls表格自动生成数据模型。 点击生成表单即可自动创建一个前端UI,如第一张图所示。新增,删除,修改,导入,导出,全部功能默认自带OK。方便灵活调整各种字段,新增字段,修改字段。 一个人使用10分钟即可完成。 到此…

el-table高亮

官网上提供了了高亮的方法,如果不管用,就用下面的高亮方法

操作系统的特征

操作系统的特征 ‍ ​​ ‍一、并发 指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。 常考易混概念一一并行:指两个或多个事件在同一时刻同时发生。 ​​ ‍ 二、共享 ​​ ‍ ——并发与共享的关系 ​​ ‍ 三、虚拟 虚拟是指,把…

操作系统的概念与功能

操作系统的概念与功能 ‍ ​​ ‍操作系统的定义 操作系统 (Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。 ‍ 操作系统的功…

java springboot对接微信小程序和微信支付v3接口

1、controller代码package com.saburo.server.controller.weixin;import cn.dev33.satoken.annotation.SaIgnore; import com.gcode.common.core.R; import com.saburo.server.common.dto.WeiXinUserInfoDto; import com.saburo.server.common.dto.money.PayDto; import com.sa…

可操作度

如上图所示,好的可操作度可以帮助远离奇异点 1. 可操作度: \(m = \sqrt{det(J(q) J(q)^T)}\) 2. 可操作度雅可比:3. 可操作度控制器QP:

Chrome 130 版本新特性 Chrome 130 版本发行说明

Chrome 130 版本新特性& Chrome 130 版本发行说明 一、Chrome 130 版本浏览器更新 1. 新的桌面提示 Chrome 130 引入了一种新的 Toast 样式,用于在用户操作后提供视觉确认,或快速提供后续操作的途径。 当用户执行某个操作时,Toast 会在屏幕上短暂弹出,确认操作成功或提…

存储器的性能指标

存储器的性能指标 ‍存储容量:存储字数字长(如1M8位)。MDR位数反映存储字长。单位成本:每位价格=总成本/总容量。存储速度:数据传输率=数据的宽度/存储周期。数据的宽度即存储字长 ​​ 存取时间(Ta):存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读…

置换,群论初探

写的不好别D啊,算是一些知识的归纳(虽然也是看的别人的学的吧)群论 仙姑 置换 置换与排列 对于一个集合 \(D\) ,其大小为 \(|D|\),而排列是指这 \(|D|\) 个元素按照某种规定按一定顺序进行重新组成。而置换是指对这 \(|D|\) 个元素重新排列,不同元素之间交换位置,从而形…