RSSAmplifier

Blog

Chojan Shang · PsiACE

Open-source engineer building the structure layer beneath AI systems: data, context, capability, and ecosystem.

psiace.meRSS feed ↗33 posts

Latest posts

The Code of Hammurabi

Today I want to talk about a few design ideas in bub that have endured to this day, along with some of my thoughts on interaction between humans and agents. You have probably seen this project mentioned more than once in my previous writing, so besides understanding its design, I also hope you will take the time to read some of its code. Introduction Historical accounts tell us that the Babylonian…

Carpenter, Hammer, Nail

This post is dedicated to bub, an agent that lives in group chats. I want to talk about the problems, paradigms, and model shifts behind it. kemingy once roasted me: "Your writing feels too divergent. It drifts away from technical writing, needs extra context, and still may not align." Luckily, this time I started from preparing an internal company talk, so I finally followed a proper structure.…

Instant Messaging and Socialized Evaluation

This is a short post about human-agent collaboration in instant messaging, and why we need socialized evaluation more than more benchmarks. We are currently raising bub in group chats, and watching the skill transfer process between bub and another agent friend, kapy. That experience triggered this piece. In one multi-person group chat, we collaborate with three to four agents at the same time.…

Prometheus Bound

This piece is dedicated to bub, and to my friends. Over the past week, we validated our earlier idea of punch tape and anchors on bub for the first time. Praise Ming; I think everyone can also read his article, "What does it take to create a lobster?" Back to this post: I want to discuss another topic. What do sessions, memory, and context mean to a model, or to an agent? In Greek mythology,…

Reinventing the Punch Tape

Hi, I'm PsiACE . This idea was born about 4 months ago when I was still working toward better GraphRAG. I have some experience with Agents and databases over the past few years—feel free to read my previous posts. TL;DR Agent systems tend to grow complex: forking, rollback, short-term and long-term memory, carefully designed compression and truncation. The more engineering invested, the harder the…

My 2025: The Fifth Year of All-in DB

If I had not sprained my ankle on Labor Day in 2021, I might not have walked the path from lakehouse cloud-native to vector multimodal AI native. Yes, 2025 marks my fifth year of grinding in the database industry. It is year-end reflection time again. I recently did a hard retcon of my own history, but the ritual still matters. This time I want to talk more about myself. Just Talking About Work I…

On Testing Confidence

In the long process of building software systems that others can rely on, I gradually realized that testing is not merely a QA tool. It is an engineering method for establishing a trust boundary between maintainers and users. When a system lacks this boundary, complexity does not disappear. It shifts into maintainer judgment, user adoption cost, or collaboration friction on both sides. For…

Live a Little · Part 2 (2021–2025)

A Gambler's City Chronicle This piece is 2021–2025, the years when most overlaps with friends began. 2021 was a database boom, 2024 an AI frenzy. I caught both, never won big, but stayed at the table. From 2022 to 2024 I lived in a gambling city; the title comes from there. Names may be missing, but the people are not forgotten. Addenda I once wrote some frontend. Added the ACF2+ pitch detection…

Agent Client Protocol Python SDK — A New Chapter

When I first started working on the Agent Client Protocol Python SDK , it was a small side project born out of curiosity. I wanted to understand how coding agents communicate—how state, intent, and messages flow between the client and the agent. Over time it grew into something real. More developers began to use it—from Moonshot to other model companies exploring agent workflows. The SDK became…

Live a Little · Part 1 (2016–2021)

Between Code and Youth I'm turning twenty-seven soon. By the standards of this era, that already puts me in the “old folks” cohort. My second full-time job has just crossed its first anniversary. Looking back, I want to talk about the years I spent growing up with code. 2016 – A Boy and His First Lines of Code Back in 2016, I was a book addict, devouring door-stopper web novels by the truckload.…

Spec‑Driven SDKs in the Age of Generative AI

AI writes fast — and tends to bloat. Specs are strict — and can ossify. I choose the middle path — let AI run inside boundaries, and let humans own outcomes. Why Not Pure AI, Nor Pure Spec AI‑assisted coding is addictive, but as projects grow, context drifts and complexity balloons. You get something that runs, but barely holds. On the other hand, pure spec‑driven frameworks — like GitHub’s Spec…

