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

推荐订阅源

IT之家
IT之家
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
爱范儿
爱范儿
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
Y
Y Combinator Blog
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
M
MIT News - Artificial intelligence
博客园 - Franky
V
Visual Studio Blog
I
InfoQ
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
博客园 - 司徒正美
L
LangChain Blog

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)