1. 文章
1.1 Sam Altman 与开发者的一小时:GPT-5 的坦白、招聘放缓、以及 2026 年最担心的事 | 宝玉的分享


1.2 LangChain Skills 模式实战:构建按需加载知识的 SQL 助手
-
构建复杂的 AI Agent 时,开发者往往陷入两难境地:是将所有上下文(数据库表结构、API 文档、业务规则)一次性注入 System Prompt,导致上下文窗口(Context Window)溢出且分散模型注意力?
-
Skills 模式(Skills Pattern) 提供了一条优雅的中间路线。它通过动态加载所需知识,实现了上下文的高效利用。LangChain 对此模式的原生支持,意味着我们可以更轻松地构建具备“按需学习”能力的 Agent。
-
Skills 模式:基于渐进式披露的解决方案Skills 模式基于渐进式披露(Progressive Disclosure)原则,将知识获取过程分层处理:
- Agent 初始状态:仅掌握有哪些“技能”(Skills)及其简要描述(Description),保持轻量级。
- 运行时加载:当面对具体问题(如“查询库存”)时,Agent 主动调用工具(load_skill)加载该技能详细的上下文(Schema + Prompt)。
- 执行任务:基于加载的精确上下文,执行具体的任务(如编写并执行 SQL)。这种模式有效支持了无限扩展和团队解耦,使 Agent 能够适应日益复杂的业务场景。
1.3 让 AI 不忘事:LangChain 团队的上下文管理实践
-
Deep Agents SDK 是 LangChain 推出的开源 Agent Harness(智能体套件)框架,基于 LangChain 新版 API 构建,是一个开箱即用的深度智能体开发框架,帮助 AI Agent 处理长任务时更好地管理上下文。
-
Deep Agents 作为 Harness,让你的 Agent 具备:
- 文件系统抽象(读写、搜索、执行)
- 上下文压缩管理(本文重点)
- 子 Agent 派生能力
- 开发调试工具链
-
Deep Agents = LangChain 构建的 Agent 套件核心价值:让 Agent 能处理更长任务,并在上下文接近上限时不容易“失忆”
-
LangChain 的 Deep Agents SDK 采用了分层压缩策略,按不同触发频率执行三种压缩技术:
-
- 大型工具结果卸载:实时触发
- 大型工具输入卸载:例如达到 85% 上下文使用率时触发
-
-
如果你在构建 AI Agent
- 不要忽视上下文管理:再聪明的模型,记忆满了也会变傻
- 分层压缩是正道:先卸载大结果,再卸载大输入,最后摘要
- 保留目标感:无论如何压缩,都要让 AI 知道我在做什么

1.4 Vibe PPT?这个开源AI PPT项目,Github 6.3K Star了! - 知乎
- 原生API填空派:借助模板,将内容填入到预设的模板中,指明在坐标(x,y)出放一个文本框,内容是A,颜色是B,通过脚本调用 PowerPoint 自身的接口来创建元素。优势是原始对象操作,劣势就是死板,依靠模板。
- 代码渲染派:LLM写HTML,然后渲染出来,各种样式也可以预置,也可以针对性修改,会显得灵活一点,有样式创新性,但没那么高。
- 图像生成派:把PPT当作画画,把每页内容直接画出来,因为Nano Banana Pro的出现,上限无比高,但不易修改,成本也过高,每次修改都是重新生成图片,当然也有可以图层操作。

1.5 现在是 2026 年,直接用 Postgres 吧 | Tiger Data — It’s 2026, Just Use Postgres | Tiger Data


