当前位置:   article > 正文

一个python小白,如何利用chatgpt帮忙写代码?_chatgpt 代码实现

chatgpt 代码实现

专栏里前边几篇文章主要是如何使用提示工程更好地与chatgpt聊天,获得需要的数据,即电商评论意图。

而要系统性地实现这个功能,要开始写代码了。

当然如果你的python基础很好,那直接动手就可以了,如果比较薄弱,可以跟着我一起让chatgpt帮你写代码。

一、描述需求

这里我偷懒了,返回的格式直接用提示词,这里可以根据自己需要修改,比如返回的类型、长度之类。 

假如你是一个python工程师,我有一个需求需要你帮我完成代码开发。

需求如下:

第一步:我有500条评论数据,存在数据库的表里,表结构为【ID,评论内容】,我需要从数据库取出这部分数据

第二步:我需要你调用一个使用chatgpt的方法,帮我返回评论意图信息,返回的格式为json:

{

"评论ID":[{

"attempt": (可选值为:[营销体验、服务 、开单发货、物流配送、安装服务、商品体验])

"sense": (可选值为:[正面、负面、中性])

"classify": 意图分类不带任何情感极性,举例:是"物流时效"而不是"物流速度快"

"sub_classify": 根据【classify】,返回对应的正面或负面短句描述,而不仅仅是一个词。例classify为'安装技术',期望得到的子分类是'安装师傅专业',而不是'专业'。"安装师傅专业"对应"安装师傅不专业"为正负面对应。

"comment": 根据【sub_classify】摘录对应具体的评价内容

},],

}

注意,因为有tokens限制,请帮我把500条评论数据做一个拆分,拆分成5条一组,循环跑完

第三步:我希望把数据转换成df,df的列为【评论ID】【attempt】【sense】【classify】【sub_classify】【comment】并重新插回数据库

它返回了代码

  1. 这个是一个涉及到数据库操作、数据处理、调用API和数据分析的需求,这里我提供一个简单的Python代码片段来完成这个任务。
  2. 首先需要注意的是,我们需要确保你的运行环境已经安装了以下的Python库:
  3. - Pandas
  4. - SQLAlchemy (用于数据库操作)
  5. - Requests (用于API调用)
  6. 如果没有安装的话,可以通过pip install命令进行安装。
  7. 下面是一段示例代码,由于我无法实际连接到数据库和真实的API,所以这个代码只是一个框架,你可能需要根据实际情况进行修改:
  8. ```python
  9. import pandas as pd
  10. from sqlalchemy import create_engine
  11. import requests
  12. import json
  13. # 定义数据库连接
  14. engine = create_engine('数据库连接字符串')
  15. # 从数据库中读取评论数据
  16. sql = "SELECT ID, 评论内容 FROM 评论表"
  17. df = pd.read_sql(sql, engine)
  18. # 定义API调用函数
  19. def call_api(comment):
  20. # 这里是假设的API调用方式,实际情况可能不同
  21. response = requests.post('API URL', data={'comment': comment})
  22. return response.json()
  23. # 用于存储处理后数据的空DataFrame
  24. df_processed = pd.DataFrame(columns=['评论ID', 'attempt', 'sense', 'classify', 'sub_classify', 'comment'])
  25. # 分组处理评论数据
  26. for i in range(0, len(df), 5):
  27. group = df.iloc[i:i+5]
  28. for index, row in group.iterrows():
  29. # 调用API
  30. result = call_api(row['评论内容'])
  31. # 处理API返回的数据
  32. for item in result[str(row['ID'])]:
  33. df_processed = df_processed.append({
  34. '评论ID': row['ID'],
  35. 'attempt': item['attempt'],
  36. 'sense': item['sense'],
  37. 'classify': item['classify'],
  38. 'sub_classify': item['sub_classify'],
  39. 'comment': item['comment']
  40. }, ignore_index=True)
  41. # 将处理后的数据插入数据库
  42. df_processed.to_sql('处理后的评论表', engine, index=False, if_exists='append')
  43. ```
  44. 这个代码首先从数据库中读取评论数据,然后每5条评论为一组进行处理,对每条评论调用API并处理返回的数据,将处理后的数据存入一个新的DataFrame,最后将这个新的DataFrame插入数据库。
  45. 你需要将上述代码中的'数据库连接字符串''评论表''API URL''处理后的评论表'替换为实际的值。

询问截图: 

二、根据实际需求自行修改代码

当然,我并不能直接使用它的代码,比如我的数据库是HANA,那么我就不能直接使用上边的语句,比如我的call_api方法替换成ask_gpt,因为是经过处理过的gpt接口,需要自写方法,这里就不太适用了。

