CodeGPT Sublime Text插件

我最近开发了一个适用于Sublime Text的ChatGPT插件,旨在通过允许用户直接向ChatGPT发送代码片段和具体问题来增强编码体验。这种集成旨在提供快速且智能的响应,促进更流畅的编码工作流程。

然而,我在Sublime Text中遇到了显示问题,ChatGPT的响应格式未能正确渲染。

import osimport sublimeimport sublime_pluginimport http.clientimport requestsimport jsonOPENAI_API_KEY = ""class SendToGptCommand(sublime_plugin.TextCommand):    def run(self, edit):        # 捕获选中的文本        self.selected_text = ''        for region in self.view.sel():            if not region.empty():                self.selected_text = self.view.substr(region)                # 提示用户输入额外信息        self.view.window().show_input_panel("输入您的问题:", "", self.on_done, None, None)    def on_done(self, user_input):        code = textwrap.dedent(self.selected_text)        # 结合用户的问题和选中的文本        data = {            'code': code,            'question': user_input        }        # 以HTTP请求的形式发送数据        self.send_http_request(data)    def send_http_request(self, data):        url = 'https://api.openai.com/v1/chat/completions'        headers = {            'Content-Type': 'application/json',            'Authorization': f'Bearer {OPENAI_API_KEY}'        }        req = {            'model': 'gpt-3.5-turbo',            'messages': [                {                    'role': 'system',                    'content': '您是一个有帮助的编码助手。'                },                {                    'role': 'system',                    'content': f"context code:```{data['code']}```"                },                {                    'role': 'user',                    'content': f"question: {data['question']}"                }            ]        }        # 初始化结果        result = ""                try:            response = requests.post(url, headers=headers, data=json.dumps(req))            response.raise_for_status()  # 如果请求不成功则引发异常            response_json = response.json()            # 获取HTTP响应并提取完成内容            if 'choices' in response_json:                choices = response_json['choices']                messages = []  # 存储消息的列表                for choice in choices:                    # 从每个选择中提取'message'                    if 'message' in choice:                        messages.append(choice['message']['content'])                    else:                        messages.append("message字段在选择中未找到")                                # 将消息连接成一个字符串                result = " ".join(messages)            else:                result = "响应中未找到choices字段"        except (requests.RequestException, json.JSONDecodeError) as err:            result = f"请求过程中发生错误: {str(err)}"                self.display_result(data['question'], data['code'], result)    def display_result(self, question, code, result):        # 创建一个新的缓冲区(标签页)        new_view = self.view.window().new_file()        # 设置语法为Markdown        new_view.set_syntax_file("Packages/Markdown/Markdown.sublime-syntax")                # 插入问题、代码和响应        content = f"""提出的问题:\n\n{question}\n\n"""        new_view.run_command('insert', {'characters': content})        content = f"""代码:\n{code}\n\n"""        new_view.run_command('insert', {'characters': content})        content = f"""响应:\n{result}\n\n"""        new_view.run_command('insert', {'characters': content})

这是响应内容:

提出的问题:让我们测试这段代码?代码:def display_result(self, question, code, result):    print(code)        code = textwrap.dedent(code)            print(code)                # 创建一个新的缓冲区(标签页)                    new_view = self.view.window().new_file()                        # 设置语法为Markdown                            new_view.set_syntax_file("Packages/Markdown/Markdown.sublime-syntax")                                # 插入问题、代码和响应                                    content = f"""提出的问题:\n\n{question}\n\n"""                                        new_view.run_command('insert', {'characters': content})                                            content = f"""代码:\n{code}\n\n"""                                                new_view.run_command('insert', {'characters': content})                                                    content = f"""响应:\n{result}\n\n"""                                                        new_view.run_command('insert', {'characters': content})                                                        响应:                                                        当然,请提供您想要测试的代码。                                                        

这是响应应该呈现的样子:

提出的问题:让我们测试这段代码?代码:def display_result(self, question, code, result):    print(code)    code = textwrap.dedent(code)    print(code)    # 创建一个新的缓冲区(标签页)    new_view = self.view.window().new_file()    # 设置语法为Markdown    new_view.set_syntax_file("Packages/Markdown/Markdown.sublime-syntax")    # 插入问题、代码和响应    content = f"""提出的问题:\n\n{question}\n\n"""    new_view.run_command('insert', {'characters': content})    content = f"""代码:\n{code}\n\n"""    new_view.run_command('insert', {'characters': content})    content = f"""响应:\n{result}\n\n"""    new_view.run_command('insert', {'characters': content})响应:当然,请提供您想要测试的代码。

我不确定为什么会有这些额外的空格/制表符。

感谢您的帮助。


回答:

使用'append'代替'insert',或者关闭自动缩进: new_view.settings().set('auto_indent', False)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注