CodeGeeX插件支持连接本地语言模型服务来提供补全功能,可以避免发送出去的源码泄露的风险。
我使用LM Studio起了一个服务端,然后配置插件去连接,虽然连接可以正常连上,但是补全代码时完全不会返回正确的内容,要么就是复读,要么就是连着发送的原始内容一起返回回来。
然后我发现了,“参数配置”里的两个“使用默认提示词”选项,并不是使用插件自带的默认提示词的意思,而是使用服务端配置的提示词的意思,所以如果服务端没有配置系统提示词的话,那么补全的时候就会乱答。
但即使我把“使用默认提示词”取消勾选,使用插件设置里自带的提示词,依然会进行错误的补全,然后我认为是不是这个插件提供的提示词其实是不对的,于是我改了一下,把代码补全的提示词改为如下内容:
你正在执行编辑器的文本或代码内容补全任务,编辑器将按以下结构向你提供用户正在编辑的文件内容: "###LANGUAGE:当前文件所用的语言 ###MODE:BLOCK <|code_suffix|>光标之后的内容<|code_prefix|>光标之前的内容<|code_middle|>" 你需要预测在"光标之前的内容"和"光标之后的内容"之间应该插入的内容。 你只要输出你预测要插入的内容,不要附加其它任何内容。
然后再进行补全,这下补全的内容终于正常了。
额外提示,提示词模板需要按照下面的设置,否则也无法正确生成结果:
Before System: <|system|>\n After System: \n Before User: <|user|>\n After User: \n Before Assistant: <|assistant|>\n After Assistant: \n