另外关于字段名称我作了改变,这里也可以根据实际情况修改。

根据上边的代码进行整理之后我得出了初版代码:

  1. # 定义数据库连接
  2. import pandas as pd
  3. from sqlalchemy import create_engine
  4. # 数据库连接配置
  5. ip = ''
  6. port = '30015'
  7. user = ''
  8. password = ''
  9. config_str = "hana://{}:{}@{}:{}".format(user, password, ip, port)
  10. engine = create_engine(config_str)
  11. conn_log = engine.connect()
  12. # 从数据库中读取评论数据
  13. sql = "sql语句"
  14. df = pd.read_sql(sql, engine)
  15. df

我在sql语句中限制了5条,得到了如下的结果(注意,这里我都用了英文,但是我描述的时候是评价内容,这里需要自己修改字段,描述的时候也可以更严谨一些)

三、进一步提问

我发现在我跟gpt的描述中,忘记跟它说了要处理源数据的格式,所以我继续提问并给了示例

我希望把评价内容改变格式再调用chatgpt,格式如下:

comments = '''

{

    "1":"很喜欢"

}

'''

请帮我改写这部分的代码

 返回的结果

  1. 好的,如果你需要将评价内容转换为这种格式再进行API调用的话,你可以修改API调用函数和循环处理部分的代码如下:
  2. ```python
  3. # 定义API调用函数
  4. def call_api(comments):
  5. # 这里是假设的API调用方式,实际情况可能不同
  6. response = requests.post('API URL', data=comments)
  7. return response.json()
  8. # 分组处理评论数据
  9. for i in range(0, len(df), 5):
  10. group = df.iloc[i:i+5]
  11. # 需要将每组评论转换为指定的格式
  12. comments = {str(row['ID']): row['评论内容'] for index, row in group.iterrows()}
  13. comments = json.dumps(comments)
  14. # 调用API
  15. result = call_api(comments)
  16. # 处理API返回的数据
  17. for item in result:
  18. for sub_item in result[item]:
  19. df_processed = df_processed.append({
  20. '评论ID': item,
  21. 'attempt': sub_item['attempt'],
  22. 'sense': sub_item['sense'],
  23. 'classify': sub_item['classify'],
  24. 'sub_classify': sub_item['sub_classify'],
  25. 'comment': sub_item['comment']
  26. }, ignore_index=True)
  27. ```
  28. 这样修改后,每5条评论会被转换为一个json字符串,然后传递给API调用函数。API返回的数据也需要相应地进行处理。

询问截图:  

四、处理报错

先问gpt我应该怎么描述

我出现了一个python报错,你能帮我处理吗?我需要怎么向你提问

  1. 当然,我会尽力帮助你解决 Python 报错的问题。你需要提供以下信息:
  2. 1. **错误信息**:请将你遇到的错误信息完整地复制并粘贴在这里。这可能包括错误类型、错误描述、以及错误发生的代码行。
  3. 2. **相关代码**:请提供导致错误的相关代码。这可能是一段代码,也可能是一个函数或者一个模块。
  4. 3. **你已经尝试的解决方法**:如果你已经搜索过相关错误并尝试了一些解决方法,但还是没有解决问题,请把你尝试过的方法和结果告诉我。
  5. 4. **期望的结果**:请描述你运行这段代码的期望结果是什么。这将帮助我更好地理解问题。
  6. 请使用 Markdown 格式来格式化你的问题,例如:
  7. ```markdown
  8. **错误信息**
  9. ```
  10. 这是错误信息
  11. ```
  12. **相关代码**
  13. ```python
  14. 这是错误的代码
  15. ```
  16. **我已经尝试的解决方法**
  17. 1. 尝试方法一
  18. 2. 尝试方法二
  19. **期望的结果**
  20. 我希望代码能够这样运行
  21. ```
  22. 这样我就能更准确地找到问题并帮助你解决。

 我的简单版本提问:

 1.错误信息:TypeError Traceback (most recent call last) Input In [32], in <cell line: 6>() 11 # 处理API返回的数据 12 for item in result: ---> 13 for sub_item in result[item]: 14 df_processed = df_processed.append({ 15 'ID': item, 16 'attempt': sub_item['attempt'], (...) 20 'comment': sub_item['comment'] 21 }, ignore_index=True) TypeError: string indices must be integers

