Levon's Blog

微信: L6241425

第一次看到 DeepSeek Harness,我以为它只是给 DeepSeek 模型套了一层 Web UI。真正跑起来以后,我才发现重点不在模型,而在模型之外的那一层:它决定 Agent 能看到哪些文件、可以调用什么工具、怎样执行命令,以及每次行动如何被记录和约束。

DeepSeek Harness(命令名 dsh)就是这层执行框架。官方把它概括为 “ 一切皆插件 “:模型适配器、工具、会话、沙箱、存储、调度和 UI 都可以替换或重组。

可以先这样理解:

1
2
Agent = 模型 + Harness
Harness = 工作区 + 工具 + 权限 + 会话 + 执行循环 + UI
阅读全文 »

1. 什么是 AI Agent?

如果把传统的大语言模型(LLM)比作一个 “ 缸中大脑 “——知识渊博、文笔出众,但只能被动回答问题、无法主动与真实世界交互;那么 AI Agent(智能体) 就是给这个大脑装上了眼睛、双手和记事本,让它能够自主感知环境、进行规划并使用工具去完成复杂的现实目标。

阅读全文 »

1. 极简 Agent

很多人以为 Agent 底层有某种魔法,其实本质上就是一个 while 驱动的状态循环:

1
2
3
4
5
6
7
8
9
10
11
用户提问 

[LLM 决策] → 是否需要工具?
├── 否(直接回答) → 输出并结束循环
└── 是(返回函数名与参数)

[本地 Python 执行函数]

[将执行结果塞回上下文 messages]

[回到 LLM 决策,继续下一轮思考]
阅读全文 »

www.liuvv.com 的证书以前经常过期。表面看像是「域名在 Cloudflare,证书却没续上」,但真实结构并非如此:Cloudflare 只负责 DNS,访客真正访问的是腾讯云 CDN,浏览器看到的证书也安装在腾讯云 CDN 上。

本文记录一套适配该场景的免费自动化方案:GitHub Actions 定时运行 acme.sh,通过 Cloudflare DNS-01 验证申请 Let’s Encrypt 证书,再调用腾讯云 SSL/CDN API,把证书部署到 www.liuvv.com 的 CDN 加速域名。

阅读全文 »

你在编辑器里跟 AI 说「帮我把这个函数改改」,AI 真的去读了文件、改了代码。这件事背后至少有三个角色:编辑器、AI 程序,以及读文件改文件的那些能力。ACP(Agent Client Protocol)管的是第一段——编辑器和 AI 程序之间怎么说话。

阅读全文 »

单表过了千万行,查询变慢、索引胀、删旧数据删到手酸,这几件事经常一块来。第一反应往往是「要不要分表、分库分表」——其实 PostgreSQL 原生分区(L1)往往就够:应用里还是查一张 orders,库在底下拆成很多小表;查某个月,就只碰那个月的小表。

下文分两段:§1 先在同一维度上区分 L1 分区 / L2 同库分表 / L3 分库分表,环境按 PostgreSQL 14+。

阅读全文 »

1. 为什么我们没有直接用 Logs Insights

我第一次看到这套日志搜索方案时,其实有点疑惑:AWS 已经有 CloudWatch Logs Insights,为什么还要自己搭一条 Firehose -> S3 -> EC2 -> ripgrep 的链路?

后来把代码和部署手册看完,答案反而很朴素。我们不是想重新做一个日志平台,只是想解决一个更窄的问题:开发排查线上问题时,能不能低成本地搜最近几天的历史日志,而且不要每次手一抖就把账单扫上去。

阅读全文 »

1. 为什么我说 Runway 是把 Terraform 当库用

我以前对 Terraform 的默认理解很简单:业务仓库里放 .tf 文件,CI 跑 terraform plan,合并后再跑 terraform apply。Atlantis、Terraform Cloud、Spacelift 大多都是这个路子。

Runway 不是这么做的。

业务方只写 runway.yaml。Terraform 模块跟 Go server 一起被编进二进制里。部署时,server 解压模块、拼出一份临时的根 .tf,再启动一个 Terraform 子进程去 apply

所以这里说“把 Terraform 当库用”,不是说 Go 代码里真的 import terraform。它的意思是:Terraform 仍然是执行引擎,但模块版本、调用时机、输入生成、日志输出,都被平台代码接管了。

这篇记录我读这套设计时真正卡住的几个点:模块怎么塞进二进制,为什么解压目录不能随机,为什么 HCL 只是字符串模板,跨 stack 引用为什么一会儿走 Terraform、一会儿走 Go 代码。

阅读全文 »

1. 以为是 5 分钟升级,最后花了半天

这次升级 Gitea,我原本只想顺手把自建 runner 改成 ephemeral 模式。

预期很简单:Gitea 升到 1.26,act_runner register 加一个 --ephemeral,runner 跑完一个 job 自动退出。这样就不用再让 Fargate task 空等 30 分钟。

实际不是。

先是 runner 启不来,接着 job 卡在 queued,再接着发现 webhook 没发对事件,最后翻出两百多个 offline runner。问题单个看都不大,串起来就吃掉半天。

阅读全文 »
0%