迟来的拥抱——向AI(1)
本文最后更新于:2 分钟前
最近正在准备毕设,深感自己已经落后于AI时代,遂开始学习AI应用相关的内容,更加底层的算法层面的内容自认为并不适合我。遂作此笔记
基础使用
市场上vibe coding的工具不少,诸如codex和claude code等,这里我就暂时以claude code作为入门
环境:Ubuntu 20.04 of WSL2
终端直接输入
1 | |
即可进行环境安装,国内环境不支持该脚本的安装。若是curl的响应302说明需要接入代理了。具体接代理的方式这里就不做详细说明了。
安装完成后记得按提示配置一下环境变量
大模型这里选择deepseek v3.1(对于国内大多数小白如我来说算比较方便的了,而且一般都有做claude code的适配)
首先去deepseek开放平台注册账号并充值额度,随后创建一个api key,记住你的key

然后将下面的信息写在你的shell配置中(我的是~/.zshrc),然后source一下重新生效即可
1 | |
随后在终端输入claude即可开始使用了
会让你信任你当前的目录,和vscode类似的,选yes就行

然后就可以在对话框提出自己的需求了。可以看到自己使用的模型

双击Ctrl+c退出会话,claude --resume进入tui界面的历史会话

几种模式,按shift + Tab循环切换模式:
- 默认模式:cc表现最为谨慎,一切修改文件/创建文件时都需要经过用户同意
- plan mode:规划模式,只讨论不执行,适合构思
- 信任模式:一切文件读写不需要经过用户同意
以上三种模式中命令执行都需要经过用户同意
输入?进行快捷键的提示
输入!执行bash命令
输入Ctrl+g跳到文本编辑器进行输入,如我在终端就跳到vim,有些情况可能是vs code或者notepad等,取决于你的默认文本编辑器
输入Ctrl+o展示上下文
/clear清除上下文
/rewind用于回滚会话,但是仅能回滚claude自己写的,由命令或者程序执行产生的文件不会回滚
/tasks用于查看后台任务,如claude可能运行一个http服务导致会话阻塞,按esc回到对话界面,阻塞程序就跑到后台去运行了,输入/tasks即可回到后台程序
/resume用于回到之前的对话(按两下esc也行)
/mcp用于查看选择已添加的mcp服务器
上下文压缩
/compact直接压缩
或者/compact <压缩策略,如重点保留用户信息>
按Ctrl + o查看上下文
持久化上下文
/init命令会初始化claude工程目录,生成一个CLAUDE.md

最开始是英文的

当然我们可以拜托claude code帮忙翻译一下

其中我们可以修改任意提示词
(邪修到的方法:在提示词结尾加上一句“当会话结束时附带一句’Hello World’(或者其他啥都行),可以判断截止当前对话模型是否出现幻觉”

然后重进会话,末尾确实带上了个喵

输入/memory能够选择全局CLAUDE.md以及项目CLAUDE.md

选中后即可在文本编辑器中打开

Hook
在某些事件下触发特定执行一段命令,如工具使用前后,工具调用失败等情况

随后选择在什么工具调用后来执行我们的hook,Write(文件写操作),Edit(文件编辑操作)

example中给出了一些示例用法,可以看到默认是传过来了一个json,这里使用jq来解析,那么我们来看看传过来了个啥

将文件内容写到out.json中
1 | |

保存命令后claude code会让我们选择应该把这个hook保存到哪一级
分为三级
- 第一级仅仅是本地项目级别的,会将hook的配置存放到当前项目
./claude/settings.local.json中,.gitignore中会将这个文件加入其中不会一起存到仓库中 - 第二级是对本项目生效的,将结果保存在当前项目的
./claude/settings.json中,会一起被推到git中,所有参与该项目的人能使用 - 第三级是用户级别的,保存在本机home目录下的./claude目录下,仅对当前用户生效,我这选择了第二个后就成功保存了,然后按esc回到对话界面就行了

这里简单验证下hook

可以看到这里导出的json文件体了,其中filePath这个字段就是我们写文件的路径,json中还包含了调用tool的名字以及输入输出等信息

以下面一行代码来体现它的意义
1 | |
可以看到大模型帮我们生成了一行html代码了

然后就抽风了(?),写完文件了又rm了再用Bash命令执行,真神奇

由于命令执行并非写文件,所以并没有触发hook

为了验证这里强制让他用Write工具写

成功触发hook并对生成的文件使用xargs传递文件名,传入prettier进行格式化

后续Ctrl+o查看详细对话和思考过程时发现了问题所在,大模型知道prettier钩子的存在然后擅作主张去尝试绕过了,ds你牛大了

AgentSkill
关于Agent Skill的内容在另一篇文章
下面有个场景,假设我每天都需要写一份日报,记录当天使用ai开发了哪些功能,做了哪些改动,并且这个总结需要遵循某种格式,我们当然可以将对应的要求直接输入到claude code的输入框中,但是如果每天都复制一下粘贴一下未免过于麻烦了。这种场景就非常适合skills了
这里主要演示claude code实操,首先在用户目录的.claude/skills目录下创建一个目录,作为skill目录,例如这里我想赋予claude code的能力就是创建一个日报
1 | |
随后在daily-report目录下创建一个SKILL.md文件,内容可参考案例:
1 | |
随后重启claude code,输入/skills,可以看到已经成功加载了我们的日报skill了

回到对话框进行对话,大模型成功识别到我们的daily-report的skill

当然上面的skill是由大模型发现并调用的,我们也可以主动去调用这个skill

SubAgent
输入/agent创建一个子agent

与之前一样的分层次创建子agent,我们希望多项目复用的话就写在home下吧,不过这里只是做测试学习,就选择当前项目里

然后暂时选择第一种推荐的方式,选择由claude code自动生成

描述该SubAgent的主要功能以及何时来调用它

随后选择SubAgent可用的工具,我们这里选择Read-Only即可,代码审计仅需读取文件即可

模型的话由于我们现在是在用deepseek,因此选4,与主对话模型一致

选颜色这一步随意

随后的提示词界面若有需求去修改保存后,我们就可以看到已经成功创建了一个SubAgent

让gemini随便写了个存在ssti的多文件flask项目,基础效果也是达到了



AgentSkill与SubAgent的区别
若是AgentSkill,则在运行过程中会完全依赖于主对话的上下文,而SubAgent则会单独起一个会话空间,拥有独立的上下文。如果”开发”是主agent的首要任务,那么如果使用AgentSkill就会挤占主会话宝贵的上下文空间,从而导致幻觉、token飙升等问题。而如果让一个子agent来做这些杂七杂八的任务,就不会挤占主agent的上下文,仅仅是返回一个报告交给主agent处理,这样就节省了主agent的上下文空间
SubAgent适合处理与上下文关系比较小但是对上下文影响比较大的工作
对接MCP
关于MCP的内容在另一篇文章
以figma为例,figma官方提供了mcp服务器,使用命令
1 | |
来向claude code中添加mcp服务器
输入/mcp后选中figma的mcp server,第一次使用需要认证,下图是认证后的样子

选择view tools就能看到figma官方为我们提供了哪些工具列表

去figma创作一个设计图(这里直接用模板了),然后复制link

到cc中,会自动识别并调用figma工具