2.相关代码: # 分组处理评论数据 for i in range(0, len(df), 5): group = df.iloc[i:i+5] comments = {str(row['id']): row['comments'] for index, row in group.iterrows()} comments = json.dumps(comments) status_code, result = ask_gpt(comments,assistant_id) # 处理API返回的数据 for item in result: for sub_item in result[item]: df_processed = df_processed.append({ 'ID': item, 'attempt': sub_item['attempt'], 'sense': sub_item['sense'], 'classify': sub_item['classify'], 'sub_classify': sub_item['sub_classify'], 'comment': sub_item['comment'] }, ignore_index=True)

 它给了我一些信息

  1. 根据你提供的错误信息和代码片段,错误是出在这样一行代码:
  2. ```python
  3. for sub_item in result[item]:
  4. ```
  5. 错误信息是“TypeError: string indices must be integers”,意思是字符串索引必须是整数。这意味着`result[item]`是一个字符串,而不是你可能期望的列表或字典。
  6. 检查你的代码,你在处理API返回的数据时,似乎期待`result`是一个字典,`result[item]`是一个列表或字典,然后你可以遍历每一个`sub_item`
  7. 这个问题可能的原因有两个:
  8. 1. API返回的数据格式不是你期望的格式,可能`result``result[item]`是一个字符串,而不是一个字典。
  9. 2. `item``result`中可能并不是一个有效的键。
  10. 可以尝试以下方法来找出问题:
  11. - 打印`result``result[item]`来查看他们的实际值和类型。
  12. ```python
  13. print(type(result))
  14. print(result)
  15. print(type(result[item]))
  16. print(result[item])
  17. ```
  18. - 检查`item`是否在`result`中是一个有效的键。
  19. ```python
  20. print(item in result)
  21. ```
  22. 希望这些信息对你有所帮助。如果还有其他问题,欢迎继续提问。

我希望他帮我改写代码: 

 你可以直接帮我改写出正确的代码吗

  1. 非常抱歉,由于我无法看到`ask_gpt`函数的具体实现和返回的具体数据,我无法直接给出正确的代码。我可以给你一些可能的改进方向。
  2. 在这段代码中,你似乎期望`result`是一个字典,`result[item]`是一个字典或列表。你可以在处理API返回的数据之前,先检查`result`和`result[item]`的类型。
  3. ```python
  4. status_code, result = ask_gpt(comments,assistant_id)
  5. # 检查 result 类型
  6. if not isinstance(result, dict):
  7. print(f"Unexpected type {type(result)} for result.")
  8. continue
  9. # 处理API返回的数据
  10. for item in result:
  11. # 检查 result[item] 类型
  12. if not isinstance(result[item], (list, dict)):
  13. print(f"Unexpected type {type(result[item])} for result[{item}].")
  14. continue
  15. for sub_item in result[item]:
  16. df_processed = df_processed.append({
  17. 'ID': item,
  18. 'attempt': sub_item['attempt'],
  19. 'sense': sub_item['sense'],
  20. 'classify': sub_item['classify'],
  21. 'sub_classify': sub_item['sub_classify'],
  22. 'comment': sub_item['comment']
  23. }, ignore_index=True)
  24. ```
  25. 在这个修改后的代码中,我添加了类型检查。如果`result`或`result[item]`的类型不是你期望的,它将输出一个错误消息,并跳过当前循环,避免类型错误。
  26. 希望这个修改对你有所帮助!如果你还有其他问题或者需要进一步的解释,欢迎告诉我!

 修改完之后还是报错,我把局部的代码和问题发给gpt,在同一次对话中,gpt会上下文自行联系。

1.相关代码:print(result[item])

2.错误信息:报错信息太长了略,复制自己的报错信息即可

  1. 谢谢你提供的详细信息。从你的输出来看,`result`是一个字符串,而不是字典。这就是为什么你不能用`result[item]`来访问其元素,因为`item`是一个字符串而`result`也是一个字符串。
  2. `result`实际上是一个JSON格式的字符串,你需要将其转换为Python的字典才能进行进一步的处理。你可以使用`json.loads()`函数来将JSON字符串转换为字典。下面是修改后的代码:
  3. ```python
  4. import json
  5. # 分组处理评论数据
  6. for i in range(0, len(df), 5):
  7. group = df.iloc[i:i+5]
  8. comments = {str(row['id']): row['comments'] for index, row in group.iterrows()}
  9. comments = json.dumps(comments)
  10. status_code, result = ask_gpt(comments,assistant_id)
  11. # 将 result 转换为字典
  12. result = json.loads(result)
  13. # 处理API返回的数据
  14. for item in result:
  15. for sub_item in result[item]:
  16. df_processed = df_processed.append({
  17. 'ID': item,
  18. 'attempt': sub_item['attempt'],
  19. 'sense': sub_item['sense'],
  20. 'classify': sub_item['classify'],
  21. 'sub_classify': sub_item['sub_classify'],
  22. 'comment': sub_item['comment']
  23. }, ignore_index=True)
  24. ```
  25. 这样的修改应该能解决你的问题。如果你还有任何问题,欢迎继续提问。

