利用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  --
相关推荐
Irene19911 小时前
ElementPlus 与成熟后台框架对比:vue-element-plus-admin、vue-pure-admin等
前端·ui·框架·vue3
尘中客5 小时前
放弃 Echarts?前端直接渲染后端高精度 SVG 矢量图流的踩坑记录
前端·javascript·echarts·前端开发·svg矢量图·echarts避坑
FreeBuf_5 小时前
Chrome 0Day漏洞遭野外利用
前端·chrome
小彭努力中5 小时前
199.Vue3 + OpenLayers 实现:点击 / 拖动地图播放音频
前端·vue.js·音视频·openlayers·animate
2501_916007475 小时前
网站爬虫原理,基于浏览器点击行为还原可接口请求
前端·javascript·爬虫·ios·小程序·uni-app·iphone
前端大波6 小时前
Sentry 每日错误巡检自动化:设计思路与上手实战
前端·自动化·sentry
ZC跨境爬虫7 小时前
使用Claude Code开发校园交友平台前端UI全记录(含架构、坑点、登录逻辑及算法)
前端·ui·架构
慧一居士7 小时前
Vue项目中,何时使用布局、子组件嵌套、插槽 对应的使用场景,和完整的使用示例
前端·vue.js
Можно7 小时前
uni.request 和 axios 的区别?前端请求库全面对比
前端·uni-app
M ? A8 小时前
解决 VuReact 中 ESLint 规则冲突的完整指南
前端·react.js·前端框架