pionxzh / chatgpt-exporter

Export and Share your ChatGPT conversation history
MIT License
1.27k stars 99 forks source link

Export is using the wrong conversation choice #190

Closed 14790897 closed 9 months ago

14790897 commented 10 months ago

我发现最近的对话可以正常导出,但稍微久一点的对话不能全部导出 如下面的不能正常导出 ChatGPT-优选IP是什么?-2023-11-18.json

pionxzh commented 10 months ago

可以描述一下状况吗? 是因为对话节点的选择所以中断(像之前那样)还是整个对话都没有 regenerate 但莫名消失了一部份?

14790897 commented 10 months ago

第一种

pionxzh commented 10 months ago

不好意思,你这个我有点不好复现了,如果愿意 debug 的话可以看下 getConversationChoice 结果正不正确,然后另一种可能有问题的是 continue 节点合并导致选择跳位置了

如果稍微看了下没有特别错误的话,把 getConversationChoice 的结果发到这里来我再看看

14790897 commented 10 months ago

我去,这难度太高了,再说吧

pionxzh commented 10 months ago

不好意思,我给个步骤吧,确实我这样随口说一句太难了

  1. Clone project
  2. pnpm install
  3. pnpm run dev
  4. 将原先的脚本关闭,改用开发模式安装的
  5. 代码中搜索 getConversationChoice 并在 return 前加上 `console.log('getConversationChoice', nodes, conversationChoices) https://github.com/pionxzh/chatgpt-exporter/blob/c9c76890ed676c0d7192bd1fe1f4181283db677d/src/page.ts#L85-L98
  6. 按下导出应该就能在 console 中看到结果
14790897 commented 9 months ago

大佬,我来了,使用pnpm dev安装插件之后,网页上没有出现导出按钮

14790897 commented 9 months ago

要pnpm build,手动加载才有按钮

14790897 commented 9 months ago
userscript.html?name=ChatGPT-Exporter.user.js&id=24936dc9-3c77-48d5-babb-f7a7f0fdfad2:1146 getConversationChoice (247) [null, null, null, span.flex-grow.flex-shrink-0.tabular-nums, null, span.flex-grow.flex-shrink-0.tabular-nums, null, span.flex-grow.flex-shrink-0.tabular-nums, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, span.flex-grow.flex-shrink-0.tabular-nums, null, null, null, null, null, null, null, null, null, null, null, null, null, span.flex-grow.flex-shrink-0.tabular-nums, null, null, null, null, null, span.flex-grow.flex-shrink-0.tabular-nums, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, span.flex-grow.flex-shrink-0.tabular-nums, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, span.flex-grow.flex-shrink-0.tabular-nums, null, span.flex-grow.flex-shrink-0.tabular-nums, …][0 … 99][100 … 199][200 … 246]length: 247[[Prototype]]: Array(0) (247) [null, null, null, 2, null, 1, null, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1, null, 1, …]
index.ts-14ba51bb.js:1 manualModification
_app-35c14f0b7485bd2e.js:11 
14790897 commented 9 months ago

上面是按照要求使用console输出的内容,下面的md文件导出有问题 ChatGPT-php-数据库.json ChatGPT-php-数据库.md

14790897 commented 9 months ago

我在看源代码了,感觉这个代码写得很标准

14790897 commented 9 months ago

是不是通过api获取的原始数据不能显示用户的选择路径才需要从页面上获取网页数据?

pionxzh commented 9 months ago

是的,API 不管用户选到什麽路径,这些都是 ChatGPT 前端管的状态,所以只好从 UI 上重新抓取回来

14790897 commented 9 months ago

它前端能做的我们也能做 我觉得可以从API返回的数据最底层开始从下往上遍历, 找到一个节点它的Children包含提问的id,那么这个就是他的父节点

14790897 commented 9 months ago

我感觉我找到了正确的思路,读取前端的数据总归是不靠谱的

14790897 commented 9 months ago

大佬,有没有可以用原始Json来测试转换效果的方法?

pionxzh commented 9 months ago

我一般是直接魔改 call API 的地方。。

pionxzh commented 9 months ago

https://github.com/pionxzh/chatgpt-exporter/blob/c9c76890ed676c0d7192bd1fe1f4181283db677d/src/api.ts#L288

直接硬改这个

14790897 commented 9 months ago

好的,也可以

14790897 commented 9 months ago

https://github.com/pionxzh/chatgpt-exporter/blob/c9c76890ed676c0d7192bd1fe1f4181283db677d/src/api.ts#L475 这个链表有什么作用吗?

pionxzh commented 9 months ago

这个链表有什么作用吗?

把API返回的数据 (Map/List) 转为一个符合整个聊天顺序的 List

14790897 commented 9 months ago

我看你是把所有节点都放在result里,没有使用current

14790897 commented 9 months ago

https://gist.github.com/14790897/29533887b0b5aba7c8cecb419c4be72d 这是一个python例子,已经可以工作 我要开始改你的代码了

14790897 commented 9 months ago

话说这个项目有必要用typescript吗?一大堆定义看着好复杂

14790897 commented 9 months ago

我是新手,我也不是特别懂

pionxzh commented 9 months ago

@14790897 你拉一下最新,看看 https://github.com/pionxzh/chatgpt-exporter/commit/7d830723dba87e46b278831aad16acce72c418e5 是不是修好了问题

14790897 commented 9 months ago

不行,先睡觉了

@14790897 你拉一下最新,看看 7d83072 是不是修好了问题