- 安装扩展
-- Full-text search with BM25
CREATE EXTENSION pg_textsearch;
-- Vector search for AI
CREATE EXTENSION vector;
CREATE EXTENSION vectorscale;
-- AI embeddings & RAG workflows
CREATE EXTENSION ai;
-- Time-series
CREATE EXTENSION timescaledb;
-- Message queues
CREATE EXTENSION pgmq;
-- Scheduled jobs
CREATE EXTENSION pg_cron;
-- Geospatial
CREATE EXTENSION postgis;- 实现与 Elasticsearch 完全相同的 BM25 算法
-- Create table
CREATE TABLE articles (
id SERIAL PRIMARY KEY,
title TEXT,
content TEXT
);
-- Create BM25 index
CREATE INDEX idx_articles_bm25 ON articles USING bm25(content)
WITH (text_config = 'english');
-- Search with BM25 scoring
SELECT title, -(content <@> 'database optimization') as score
FROM articles
ORDER BY content <@> 'database optimization'
LIMIT 10;
-- 混合搜索
SELECT
title,
-(content <@> 'database optimization') as bm25_score,
embedding <=> query_embedding as vector_distance,
0.7 * (-(content <@> 'database optimization')) +
0.3 * (1 - (embedding <=> query_embedding)) as hybrid_score
FROM articles
ORDER BY hybrid_score DESC
LIMIT 10;- 向量搜索
-- Enable extensions
CREATE EXTENSION vector;
CREATE EXTENSION vectorscale CASCADE;
-- Table with embeddings
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(1536)
);
-- High-performance index (DiskANN)
CREATE INDEX idx_docs_embedding ON documents USING diskann(embedding);
-- Find similar documents
SELECT content, embedding <=> '[0.1, 0.2, ...]'::vector as distance
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
LIMIT 10;
-- 自动生成向量
SELECT ai.create_vectorizer(
'documents'::regclass,
loading => ai.loading_column(column_name=>'content'),
embedding => ai.embedding_openai(model=>'text-embedding-3-small', dimensions=>'1536')
);- 时间序列
-- Enable TimescaleDB
CREATE EXTENSION timescaledb;
-- Create table
CREATE TABLE metrics (
time TIMESTAMPTZ NOT NULL,
device_id TEXT,
temperature DOUBLE PRECISION
);
-- Convert to hypertable
SELECT create_hypertable('metrics', 'time');
-- Query with time buckets
SELECT time_bucket('1 hour', time) as hour,
AVG(temperature)
FROM metrics
WHERE time > NOW() - INTERVAL '24 hours'
GROUP BY hour;
-- Auto-delete old data
SELECT add_retention_policy('metrics', INTERVAL '30 days');
-- Compression (90% storage reduction)
ALTER TABLE metrics SET (timescaledb.compress);
SELECT add_compression_policy('metrics', INTERVAL '7 days');- 缓存
-- UNLOGGED = no WAL overhead, faster writes
CREATE UNLOGGED TABLE cache (
key TEXT PRIMARY KEY,
value JSONB,
expires_at TIMESTAMPTZ
);
-- Set with expiration
INSERT INTO cache (key, value, expires_at)
VALUES ('user:123', '{"name": "Alice"}', NOW() + INTERVAL '1 hour')
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;
-- Get
SELECT value FROM cache WHERE key = 'user:123' AND expires_at > NOW();
-- Cleanup (schedule with pg_cron)
DELETE FROM cache WHERE expires_at < NOW();- 消息队列
CREATE EXTENSION pgmq;
SELECT pgmq.create('my_queue');
-- Send
SELECT pgmq.send('my_queue', '{"event": "signup", "user_id": 123}');
-- Receive (with visibility timeout)
SELECT * FROM pgmq.read('my_queue', 30, 5);
-- Delete after processing
SELECT pgmq.delete('my_queue', msg_id);
-- 使用native SKIP LOCKED pattern
CREATE TABLE jobs (
id SERIAL PRIMARY KEY,
payload JSONB,
status TEXT DEFAULT 'pending'
);
-- Worker claims job atomically
UPDATE jobs SET status = 'processing'
WHERE id = (
SELECT id FROM jobs WHERE status = 'pending'
FOR UPDATE SKIP LOCKED LIMIT 1
) RETURNING *;- 文档模式
CREATE TABLE users (
id SERIAL PRIMARY KEY,
data JSONB
);
-- Insert nested document
INSERT INTO users (data) VALUES ('{
"name": "Alice",
"profile": {"bio": "Developer", "links": ["github.com/alice"]}
}');
-- Query nested fields
SELECT data->>'name', data->'profile'->>'bio'
FROM users
WHERE data->'profile'->>'bio' LIKE '%Developer%';
-- Index JSON fields
CREATE INDEX idx_users_email ON users ((data->>'email'));- GIS
CREATE EXTENSION postgis;
CREATE TABLE stores (
id SERIAL PRIMARY KEY,
name TEXT,
location GEOGRAPHY(POINT, 4326)
);
-- Find stores within 5km
SELECT name, ST_Distance(location, ST_MakePoint(-122.4, 37.78)::geography) as meters
FROM stores
WHERE ST_DWithin(location, ST_MakePoint(-122.4, 37.78)::geography, 5000);- 定时任务
CREATE EXTENSION pg_cron;
-- Run every hour
SELECT cron.schedule('cleanup', '0 * * * *',
$$DELETE FROM cache WHERE expires_at < NOW()$$);
-- Nightly rollup
SELECT cron.schedule('rollup', '0 2 * * *',
$$REFRESH MATERIALIZED VIEW CONCURRENTLY daily_stats$$);- 混合搜索
-- Reciprocal Rank Fusion: combine keyword + semantic search
WITH bm25 AS (
SELECT id, ROW_NUMBER() OVER (ORDER BY content <@> $1) as rank
FROM documents LIMIT 20
),
vectors AS (
SELECT id, ROW_NUMBER() OVER (ORDER BY embedding <=> $2) as rank
FROM documents LIMIT 20
)
SELECT d.*,
1.0/(60 + COALESCE(b.rank, 1000)) +
1.0/(60 + COALESCE(v.rank, 1000)) as score
FROM documents d
LEFT JOIN bm25 b ON d.id = b.id
LEFT JOIN vectors v ON d.id = v.id
WHERE b.id IS NOT NULL OR v.id IS NOT NULL
ORDER BY score DESC LIMIT 10;- 模糊搜索
CREATE EXTENSION pg_trgm;
CREATE INDEX idx_name_trgm ON products USING GIN (name gin_trgm_ops);
-- Finds "PostgreSQL" even with typo
SELECT name FROM products
WHERE name % 'posgresql'
ORDER BY similarity(name, 'posgresql') DESC;- 图遍历
-- Find all reports under a manager (org chart)
WITH RECURSIVE org_tree AS (
SELECT id, name, manager_id, 1 as depth
FROM employees WHERE id = 42
UNION ALL
SELECT e.id, e.name, e.manager_id, t.depth + 1
FROM employees e
JOIN org_tree t ON e.manager_id = t.id
WHERE t.depth < 10
)
SELECT * FROM org_tree;1.6 ChatGPT - 如何执行Postgres的向量与全文搜索
我与ChatGPT聊的关于混合搜索的方案。
2. 项目
2.1 goodreasonai/ScrapeServ: A self-hosted API that takes a URL and returns a file with browser screenshots.
goodreasonai/ScrapeServ
A self-hosted API that takes a URL and returns a file with browser screenshots.
部署ScrapeServ作为Docker容器服务,然后向这个服务发送一个链接,将会收到网页上的数据文件和截图。
2.2 netease-youdao/LobsterAI: Your 24/7 all-scenario AI agent that gets work done for you.
netease-youdao/LobsterAI
Your 24/7 all-scenario AI agent that gets work done for you.
LobsterAI 是由网易有道 开发的全场景个人助理 Agent。它 7×24 小时待命,能够帮你完成日常办公中的各类事务 —— 数据分析、制作 PPT、生成视频、撰写文档、搜索信息、收发邮件、定时任务,以及更多。
2.3 DayuanJiang/next-ai-draw-io: A next.js web application that integrates AI capabilities with draw.io diagrams. This app allows you to create, modify, and enhance diagrams through natural language commands and AI-assisted visualization.
DayuanJiang/next-ai-draw-io
A next.js web application that integrates AI capabilities with draw.io diagrams. This app allows you to create, modify, and enhance diagrams through natural language commands and AI-assisted visualization.
基于 Next.js 的 Web 应用程序,它将 AI 功能与 draw.io 图表集成在一起。用户可以通过自然语言命令和 AI 辅助可视化来创建、修改和增强图表。
评论