// ARCHIVE Words and Reflections · LONELY HORSE ## 一.项目背景缘由 # Socratic-tutor-harness项目介绍 ## 一.项目背景缘由 其实这个的原因很简单,那就是我经常使用一个网友写好了的苏格拉底提示词`prompt`,然后我就发现LLM很容易就忘记这个初始提示词,刚好最近再学如何写`skill`,所以决定写一个关于苏格拉底`skill`,让LLM每次回答之前就按照这个提示词作为前提 ## 二.结构设计 1.核心的标准库有:`net/http`,`sqlite`,`context`,`encoding/json`。 2.业务实现流程图如下: ```text [用户] --输入文本请求--> [BuildMondelContext] | 将原始文本拼接成合适的socratic模式的请求文本 | [slqite]--获取历史数据,判定是否压缩--no--> |yes | v | [LLM]---根据要求压缩文本--> | 拼接历史文本和本次请求文本 | v [LLM] | 返还完整socratic标准的回答 ``` * **net/http**: 用于建立网页和完成数据的呈现 * **sqlite**: 保存历史文本 * **context**:精准控制网页请求和LLM响应的时间,防止空请求占用连接池 * **encoding/json**:解析josn数据,完成数据的注入 ## 三.版本的不同 ### 1.cli版本 1.1 源代码位置 可见[`socratic-tutor-harness-mvp1`](https://github.com/Lonely-Horse/socratic-tutor-harness/tree/mvp1) 1.2 食用方法 直接使用`go build -o socratic-tutor-harness ./cmd/tutor/main.go`命令可以直接完成可执行文件的编译,当然前提是你的设备具有go的编译环境 ### 2.skill版本 1.1 源代码位置 可直接在我的博客中的项目库中找到,也可以在[`socratic-tutor-harness`](https://github.com/Lonely-Horse/socratic-tutor-harness)找到 1.2 食用方法 直接使用`go build -o socratic-tutor-harness ./cmd/tutor/main.go`命令可以直接完成可执行文件的编译,当然前提是你的设备具有go的编译环境,你也可以直接根据我的docker配置,使用`Docker`来运行服务,但是我的docker配置默认使用的是`dify`的网络,所以你需要根据实际情况进行微调,详情可见我的github仓库,详细查看配置方法 ## 四.关于该项目的反思和总结 1.应用场景的面向问题 当时我想的是写一个skill,也就是在加载后发送给LLM问题之前注入历史文本和模板的socratic提示词,但是最后在项目写到一半的时候,我发现Trae给我的todo骨架存在问题,写成了harness,应用场景完全不一样,但是我已经在写加载sqlite了,再转过头重写这个请求逻辑感觉太过于麻烦了,基本相当于推倒重来,所以我就将错就错,将这个cli版本先写下来后,完成基础的LLM对话和接收,保存历史文本和压缩文本不存在问题等等的功能不存在问题之后,我在这个mvp1版本之上,写好了一个skill的外壳和OpenAPI标准的协议,这样看着有点不伦不类了其实,但是属于是折中写法了,所以最终skill的效果很一般,并且被切割除去了,基本上有点黑箱了,所以效果其实不太好,很容易就被污染 2.实际效用和价值 实际的价值感觉是比较低的,和我想象的不太一样,所以我觉得这种东西还是写成普通的提示词skill最好,当然也可以写成harness,只不过我的开发能力和实际经验是由所欠缺的,写出来的效果很一般,cli界面设计也没写,纯粹的命令行对话,确实是有点难蚌了,只能说是最后成为我的练手项目 3.最终的所得 根据这个项目的开发过程,还是获得了很多的东西,比如说最开始对于使用go的json和strings等库,来完成数据的注入和拼接,这种是比较陌生的,但是经过这个项目的捶打,还是得到了大量的练习和记忆,对于使用go的标准库来做字符切割拼接至少可以说算是比较熟悉了 ← RETURN HOME