利用DuckDB 1.5的json和struct功能分析llama web-ui导出的对话json文件

1.表格方式输出

输出全部列

复制代码
memory D from 'convlo.json';
┌───────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────┐
│                           conv                            │                         messages                         │
│ struct(id uuid, "name" varchar, lastmodified bigint, curr │ struct(convid uuid, "role" varchar, "content" varchar, " │
│                        node uuid)                         │ type" varchar, "timestamp" bigint, toolcalls varchar, ch │
│                                                           │ ildren json[], extra json[], id uuid, parent uuid, model │
│                                                           │  varchar, timings struct(cache_n bigint, prompt_n bigint │
│                                                           │ , prompt_ms double, prompt_per_token_ms double, prompt_p │
│                                                           │ er_second double, predicted_n bigint, predicted_ms doubl │
│                                                           │ e, predicted_per_token_ms double, predicted_per_second d │
│                                                           │                        ouble))[]                         │
├───────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────┤
│ {                                                         │ [{'convId': f62d63fc-f8c4-4d28-b02e-175dc3f96d72, 'role' │
│   'id': f62d63fc-f8c4-4d28-b02e-175dc3f96d72,             │ : user, 'content': 用python编写快速排序算法程序,不做别  │
│   'name': 用python编写快速排序算法程序,不做别的。,       │ 的。, 'type': text, 'timestamp': 1773207683626, 'toolCal │
│   'lastModified': 1773207683516,                          │ ls': '', 'children': [], 'extra': [], 'id': 91abdcce-13c │
│   'currNode': b9053f77-2277-4d99-aee7-834efdaf1238        │ 6-4a22-a16d-0bf4e3477236, 'parent': baff5274-5c5e-407d-8 │
│ }                                                         │ 2f1-b0fb3608510a, 'model': NULL, 'timings': NULL}, {'con │
│                                                           │ vId': f62d63fc-f8c4-4d28-b02e-175dc3f96d72, 'role': assi │
│                                                           │ stant, 'content': '当然可以,以下是一个纯 Python 编写的  │
│                                                           │ 快速排序算法程序,不包含任何额外功能或注释,仅实现快速排 │
│                                                           │ 序的核心逻辑:\n\n```python\ndef quicksort(arr):\n    if │

将message中的content列单独提取出来

复制代码
memory D select unnest(messages).content from 'convlo.json';
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                             (unnest(messages))."content"                                             │
│                                                       varchar                                                        │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 用python编写快速排序算法程序,不做别的。                                                                             │
│ 当然可以,以下是一个纯 Python 编写的快速排序算法程序,不包含任何额外功能或注释,仅实现快速排序的核心逻辑:\n\n```py... │
│ 编写python程序,算出1-13的全部4个数字组合(允许重复)加减乘除能够算出24点的组合及对应的表达式,比如1234:1x2x3x4,用A... │
│ ```python\nfrom itertools import permutations, product\nimport operator\nfrom functools import reduce\n\nops = {\n ... │
│ 改写为不用eval,不做别的                                                                                             │
│ ```python\nfrom itertools import permutations, product\nimport operator\nfrom functools import reduce\n\nops = {\n ... │
│ 输出方式改为字母,比如(1*10)*(12/5)', (1, 5, 10, 12)) 输出15AC:(1xA)x(C/5),一行只输出一组,只给出最后一步输出的代码...  │
│ ```python\nfrom itertools import permutations, product\n\nops = {'+': '+', '-': '-', '*': '*', '/': '/'}\n\ndef sol... │
│ 我的意思是把return sorted(set((expr, tuple(sorted(nums))) for expr, nums in res))改为输出以换行分隔的字符串,比如(1... │
│ ```python\nres = []\nfor a, b, c, d in permutations(range(1, 14), 4):\n    if a == b == c == d:\n        continue\n... │
│ 不考虑前面的问题,下面是一个新程序的需求:已知列表a,类似[('(1*10)*(12/5)', (1, 5, 10, 12)), ('(1*10)+(12+2)', (1, ... │
│ ```python\nfor item in [('(1*10)*(12/5)', (1, 5, 10, 12)), ('(1*10)+(12+2)', (1, 2, 10, 12))]:\n    expr, nums = it... │
│ 用A、B、C、D表示10、11、12、13,1-9不变,请修改                                                                      │

上述json中含有\n转义符,在表格模式中无法替换成换行。输出和刚才一样。

复制代码
memory D select replace(unnest(messages).content,'\n',chr(10)) from 'convlo.json';
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                "replace"((unnest(messages))."content", '\n', chr(10))                                │
│                                                       varchar                                                        │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 用python编写快速排序算法程序,不做别的。                                                                             │
│ 当然可以,以下是一个纯 Python 编写的快速排序算法程序,不包含任何额外功能或注释,仅实现快速排序的核心逻辑:\n\n```py... │
│ 编写python程序,算出1-13的全部4个数字组合(允许重复)加减乘除能够算出24点的组合及对应的表达式,比如1234:1x2x3x4,用A... │
│ ```python\nfrom itertools import permutations, product\nimport operator\nfrom functools import reduce\n\nops = {\n ... │
│ 改写为不用eval,不做别的                                                                                             │
│ ```python\nfrom itertools import permutations, product\nimport operator\nfrom functools import reduce\n\nops = {\n ... │
│ 输出方式改为字母,比如(1*10)*(12/5)', (1, 5, 10, 12)) 输出15AC:(1xA)x(C/5),一行只输出一组,只给出最后一步输出的代码...  │
│ ```python\nfrom itertools import permutations, product\n\nops = {'+': '+', '-': '-', '*': '*', '/': '/'}\n\ndef sol... │
│ 我的意思是把return sorted(set((expr, tuple(sorted(nums))) for expr, nums in res))改为输出以换行分隔的字符串,比如(1... │

在list模式中可以把\n转义符替换成换行,这样近似原始对话的效果。但是把问题和回答合在一行了。不能两全。

markdown 复制代码
memory D .mode list
memory D select replace(unnest(messages).content,'\n',chr(10)) from 'convlo.json';
"replace"((unnest(messages))."content", '\n', chr(10))
用python编写快速排序算法程序,不做别的。当然可以,以下是一个纯 Python 编写的快速排序算法程序,不包含任何额外功能或注释,仅实现快速排序的核心逻辑:
python 复制代码
def quicksort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quicksort(left) + middle + quicksort(right)

这个版本使用了分治法,每次选择中间元素作为基准,将数组分为小于、等于、大于基准的三部分,递归排序后合并。

如果你希望一个原地排序的版本(不使用额外空间),也可以使用如下版本:

python 复制代码
def quicksort_inplace(arr, low=0, high=None):
    if high is None:
        high = len(arr) - 1
    if low < high:
        pivot = arr[high]
        i = low - 1
        for j in range(low, high):
            if arr[j] < pivot:
                i += 1
-- More  --
相关推荐
小玮看世界1 天前
[Python]从“脏”数据到优雅实现:一个IoT滑动窗口最大值问题的测试驱动优化实录
linux·前端·python
消失的旧时光-19431 天前
第六篇:Redis Hash——一个用户对象应该保存成 JSON,还是保存成 Hash?
redis·json·哈希算法
尤乐娃子1 天前
进入大厂(厂子大)实习Day11
前端·笔记·实习
xiaoxiangsiyan1 天前
运维之前端反调试学习
运维·前端·学习·状态模式
小徐_23331 天前
TRAE WORK 实战,之前写一篇水文要半天,现在用 TRAE Work 摸鱼2分钟交差,真香!
前端·trae
明月_清风1 天前
🤗 Hugging Face 模型上传完全指南:从本地到 Hub 的 4 种姿势
前端·后端·ai编程
sugar__salt1 天前
跟着 Demo 学 Pinia:两种仓库写法 + 完整 TodoList 复现
前端·javascript·vue.js·前端框架·vue
To_OC1 天前
从一个名字编辑组件开始,我把 React + TS 的数据流和副作用彻底搞明白了
前端·react.js·typescript
FungLeo1 天前
Flutter 把第三方 UI 库渐进迁回 Material 3:组件映射总表 + 四批次替换实战
flutter·ui