根据gpt提供的报错信息以及语句,我初步完成了我的代码,并获得了我需要的格式以及结果。 

最终版本的代码(注意:ask_gpt调用了经过封装后的接口,不具普遍适用性,这里不作代码展示)

  1. # 用于存储处理后数据的空DataFrame
  2. df_processed = pd.DataFrame(columns=['ID', 'attempt', 'sense', 'classify', 'sub_classify', 'comment'])
  3. assistant_id = "××××××××××"#这个是
  4. # 分组处理评论数据
  5. for i in range(0, len(df), 5):
  6. group = df.iloc[i:i+5]
  7. comments = {str(row['id']): row['comments'] for index, row in group.iterrows()}
  8. comments = json.dumps(comments)
  9. status_code, result = ask_gpt(comments,assistant_id) #这里的方法是封装后的,比较个性化,不作展示,大家可以根据实际情况进行调整
  10. # 将 result 转换为字典
  11. result = json.loads(result)
  12. # 检查 result 类型
  13. if not isinstance(result, dict):
  14. print(f"Unexpected type {type(result)} for result.")
  15. # 处理API返回的数据
  16. for item in result:
  17. # 检查 result[item] 类型
  18. if not isinstance(result[item], (list, dict)):
  19. print(f"Unexpected type {type(result[item])} for result[{item}].")
  20. continue
  21. for sub_item in result[item]:
  22. df_processed = df_processed.append({
  23. 'ID': item,
  24. 'attempt': sub_item['attempt'],
  25. 'sense': sub_item['sense'],
  26. 'classify': sub_item['classify'],
  27. 'sub_classify': sub_item['sub_classify'],
  28. 'comment': sub_item['comment']
  29. }, ignore_index=True)

结果展示: 

 五、增加注释

请帮我把这段代码的关键节点加上注释:

【需要加注释的代码内容】 

  1. 这段代码是在处理一些评论数据,并且把处理后的结果存储到一个新的DataFrame中。这个过程包括调用一个名为`ask_gpt`的函数进行处理,然后把结果转换为我们需要的格式。下面是这段代码的关键节点注释:
  2. ```python
  3. # 初始化一个用于存储处理后数据的空DataFrame
  4. df_processed = pd.DataFrame(columns=['ID', 'attempt', 'sense', 'classify', 'sub_classify', 'comment'])
  5. # 这是你的助手ID,用于调用ask_gpt函数
  6. assistant_id = "××××××××××"
  7. # 开始分组处理评论数据,每5行为一组
  8. for i in range(0, len(df), 5):
  9. # 获取当前的评论组
  10. group = df.iloc[i:i+5]
  11. # 把评论组转换为字典,键为id,值为评论
  12. comments = {str(row['id']): row['comments'] for index, row in group.iterrows()}
  13. # 把字典转换为JSON字符串
  14. comments = json.dumps(comments)
  15. # 调用ask_gpt函数处理评论,返回状态码和结果
  16. status_code, result = ask_gpt(comments,assistant_id)
  17. # 把结果从JSON字符串转换回字典
  18. result = json.loads(result)
  19. # 检查结果是否是字典类型
  20. if not isinstance(result, dict):
  21. print(f"Unexpected type {type(result)} for result.")
  22. # 开始处理API返回的数据
  23. for item in result:
  24. # 检查每一项数据是否是列表或字典类型
  25. if not isinstance(result[item], (list, dict)):
  26. print(f"Unexpected type {type(result[item])} for result[{item}].")
  27. continue
  28. # 从每一项数据中提取需要的字段,然后添加到处理后的DataFrame中
  29. for sub_item in result[item]:
  30. df_processed = df_processed.append({
  31. 'ID': item,
  32. 'attempt': sub_item['attempt'],
  33. 'sense': sub_item['sense'],
  34. 'classify': sub_item['classify'],
  35. 'sub_classify': sub_item['sub_classify'],
  36. 'comment': sub_item['comment']
  37. }, ignore_index=True)
  38. ```
  39. 这段代码的主要目标是从原始的评论数据中提取有用的信息,然后把这些信息以结构化的方式存储到一个新的DataFrame中,方便后续的分析和使用。

 据此,我依靠chatgpt用python实现了基本功能。

实际上,我们也不能一味地依赖chatgpt,最好是如果在掌握一门语言的基础知识基础上,再用chatgpt帮忙解决一些比较难的问题,这样更会事倍功半。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/543414
推荐阅读
相关标签
  

闽ICP备14008679号