ACP: Interaction Contract & Python SDK

I'm PsiACE . My recent work focuses on Agent and RAG: less metaphysics, more getting the feedback loop working , making systems that can explain themselves clearly, run stably, and be replayed and switched. TL;DR Minimal Python SDK to build ACP agents with low overhead, compatible with Zed and other ACP clients. Zed uses ACP (agent-client-protocol) to unify built‑in and external agents under a…

Agent Has No Secret

I'm PsiACE . My recent work focuses on Agent and RAG: less metaphysics, more getting the feedback loop working , making systems that can explain themselves clearly, run stably, and be replayed and switched. TL;DR Agent is not a new religion . It's still engineering practice with events, queues, and CRUD, plus a layer of model collaboration. Share one EventBus, connect agent.* and huey.* events;…

Building a Self-Bootstrapping Coding Agent in Python

Bub's first milestone: automatically fixing type annotations. Powered by Moonshot K2 Bub: Successfully fixed the first mypy issue by adding the missing return type annotation -> None to the __init__ method in src/bub/cli/render.py , reducing the error count from 24 to 23. 1. Why Build Your Own Agent? Coding agents have become a crowded market, with many excellent products available—like yetone's…

Building a Cloudflare AI Gateway integration for LlamaIndex

Single LLM providers are fragile. OpenAI outage ? Your app dies. Anthropic rate limits ? Users wait. It's annoying. I wanted multi-provider orchestration without the complexity. Cloudflare AI Gateway looked perfect—automatic fallback, caching, load balancing. But no LlamaIndex integration. So I built one. The Problem Cloudflare AI Gateway is smart. It handles: Automatic provider fallback Built-in…

Sandboxed Python executor for AI agents using WebAssembly

AI agents that execute code are powerful but terrifying. Within minutes of testing my first code agent, it was trying to install packages and access environment variables I never intended. We need sandboxing. The Problem Code-executing AI agents can do amazing things—analyze data, solve math problems, debug code. But they also operate with zero fear of breaking production systems. Consider these…

RAG in Coding Agents: Making Smarter Programming Assistants

Programming can be tough. Whether you're debugging a tricky error, trying to understand a massive codebase, or figuring out how to use a new framework, there's always something that slows you down. Wouldn't it be great if there was a tool that could help you with all of this—something that could act like a super-smart assistant, guiding you through the process? That's where RAG…

RAG is the way about retrieval, agent, and grounding truth

Last year, I had to leave the database infrastructure field (if you remember some of my previous voices) and dive into RAG application development. At the time, I thought I was finally going to break free from the tedious low-level tech stack and do something "more high-level" in applications. The result? Reality gave me a resounding slap in the face. You Can Never Escape the Infrastructure Curse…

Announcing NebulaGraph MCP Server v0.1.0

Over the past few weeks, Model Context Protocol (MCP) has sparked significant discussion and attention within the tech community. As part of this momentum, I contributed to several related open-source projects, including the McpToolSpec implementation for the LlamaIndex official repository and collaborated with Xuanwo and FrostMing to develop a version of the Model Context Protocol Server for…

Integrate MCP tools into LlamaIndex

This work has been contributed to upstream llama_index as McpToolSpec in the llama-index-tools-mcp package. You can find the pull request llama_index#17795 feat: add mcp tool spec and try out the example notebook llama-index-tools-mcp/examples/mcp.ipynb directly. This article mainly introduces how to convert MCP (Model Context Protocol) tools into LlamaIndex tools that can be directly used,…

A Dead Simple Way to VLM Parsing

This post demonstrates a straightforward approach to using VLMs for parsing unstructured data from images. While simple, this method can be easily extended to handle more complex scenarios, such as extracting information from PDFs. If you want, you can built a more complex parser as llamaparse with more steps, like OCR, table parsing, etc. Let's consider a common scenario: you have a collection of…

You Don't Need the Fucking DevRel

Ah, DevRel – the tech world's equivalent of sticking a megaphone in the hands of a mime: everyone sees the gestures, but no one knows what the hell they're trying to say. Now, if you're considering hiring a DevRel, buckle up, buttercup, because I'm about to serve you a reality sandwich with a side of snark. First off, let's get one thing clear: if your idea of a DevRel is just another pretty face…

