利用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  --
相关推荐
小雨下雨的雨8 小时前
鸿蒙PC Electron框架实现流体气泡模拟器
前端·人工智能·算法·华为·electron·鸿蒙
ZC跨境爬虫8 小时前
跟着 MDN 学JavaScript day_4:如何存储你需要的信息——变量
开发语言·前端·javascript·ui·ecmascript
星栈独行8 小时前
10 分钟跑起第一个 Makepad 应用:先把窗口开起来
前端·程序人生·ui·rust·开源·github
独隅8 小时前
Chrome插件开发实战详细指南
前端·chrome
VcB之殇8 小时前
[Three.js] 实现两个3D模型之间的粒子化切换
前端·javascript·three.js
喵了几个咪8 小时前
技术复盘:基于 GoWind Admin 实现 Kratos 框架单体轻量化落地
前端·架构
ZC跨境爬虫9 小时前
跟着 MDN 学JavaScript day_6:JavaScript 中的基础数学——数字与运算符
开发语言·前端·javascript·学习·ecmascript
copyer_xyf9 小时前
Python 迭代器与生成器
前端·后端·python
KaMeidebaby16 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
nuIl17 小时前
实现一个 Coding Agent(3):工具调用
前端·agent·cursor