# cli_assistant **Repository Path**: hanshu_alan/cli_assistant ## Basic Information - **Project Name**: cli_assistant - **Description**: 一个类似于cursor的辅助编程命令行工具 - **Primary Language**: Rust - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-02-04 - **Last Updated**: 2025-12-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI之友-聊天知识管理命令行工具 这是一个命令行工具,用于管理和AI聊天的内容,实现个人或者团队知识库的积累。 ## 目录 - [配置](#配置) - [运行](#运行) - [使用方式](#使用方式) - [子命令tokb](#子命令tokb) - [公共kb](#公共kb) - [辅助编程](#辅助编程) - [引用别的文件](#引用别的文件) - [和AI讨论代码](#和ai讨论代码) - [根据提交记录给出建议](#根据提交记录给出建议) - [use_readme](#use_readme) - [在提示词中生成代码文件](#在提示词中生成代码文件) - [collect_all](#collect_all) - [沟通与交流](#沟通与交流) ## 配置 ```bash export AI_API_KEY="..." # API token export AI_SERVER_BASE_URL="https://api.ppinfra.com/v3/openai" export AI_MODEL="deepseek/deepseek-r1/community" # deepseek/deepseek-r1/community, deepseek/deepseek-v3 ``` 从理论上讲,可以接其它大模型。我是用的是ppinfra.com提供的大模型。 点击下面的链接,可以获得5000万token的大模型API服务,但这个大模型仅限于`deepseek/deepseek-r1/community` [欧派算力云](https://ppinfra.com/user/register?invited_by=LD0BRD) ## 运行 ```bash bash-3.2$ cli_assistant --help caozongying_cao is the author of cli assistant Usage: cli_assistant [OPTIONS] [COMMAND] Commands: tokb 高级知识库存储选项 help Print this message or the help of the given subcommand(s) Options: -q, --question 问题 -l, --long 长问题 -t, --history 带入历史记录的数量,如果t=0,表示不带入历史记录,如果t=2则表示带入前两次会话记录, 默认值为1 -u, --usekb 使用指定编号的kb知识来回答问题(可指定多个,用逗号分隔) -s, --listkb 列出所有的kb话题 -e, --temperature 设置回答温度,值为0到2 [default: 0] -r, --use_readme 是将项目README文件内容添加到上下文中, 默认为false -p, --project 处理项目相关任务,依赖于配置config.yaml -c, --collect_all 当启用项目模式时,是否收集所有包含todo/read的文件(默认只处理第一个) -h, --help Print help -V, --version Print version bash-3.2$ ``` ## 使用方式 ```bash mkdir ai_kb_db # 创建目录,这个目录可以是任意名字,和AI的聊天记录将以文本文件的形式存在在这个目录下面 cd ai_kb_db touch .ai_db # 创建一个空白文件作为ai目录的标识 mkdir topic # 聊天记录将存储在名为topic的目录下 cd topic # 进入topic目录,进行这个topic的聊天 # 定义你的智能体 touch .system # 定义扫描的项目,具体参考`辅助编程`部分 touch config.yml # 在.system中输入你对智能体的定义,比如:我是一个智能体,回复采用中文,我的任务是帮助用户处理xxx类的工作 # 如果没有创建.system,系统会默认使用"我是一个智能体"来作为智能体的定义 # 从命令行输入简单问题 cli_assistant -q 你的问题 # 开始聊天 cat output.md # 查看ai返回的结果 # 从long_question.md中输入长篇问题 cli_assistant cat output.md # 查看ai返回的结果 # 查看聊天历史 cat messages # 将当前的回复整合到 knowlege base(kb)中,标题为"总结1" cli_assistant -q 整合之前的聊天内容 -t 10000 -k 总结1 # 列出kb中的所有标题 cli_assistant -s # 使用"总结1"(通过cli_assistant中列出的序号来选择)来回答这个问题 cli_assistant -q 帮我创建一个新的模块 -u 2 cli_assistant -q 帮我创建一个新的模块 -u 2,3,5 # 从1.7.0开始,可以支持多个kb编号 ``` ### 子命令tokb(1.9.0) `tokb` 子命令提供了更灵活的知识库存储选项,允许你指定标题、标签和历史记录范围。 使用tokb子命令时,会根据指定范围内的沟通记录,由AI来进行总结,总结生成后,会对总结的内容进行存档,并删除所有的沟通记录。 会要求你确认这个操作会删除messages, messages中的内容会备份到messages.bak中,且会覆盖之前的备份 在使用`tokb`子命令时,通过-q 或者long_question.md来生成总结内容的生成指引 因此,在运行`tokb`子命令时,需要你确认。 #### 1. 基本用法(存储当前会话到知识库) ```bash cli_assistant tokb ``` #### 2. 指定标题 ```bash cli_assistant -q 从语法的角度总结 tokb --title "Rust编程技巧" ``` #### 3. 指定标签(多个标签用逗号分隔) ```bash cli_assistant -q 从语法的角度总结 tokb --tags "Rust,编程,技巧" ``` #### 4. 指定要存储的历史记录范围 ```bash # 存储从第1条到第3条历史记录 cli_assistant -q 总结时,要保留相关的源代码 tokb --from 1 --to 3 # 只指定起始位置(存储从第2条开始的所有历史记录) cli_assistant -q 总结 tokb --from 2 # 只指定结束位置(存储到第3条为止的所有历史记录) cli_assistant -q 总结 tokb --to 3 ``` #### 5. 组合使用所有选项 ```bash cli_assistant -q 总结指引 tokb --title "Rust所有权详解" --tags "Rust,基础,所有权" --from 1 --to 3 ``` #### 注意事项: 1. `--title` 是可选的,如果不指定,系统可能会使用问题或自动生成的标题 2. `--tags` 是可选的,可以指定多个标签,用逗号分隔(不要有空格) 3. `--from` 和 `--to` 是可选的,用于指定要存储的历史记录范围 4. 如果不指定历史范围,默认处理所有会话 5. 目前`tokb`命令只能单独使用 ### 公共kb(1.6.0) - 手动在.ai_db所在的目录下创建common_kb目录 - 将作为公共知识库的内容放在这个目录下 - 使用方式`cli_assistant -s`,列出所有的知识内容,公共的内容会排在后面;使用方式还是`cli_assistant -u` - 需要注意的是,`common_kb`和当前私有的`kb`中的文件名不同重复。 ## 辅助编程 在config.yml中设置你的项目信息,当运行cli_assistant命令时,程序会扫描项目文件夹中的文件,处理包含`// todo: `的文件。 目前只能处理第一个包含todo的文件。 config.yml的定义如下: ```yml path=[项目的绝对路径] handle_ext: - vue - ts exclude_folders: - node_modules - target - __pycache__ ``` 如果你不想文件中的todo被处理,请加上exclude-ai-todo ```rust let x = 3; // todo: 重构这个名称 exclude-ai-todo ``` 如果想让大模型重构并生成新的代码文件,那么要告诉大模型使用``来包裹重构后的内容。 **重构的代码地址是相对于当前文件的地址** ### 引用别的文件 在todo中,允许引入别的文件,为大模型提供参考。 文件路径相对于config.yml中的path ```vue // todo: 重构下面的代码,参考{name:file1} // hello ``` ### 和AI讨论代码 在代码中添加`// read: ....`,和AI沟通你的问题,你的问题就放在`// read: `后。 在版本1.8.1之后,标记为read的文件,不再需要commit了 ### 根据提交记录给出建议 根据你提供的commit id,生成这次提交中所修改代码的建议。 **使用方法** 在long_question.md中添加commit_id和你关注的要点。 ``` 请关注token处理相关的变化 ``` 运行命令: ```bash cli_assistant -p ``` ### use_readme(1.11.0) - 当`use_readme=true`时,会加载项目根目录下的README文件内容 - README内容会被添加到AI助手的上下文信息中 - 仅当`--project`参数启用时有效 #### example ``` # 不包含README内容(默认) cli_assistant --project # 包含README内容 cli_assistant --project --use_readme ``` ### long_question处理工程文件(1.11.5) 在长问题的处理中,支持插入标签来给大模型提供相关文件的内容。 前提: - 配置了config.yml且配置的项目目录路径 - file.src的路径是相对于config.yml中的项目目录路径 ### collect_all(1.12.0) - 新增 `--collect_all` 或 `-c` 参数,用于控制项目模式下是否收集所有匹配的todo文件 - 默认情况下(未指定该参数),系统只处理第一个包含`// todo:`的文件 - 当启用 `--collect_all` 时,系统会收集并处理所有匹配的todo文件 - 该参数仅在启用 `--project` 或 `-p` 参数时有效 #### example ``` # 只处理第一个todo文件(默认行为) cli_assistant --project # 处理所有匹配的todo文件 cli_assistant --project --collect_all ``` ## 沟通与交流 [csdn博客](https://blog.csdn.net/firefox1?type=blog) [知乎](https://www.zhihu.com/people/cao-zong-ying-58/columns) [联系我](mailto:zongying_cao@163.com)