# first_model_shell **Repository Path**: timsengit/first_model_shell ## Basic Information - **Project Name**: first_model_shell - **Description**: 第一层大模型交互Shell 一个极简的大模型交互Shell,使用文件系统记录所有交互历史,实现上下文管理。 - **Primary Language**: Shell - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-04 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [first_model_shell](https://github.com/timsengit/first_model_shell) - 第一层大模型交互Shell 一个极简的大模型交互Shell,使用文件系统记录所有交互历史,实现上下文管理。 ## 设计理念 **file is all**:所有交互状态都通过文件记录和管理。初始化设定、用户输入、模型输出均保存为文件,下次交互时拼接历史文件和最新输入实现上下文。通过编辑文件即可编辑上下文。 ## 项目原则 - **简单交互**:只实现最基础的交互功能 - **零抽象**:禁止任何抽象、方法抽取调用,整个脚本一目了然 - **专注基础**:高级功能(会话管理、上下文工具、子代理、任务规划等)不在此层实现,请使用其他高级工具 ## 依赖要求 - [Ollama](https://ollama.com/) - 本地大模型运行环境 ## 快速开始 ```bash # 简单对话 bash ./chat.sh "你好,介绍一下这个项目" # 带命令执行的对话 bash ./command.sh "创建一个test.txt文件" # 归档当前会话 bash ./log_archive.sh ``` ## 目录结构 | 目录 | 说明 | |------|------| | `init_log_chat/` | 简单对话会话的初始化模板 | | `init_log_command/` | 带命令执行对话会话的初始化模板 | | `log_chat/` | 当前进行的简单对话会话(自动创建) | | `log_command/` | 当前进行的带命令执行对话会话(自动创建) | | `zzz/` | 会话归档目录,按时间戳存放历史会话 | ## 命令说明 ### `chat.sh` - 简单对话 ```bash # 开始新对话或继续现有对话 ./chat.sh "用户消息内容" # 无参数时继续现有对话 ./chat.sh ``` **功能**: - 如果 `log_chat` 目录不存在,从 `init_log_chat` 复制模板创建新会话 - 记录用户输入到时间戳命名的 `.msg` 文件 - 合并所有历史消息发送给Ollama模型(使用 `qwen2.5:7b`) - 保存模型输出到 `.model_output` 文件并追加到消息文件 ### `command.sh` - 带命令执行的对话 ```bash # 开始新命令会话或继续现有会话 ./command.sh "执行一个Linux命令" # 无参数时继续现有会话 ./command.sh ``` **功能**: - 如果 `log_command` 目录不存在,从 `init_log_command` 复制模板创建新会话 - 与 `chat.sh` 相同的对话记录功能 - **额外功能**:解析模型输出中的命令块并执行 - 命令块格式: ``` MCCB_model_call_command_blocks_start # 命令内容(如:echo "Hello World") MCCB_model_call_command_blocks_end ``` - 包含安全机制:检查危险操作(如 `rm -rf`)需要用户确认 ### `log_archive.sh` - 会话归档 ```bash # 将当前会话归档到zzz目录 ./log_archive.sh ``` **功能**: - 将 `log_chat` 和 `log_command` 目录移动到 `zzz/` 目录下 - 按时间戳重命名(格式:`log_chat_YYYYMMDD_HHMMSS`) - 归档后可以开始新的会话 ## 使用示例 ### 示例1:简单对话 ```bash $ ./chat.sh "你好" 会话开始 用户: 你好 model: 你好!有什么我可以帮助你的吗? $ ./chat.sh "介绍一下Linux" 用户: 介绍一下Linux model: Linux是一种开源的操作系统内核,由林纳斯·托瓦兹于1991年首次发布... ``` ### 示例2:带命令执行的对话 ```bash $ ./command.sh "创建一个hello.txt文件" 会话开始 用户: 创建一个hello.txt文件 model: 我来帮你创建一个hello.txt文件。 MCCB_model_call_command_blocks_start echo "Hello World" > hello.txt MCCB_model_call_command_blocks_end 脚本执行结果: Hello World 脚本退出状态: 0 ``` ### 示例3:归档会话 ```bash $ ./log_archive.sh # log_chat和log_command目录被移动到zzz/log_chat_20260404_161609等目录 ``` ## 文件格式说明 - `.msg` 文件:纯文本格式,包含完整的对话历史 - `.model_output` 文件:模型原始输出 - `.model_output_command.sh` 文件:从模型输出提取的可执行脚本 ## 注意事项 1. **安全警告**:`command.sh` 会执行模型生成的命令,请谨慎使用 2. **模型要求**:默认使用 `qwen2.5:7b` 模型,确保已通过 `ollama pull qwen2.5:7b` 下载 3. **会话管理**:长时间对话可能产生大量文件,定期使用 `log_archive.sh` 归档 4. **自定义模型**:修改脚本中的 `ollama run qwen2.5:7b` 部分可使用其他模型 ## 工作原理 ``` 用户输入 → 保存到.msg文件 → 拼接所有历史.msg文件 → 发送给模型 ↑ ↓ 上下文维护 ← 模型输出保存到.msg文件 ← 接收模型输出 ``` 通过编辑历史 `.msg` 文件,可以手动修改对话上下文,实现精确的上下文控制。