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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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