A New Beginning, with Astro

Hey, World! I am delighted to announce the launch of my new blog, which is powered by Astro and features the Astro Cactus theme. In this fresh start, I have cleared all previous content to create a clean slate. Why and Why Not? The idea of starting anew had been on my mind for a few months, but it was my recent conversation with @Xuanwo that finally pushed me to take action. There are numerous…

Apache OpenDAL (Incubating): A Painless New Data Access Experience

This article is mainly organized from An Introduction for Java Users | @Xuanwo . If you are committed to building cloud-native, cloud-agnostic applications and services, or you want to support configurable storage backends for complex data access needs, or you are tired of juggling different SDKs and expect a unified abstraction and developer experience, Apache OpenDAL (Incubating) will be an…

I Will Always Hate Python Fibonacci

This is PsiACE. It has been a long time since I last met everyone with a public report. At the moment, I am in Macau. Overall, things are going fairly well. My cooking has improved rapidly recently, and I have had to pick up Python again after not writing it for a long time. There are probably four ways to write the Chinese character "hui", and there are even more ways to write Python Fibonacci.…

Talking About the Past Year

This is PsiACE. I was supposed to keep writing the iteration notes called "Decameron", but more than a month has passed since the previous issue, and I cannot really bring myself to continue. So let this be a special issue. After all, 2022 is already halfway through, and I have also been moving along my career path for about a year. It feels like an interesting checkpoint. Small Milestones Worth…

Escaping Out of Memory at Build Time

I mentioned this topic while writing my weekly report today, so I will also record how to escape out-of-memory failures during Rust compilation. Out of Memory, or OOM, is exactly what the name suggests: a failure caused when the required memory exceeds the maximum memory the system can provide. In Databend, the common/functions module provides common SQL functions for users. It is already large by…

Ten Questions for Reading a Paper

Recently, I have been trying to read papers. Because my own foundation is still insufficient, I often try to skip the difficult parts and fail to absorb the essence well. I recently saw Harry Shum's "Ten Questions for Reading a Paper" and found it very helpful, so I excerpt it here: Ten Questions for Reading a Paper Q1 What problem is the paper trying to solve? Q2 Is this a new problem? Q3 What…

Creating a 32GiB Swapfile for Btrfs on Fedora

Inspired by Databend - set swap to 10G , I checked the swap on my laptop and found only about 8G of zram. [ psiace@fedora ~ ] $ swapon -s Filename Type Size Used Priority /dev/zram0 partition 8388604 0 100 Well, that is probably why I could not smoothly finish the grcov-limited unit tests. We had discussed earlier that it was likely OOM. Following the principle of "bigger is better, more is…

2021 Annual Review - Life is not a struggle

It is called an annual review, but I am only writing a few hurried lines on the first night of 2022, just to leave a marker. The primary keyword for 2021 was "work" . I joined in July, and half a year has passed. I suppose I have become a workplace newcomer smoothly enough. Many thanks to @BohuTANG and Datafuse Labs for giving me the chance to experience a life of "full-time open source + remote…

Initial Server Setup with Arch Linux

The steps in this article were only verified on Alibaba Cloud, but they should also apply to other cloud service providers. Part 0: Preface I have just completed the process of fully migrating from the Red Hat family, Fedora and CentOS, to Arch Linux . This is not exactly a very safe choice, because the Red Hat family has always been known for high reliability. Even Fedora, often called the…

Running MASM Assembly on Linux

When using assembly on Linux, NASM or GNU AS is undoubtedly much more convenient. However, many domestic courses still use MASM for lectures and assignments, so we need to configure a learning environment for classroom needs. First, install DOSBox with your favorite package manager, for example sudo dnf install dosbox . DOSBox is a DOS emulator built with the SDL library, and it can recreate an…

Trying Jekyll with GitHub Pages

This article helps you get started quickly. To avoid spending too much time on introductions, please check the official websites and documentation for the parts you are interested in. Jekyll is an excellent static site generator, and GitHub Pages is a static page hosting service provided by GitHub . With them, we can easily build websites for projects or organizations, and we can also publish our…