惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
月光博客
月光博客
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
小众软件
小众软件
量子位
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
H
Help Net Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
GitHub - ZM-BAD/DAG-chat: Chat applications that use DAG ...
zm_bad · 2026-04-27 · via Hacker News: Show HN

DAG-chat Logo

Conversations, Reimagined as Graphs

中文文档 License: MIT

DAG-chat is a web-based LLM conversation application that organizes dialogues as Directed Acyclic Graphs — enabling branching, merging, and non-linear exploration of ideas that linear chat interfaces simply cannot express.

中文文档 / Chinese Documentation


Showcase

DAG-chat Demo

Why DAG-chat?

Traditional chat applications force conversations into a single, linear thread. Once you ask a question, you're locked into that path. DAG-chat breaks that limitation.

Feature Linear Chat DAG-chat
Branch from any response
Merge multiple responses
Explore alternative paths
Multi-model comparison
Non-destructive editing
Instant path switching

Features

  • DAG Conversation Structure — Branch and merge conversations freely. Every response is a node; every question can spawn new paths or converge existing ones.
  • Multi-LLM Support — Seamlessly switch between GLM, Kimi, Qwen, DeepSeek, MiniMax, and more through a unified interface.
  • Local LLM via Ollama — Run models locally with zero API costs. Automatically detects installed Ollama models.
  • Deep Thinking Mode — Toggle deep reasoning with expandable/collapsible thinking process display.
  • Streaming Responses — Real-time streaming of LLM responses with interactive rendering.
  • Markdown & Code — Rich rendering with syntax highlighting, LaTeX math, GFM tables, and emoji support.
  • Internationalization — Full i18n support with English and Chinese.

Architecture

graph LR
    subgraph Frontend ["Frontend — React + TypeScript + Vite"]
        UI[Chat UI & DAG Renderer]
        i18n[i18n — EN / ZH]
    end
    subgraph Backend ["Backend — FastAPI + Python 3.14"]
        API[REST API]
        Factory[Model Factory]
        DAGLogic[DAG Builder & Path Engine]
    end
    subgraph LLM ["LLM Providers"]
        GLM & Kimi & Qwen & DS[DeepSeek] & MM[MiniMax] & Ollama
    end
    subgraph Storage ["Databases"]
        MongoDB[(MongoDB — Messages & DAG)]
        MySQL[(MySQL — Dialogue Metadata)]
    end

    UI --> API
    API --> Factory --> GLM & Kimi & Qwen & DS & MM & Ollama
    API --> DAGLogic --> MongoDB
    API --> MySQL
Loading

How It Works

Every message in DAG-chat is a node with bidirectional references, forming a Directed Acyclic Graph:

          ┌─────────┐
          │  Root Q │ (first user question)
          └────┬────┘
               │
          ┌────▼────┐
          │  Ans A  │ (assistant response)
          └────┬────┘
          ┌────┴────┬─────────┐
          │         │         │
     ┌────▼───┐ ┌───▼───┐ ┌───▼───┐
     │  Q B1  │ │ Q B2  │ │ Q B3  │  ← Branching
     └────┬───┘ └───┬───┘ └──┬────┘
          │         │        │
     ┌────▼───┐ ┌───▼───┐    │
     │ Ans C  │ │ Ans D │    │
     └────┬───┘ └───┬───┘    │
          │         │        │
          └────┬────┘        │
          ┌────▼────┐        │
          │  Q E    │◄───────┘  ← Merging
          └────┬────┘
               │
          ┌────▼────┐
          │  Ans F  │
          └─────────┘
  • Branching — One assistant response can lead to multiple user follow-ups. Click a tab to switch between parallel branches.
  • Merging — One user question can reference multiple assistant responses as parents, converging different exploration paths.
  • Non-destructive — Switching paths never deletes anything. Every branch and merge is preserved and navigable.

Usage

Branching — Explore Different Directions

Not satisfied with one answer? Want to try a different angle?

  1. Hover over any user message — a branch icon appears on the left
  2. Click it — the assistant message above it is quoted in your input box
  3. Type your new question and send
  4. A tab bar appears, letting you switch between all branches

Branch icon on hover

You: "Explain quicksort"
  → AI: [explanation A]        ← original path
  → You: "Use Python instead"  ← branched from the same AI reply
  → AI: [explanation B]        ← new branch

Merging — Combine Multiple Insights

Want to cross-reference answers from different branches?

  1. Hover over any assistant message — a merge icon appears on the right
  2. Click it — the message is quoted in your input box
  3. Click more merge icons to quote additional assistant messages
  4. Type your follow-up question and send — all quoted messages become the context

Merge icon on hover

AI: [explanation A]  ──┐
AI: [explanation B]  ──┼── You: "Compare A and B, which is better?"
AI: [explanation C]        AI: [comparison]

Quick Tips

  • Switch paths — Click tabs above the conversation to jump between branches or merge sources
  • Non-destructive — Branching and merging never delete anything. All paths are preserved
  • Multi-model — Switch models mid-conversation to compare outputs from different LLMs

Quick Start

Prerequisites

  • Python >= 3.14
  • Node.js >= 24
  • Docker >= 29 (optional, for containerized deployment)
  • Docker Compose >= v5 (optional, for containerized deployment)
  • MongoDB on localhost:27017 (only for local dev without Docker)
  • MySQL on localhost:3306 (only for local dev without Docker)

Database Setup

Option A: Docker (recommended)

All dependencies (MongoDB, MySQL, backend, frontend) start with one command:

cp .env.example .env   # edit API keys
docker compose up --build

Option B: Local setup

  1. MySQL — Create the database and table:

    mysql -u root -p
    CREATE DATABASE IF NOT EXISTS dag_chat CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    SOURCE sql/t_conversations.sql;
  2. MongoDB — Ensure MongoDB is running on localhost:27017. The dag_chat database will be created automatically on first use.

Configuration

Copy the example environment file and fill in your API keys:

cp .env.example .env

Edit .env with your LLM API keys (GLM, Kimi, Qwen, DeepSeek, MiniMax) and MySQL password.

Don't have API keys? No problem — see Using Ollama (Free, No API Keys) below.

Launch

git clone https://github.com/ZM-BAD/DAG-chat.git
cd DAG-chat

# Start both frontend and backend
./start.sh --all
Manual start (optional)

Backend:

source ../.venv/bin/activate
cd backend && pip install -r requirements.txt
python3 run_api.py

Frontend:

cd frontend && npm install --legacy-peer-deps
npm run dev

Stop all services: ./start.sh --stop

Using Ollama (Free, No API Keys)

DAG-chat supports Ollama for running LLMs locally — completely free, no API keys required. This is the easiest way to get started.

1. Install Ollama

# macOS
brew install ollama

# Linux
curl -fsSL https://ollama.com/install.sh | sh

# Or download from https://ollama.com/download

2. Pull a Model

# Recommended for Chinese & English (8B, ~5GB)
ollama pull qwen3:8b

# Other good options:
ollama pull llama3.2          # English-focused, smaller
ollama pull deepseek-r1:8b    # Supports reasoning
ollama pull glm4:9b           # Chinese-focused

3. Start Ollama

ollama serve

Ollama runs on http://localhost:11434 by default. DAG-chat will automatically detect it and list your installed models in the model selector.

4. Launch DAG-chat

./start.sh --all

That's it — no API keys needed. Select any Ollama - ... model from the dropdown and start chatting.

Configure Default Model (Optional)

If you want to set a default Ollama model, add to .env:

OLLAMA_MODEL=qwen3:8b

Requirements

  • RAM: 8GB+ for 7-8B models, 16GB+ for 13B models
  • GPU: Optional but significantly faster (CUDA, Metal, or Vulkan)
  • Disk: 4-10GB per model

License

This project is licensed under the MIT License.

Copyright (c) 2025-present 周铭 (ZM-BAD)