今天打开电脑 idea 响应非常慢,会瞬间吃满 CPU ,界面下发提示无响应,我没有兴趣 dump (公司的破项目看着都恶心呢),去官方论坛搜了搜,看起来不止我一个人。
看起来像个内存泄露,在打开大型项目时,较长时间不关机有几率触发。

参考链接:
https://youtrack.jetbrains.com/issue/IDEA-383438/IDEA-2025.3.1-freezes-when-opening-big-Maven-project-at-org.jetbrains.idea.maven.project.MavenProjectCompanion.read

问题

如果对一个 InputStream 调用 read 方法,在没有数据可读取的时候,理论上会处于阻塞状态。

This method blocks until input data is available, end of file is detected, or an exception is thrown.

那么如果一个 IO 流,曾经有数据可读取但已经被读取完毕,但后续仍有可能增加可读取的数据,此时调用 read ,是不是仍然属于这里所说的“blocks until input data is available”,也就是,是否会发生阻塞?

例子

我获取了 Process 的 InputStream ,里面的内容是这个进程的标准输出(以及错误输出)。
显然,进程的输出是间断性的,我想知道现有输出已经被读完的情况下,此时再调用 read ,是否还会处于阻塞状态?

    private ProcessBuilder dumpProcessBuilder;
    ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(1024);
    ...
    dumpProcessBuilder.redirectErrorStream(true);
    ...
    Process dumpProcess = dumpProcessBuilder.start();
    try (InputStream in = procForReader.getInputStream()) {
        byte[] buf = new byte[1024];
        int bytesRead = 0;
        while ((bytesRead = in.read(buf)) != -1) {
            output.write(buf, 0, outputBuffer);
        }
    }
    ...

最近想搞一搞 agent cli 开发。UI 层面,node 有比较成熟的 ink 方案。

但是看了下 go TUI 相关的解决方案,描述 UI 的方式有点别扭。当然可能是我没找到更好的实现思路。

所以实现了 rego ,取 react + go 的意思。

话不多说,先上代码。

package main

import (
    "fmt"
    "github.com/erweixin/rego"
)

func App(c rego.C) rego.Node {
    count := rego.Use(c, "count", 0)
    
    rego.UseKey(c, func(key rego.Key, r rune) {
        switch r {
        case '+': count.Set(count.Val + 1)
        case '-': count.Set(count.Val - 1)
        case 'q': c.Quit()
        }
    })
    
    return rego.VStack(
        rego.Text("Rego Counter").Bold(),
        rego.Text(fmt.Sprintf("Count: %d", count.Val)),
        rego.Spacer(),
        rego.Text("[+] 增加  [-] 减少  [q] 退出").Dim(),
    )
}

func main() {
    rego.Run(App)
}

运行效果:

Rego Counter
Count: 0

[+] 增加  [-] 减少  [q] 退出

仓库: https://github.com/erweixin/rego

对于多组件的使用可以参考: https://github.com/erweixin/rego/tree/main/examples/gallery

再贴一个 stream 组件的 demo 吧。

https://github.com/erweixin/rego/blob/main/examples/stream/stream_demo.gif

欢迎各位大佬试用、提 Issue 或 PR 。如果你也喜欢这种“在终端写 React”的思路,欢迎给个 Star 支持一下!👏

之前在这发布过的,最近花了些时间给这个小工具写了份比较详细的文档了,请查阅

文档: https://www.gonc.cc/docs/

Github: https://github.com/threatexpert/gonc

自己平时使用的场景:

1 、公司的 VPN 好久不用了,家里 CGNAT 宽带和公司建立 P2P 的 HTTP+SOCKS5 代理隧道,自由访问公司网络。

2 、和分公司内网直接 P2P 快速(实时压缩)传输文件/目录。

3 、内置服务模块满足其他场景,例如 TCP/UDP 端口转发、类 frp 反向代理、甚至科学上网,一个工具都胜任了。

还真别说,通过打洞建立 P2P 的加密隧道,定期端口轮换的功能本来是针对运营商 Qos 的,在科学上网方面有独特的效果。

基于 Pydantic-Resolve 和 FastAPI-Voyager 的 Clean Architecture 实践

篇幅较长无法粘贴全文,原文链接:
https://github.com/allmonday/A-Python-web-development-methodology-for-complex-business-scenarios/blob/main/README.zh.md

一套面向复杂业务场景的 Python Web 开发方法论

目录


1. 背景与问题

1.1 当前主流做法及其痛点

在 Python Web 开发中,处理复杂业务场景时,开发者通常采用以下几种模式:

模式一:直接使用 ORM (如 SQLAlchemy )

@router.get("/teams/{team_id}", response_model=TeamDetail)
async def get_team(team_id: int, session: AsyncSession = Depends(get_session)):
    # 获取团队基本信息
    team = await session.get(Team, team_id)

    # 获取 Sprint 列表
    sprints = await session.execute(
        select(Sprint).where(Sprint.team_id == team_id)
    )
    team.sprints = sprints.scalars().all()

    # 获取每个 Sprint 的 Story
    for sprint in team.sprints:
        stories = await session.execute(
            select(Story).where(Story.sprint_id == sprint.id)
        )
        sprint.stories = stories.scalars().all()

        # 获取每个 Story 的 Task
        for story in sprint.stories:
            tasks = await session.execute(
                select(Task).where(Task.story_id == story.id)
            )
            story.tasks = tasks.scalars().all()

            # 获取每个 Task 的负责人
            for task in story.tasks:
                task.owner = await session.get(User, task.owner_id)

    return team

这种做法在简单场景下确实很直观,能够快速上手。ORM 的类型安全特性也能在编译时发现一些错误,而且与数据库表结构的一一对应关系让代码容易理解。但当我们面对真正的业务场景时,这种方式的缺陷很快就暴露出来了。

最致命的问题是 N+1 查询。虽然代码看起来很清晰,但执行时会产生大量的数据库查询。每当我们访问一个关联关系时,ORM 就会发起一次新的查询。在深层嵌套的情况下,查询数量会呈指数级增长。更糟糕的是,这种性能问题在开发阶段不容易发现,只有当数据量积累到一定程度后才会显现出来,那时候往往已经太晚了。

代码的组织方式也是个问题。数据获取的逻辑散落在各个嵌套的循环中,业务逻辑和数据获取逻辑混在一起,难以阅读和维护。当需要修改业务规则时,开发者不得不在复杂的嵌套结构中寻找修改点,很容易引入新的 bug 。性能更是不可控,随着数据量的增长,查询效率会急剧下降,而这些性能瓶颈很难在代码层面直接观察到。

此外,相似的数据获取逻辑会在多个 API 中重复出现,导致大量代码冗余。当一个 API 需要获取"团队及其 Sprint",另一个 API 需要"团队及其成员"时,即使它们的查询逻辑非常相似,也不得不重复编写。这违反了 DRY ( Don't Repeat Yourself )原则,增加了维护成本。

模式二:使用 ORM 的 Eager Loading

@router.get("/teams/{team_id}", response_model=TeamDetail)
async def get_team(team_id: int, session: AsyncSession = Depends(get_session)):
    # 使用 joinedload 预加载关联数据
    result = await session.execute(
        select(Team)
        .options(
            joinedload(Team.sprints)
            .joinedload(Sprint.stories)
            .joinedload(Story.tasks)
            .joinedload(Task.owner)
        )
        .where(Team.id == team_id)
    )
    return result.scalar_one()

为了解决 N+1 查询问题,ORM 提供了 Eager Loading 机制,让我们可以通过 joinedloadselectinload 等方式预先加载关联数据。代码变得更简洁了,性能问题也得到了缓解。但这种方案也带来了新的挑战。

最明显的问题是笛卡尔积。当我们使用多层 JOIN 预加载关联数据时,数据库返回的数据量会急剧膨胀。比如一个团队有 10 个 Sprint ,每个 Sprint 有 10 个 Story ,每个 Story 有 10 个 Task ,那么 JOIN 的结果集会包含 1000 行数据,即使每行的数据量不大,也会给网络传输和内存占用带来压力。

更严重的问题是灵活性差。Eager Loading 的策略是在代码中硬编码的,所有使用同一个 Model 的 API 都会执行相同的预加载逻辑。但不同的 API 往往需要不同的数据。比如一个 API 只需要团队的基本信息,另一个 API 需要团队的 Sprint ,还有一个 API 需要团队的成员。如果统一使用 Eager Loading 加载所有关联数据,就会出现过度获取的问题,前端不需要的数据也被查询和传输了,浪费了资源。

配置 Eager Loading 本身就很复杂。开发者需要理解 lazyjoinedloadselectinloadsubquery 等多种加载策略的区别,知道什么时候用哪一种,以及它们各自会有什么副作用。这种配置错误很容易导致性能问题或意外的数据加载行为。而且,这种"一刀切"的配置方式意味着所有 API 都使用相同的加载策略,无法针对特定场景进行优化。

模式三:手动组装数据

@router.get("/teams/{team_id}", response_model=TeamDetail)
async def get_team(team_id: int, session: AsyncSession = Depends(get_session)):
    # 1. 批量获取所有需要的数据
    team = await session.get(Team, team_id)

    sprints_result = await session.execute(
        select(Sprint).where(Sprint.team_id == team_id)
    )
    sprint_ids = [s.id for s in sprints_result.scalars().all()]

    stories_result = await session.execute(
        select(Story).where(Story.sprint_id.in_(sprint_ids))
    )
    story_ids = [s.id for s in stories_result.scalars().all()]

    tasks_result = await session.execute(
        select(Task).where(Story.id.in_(story_ids))
    )
    tasks = tasks_result.scalars().all()

    owner_ids = list(set(t.owner_id for t in tasks))
    owners_result = await session.execute(
        select(User).where(User.id.in_(owner_ids))
    )
    owners = {u.id: u for u in owners_result.scalars().all()}

    # 2. 手动组装数据结构
    sprint_dict = {s.id: s for s in sprints_result.scalars().all()}
    story_dict = {s.id: s for s in stories_result.scalars().all()}

    for story in story_dict.values():
        story.tasks = [t for t in tasks if t.story_id == story.id]
        for task in story.tasks:
            task.owner = owners.get(task.owner_id)

    for sprint in sprint_dict.values():
        sprint.stories = [s for s in story_dict.values() if s.sprint_id == sprint.id]

    team.sprints = list(sprint_dict.values())

    return team

为了获得最优的性能和精确的数据控制,有经验的开发者会选择手动组装数据。这种方式完全掌控查询逻辑,可以精确控制每个查询的 SQL 语句,避免不必要的数据库访问。通过批量查询和智能的数据组装,可以获得最佳的性能,而且没有冗余数据。

但这种方式的代价是代码变得非常冗长。如上面的例子所示,为了获取一个团队的完整信息,我们需要编写多个查询,手动构建数据字典,然后通过嵌套循环组装数据。代码的长度和复杂度都大幅增加,而真正表达业务逻辑的代码反而被淹没在数据组装的细节中。

更容易出错也是个大问题。手动组装数据涉及到大量的索引操作和循环嵌套,很容易出现索引错误、空指针引用等 bug 。而且这些错误往往只有在运行时、特定数据条件下才会暴露,难以在开发阶段发现。

维护成本更是高昂。当业务规则发生变化时(比如需要添加一个新的关联关系),开发者需要在所有相关的 API 中修改数据组装逻辑。如果遗漏了某个地方,就会导致数据不一致。而且,相似的数据组装逻辑会在多个 API 中重复出现,违反了 DRY 原则。

最根本的问题是,这种代码已经变成了纯粹的数据搬运工,看不出任何业务意图。代码中充满了字典操作、循环嵌套、索引查找,而这些都是技术细节,与业务需求毫无关系。新加入的团队成员很难从这些代码中理解业务逻辑,业务知识的传递变得异常困难。

模式四:使用 GraphQL

type Query {
    team(id: ID!): Team
}

type Team {
    id: ID!
    name: String!
    sprints: [Sprint!]!
}

type Sprint {
    id: ID!
    name: String!
    stories: [Story!]!
}

type Story {
    id: ID!
    name: String!
    tasks: [Task!]!
}

type Task {
    id: ID!
    name: String!
    owner: User!
}

GraphQL 确实是一个很有吸引力的方案。前端可以按需获取数据,需要什么字段就查什么字段,不会有过度获取的问题。它提供了类型安全的查询接口,而且通过 DataLoader 可以自动解决 N+1 查询问题。这些特性让 GraphQL 在前端开发中广受欢迎。

但 GraphQL 的学习曲线非常陡峭。开发者需要学习全新的查询语言、Schema 定义、Resolver 编写、DataLoader 配置等一堆概念,这与 REST API 的直观性形成了鲜明对比。更麻烦的是,GraphQL 的过度灵活性给后端带来了巨大的挑战。前端可以构造任意复杂的查询,有些查询甚至可能是开发者没有想到过的,这导致后端很难进行针对性的优化。当一个查询嵌套了 10 层,返回了数百万条数据时,数据库和服务器都会面临巨大的压力。

调试 GraphQL API 也比调试 REST API 复杂得多。当一个 GraphQL 查询出错时,错误信息往往很难定位到具体的问题源头。而且 GraphQL 需要额外的服务器和工具链支持,无法直接利用现有的 FastAPI 生态系统。比如 FastAPI 的依赖注入、中间件、自动文档生成等特性,在 GraphQL 中都无法直接使用。

还有一个更深层次的问题是 ERD 和用例的界限模糊。GraphQL 的 Schema 同时扮演了实体模型和查询接口两个角色。当我们设计一个 GraphQL Schema 时,很难确定应该按照实体来组织(一个 Type 对应一个数据库表),还是按照用例来组织(不同的业务场景需要不同的字段)。这导致最佳实践不清晰,不同的项目、不同的开发者可能有完全不同的组织方式。

而且随着业务增长,所有的用例都会堆砌在同一个 Schema 中,导致 Schema 膨胀,难以维护。权限控制也变得异常复杂。不同的 API 端点可能有不同的权限要求,但它们可能都查询同一个实体(比如 User ),在 GraphQL 中很难针对不同的查询场景应用不同的权限规则。

1.2 问题根源分析

上面我们探讨的所有模式,虽然表面上的问题各不相同,但它们的核心困境其实是一致的。

问题 1:业务模型与数据模型混淆

# SQLAlchemy ORM 同时扮演两个角色:
# 1. 数据模型(如何存储)
# 2. 业务模型(业务概念)

class Team(Base):
    __tablename__ = 'teams'

    id = Column(Integer, primary_key=True)
    name = Column(String)

    # 这是数据库的外键关系,还是业务关系?
    sprints = relationship("Sprint", back_populates="team")

在传统的 ORM 开发中,业务模型和数据模型是混在一起的。看看这个例子,Team 类既表达了业务概念(团队是什么),又承载了数据模型的细节(如何在数据库中存储)。当我们在 sprints 字段上定义 relationship 时,这到底是在描述一个业务关系(团队有多个 Sprint ),还是在声明一个数据库外键约束?这种模糊性会导致很多问题。

数据库的设计约束会直接影响我们的业务建模。比如,如果数据库中的 teams 表没有直接到 users 的外键,而是通过中间表 team_members 关联,那么在 ORM 中我们也必须通过这个中间表来定义关系。这意味着业务模型被迫适应数据库的实现细节,而不是反过来。

更严重的是,这种方式无法表达跨库、跨服务的业务关系。现代系统中,数据可能分布在不同的数据库中,甚至存储在外部服务里。比如用户的基本信息在 PostgreSQL ,而用户的偏好设置在 MongoDB ,用户的实时状态在 Redis 中。ORM 的 relationship 无法跨越这些边界,业务模型因此被限制在了单一数据库的范围内。

问题 2:依赖方向错误

传统架构的依赖方向:
┌─────────────┐
│   API Layer │  ← 依赖于
└──────┬──────┘
       │
       ↓
┌─────────────┐
│ ORM Models  │  ← 依赖于
└──────┬──────┘
       │
       ↓
┌─────────────┐
│  Database   │
└─────────────┘

问题:业务规则依赖于数据库实现!

这违反了 Clean Architecture 的依赖规则。正确的依赖关系应该是:业务规则最稳定,不依赖任何外层;数据库是实现细节,应该依赖业务规则;当数据库变化时,业务规则不应该受影响。但传统架构的依赖方向恰恰相反,业务规则被数据库的实现细节所绑架。

问题 3:缺少业务关系的显式声明

# 传统方式:业务关系隐藏在查询中
async def get_team_tasks(team_id: int):
    # "团队的任务"这个业务概念隐藏在 SQL WHERE 中
    result = await session.execute(
        select(Task)
        .join(Sprint, Sprint.id == Task.sprint_id)
        .where(Sprint.team_id == team_id)
    )
    return result.scalars().all()

业务关系没有被显式声明出来,这是个很隐蔽但危害很大的问题。看看这个例子,"团队的任务"是一个清晰的业务概念,但这个概念被隐藏在 SQL 的 JOIN 和 WHERE 子句中。新加入团队的成员需要阅读大量代码才能理解系统中有哪些业务关系,这些关系是如何定义的。更糟糕的是,没有自动化的方式来检查业务关系的一致性。当需求变化需要修改某个关系时,开发者很难找到所有相关的代码,很容易遗漏某个地方,导致业务逻辑的不一致。

问题 4:中间表的技术暴露

在 SQLAlchemy ORM 中,多对多关系需要显式定义中间表,这导致技术细节泄漏到业务层。

# SQLAlchemy ORM:必须定义中间表
class Team(Base):
    __tablename__ = 'teams'
    id = Column(Integer, primary_key=True)
    name = Column(String)

    # ORM relationship 需要指定中间表
    members = relationship("User",
                          secondary="team_members",  # 必须指定中间表
                          back_populates="teams")

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)

    teams = relationship("Team",
                        secondary="team_members",  # 必须指定中间表
                        back_populates="members")

# 中间表(技术实现细节)
class TeamMember(Base):
    __tablename__ = 'team_members'
    team_id = Column(Integer, ForeignKey('teams.id'), primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
    role = Column(String)  # 可能还有额外字段

# 查询时需要关心中间表的存在
@router.get("/teams/{team_id}")
async def get_team_members(team_id: int, session: AsyncSession):
    # 必须通过中间表查询
    result = await session.execute(
        select(User)
        .join(TeamMember, TeamMember.user_id == User.id)  # 中间表暴露
        .where(TeamMember.team_id == team_id)
    )
    return result.scalars().all()

这个问题的根源在于,ORM 的多对多关系需要显式定义中间表,这导致技术细节直接泄漏到业务层代码中。业务代码必须知道 team_members 中间表的存在,查询时也需要显式地 join 这个中间表。这增加了代码复杂度,更重要的是,业务逻辑被数据库的实现细节所绑架。

更深层的问题是业务语义变得模糊。TeamMember 到底是一个有意义的业务概念,还是纯粹的技术实现?如果中间表还有额外的字段(比如 role 表示用户在团队中的角色,joined_at 表示加入时间),这些字段应该被建模为独立的实体吗?不同的开发者可能给出不同的答案,缺乏统一的指导原则。

数据组装也因此变得复杂。查询"团队的所有成员"需要 join 中间表,查询"用户所属的团队"也需要 join 中间表。所有涉及多对多关系的查询都变得冗长和难以理解。当业务规则要求"获取用户在所有团队中的角色"时,情况就更加复杂了。这些技术细节让业务逻辑的实现变得异常沉重。

对比:Pydantic-Resolve ERD 的方式

# ERD:业务概念清晰,无需关心中间表
class TeamEntity(BaseModel, BaseEntity):
    """团队实体 - 业务概念"""
    __relationships__ = [
        # 直接表达"团队有多个成员"的业务关系
        Relationship(
            field='id',
            target_kls=list[UserEntity],
            loader=team_to_users_loader  # loader 内部处理中间表
        ),
    ]
    id: int
    name: str

class UserEntity(BaseModel, BaseEntity):
    """用户实体 - 业务概念"""
    __relationships__ = [
        # 直接表达"用户属于多个团队"的业务关系
        Relationship(
            field='id',
            target_kls=list[TeamEntity],
            loader=user_to_teams_loader
        ),
    ]
    id: int
    name: str

# Loader 实现细节:中间表只在这里出现
async def team_to_users_loader(team_ids: list[int]):
    """加载团队成员 - 内部处理中间表"""
    async with get_session() as session:
        # 只有这里需要知道中间表的存在
        result = await session.execute(
            select(User)
            .join(TeamMember, TeamMember.user_id == User.id)
            .where(TeamMember.team_id.in_(team_ids))
        )
        users = result.scalars().all()

        # 构建映射
        users_by_team = {}
        for user in users:
            for tm in user.team_memberships:
                if tm.team_id not in users_by_team:
                    users_by_team[tm.team_id] = []
                users_by_team[tm.team_id].append(user)

        return [users_by_team.get(tid, []) for tid in team_ids]

关键差异

维度 SQLAlchemy ORM Pydantic-Resolve ERD
中间表位置 暴露在业务层 隐藏在 loader 实现中
业务语义 技术关系 (secondary) 业务关系 (团队包含成员)
查询代码 需要 join 中间表 loader.load(team_id)
代码位置 分散在多处 集中在 loader
测试 依赖数据库表结构 可 mock loader

架构优势

传统方式:
Team → TeamMember (中间表) → User
业务层需要知道中间表的存在

Pydantic-Resolve 方式:
Team → User (业务关系)
中间表是数据层的实现细节,业务层不关心

这意味着:

  1. 业务模型纯净:Team 和 User 的关系直接表达业务语义

  2. 技术细节封装:中间表的存在被封装在 loader 中

  3. 灵活的存储策略


    • 数据库可以用中间表实现
    • 也可以用 JSON 字段存储
    • 甚至可以是外部服务(如 LDAP )
    • 业务层代码无需修改
  4. 易于理解:新人看到 ERD 就能理解业务关系,不需要先学习数据库设计


2. Clean Architecture 思想

2.1 核心原则

Clean Architecture 由 Robert C. Martin (Uncle Bob) 提出,核心思想是:

"Software architecture is the art of drawing lines that I call boundaries."
软件架构的艺术在于画界线。

原则 1:依赖规则

外层依赖内层,内层不依赖外层。

                ↓ 依赖方向
    ┌─────────────────────┐
    │   Frameworks &      │  外层
    │   Drivers           │  (实现细节)
    ├─────────────────────┤
    │   Interface         │
    │   Adapters          │
    ├─────────────────────┤
    │   Use Cases         │
    │   (Application)     │
    ├─────────────────────┤
    │   Entities          │  内层
    │   (Business Rules)  │  (核心)
    └─────────────────────┘

遵循依赖规则有几个关键点需要注意。首先,内层不知道外层的存在,这意味着核心业务逻辑不依赖于任何框架、数据库或 UI 的细节。其次,内层不包含外层的信息,比如业务规则不应该知道数据是用 PostgreSQL 还是 MongoDB 存储的。最后,外层的实现可以随时替换而不影响内层,这意味着我们可以从 SQLAlchemy 切换到 MongoDB ,或者从 FastAPI 切换到 Django ,而业务逻辑代码无需修改。

原则 2:业务规则独立

# ❌ 错误:业务规则依赖数据库
class Task:
    def calculate_priority(self, session):
        # 业务逻辑被数据库实现细节污染
        if self.assignee_id in session.query(TeamMember).filter_by(role='lead'):
            return 'high'

# ✅ 正确:业务规则独立
class Task:
    def calculate_priority(self, assignee_roles):
        # 业务逻辑只依赖业务概念
        if 'lead' in assignee_roles:
            return 'high'

原则 3:跨边界的数据传递

# 内层定义数据结构
class TaskEntity(BaseModel):
    id: int
    name: str
    assignee_id: int

# 外层负责转换
def task_entity_to_orm(entity: TaskEntity) -> Task:
    return Task(
        id=entity.id,
        name=entity.name,
        assignee_id=entity.assignee_id
    )

2.2 依赖规则

在 Web 开发中,依赖规则可以这样理解:

┌────────────────────────────────────────────────────┐
│         Presentation Layer (外层)                   │
│  - FastAPI Routes                                   │
│  - Request/Response Models                          │
│  - 依赖: Application Layer                          │
└────────────────────────────────────────────────────┘
                    ↓
┌────────────────────────────────────────────────────┐
│      Application Layer (Use Cases)                 │
│  - 业务用例(获取用户、创建订单)                    │
│  - 依赖: Domain Layer                               │
└────────────────────────────────────────────────────┘
                    ↓
┌────────────────────────────────────────────────────┐
│           Domain Layer (内层)                      │
│  - Entities (业务实体)                              │
│  - Business Rules (业务规则)                        │
│  - Value Objects (值对象)                           │
│  - 不依赖任何外层                                    │
└────────────────────────────────────────────────────┘
                    ↓
┌────────────────────────────────────────────────────┐
│    Infrastructure Layer (最外层)                   │
│  - Database (SQLAlchemy)                           │
│  - External Services                               │
│  - File System                                     │
└────────────────────────────────────────────────────┘

关键洞察

  • Entities 不应该知道 SQLAlchemy 的存在
  • Business Rules 不应该知道数据库表结构
  • Use Cases 不应该知道 HTTP 协议的细节

2.3 在 Web 开发中的应用

传统架构的问题

# 传统方式:所有层次耦合

# Domain Layer (应该独立,但实际上依赖了 ORM)
class User(Base):  # ← SQLAlchemy Base
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)

# Application Layer (应该只依赖 Domain ,但直接使用了 ORM)
async def create_user(data: dict, session: AsyncSession):
    user = User(**data)  # ← 直接使用 ORM Model
    session.add(user)
    await session.commit()

# Presentation Layer
@router.post("/users")
async def api_create_user(data: dict, session=Depends(get_session)):
    return await create_user(data, session)  # ← 暴露了数据库细节

这段代码暴露了传统架构的核心问题。SQLAlchemy 虽然建立了对象关系映射( ORM ),让数据库表可以通过 Python 对象来操作,但这种映射关系过于紧密。ORM Model 既承担了数据持久化的职责,又要表达业务概念,导致对象无法自由地代表业务模型。业务实体被数据库的实现细节所绑架,每个字段、每个关系都必须与数据库表结构一一对应,完全失去了作为独立业务概念存在的自由。

更深层次的问题包括:

  1. Domain Layer 被 SQLAlchemy 绑定:业务实体继承了 SQLAlchemy 的 Base ,无法独立于数据库存在
  2. 业务逻辑无法脱离数据库测试:编写单元测试时必须启动完整的数据库环境,大大降低了测试效率
  3. 切换数据库需要修改所有层:当从 PostgreSQL 迁移到 MongoDB 时,所有使用 ORM Model 的代码都需要重写


。。。

Google Antigravity 使用过程中,遇到的一些问题,总结一下:

  1. 没告诉他规范的时候,他按照自己的性格来。
    你告诉他规范了,他说的好好的,会认真遵守,但是实际操作中,又总会丢三落四,选择性的忽略了/忘记了其中的几条规范。
    等你告诉他这个错了,请严格按照规范来,他又是道歉,重新按照规范来。
    问题是规范约束很多条,我也不一定能记得全。

  2. 退化问题。
    比如说,让他加好的文件注释。在经过几轮对话修改后,他很可能莫名其妙得,不知道什么时候,又把注释给删掉了。(加上的代码,逻辑也有可能被删掉。)你发现了,问他为什么删掉。他又道歉,然后说删错了,又给你补回去。

  3. 幻觉问题
    比如说,正常情况下,一个通用的包,🈶️A ,B ,C ,但是 D 部分是没有的。
    在引入的时候,他一本正经得根据推导,认为 A ,B ,C 存在,按道理 D 也应该存在。然后将 D 引入到你的项目。结果呢。你跑半天,跑不通。然后你问他,这咋回事。他又道歉,删掉 D ,换一种思路,换一种方式来实现。

  4. 规范问题
    每次切换一个模型,你总得告诉他,请认真阅读 aiconfig 规范,并严格遵守。没法做到持久化。当然,就算你告诉他了,他也阅读了 aiconfig 规范,他也是“基本遵守”。大不了,等你发现他又犯贱,没遵守规范。他又道歉,说不好意思,我违反了规范,我马上修改。

想到的就这些。

总之,Vibe Coding 一时爽,粗心早晚泪千行。

大家使用过程中遇到什么问题,也可以分享一下,避免踩坑。

在网页上,输入,一般是一个 <input />
或者 <textarea />
后来有了很多 app ,比如微信
输入这个操作,不再局限于网页
可以建个公众号,设置好服务端处理用户消息
向公众号发送东西,服务端就可以记录下来
然后再写个网页显示记录
网页登录就各显神通吧
微信公众号发送消息有些门槛,但是还有其他平台的可以用
you own your data
数据在自己手中,想怎么处理怎么处理

前情提要

抠腚 API ,公益中转站,无套路,快来帮忙压测

  • 注册就送 每日 20 刀/总共 30 日的套餐,官方倍率没有套路,赶紧蹬起来

  • 官网 https://api.jonwinters.pw

  • 配置文档 https://docs.jonwinters.pw

  • 大家注册后,到图下这个地方复制自己的 id ,然后回帖自己的 id ,我看到了 会给你立即发放套餐

加速节点 无 cloudflare 纯 gcp 服务器直连

https://api-hk.jonwinters.pw
https://api-jp.jonwinters.pw

另外有问题欢迎进群吹水,交流 AI 使用经验,以及 claude code 、gemini cli 等配置相关问题

最近刚收了个 Macmini ,用 VNC 卡顿有些严重(高性能不知道为何无法启用),所以在昨天在 Macmini 和我的 MacBook 以及 iPhone 上都安装了 Rustdesk 的客户端,并且在自己家的 NAS 中自建服务端并启用了自建的服务端。在今天接到了 96110 的电话。

接线员首先问我是不是不在北京了(我的号码是北京的号码),我如实回答。

然后她问我最近有没有手机下载什么远程控制软件。其实我当时想到了是 rustdesk ,但我想的是这个也不能控制我手机,只是我用手机控制电脑,所以就说没有下载。

她就让我提供我具体的地址,说以后会有上海的反诈中心与我联系,紧接着就问了我一句“XXXX 楼”这里是哪儿呢?

我当时听到就有点炸了,因为这就是我现在居住的地址。虽然我知道反诈是能够从运营商那里获取到手机信号地址位置信息的,但在电话中听到一个陌生人说出自己的居住地址,心里面还是会有些发毛。

在我和反诈中心接线员确认了地址后,我就问了一句,是因为我下载的 rustdesk 这个远程控制软件么?然后我解释了一下我使用这个程序的原因。接线员也是表示理解。她还是提了一句,说让我务必接听来自上海反诈的电话,因为我已经被反诈系统标记了,不然会很麻烦。然后就挂断了。


在写这个帖子的时候接到了上海反诈中心的电话,不过这个是机器人客服,问了几个简单的问题,回答了就自动挂断了。根据机器人透漏的信息,我猜如果我拒接的话,北京反诈说的“麻烦“应该就是民警上门。


写这个帖子的初衷原本是想提醒大家,如果用 rustdesk 软件,可以考虑阻断 rustdesk.com 的请求(如果自建的话),或者是走代理。

我猜想反诈能联系上我,大概率是因为我在手机移动网络环境使用 rustdesk app 的原因,因为我公司的宽带和家里面的宽带绑定的都不是我的信息。

但我刚看了一眼网络请求,我三台设备关于 *.rustdesk.com 的请求都是经过代理了的,这就让我很不解了,不知道大家有没有什么想法,反诈系统是如何检测到的。


请大家友好讨论,我分享这个并不是要批判反诈系统,我对这套系统持中立态度,它的确有让我感觉到自己的隐私泄露的不安,但想法还是复杂的,我还是相信这套系统帮助不少人的。

项目历程

初出茅庐

2020 年 7 月,那会刚高中,我正在尝试 Android 原生开发,当前恰好需要缓存一些 B 站的视频素材,就在找手机上能直接缓存提取好的 APP ,那会我还不能经常用电脑,我记得当年也有一个简单实现了功能的 APP ,我当时就在想能不能给自己做一个,就这样,我的第一个 Java 原生应用诞生了——BILIBILIAS ,其中 as 取自单词 analysis ,当时还发布了一篇文章:Bilibili 番剧/视频下载 || BILIBILI AS,这个 APP 算是我整个安卓开发的启蒙了,那会还是用 Java ,当第一个原生程序真正的跑起来,那种感觉是无与伦比的,这个项目当年还非常简陋,只是按钮和图片组成的,我清晰的记得它的样子。
我那会刚开始在 B 站发布一些视频,我希望向其他人分享这个项目的过程,当时这个项目就被开源了,我还可以在 git 记录看到。

那虽然是一个简陋的 APP ,但我还是想分享出去,没想到当时就收获了很多用户,这让我看到了开发程序的另外一种可能,这之后,我决定继续优化这个 APP ,通过这个形式学习安卓开发。同年 11 月,我发布了新的版本[ B 站番剧/视频下载] BILIBILI AS v1.0.7 更新,当时 BUG 非常多,只能说勉强可以用,不过还是有那么多人来反馈。

当时我找了其他伙伴来处理服务器的事情,我们使用最便宜的学生机,轻量机来部署后端服务,用来发布更新和通知,应该这时这个 APP 就不止一个人维护了。

牛刀小试

可能是尝到了甜头,也可能是发现有这么多用户,我觉得需要再做的更好一些,但当时实际上并不懂重构的概念,只是觉得应该在现在的基础上优化优化,我就继续对 UI 进行了一些调整,将之前的代码可能加了一些封装,我正在不断尝试安卓原生开发带来的新 API 和功能,当时真的是如饥似渴,每周放假就扎进去开发,21 年的 2 月,我发布了一个看上去还不错的版本:[教程] 爆肝!自制 B 站缓存软件
当时还做了桌面小组件:搁置已久的安卓版本 B 站桌面小部件来啦!!!
这个时候,这个项目的另外一个使命来了,我发现我们已经有了一部分用户积累,这个时候我开始在 APP 加上轮播图,本来是用来做一些通知的,但我觉得我们已经有有一部分用户,应该有一些担当,就这样,这个轮播图有的时候我会推荐一些新动漫,有的时候会发布 B 站的一些重要通知,部分特殊节日和国家事件,我们也会宣传,当年疫情期间,我们还为大家提供了疫情地图显示。

崭露头角

高中结束的时候,毫无疑问的,我选了计算机相关专业,现在来看是毫无疑问,但回头看实际上是这个 app 影响了我的选择,它是鉴定选择软件行业的后盾。当时参加了一次字节跳动组织的青训营,我才发现,欸,原来架构设计是这样的,原来还有 DataBinding 这样的库,原来还有序列化这么一说,那我之前做的是什么?当时结营后我就将我的 APP 进行了一次重构,当然,现在看其实当时只是修改了一些关键的地方,但,这至少看上去像一个 APP 了。
当时我好像还写了一篇文章,关于饺子播放器的,但是那个版本的截图不太找得到了,当时也没有怎么宣传:饺子播放器实现抖音点击布局暂停及双击效果

小有名气

大学后我才开始真正的接触到 Kotlin ,新东西总是让人畏惧,但是新知识我真的很难不去用,老软件 BUG 实在是太多了,而且还不能多任务下载,所以我当时还是做了个大胆的决定,那就是重新开发!使用 Kotlin 和 DataBinding 技术。
23 年,项目的重构版本 2.0 来了,这次重构实际上是从软件架构上进行了一些设计,虽然现在看当时做的还是拉完了,但在当时我才真正接触到复杂项目开发,设计代码结构,有非常重要的意义。
[分享] 重制 B 站视频缓存工具
这个版本发布后,接下来的几年中都采用了 23 年开发的架构,在这个基础上进行更多功能的扩展,当然,因为当初设计局限性还是很大,导致后期还是没办法继续迭代了。

这些年来,BILIBILIAS 积攒了不少用户,很多动漫爱好者,学生等群体都需要使用它。

光荣进化

到现在,我觉得需要到更进一步的阶段了,JetpackCompose 技术已经逐渐稳定,我开始采用更高效的响应式框架进行开发,这就是我们现在的 3.0 版本!
这既是尝试新技术,也是对老用户的一个交代,还有人需要它,现在我就还需要继续维护一段时间。

项目困境

现在用户的需求逐渐变多,但社区开发人员主力只有我一个,到了现在,我希望去认真的设计项目的每一块内容,确实是跟不上用户的需要,有很大工作,设计都需要一点一点的推进。
所以我希望可以招揽更多对这个项目感兴趣的社区成员参与这个项目的开发

项目地址:bilibilias
项目预览:GooglePlay

这是一个三维地图应用,可以在上面编写动作操作场景变化,我看到 B 站上的 up 发关于世界局势的时候,经常用这种地球视角来讲解,就想着自己做一个看看效果。主要技术栈为 Vue3 + Vite + TS + Cesum 。

特点:

  • 动作编辑。现在就只有两个动作,飞都某地以及环绕某一个地点飞行。
  • 链接分享。可以生成包含动作都链接。
  • 链接导入,导出。

当前还没开源呢,我计划给它增加几个动作,例如切换地图,添加自定义图像,显示文字,播放声音等。

我觉得现在这个 UI 好丑,但是我没有美术功底,期待 V 友反馈哈哈哈。

demo 地址: https://giserlab.cn/app/mapflow/

下面这个很长的是分享链接,进去会有默认动作。

https://giserlab.cn/app/mapflow/?actions=NobwRA1gpgnmBcYCGBGAxgBgGwA4AsArALRICceaReARlhkdQMwAmxSaaOAZgYwOxoATNQxgANGAB2SALZQEYQJHagSBVA-criwzKAGc0AJwCWABwAuBgPaSFGkzCPzEXADZwJXA5IPaAFlGYIuJCdtKAlmJBMkBHAnSwQUFFIAOlwMQSwUCScIhEYMFMYcHAxGCSCTXJK6MIBXPQiLK3gCAF8WsXBoOERGNAJmPKw+IgJ+riouQVIiUhRmPCIhUkFAjDxewRwNaTkFQHRlQEW5QC5lDS1dQ1NG6wlbewVnVzB3Tx8-AKCQsIio+Bi4+BQghQSXweDomTA2Qq8CmINIpAIeBwZSc0JQvFIGFq9TM-z4bQ6kFgCkxeC4gUEjCIGGY1EoeAoxHI8yIuDJaCwWGEaCg1G2sgcYEAF3aAfRsTmEdPpjLimmAbHZBQ8NM8vL5-PBAsFQppvtFIf9AfkgYkcBCoZUkoIMDhGIxBCjoQQMM6sZo6g1-lgCZ1iYgihg+KMkOMMARMFQ+FAmVw6VREaNbRgkHwEvzdohReLNJKLjKFIBVv0AexmZ+V3RBIPTmGqSfxuDyqt4aj7a8KRPWxJqGy0JUimrI5eB5S3W2325CohBW12+AwAc28aJdrvqklnDidzokRgMJjQ3gQcexHs7gm9RO6YDwKCwtIySCopCwCzwtPopGYHKI+GoKD4jBQJSUqQaaCoAs0GAOrK6gSuc0pXIgpaKi4yr1q86qap8Optr8+onvkeCCAQCJ8P20KCHwSQECgOBYIwWBHnm8CkA6CCcgBZ5dAoUBIJyUB8GSRBQLR9KRlADA8oIRBaOQnJWowUBYAQIEKIAHHqAI46UHZjBlz-HKNwKvcSF1i8arvFqXxYX8nZURRCSCIIeAkZOOBJJi9lgvRcGAsx8D4Rg7G+k8BBIOwf4LHwVRUPwlA4KQUAoNSgjMEC1B8FwWBINQikSDsgqALhKgDTmoAY5GAH9qpw5rBOkIQZjwqqhpkYa2PyWfEVpJCayyOYORoEHwRQeZ63kEXQS5tAAukAA

是什么?

开源版 Claude Cowor

Claude Cowor 目前只有 Max 用户才能使用

特性

  • 自主代理 - 像同事一样工作,而不只是聊天机器人
  • 任务规划 - 分析任务并制定执行计划
  • 进度更新 - 每一步都展示正在做什么
  • 安全可控 - 使用 OpenCode 内置的权限系统
  • 零依赖 - 只有一个 markdown 文件
  • 模型无关 - 使用你在 OpenCode 中配置的任何模型

前置要求

还没安装 OpenCode 的请移步:

安装

暂不支持 Windows,其他安装方式见官方文档
curl -fsSL https://raw.githubusercontent.com/Lucifer1H/open-cowork/main/install.sh | bash

使用示例

# 代码重构
/cowork 重构认证模块,提取验证逻辑

# 文件整理
/cowork 按功能重新组织 components 文件夹

# 生成文档
/cowork 分析代码库并生成完整的 API 文档

# Bug 调查
/cowork 找出登录间歇性失败的原因并修复

# 代码迁移
/cowork 将所有类组件转换为带 hooks 的函数式组件

PS: 本来昨天就发了,不知道是不是包含了小众软件链接,没有发出来,草稿里面也没了,今天重新发一下。


📌 转载信息
原作者: ageovb
转载时间: 2026/1/17 09:07:20

生成式 AI 的投资回报远超预期?Snowflake 调研全球 1900 位企业与 IT 专业人士后发现平均 ROI 高达 41%!点击下载完整报告

在技术发展史上,总会出现一些被反复回望的“拐点时刻”。在 Snowflake 首席执行官 Sridhar Ramaswamy 看来,我们正身处这样的关键节点之中——多年来机器学习与深度学习的研究积累、Transformer 等关键架构的突破,以及云计算规模能力的成熟,在这一刻汇聚,推动人工智能走向真正的产业化阶段。

在这一背景下,Snowflake 邀请了两位深度参与并塑造这一进程的核心人物,共同展开了一场关于 “未来十年 AI 蓝图” 的对话:堪称全球最具影响力的人工智能教育者和先驱者、LandingAI 执行董事长、DeepLearning.AI 创始人吴恩达(Andrew Ng),以及亚马逊云科技 Agentic AI 副总裁 Swami Sivasubramanian,他曾主导 Amazon SageMaker 与 Amazon Bedrock 的构建。

这场对话并未停留在对模型能力的抽象讨论,而是围绕竞争优势、商业模式、工程架构、数据治理以及开发者未来等关键问题,勾勒出一条从战略到落地的清晰脉络。

竞争焦点正逐渐脱离模型本身

围绕“AI 时代的护城河从何而来”这一核心问题,讨论首先打破了一个常见误区:竞争优势并不必然源于模型本身

在吴恩达看来,ChatGPT 这类产品在消费者层面形成的品牌认知,本身就构成了防御壁垒;但在更多行业场景中,护城河往往取决于行业结构,而非 AI 技术能力。例如,借助 AI 加速构建双边市场的平台,其持久性来自平台机制本身,而不是底层模型。

一个重要变化是,软件护城河正在被削弱。过去需要多年、大规模团队才能构建的软件系统,如今在 AI 辅助编程的加持下,其可复制性显著提高。API 调用的灵活性也使开发者能够迅速切换工具,这让“API 即护城河”的逻辑变得愈发脆弱。

Swami 从企业市场的视角补充道:在真实的企业环境中,竞争焦点正从“谁的模型更强”,转向“谁能通过 API 和服务,以更优的性价比,帮助企业真正提升收入或降低成本”。在这个意义上,真正的“最佳模型”,往往是企业自身的商业模式

从订阅制到按量计费:AI 正在重塑软件商业逻辑

在商业模式层面,圆桌讨论也触及了一个正在发生的结构性变化。

过去十余年,SaaS 以订阅制为核心,其背后依赖的是软件接近零边际成本的特性。但在 AI 尤其是智能体场景中,这一前提正在发生变化——推理成本真实存在,且可能随使用规模非线性增长

Swami 指出,当 AI 系统开始代表用户执行任务,且工作负载与用户数量脱钩时,更接近云服务的按量计费模式将变得合理且必要。吴恩达则从开发者体验出发,分享了一个直观感受:AI 编程工具的效率如此之高,以至于开发者愿意为其消耗更多算力和费用,因为由此带来的生产力提升是实实在在的。

这并非简单的定价方式变化,而是意味着 AI 正在重新定义“软件价值如何被衡量和付费”

成功的 AI 架构:产品先行,为不确定性留出空间

当讨论从战略转向工程实践,三位嘉宾形成了高度一致的共识:产品市场契合(PMF)始终优先于成本优化

吴恩达强调,在早期创新阶段,最大的挑战不是控制成本,而是打造用户真正热爱的产品。当 PMF 出现后,工程手段总能在后续阶段将成本曲线重新压低。关键在于,在架构设计之初,就为模型可替换性和技术选择权留出空间。

Swami 从大量初创企业的实践中总结出一条清晰路径:

  • 初期采用通用基础模型快速验证产品;

  • 随着真实负载显现,通过微调、蒸馏、提示缓存优化等手段应对非线性成本;

  • 将模型选型视为可演进的工程问题,而非一次性决策。

在这一过程中,掌控自身数据层被反复强调。将数据牢牢掌握在企业自身体系内,而不是被封装进供应商的“云端密匣”(box in a cloud),是确保未来技术与合作可选性的关键。

非结构化数据的真正解锁:从 PDF 开始

在谈及 AI 应用的下一个增长点时,吴恩达将注意力投向了一个长期被忽视的领域:非结构化数据

在他看来,企业中最具价值、却最未被充分利用的隐性数据,正大量存在于 PDF 文档之中。无论是金融领域复杂的报表,还是医疗行业的各类表单,过去人们对 PDF 的主要交互方式,往往只是简单的关键词搜索。

而如今,借助智能体驱动的文档解析能力,AI 已能够理解复杂表格结构、提取语义信息,并将其转化为可分析、可计算的数据资产。这一变化,正在迅速催生大量新的企业级应用场景。

给开发者的长期建议:回到基础,拥抱创造

在圆桌的最后,讨论回到了一个更具情绪张力的话题:年轻开发者在 AI 浪潮下的焦虑

Swami 指出,行业在某种程度上混淆了“编程”与“计算机科学”。即便 AI 能生成大量代码,对底层原理的理解,编译器、数据库、系统架构、数学与统计基础,依然不可替代。历史经验表明,每次技术变革初期都会经历短暂低谷与普遍焦虑,当前正处在类似阶段,但最终带来的是更大规模的创造者群体。

吴恩达则将这一判断推向更积极的方向:这是一个前所未有的创造窗口期。构建产品所需的时间和成本正在大幅降低,而 AI 辅助编程让“学习编程”本身变得更具现实意义和乐趣。

正如 Sridhar Ramaswamy 在圆桌结束时表示,未来无需被动等待,当下的我们比以往任何时候都更有能力去进项创造 。

原视频地址:https://www.snowflake.com/en/build/americas/agenda/?login=ML

点击链接立即报名注册:Ascent - Snowflake Platform Training - China

☕️ TL;DR

近期佳作推荐:[美剧] 匹兹堡医护前线 第二季、[动画] 中国奇谭 2、[动画] 咒术回战 死灭回游 前篇、[电影] 3670、[英剧] 投行风云 第四季、[美剧] 槲寄生谋杀案 第二季、[台剧] 人生只租不卖、[日剧] 京都人的私房雅趣 Rouge 继承、[动画] 命运/奇异赝品、[动画] 史前战纪 第三季

几则精彩预告:《葬送的芙莉莲 第二季》正式预告、《机动战士高达 闪光的哈萨维 喀耳刻的魔女》新预告、《海贼王 第二季》先导预告、《木乃伊》首支预告、《亢奋 第三季》首支预告

几则影视资讯:《呼啸山庄》确认引进、《闪灵》内地定档 1 月 30 日、《暗黑新娘!》内地定档 3 月 6 日、《庇护之地》内地定档 1 月 30 日


[美剧] 匹兹堡医护前线 第二季

  • 关键词:剧情 / 医疗
  • 又名:The Pitt Season 2
  • 片长:50 分钟左右(单集)× 15 集
  • 观看渠道:HBO豆瓣链接

生死一小时。

@潘誉晗:7 月 4 日,美国独立日。离上季结束已过去了十个月,但首季的音乐节事件,还是让罗比本就备受折磨的心理受到了影响。他决定完成今天的轮班后,就放个长假好好休息一下。不过急症室的状况,并没有因为罗比即将到来的休假变得轻松。新上任的医生是战地医院出身,行事雷厉风行,与罗比的风格完全不一样。而兰登医生也重回职场,只不过曾经的药物上瘾和偷药事件还是影响了他的信誉,因而被安排了分诊的工作。

在颁奖季上斩获诸多大奖的口碑剧集《匹兹堡医护前线》迎来了第二季,延续了首季一集为一天一小时的剧情安排,再现了急诊室高度紧张的节奏。这次的续作诚意满满,为我们带来了许多真实的案例,加上有着非常成熟的特效化妆技术,每一幕治疗的过程,都是极其写实的血肉镜头(不建议在饭点看)。写实的画面、超真实的压力感,感谢这些在走廊上永远奔跑着的医生们。


[动画] 中国奇谭 2

  • 关键词:短片集
  • 又名:Yao-Chinese Folktales 2
  • 片长:单集时长不固定 × 9 集,每周四更新
  • 观看渠道:哔哩哔哩豆瓣链接

我们村的龙就是没有角的。

@SHY:仍由上海美术电影制片厂联合出品,《中国奇谭 2》继续广招天下好汉,每集均由不同主创团队打造,将脑海中的想法转化为自由度极高的动画短片,题材和形式更加多元化。目前已上线的 4 集各有特色,质量均在水准线上。

第 1 集中冒名龙王的三只蛇妖,从偷吃香火到承担责任,用行动获得村民崇敬;第 2 集取材《聊斋》里「耳中人」的典故,被迷惑的书生落入层层嵌套的幻境,氛围塑造相当优秀;第 3 集的背景来到现代,笼中的动物们有着自己的心思,向往表演馆的小熊找到归宿;第 4 集则以精致的毛毡定格,探索母子的相处之道,学会适时放手也是爱。

主创们以奇幻色彩为表,现实议题为里,思索和探讨多重维度上的内涵,致力于讲好中国故事。吃下这几集的定心丸,有理由相信后面的集数也不会让我失望,延续第一季打下的坚实口碑。同时,我也由衷期待本季能诞生像《小妖怪的夏天》那样具有反哺作用的杰出单集,孕育出另一部兼具口碑和票房的动画电影,为中国动画产业添砖加瓦。


[动画] 咒术回战 死灭回游 前篇

  • 关键词:漫画改 / 奇幻 / 动作
  • 又名:呪術廻戦 死滅回游 前編 / Jujutsu Kaisen: The Culling Game Part 1
  • 片长:24 分钟(单集)× 具体集数未知,每周四更新
  • 观看渠道:巴哈姆特动画疯豆瓣链接

爱恨交织,紧紧相拥。

@SHY:「涩谷事变」后,虎杖悠仁的缓刑被取消,由特级咒术师乙骨忧太执行死刑。就在此时,羂索策划的死亡游戏「死灭回游」开启,伏黑惠的姐姐津美纪也被波及。进入结界的虎杖等人,在迎战强敌的同时,寻找解救他人的一线生机。

相较于但求无过的「鬼灭」动画,同为 20 年代少年漫改代表的「咒术」,给足了动画师自由施展的余地。在第二季迎来导演首秀的御所园翔太,于本季更上一层楼,为作品注入强烈的个人风格。尽管漫画在此篇章已经显露颓势,动画却充分吃透原著,进行适当的再构筑,在 MAPPA 的顶级作画助力下,将潦草的画面转换为酣畅淋漓的长篇打戏。

想法溢出的动画主创,从 OP 分镜就先声夺人,驰骋多种风格,彩蛋目不暇接,节奏与 King Gnu 完美合拍,让人想无限循环。正片以灵动的镜头调度和光影效果增添趣味,连第 3 集本该枯燥的大段解说,都通过海量演出巧思加以弥补,硬生生做出了几分 EVA 的感觉。这部改编层面上几乎无可挑剔的动画,可能是现在最具实验气质的商业动画大作。


[电影] 3670

  • 关键词:剧情 / 同性
  • 片长:124 分钟;豆瓣链接

我们两个,好孤独啊。

@潘誉晗:韩国同性恋社区中,有一个数字暗号「367」,指的是晚上 7 点,去首尔钟路 3 街的 6 号出口。这天,哲俊站在这里,他双手插着口袋,怀着期待地张望着,可惜身边车来人往,没有一个人为他停下。钟路 3 街 6 号出口,晚上 7 点,无人在场,也许这才是「3670」的真正含义。饱含寓意的开篇拉开了电影的序幕,也引出了影片的主人公哲俊,他是一名脱北者,也是一位同性恋。

近年来,有越来越多的文艺作品关注性少数群体,但像这部在 26 届全州国际电影节上以黑马之姿出现的影片,把脱北者与同性恋群体结合在一起的,还是首次。在影片中,我们透过俊哲,看到了一个非常孤独的个体:他在城市里掩盖着脱北者的身份,同时也隐藏着自己的性向——他在两个身份的夹层中,努力地寻找着灵魂的出路。电影拍得细腻又诗意,淡淡的悲情看似浅浅的,却不动声色地把那种藏在心里的疼痛给表达了出来。


[英剧] 投行风云 第四季

  • 关键词:剧情 / 金融
  • 又名:Industry Season 4
  • 片长:52 分钟左右(单集)× 8 集
  • 观看渠道:HBO豆瓣链接

Without an economic function, society buries you before you're dead . (没有经济能力,在你死之前,社会就会埋葬你。)

@潘誉晗:哈珀和雅思敏的事业进展得越发顺利了,她们在各自擅长的领域里闪闪发光,不过也有挑战等着她们。在资产管理公司就职的哈珀本以为是自己的能力被看到,可当上司说出真话,她才意识到是因为她的黑人肤色,能够给公司带来一张很不错的公众名片。豪门婚姻的外表光鲜亮丽,但深陷其中的雅思敏只觉空虚。另一边,一位叫吉姆的财经记者联系上哈珀,想对她进行采访。

阔别一年,《投行风云》第四季终于和观众见面。首播第一集就是满满的信息量,让观众看得忍不住感慨「就是这个熟悉的感觉!」本季的故事围绕着一家金融科技公司所展开,这家公司看似风头正盛,可其实是靠着擦边、色情支付发家的。巨大的利益充满了各种诱惑,哈珀和雅思敏也因此站在了相反的立场上。也许金融风暴圈的中心就是这样,金钱才是唯一的上帝,因而利益就是一切,所以爱情是能出卖的,友情也可以背叛。


[美剧] 槲寄生谋杀案 第二季

  • 关键词:剧情 / 悬疑 / 惊悚
  • 又名:Mistletoe Murders Season 2
  • 片长:42 分钟左右(单集)× 6 集;豆瓣链接

又到圣诞节了,似乎是该发生点命案了。

@潘誉晗:十一个月前,由于不愿透露自己的秘密,艾米丽与山姆不欢而散,两人甚至因此断绝了联系,不过山姆的女儿维奥莱特一直与艾米丽保持着往来,她表示想重新回艾米丽的店里工作,也向艾米丽分享着自己的生活。这段时间,因英语老师兼国际象棋社顾问亨利的拜托,她一直帮一位男生补习英语。直到这天,亨利失踪了。副校长说亨利匆匆辞职,可艾米丽觉得,事情并没有这么简单。

依然是两集一案节奏的剧集,这一季还根据艾米丽在每个案件的侦查过程中,融入了她的过往经历。这样的双线叙事不仅让观众对艾米丽有了更进一步的了解,也更好地塑造了这一人物形象。艾米丽确实在破案,却也用这种抓住真凶的方式进行着心理创伤上的自救。就像是从槲寄生叶的缝隙里透出的阳光一样,也许只是些许的光亮,但却足够给艾米丽带去力量。除案件外,艾米丽与山姆的暧昧情愫也依然好嗑。


[美剧] 菜鸟老警 第八季

  • 关键词:剧情 / 喜剧
  • 又名:The Rookie Season 8
  • 片长:43 分钟左右(单集)× 18 集;豆瓣链接

老又怎么了?经验丰富啊。

@潘誉晗:系列第八季,预算升级,开播第一集就把舞台搬到了布拉格。为了抓捕一名危险的军火商,警方和老熟人莫妮卡达成协议,由诺兰伪装成保镖,妻子贝利伪装成助手,一起在异国进行卧底任务,顺便也二度了一次蜜月。洛杉矶的各位也很给力,在格雷中尉的指导下直捣军火商的据点。同时,露西和蒂姆也和好如初,开启了甜蜜的同居生活。

长寿刑侦喜剧《菜鸟老警》第八季的故事剧情,依然稳定得让人心安。这部聚焦于「40+ 中年男性再出发」的剧集,着实把一位中年选择重新开始人生的人物形象,塑造得很圆满。诺兰确实不年轻了,双鬓有白发,体力也肯定不如年轻探员,但是他依然有那份愿意拼搏的冲劲。谁说超过 40 岁就要停下,谁说不再年轻就不能上前线?诺兰用身体力行告诉观众不退场的意义,也用八季的时间,从菜鸟老刑警一步步成长为值得信任的刑警,给观众带来「不要轻易放弃」的力量。


[台剧] 人生只租不卖

  • 关键词:剧情 / 喜剧
  • 片长:45 分钟左右(单集)× 12 集;豆瓣链接

是有理想、有能力,还是烂工作、烂老板?

@利兹与青鸟:何幸琪从小父母离婚,十七八岁时父亲去世房子被过户给阿姨,无比倒霉地开始租房生活。突然有一天接到律师电话,原来去世的母亲留下一套好地段的房产,但要和一位先生共同继承。这位程轩先生是星河房管事务所所长,承诺何幸琪来事务所上班满一年,就把另一半房屋所有权给她,但前提是业绩要达标。于是靠打零工维生的何幸琪就这样离奇地天降工作和房子,成为这家主营租房中介、包租代管公司的业务员,开始了和客户斗智斗勇的人生新体验。

这部闽南语台剧以轻喜剧的风格,铺开台北的租房生态,既涉及社会不同阶层与弱势群体,也讲解各式租赁类型与新兴政策,比如由政府补贴、以市价八折出租的社会住宅。多巴胺穿搭的女主让人眼前一亮,俏皮、机灵但也是个愣头青,随着对接客户增加,冲突矛盾也一件接着一件;声音甜甜很可爱,但也嘴上不饶人,经常代替观众吐槽,颇有生趣。剧中每集结尾都会留下悬念,观众轻易便能代入女主视角,在质疑中探索行业折射出的人生百态。


[日剧] 京都人的私房雅趣 Rouge 继承

  • 关键词:剧情
  • 又名:京都人の密かな愉しみ Rouge 継承
  • 片长:45 分钟左右(单集)× 9 集;豆瓣链接

京都之美。

@利兹与青鸟:京都出生、巴黎长大的洛在父亲的提议下,来到京都留学,并尝试继承一间和菓子店,这是一家有着两百多年历史、传承了八代人的老字号——久乐屋春信,甚至已经成为京都文化的一部分,却面临无人继承的局面。不管是一时冲动,还是身为京都人的 DNA 动了,成年后首次踏上故土的洛游览起京都的名胜,在莲华王院参拜千手千眼观音、在蛮夷川渡石间跳跃、在二条大桥上眺望鸭川,感受这座古都与自己连接。

「京都人的私房雅趣」系列自 2015 年起已播出 7 部,均由源孝志担任导演与编剧,风格也自成一派,时不时穿插着京都的人文历史,如纪录片般古典淡雅,又像旅行观光片一样优美精致,带着京都人的毒舌冷幽默,娓娓道来这个京都家族的故事。首集便以十一面观音借喻京都人不会轻易展露内心的特质,介绍故事背景和有些复杂的人物关系,即便没看过前作也能轻松代入。轻缓柔和的钢琴配乐,也让人心情平静下来想要继续看下去,在不同文化与代际的交织对撞下,洛将会如何传承这间百年老店。


[动画] 命运/奇异赝品

  • 关键词:小说改 / 奇幻 / 动作
  • 又名:Fate/strange Fake
  • 片长:24 分钟(单集)× 13 集,每周六更新
  • 观看渠道:巴哈姆特动画疯豆瓣链接

艺术就是瓦斯爆炸!

@SHY:第五次圣杯战争数年后,美国西部的雪原市出现异变,御主和从者集结于虚伪的台座,按各自的想法行动。然而,当本不该存在的 Saber 职阶被召唤,「虚伪的圣杯战争」升格为真实,魔术师和英灵们的盛宴拉开帷幕。

试问,Fate 系列的核心卖点为何?不明觉厉的时髦设定和关公战秦琼的英灵战斗一定名列前茅。而这两项,正是作者成田良悟的拿手好戏。专注群像剧的他,笔下没有绝对意义上的主角,起手就是数十位角色,来头一个比一个炸裂。操弄轻车熟路的多视角切换,安排人人有份的高光时刻,神仙打架的究极大乱斗,满足中二少年对圣杯战争的一切幻想。

A-1 Pictures 制作的改编动画找准定位,在维持主干的基础上,大幅压缩了原著文戏,保证每集均有重量级打戏。从序章《黎明低语》的「闪恩对轰」开始,爆点此起彼伏,贡献名场面无数,毫不吝啬的作画资源加上泽野弘之的恢弘配乐,怎一个爽字了得。这场兼顾正剧和闹剧的幻想嘉年华,堪称本季度最强爆米花动画,有潜力成为年轻人的第一部 Fate。


[动画] 史前战纪 第三季

  • 关键词:奇幻 / 动作 / 冒险
  • 又名:Primal Season 3
  • 片长:22 分钟(单集)× 10 集,每周日更新
  • 观看渠道:HBO Max豆瓣链接

死亡不是终点。

@SHY:世代交替的第二季结局后,大部分观众想必认为,片尾骑龙出征的矛的女儿将接过主角宝座。然而,本作向来不按套路出牌。第三季开头,本已长眠的矛被复活为行尸,而在意外摆脱控制后,只剩躯壳的他靠本能游荡,直到残存的记忆泛起涟漪。

据主创格恩迪·塔塔科夫斯基透露,他本打算将第二季作为系列句点,直到突然冒出了这个难以割舍的点子。继承令前作脱颖而出的要素,本季用凌厉的笔锋勾勒众生百态,深入这片弱肉强食的原始地域。变成僵尸的主角,在能承受更多伤害的同时,下手也更加没轻没重,以血肉横飞的殊死搏斗,践行令人血脉偾张的暴力美学。

失去理性和情感的主角,断绝了与往日的联系,却在某种意义上令本季更贴近本源,回归故事伊始时神秘而克制的蛮荒冒险。当朦胧的片段逐渐明晰,矛追随着一度留下的痕迹,踏上探寻自我、找回人性的漫漫长路,从另一种角度重新认知这个世界。结合优秀的美术和鲜明的叙事,相信这部有口皆碑的硬派成人动画,定能续写辉煌。


更多

[电影] 用武之地 @潘誉晗:电影改编自真实事件,驻外记者马笑与医生潘文佳陪同工程师苗峰修理基站,却被恐怖分子绑架,在面对 500 万美金一人的赎金条件,展开了为期 105 天的自救行动。得益于对事件和相关资料的大量考察,电影拍得细腻而真实。沙尘、爆炸、鲜血、恐怖分子的暴虐惨无人道……战争永远残忍,我们要远离战争、热爱和平。

[美剧] 他和她的谎 @Sholmes:亚特兰大附近的小镇上发生了一起凶杀案,负责调查案件的杰克和报道这件案子的主播安娜都认识死者瑞秋。在瑞秋被害的当晚,杰克和她在树林中的车里约会,而安娜就在不远处冷眼旁观,杰克和安娜只能通过谎言来掩盖和被害人的联系。本剧以双视角叙事探讨真相与谎言的界限,构筑了一个关于欺骗和自我保护的多层次叙事迷宫。

[日剧] 东京 P.D. 警视厅公关二课 @Sholmes:今泉是一名刑警,却意外被调往警视厅广报课,负责与媒体打交道,让他深感困惑与抗拒。墨田区发生一起女性刺杀案,调查结果指向长期跟踪受害者的警察矢岛,但为了掩盖丑闻,警视厅人事监察课长桥本强行将无辜的流浪汉塑造成凶手,今泉试图用迂回的手段揭开真相。该剧以刑事案件和媒体报道为切入点,兼具社会性与悬疑张力。

[日剧] 天狼星的反证 @Sholmes:藤嶋律师致力于为蒙冤者辩护和翻案,25年前发生的「吉田川事件」中被判死刑的宫原,如今向藤嶋寄来了声称自己无罪的信件。藤嶋开始调查这桩陈年旧案,挑战几乎不可能成功的再审请求。剧中不仅聚焦案件真相的抽丝剥茧,更通过律师自身的创伤、死刑犯家属的苦痛等群像刻画,让这个关于司法正义的故事充满了人性关怀。

[韩剧] UDT :我们小区特工队 @潘誉晗:这个小区不得了,保险调查员崔江是 UDT 出身的爆破专家,五金店老板郭炳南是前特种兵,而超市女老板更是叱咤风云的魔鬼教练。退役后的他们只想过平凡日子,可小区内接连发生的爆炸案,让三人决定联起手来,保护所在的小区。完美融合了动作与喜剧元素的剧集节奏很好,守护家人与家园这个主题也很温馨动人。

[爱尔兰] 莱昂纳德和饥饿的保罗 @潘誉晗:莱昂纳德和保罗是对安静的好友,莱昂纳德有种平静的丧感,平时没啥特别的喜好,唯一的乐趣就是去保罗家玩桌游。保罗和父母同住,生活也是淡淡的。根据同名小说改编的剧集讲述了两个大龄青年的生活,莱昂纳德和保罗的日常,没有太多的起伏与波澜。可正是这样克制安静的简单日子,会让你觉得生活也许就该这样。


📅 本周新预告

《葬送的芙莉莲 第二季》正式预告

1 月 11 日,TV 动画《葬送的芙莉莲 第二季》发布了正式预告,宣布 OP 由 Mrs. GREEN APPLE 演唱,将于 1 月 16 日开始播出。本作改编自山田钟人、阿部司的同名漫画,斋藤圭一郎导演协力,北川朋哉执导,MADHOUSE 制作,讲述精灵魔法使芙莉莲的旅程。 来源

《机动战士高达 闪光的哈萨维 喀耳刻的魔女》新预告

1 月 16 日,动画电影《机动战士高达 闪光的哈萨维 喀耳刻的魔女》发布了主题曲预告,将于 1 月 30 日在日本上映。本作改编自富野由悠季的同名小说,村濑修功执导,武藤康之编剧,泽野弘之配乐,日升制作,小野贤章、上田丽奈、诹访部顺一、齐藤壮马等配音。 来源

《海贼王 第二季》先导预告

1 月 12 日,《海贼王》真人美剧第二季发布了「巴洛克华克」版预告,将于 3 月 10 日上线 Netflix。伊纳基·戈多伊、新田真剑佑、埃米莉·拉德、雅各布·吉布森、塔兹·斯盖拉等主演,草帽一伙从罗格镇起航,穿越颠倒山抵达伟大航道,斯摩格、罗宾、薇薇、乔巴等亮相。 来源

《木乃伊》首支预告

1 月 13 日,电影《木乃伊》发布了首支先导预告,将于 4 月 17 日在北美上映。温子仁监制,李·克罗宁(《鬼玩人崛起》)执导,杰克·莱诺、莱娅·科斯塔、梅·卡拉美维等主演,一位记者的女儿在沙漠神秘失踪,本应是重逢的喜悦,却逐渐演变成一场活生生的噩梦。 来源

《亢奋 第三季》首支预告

1 月 14 日,HBO 热门剧集《亢奋》发布了第三季首支预告,定档 4 月 12 日开始播出。赞达亚、亨特·莎弗、埃里克·迪恩、雅各布·艾洛蒂、西德尼·斯维尼、科尔曼·多明戈、罗莎莉亚、亚历克萨·德米、茉德·阿帕图等回归出演,高中生活结束,众人走向了不同的人生。 来源

更多

电影《复仇者联盟 5:毁灭日》新贴片预告:宣布神奇四侠和瓦坎达人回归,此前 3 支贴片预告已陆续确认美国队长、X 战警、雷神等超英回归,小罗伯特·唐尼回归饰演大反派毁灭博士,罗素兄弟执导,已定档 12 月 18 日在北美上映。 来源

剧集《帝王计划:怪兽遗产 第二季》先导预告:库尔特·拉塞尔、泽井杏奈、科雷西·克莱门斯、渡部莲、平岳大等继续主演,哥斯拉和泰坦巨兽们的激战将旧金山夷为平地,来到怪兽真实存在的惊人新世界,2 月 27 日上线 Apple TV。 来源

《洛杉矶劫案》发布新正式预告:克里斯·海姆斯沃斯、哈莉·贝瑞、马克·鲁法洛、巴里·基奥恩主演,巴特·雷顿(《美国动物》)执导并联合彼特·斯特劳恩(《锅匠,裁缝,士兵,间谍》)编剧,改编自唐·温斯洛所著同名小说,2 月 13 日北美上映。

📽 影视新闻周报

《呼啸山庄》确认引进

1 月 12 日,电影《呼啸山庄》确认引进中国内地,并发布了 预告 和海报,档期待定。埃默拉尔德·芬内尔(《萨特本》)执导,玛格特·罗比、雅各布·艾洛蒂主演,周洪、艾莉森·奥利弗、欧文·库珀等出演,演绎孤儿希斯克利夫和恩萧家女儿凯瑟琳那悲伤且激烈的爱情。 来源

《闪灵》内地定档 1 月 30 日

1 月 14 日,电影大师库布里克传奇之作《闪灵》发布了 中国内地定档预告 和海报,将于 1 月 30 日以 2D、CINITY、IMAX 制式首登内地影院。杰克·尼科尔森、谢莉·杜瓦尔、丹尼·劳埃德主演,作家杰克和妻子温蒂、儿子丹尼搬进雪山酒店,诡异事件如影随形。 来源

《暗黑新娘!》内地定档 3 月 6 日

1 月 16 日,电影《暗黑新娘!》发布了 中国内地定档预告 和海报,将于 3 月 6 日同步北美上映。玛吉·吉伦哈尔执导,杰西·巴克利、克里斯蒂安·贝尔主演,孤独的科学怪人弗兰肯斯坦恳请尤弗洛尼斯博士为他创造一位伴侣,两人成功复活了一名被谋杀的年轻女子。 来源

《庇护之地》内地定档 1 月 30 日

1 月 15 日,动作惊悚电影《庇护之地》发布了 中国内地定档预告 和海报,将于 1 月 30 日同步北美上映。里克·罗曼·沃夫执导,杰森·斯坦森主演,隐居孤岛的黄金特工梅森本想与世隔绝,因意外救下少女杰茜被迫重操旧业,展开了一场没有退路的守护之战。 来源

🎪 彩蛋

本期彩蛋是由中奖读者 @科技爱好者 提供的「看图猜电影」,首位猜中片名的读者,可获得彩蛋提供名额 1 次(彩蛋内容包括但不限于「猜电影」「你喜欢的经典影视作品/影人/台词」「电影冷知识」),和我们不定期发放的奖品。本期猜中的「第一名」将会在这篇文章中更新,届时也请各位参与互动的朋友注意站内私信~

> 小红书 📕 关注 少数派sspai本周看什么,找到数字时代更好的生活方式 🎊

> 看什么 Café / 主题片单专题页、2021 年度回顾,更多影视推荐尽在 #本周看什么🎬

    美团又上新模型,8个Thinker齐开工,能顶个诸葛亮?

    0%
    icon展开列表
    面向临床的心电图AI,上智院、复旦等提出CLEAR-HUG框架实现诊断性能与可解释性双突破
    今天
    img
    神同步OpenAI!中国团队Deep Principle领衔发布LLMs for Science评测,引爆外网
    今天
    img
    美团又上新模型,8个Thinker齐开工,能顶个诸葛亮?
    今天
    img
    失去三个联创后,Mira公司危机持续:又有两人要出走
    今天
    img
    不止于量化:最新综述用「时-空-构」三维视角解构KV Cache系统级优化
    今天
    img
    支付宝携手千问App、淘宝闪购等发布中国首个AI商业协议ACT
    今天
    img
    刚刚,Geoffrey Hinton成为第二位引用量破百万的科学家
    今天
    img
    腾讯AngelSlim升级,首个集LLM、VLM及语音多模态为一体的投机采样训练框架,推理速度飙升1.8倍
    今天
    img
    DeepSeek连发两篇论文背后,原来藏着一场学术接力
    今天
    img
    仅需一个混频器的无线射频机器学习推理,登上Science Advances!
    今天
    img
    国内首个可复现!萝博派对公开人形机器人 “从 0 到跑” 全开源方案
    01月15日
    img
    联发科天玑9500s、8500发布:GPU、光追拉满,红米Turbo 5Max将搭载
    01月15日
    img
    通用级PixVerse P1的技术突破,揣着进入平行世界的密码
    01月15日
    img
    Mira公司内乱?CTO被开除,带团队回OpenAI,翁荔上推发言
    01月15日
    img
    Nature丨清华等团队揭示AI科研双重效应:个人效率亦或是科学边界
    01月15日
    img
    刚刚,喝到了千问APP给我点的奶茶
    01月15日
    img
    人脸机器人登上Science Robotics封面:用AI教会仿生人脸机器人「开口说话」
    01月15日
    img
    实测夸克「千问划词快捷指令」,这7个邪修Prompt,建议收藏
    01月15日
    img
    已证实!清华姚班陈立杰全职加入OpenAI,保留伯克利教职
    01月15日
    img
    解锁任意步数文生图,港大&Adobe全新Self-E框架学会自我评估
    01月15日
    img

    美团又上新模型,8个Thinker齐开工,能顶个诸葛亮?

    编辑|Panda、杨文

    临近春节,各家 AI 厂商进入冲刺阶段,纷纷亮出最新大模型成果。

    1 月 15 日,美团也重磅更新自家模型 ——LongCat-Flash-Thinking-2601

    这是一款强大高效的大规模推理模型,拥有 5600 亿个参数,基于创新的 MoE 架构构建。

    图片

    该模型引入了强大的重思考模式(Heavy Thinking Mode),能够同时启动 8 路思考并最终总结出一个更全面、更可靠的结论。目前重思考模式已在 LongCat AI 平台正式上线,人人均可体验。

    图片

          仅选择「深度思考」时才会触发重思考模式。

    • 体验链接:https://longcat.ai

    • 模型地址:https://huggingface.co/meituan-longcat/LongCat-Flash-Thinking-2601

    • GitHub:https://github.com/meituan-longcat/LongCat-Flash-Thinking-2601

    不仅如此,该模型的智能体能力还获得了重大提升:在智能体工具调用、智能体搜索和工具集成推理等基准测试中达到顶尖性能,而且在任意的 OOD(分布外)真实智能体场景中实现了泛化能力的显著提升。

    图片

    研究团队还专门提出了一种全新的智能体模型泛化能力评测方法。

    通过构建自动化的环境和任务合成流程,基于给定关键词,随机生成任意的复杂任务。每个生成的任务都配备对应的工具集与可执行环境。

    这种高度随机化的评测方式,能够更真实地检验模型在未知场景下的适应能力。

    实验结果表明,LongCat-Flash-Thinking-2601 在该评测中始终保持领先性能。

    接下来,我们就把模型拉到真实场景里实测一番。

    一手实测:这只龙猫有点强

    我们先来试试数理逻辑推理,顺便看看这个重思考模式到底是怎么一回事。

    「运动会招募志愿者,第一次招募了不到 100 人,其中男女比例为 11:7;补招若干女性志愿者后,男女比例为 4:3。问最多可能补招了多少名女性志愿者?」

    在 longcat.ai 上开启「深度思考」后,便进入了重思考模式,此时 8 个 Thinker 同时开工,每个都表现出不同的思考风格。有的按常规解题,有的则直接写了个 Python 脚本。

    图片

    大部分 Thinker 给出了答案 5,其中 3 号和 6 号 Thinker 还写出详细的推导过程。待 8 个 Thinker 执行完任务后,模型再验证不同 Thinker 的思考过程,形成最终答案。

    整个过程就像一个团队开会讨论问题,最后达成共识,最终给出的解答也更靠谱得多。

    图片

    下面是道逻辑推理题。「A 的手机号码最后 5 位,由五个不同的数字组成。B 说:我猜它是 84261。C 说:我猜它是 26048。D 说:我猜它是 49280。A 说:巧了,你们每人都猜对了位置不相邻的两个数。你知道这五位号码是多少?」

    图片

    8 个 Thinker 再次启动,各自从不同角度切入。

    模型没有简单地按照「少数服从多数」的原则采纳意见,而是调用一段代码,系统验证答案是否满足所有约束条件,并穷举所有可能的组合,确认 86240 是唯一解。

    这种将单个模型调用八次的模型编排方式,在技术实现上虽直接,却在实际效果上发挥出「三个臭皮匠顶过诸葛亮」的优势。

    实测过程中,我们还发现了重思考模式的一种有趣玩法:投票。

    举个例子,我们可以开启「深度思考」模式,然后让模型选出 2000 年代最优秀的华语流行歌手。

    我们发现不同的 Thinker 会给出很不一样的答案,比如有一个仅选出了周杰伦、蔡依林、孙燕姿、王菲、陈奕迅五位代表,而另一个则直接列出了一长串名单。

    最终,经过模型在总结阶段的汇总整理,LongCat-Flash-Thinking-2601 给出了一份涵盖多维度评估的名单,颇具参考性。

    图片

    我们又试了下该模型的编程能力。先让它生成一个 Flappy Bird 小游戏,效果很不错。

    图片

        Prompt:Make a game like flappy bird using HTML/CSS/JS in a single HTML file.

    接下来我们又试了试让其编写一个康威生命游戏:

    图片

    Prompt:用 Python 写一个 Conway 生命游戏,提供可视化网格、暂停、单步和参数调节功能。

    但实事求是地说,使用 8 个 Thinker 来完成编程任务的计算成本应当是比较高的,可能并不适合大规模应用(尽管目前该模型对普通用户免费),但是我们认为这种模式却非常适合医疗、金融、法律等可能需要多次深度思考来保证准确性的场景。

    最后,我们再来测试一下 LongCat-Flash-Thinking-2601 模型主打的 Agent 能力,其中的核心便是工具调用。

    为了方便用户测试,美团专门构建了一个「大模型工具使用测试」平台。该平台能基于关键词随机生成复杂的 OOD(分布外)任务,专门用来试探模型在陌生环境下的行动能力。

    我们随机生成了一个「营养补给方案」任务。平台瞬间拉起了一个包含近 30 个工具的复杂图谱。从页面右侧的依赖关系可以看出,这并非简单的线性调用,模型需要像经验丰富的营养学家,理清儿童营养需求分析、食物营养成分计算、过敏食物筛选等工具之间环环相扣的逻辑。

    图片

    更有趣的是,该平台还支持模型对比,让用户可以轻松地将 LongCat-Flash-Thinking 与其它模型放在同一起跑线上进行对比。

    这里我们将其与当前大模型界的顶级选手 Claude 4.5 Opus 放在了同一个赛道上,进行同步竞技。

          8 倍速视频

    视频展示了两个模型在高频调用工具时的思考流。在任务完成后,系统会调用 AI 评估员,从执行速度与任务达成度两个维度进行复盘。

    图片

    在这个具体案例中,两个模型都交出了高分答卷,但 LongCat 成功达到了 100% 的标准覆盖率,而 Claude 4.5 Opus 却未能成功为用户创建健康档案,仅达到了 80% 的覆盖率。整体而言,LongCat 在处理工具依赖关系的响应节奏上展现出了更强的稳定性。

    深入细节,我们可以看到这些工具的调用和输出都采用了标准的 JSON 格式,这也是当前大量的 MCP 或 API 工具采用的主流格式。这也意味着,我们可以非常轻松地将 LongCat-Flash-Thinking-2601 整合进到现有的工作流程中。

    图片

    强大实力的根基:重思考 + 智能体

    那么,表现如此亮眼的 LongCat-Flash-Thinking-2601 究竟是如何炼成的?

    正如其推文总结的那样,我们先给出几个关键词:并行思考、迭代式总结、环境规模扩展(Environment Scaling)、多环境大规模强化学习(Multi-Environment RL Scaling)、课程学习(Curriculum Learning)。另外,还有即将发布的 ZigZag Attention

    作为 LongCat-Flash-Thinking 的最新版本,2601 版本继承了上一版本的领域并行训练方案,而技术底座同样是参数总量达 560B 的高性能混合专家(MoE)架构模型。

    图片

          来自 LongCat-Flash-Thinking 技术报告

    在此基础上,如上文评测所示,除了一些细节上的优化,这个新版本重点引入了两大改进:重思考模式智能体能力

    该模型新引入的重思考模式别具一格,我们目前还未见其它任何模型显式或开源地提供类似模式。

    而在智能体能力方面,美团引入了一套精心设计的流程。该流程结合了环境规模扩展与后续任务合成,并会在此之上进行可靠且高效的大规模、多环境强化学习。为更好地适应真实世界智能体任务中固有的噪声与不确定性,美团 LongCat 团队还对多种类型和不同强度的环境噪声进行了系统分析,并采用课程式训练,使模型在非理想条件下依然保持稳健表现。

    下面我们就来更具体地看看美团的这些核心技术。

    重思考模式:推理广度与深度的协同扩展

    打开 longcat.ai 「深度思考」后开始体验,你第一时间就会被同时冒出的 8 个 Thinker 吸引注意。这正是 LongCat 团队提出的 Heavy Thinking Mode(重思考模式)的外在表现。它不仅看起来炫酷,更重要的是将推理能力推向了新的边界。

    图片

    大致来看,其与 AI 大牛 Andrej Karpathy 实验性的大模型议会项目有相似之处,但不同的是,Karpathy 的大模型议会是通过模型编排方式来向不同模型构成的集体提出问题,让它们各自发言并讨论后给出最终解答,而 LongCat-Flash-Thinking-2601 新引入的重思考模式则是并行地调用一个模型 8 次来实现高强度的并行思考。

    如此一来,便可以同时获得多条相互独立的推理路径并进行交叉验证,从而显著降低偶然性错误,提升在复杂问题上的稳定性、可靠性与最终答案质量。如此一来,可以进一步提升模型在极具挑战性任务上的表现。

    具体来说,该模式会将高难度问题求解分解为两个互补阶段:并行思考总结,从而同时扩展推理的深度与宽度。

    • 推理宽度方面,重思考模式会并行生成多条独立轨迹,以广泛探索不同推理路径,并采用相对较高的推理温度以保证多样性。

    • 推理深度方面,总结阶段生成的精炼轨迹可以递归反馈给总结模型,形成支持逐步加深推理的迭代推理回路。LongCat 团队还专门设计了额外的强化学习阶段来训练总结能力,进一步释放该模式的潜力。

    智能体能力提升:环境规模扩展与多环境强化学习

    智能体能力方面,LongCat 团队精心设计了一套自动化环境规模扩展链路,并构建了一组多样且高质量的环境,作为工具调用类任务强化学习的训练场,使模型能够习得高层次、可泛化的智能体能力。

    每个环境包含多达 60 余种工具,并以高密度依赖图的形式组织,提供了足够的复杂度以支持多样化任务构建与大规模探索。实验表明,随着训练环境数量的增加,模型在分布外(OOD)任务中的表现会持续提升(Environment Scaling)。

    高质量任务构建

    为确保训练任务集的质量,LongCat 团队对任务复杂度和多样性进行显式控制。每个任务都定义在从高质量环境中采样得到的连通子图之上,任务复杂度通过要求在该子图内尽可能多地协同使用工具来调节。为促进任务多样性,已选工具的再次采样概率会逐步降低。

    LongCat 团队还构建了配套数据库以确保任务的可执行性,并验证每个任务至少存在一种可执行解。然而,当环境中包含大量工具时,跨数据库的一致性维护会变得困难,可能导致部分任务无法验证。针对这一问题,LongCat 团队设计了专门的应对策略,使训练的稳定性和有效性得到了充分保障。

    多环境强化学习

    在保持高效异步训练和流式 rollout 特性的同时,LongCat 团队进一步扩展了其强化学习基础设施 DORA(异步弹性共卡系统),以支持环境规模扩展下的大规模多环境智能体训练(Multi-Environment RL Scaling)。

    具体而言,来自多个环境的任务会在每个训练批次中以平衡的方式混合,并根据任务复杂度和当前训练状态分配不同的 rollout 预算。

    下图展示了该模型的多环境混合强化学习训练曲线,可以看到上涨的趋势非常稳定,这表明美团构建的基础设施和算法可以有效保证训练的稳定性。

    图片

    下图则展示了多环境强化学习训练下,模型在不同 OOD 测试集上的 RL Scaling 表现,效果非常明显。

    图片

    面向噪声环境的稳健训练

    真实世界的智能体环境天然存在噪声和缺陷,仅在理想化环境中训练模型往往难以获得足够的稳健性。为此,LongCat 团队在训练过程中显式引入环境不完美因素,以提升模型的稳健性。

    具体而言,LongCat 团队系统分析了智能体场景中真实世界噪声的主要来源,并设计了一套自动化流程,将这些噪声注入训练环境。在强化学习阶段,LongCat 团队采用课程式策略,随着训练推进逐步增加噪声的类型和强度。

    下图展示了模型是否采取面向噪声环境的稳健训练,在带噪声 / 无噪声评测集下的表现对比,其中不同的评测集上依据特性添加了不同类型的噪声。可以看到,带噪声环境下未经过稳健训练的模型的表现会出现大幅衰减,Claude 也无法适应全部的噪声类型。而经过稳健训练后,LongCat-Flash-Thinking-2601(Training w/ Noise 组) 对环境的噪声和不确定性展现出了强大的适应能力,并在各类非理想条件下取得更优表现。

    图片

    得益于这些改进与创新,LongCat-Flash-Thinking-2601 不仅在智能体工具使用、智能体搜索以及工具融合推理等基准测试中达到顶尖水平,还在任意的 OOD(分布外)真实世界智能体场景中展现出显著提升的泛化能力。

    LongCat ZigZag Attention:实现超长上下文

    LongCat ZigZag Attention,顾名思义,是一种注意力机制,根据其官方推文描述,其一大核心亮点是能「实现 100 万 token 上下文」。据悉,LongCat ZigZag Attention 已被成功用于训练当前 LongCat-Flash-Thinking 模型的一个分支,我们也将很快见证这个分支版本面世。细节详见论文:https://arxiv.org/abs/2512.23966

    图片

    One More Thing

    回头来看,美团大模型站到台前时间并不算长但节奏清晰,首次亮相在 2025 年 9 月,此后保持了每月一更的开源节奏,不断扩容自己的能力库:从强调响应速度的 LongCat-Flash-Chat 到专注逻辑的 Thinking 版本,再到图像和视频模型以及覆盖多模态的 Omni 版本,每一步迭代都在让这只龙猫能够更好地理解这个世界,并让复杂的现实生活变得更加可计算。

    图片

           美团在 Hugging Face 上的论文页面

    这一次,龙猫聚焦 Agent 与 Thinking 能力进行全面提升,也是实现了一次从理解到融入真实世界的跃迁。

    或许,美团现在追求的,就是一种确定性:能够用技术在真实世界中又好又快地解决问题,终有一天让「模型即服务」。

    神同步OpenAI!中国团队Deep Principle领衔发布LLMs for Science评测,引爆外网

    0%
    icon展开列表
    面向临床的心电图AI,上智院、复旦等提出CLEAR-HUG框架实现诊断性能与可解释性双突破
    今天
    img
    神同步OpenAI!中国团队Deep Principle领衔发布LLMs for Science评测,引爆外网
    今天
    img
    美团又上新模型,8个Thinker齐开工,能顶个诸葛亮?
    今天
    img
    失去三个联创后,Mira公司危机持续:又有两人要出走
    今天
    img
    不止于量化:最新综述用「时-空-构」三维视角解构KV Cache系统级优化
    今天
    img
    支付宝携手千问App、淘宝闪购等发布中国首个AI商业协议ACT
    今天
    img
    刚刚,Geoffrey Hinton成为第二位引用量破百万的科学家
    今天
    img
    腾讯AngelSlim升级,首个集LLM、VLM及语音多模态为一体的投机采样训练框架,推理速度飙升1.8倍
    今天
    img
    DeepSeek连发两篇论文背后,原来藏着一场学术接力
    今天
    img
    仅需一个混频器的无线射频机器学习推理,登上Science Advances!
    今天
    img
    国内首个可复现!萝博派对公开人形机器人 “从 0 到跑” 全开源方案
    01月15日
    img
    联发科天玑9500s、8500发布:GPU、光追拉满,红米Turbo 5Max将搭载
    01月15日
    img
    通用级PixVerse P1的技术突破,揣着进入平行世界的密码
    01月15日
    img
    Mira公司内乱?CTO被开除,带团队回OpenAI,翁荔上推发言
    01月15日
    img
    Nature丨清华等团队揭示AI科研双重效应:个人效率亦或是科学边界
    01月15日
    img
    刚刚,喝到了千问APP给我点的奶茶
    01月15日
    img
    人脸机器人登上Science Robotics封面:用AI教会仿生人脸机器人「开口说话」
    01月15日
    img
    实测夸克「千问划词快捷指令」,这7个邪修Prompt,建议收藏
    01月15日
    img
    已证实!清华姚班陈立杰全职加入OpenAI,保留伯克利教职
    01月15日
    img
    解锁任意步数文生图,港大&Adobe全新Self-E框架学会自我评估
    01月15日
    img

    神同步OpenAI!中国团队Deep Principle领衔发布LLMs for Science评测,引爆外网

    作者丨论文团队

    编辑丨ScienceAI

    最近,一篇由中国团队领衔全球 24 所 TOP 高校机构发布,用于评测 LLMs for Science 能力高低的论文,在外网炸了!

    当晚,Keras (最高效易用的深度学习框架之一)缔造者 François Chollet 转发论文链接,并喊出:「我们迫切需要新思路来推动人工智能走向科学创新。」

    图片

    AI 领域 KOL Alex Prompter 分享论文核心摘要后,NBA 独行侠队老板 Mark Cuban 跟帖转发,硅谷投资人、欧洲家族办公室、体育媒体同时涌进评论区。

    图片

    仅一夜,累计阅读量逼近 200 万。

    值得一提的是,同一时间窗里,OpenAI 也发布了对于 AI 在科学发现领域能力评测的论文《FrontierScience: Evaluating Al's Ability to Perform Scientific Research Tasks》概述,指出现有评测标准在 AI for Science 领域失灵。

    图片

    神同步 OpenAI、海外讨论出圈,究竟是什么样的一份工作成果,搅动了全球 AI 舆论场?

    AI 距离可以助力科学发现还有多远?

    前段时间,美国推出「创世纪计划」,号称要调动「自阿波罗计划以来最大规模的联邦科研资源」,目标是在十年内将美国科研的生产力和影响力翻倍。

    但在人工智能估值泡沫隐现、能耗与产出比饱受质疑的当下,一面是资本的狂欢,另一面却是 AI 能力困于「文生图」等表层应用的尴尬;一面是各类大语言模型频繁霸榜 GPQA、MMMU 等题库式 Benchmark 的层出不穷,另一面却是现有 LLMs 还无法准确解析简单核磁图谱的尴尬现状。

    人们不禁要问:能在题库拿高分,就能助力科学发现吗?现在的模型距离科学发现还有多远?究竟什么样的 AI 模型可以胜任,拓宽人类的生存边界?这些讨论,在中美 AI 竞争白热化的当下变得愈发浓烈。

    在此背景下,由中国 AI for Science 领域的初创企业「深度原理 Deep Principle」领衔麻省理工学院、哈佛、普林斯顿、斯坦福、剑桥、牛津等全球 24 所科研院校共同发布的《Evaluating LLMs in Scientific Discovery》论文,正式回答该时代之问。

    论文推出了 LLM for Science 首套评测体系 SDE(Scientific Discovery Evaluation),从科学问题到研究项目,对 GPT-5、Claude-4.5、DeepSeek-R1、Grok-4 等全球主流大语言模型在生物、化学、材料、物理领域的科学研究与发现能力完成摸底。

    图片

    同以往评测体系不同的是,SDE 对模型能力的考量,从简单的问答式,引向了具体的「假设 -> 实验 -> 分析」实验场景。

    研究发现,GPT-5、Claude-4.5、DeepSeek-R1、Grok-4 平均准确率 50–70%,远低于它们在 GPQA、MMMU 等题库上的 80–90%;在 86 道「SDE-Hard」难题中,最高分不足 12%,共同暴露出多步推理、不确定性量化和实验与理论闭环的短板。

    更值得警惕的是,模型规模与推理能力的提升已呈现明显的「边际效益递减」。

    GPT-5 相较于前一代模型,参数规模和推理算力显著增加,但在 SDE 基准的四大科学领域中,平均准确率仅提升 3%-5%,部分场景(如 NMR 结构解析)甚至出现性能下滑。

    换句话说,当前大语言模型在推动科学发现方面的表现,还不如一个普通的本科生。

    能领衔 24 所顶尖科研院校发布的背后团队是谁?

    《Evaluating LLMs in Scientific Discovery》论文通讯作者段辰儒,是「深度原理 Deep Principle」创始人兼 CTO。早在 2021 年,在 MIT 攻读化学博士期间,他就已在图灵奖得主 Yoshua Bengio 的支持下,发起了 AI for Science 社区的建立,并在 NeurIPS 上举办 AI for Science workshop。

    2024 年初,他与 MIT 物理化学博士贾皓钧回国,共同创立「深度原理 Deep Principle」。贾皓钧任 CEO,段辰儒任 CTO,两人虽为 95 后,但已在全球 AI for Science 创业领域小有名气。

    创业一年半以来,其已获得线性资本、高瓴创投、蚂蚁集团等多家知名机构的投资,且与晶泰科技、深势科技等 AI for Science 领域的知名企业建立战略合作关系。

    「深度原理 Deep Principle」从创立之初,就带着全球 AI for Science 头部研究者们的期待。目前「深度原理 Deep Principle」已深入全球材料研发中的第一线,将生成式人工智能同量子化学结合起来,致力于推动材料发现等领域进入新纪元。

    在过去的一年中,他们在 Nature 大子刊和 JACS 等顶级期刊上不断扔出重磅成果,宣告着他们的技术领先和开放交流的「95 后创业公司」心态。从开拓扩散生成模型(Diffusion Models)在化学反应的生成,证明「不止要生成材料,更需要生成材料的合成路径」,到机器学习势(Machine Learning Potentials, MLPs)和扩散生成模型的直接对比,证明传统的机器学习势不是「万能」的,再到现在组织各大顶级学者和高校推出 SDE,证明传统一问一答的 Benchmark 不能带领我们走向科学超级智能,精准切入 AI for Science 领域的核心冲突。

    但同时,对于所有的 AI4S 公司而言,在商业真金白银的检验中,AI 能否真正解决新产品研发问题、满足客户期待,是日复一日必须面对的拷问。

    随着与行业头部客户的商业化合作落地,「深度原理 Deep Principle」的数据库中已经汇聚了来源于客户与自己实验室、大量来自第一线的真实工业研发场景数据和模型应用经验。

    学术圈的深耕与在 AI for Science 商业化第一线的积累,让「深度原理 Deep Principle」在提出要构建一把新尺子评测 LLMs for Science 能力时,一呼百应,摇来了 23 家全球 TOP 科学发现机构的 50 余位科学家,成立了制定 SDE 的「梦之队」。

    这其中,不乏活跃在 LLM 领域的大牛学者们,比如:

    • 孙欢(Huan Sun),MMMU 发起人,俄亥俄州立教授

    • 杜沅岂(Yuanqi Du),康奈尔博士,AI4Science 社区「运营大管家」

    • 王梦迪,普林斯顿最年轻教授,AI+Bio Safety 先驱者

    • Philippe Schwaller,IBM RXN 之父,EPFL 教授

    而「深度原理 Deep Principle」前期积累的科学发现场景,成为了后来 SDE 评测体系的前身。

    在经历近 9 个月的跨高校跨学科跨时区的协作后,《Evaluating LLMs in Scientific Discovery》论文正式发布,通讯单位赫然写着:深度原理,杭州,中国。  

    图片

    自此,汇聚着全球顶级科学发现机构的集体智慧,来自中国的创业团队「深度原理 Deep Principle」,和大洋彼岸的 OpenAI,同时站在了向 AI for Science—— 这一人类通往终极 AGI 顶峰攀登的起跑线。

    或许千百年后,当人类回望 AGI 时代,在 21 世纪的四分之一结束的当口,这场由中美团队共同呼应的,对于 AI for Science 的严肃讨论,把 LLMs 在各类问答式榜单上的内卷,向真正科学发现的星辰大海推近了一步。

    至于怎么通往彼岸,段辰儒表示:「当大语言模型在各种科学问答榜单表现饱和,但还不能有效支持科学发现时,就像『考试成绩好』不等于『顶级研究者』,说明我们需要新的评测体系与训练路径。」

    「深度原理 Deep Principle」与 20 多所机构的 50 多位合作者的研究证明了,目前 LLM 的发展路径并不能「顺便攻克」科学发现。

    这条通往科学超级智能之路,需要更多有识之士共同并肩而行。

    demo-interactive-flow


    交互式提示词生成流程

    支持带附件(图,docx,pdf)对话优化提示词


    多轮问题导向优化提示词
    demo-template-management

    Question

    无论是复杂任务,如论文精度,汇报 PPT 大纲制作,深度搜索调研,还是 agent.md
    还是简单任务,比如 linux 命令生成,旅游规划,text2img 绘图
    我都体验过很多万能的模板,也体验了生成提示词的提示词优化器,然而他们都无法满足我的需求
    这并不是这些提示词不行,而是并不适合我
    我想,只有一个模板,他能通过交互式的方式适配到我的业务或需求上,这种方式的模板才真正万能
    然而据我所知,市面上并没有这样的一款工具,因此,我开发了这样一款纯前端项目

    Quote

    一句话介绍: 通过多轮交互式对话,将模糊想法转化为结构化、高质量的 AI 提示词

    在线体验

    【免费免部署免配置体验】一个更贴近日常使用的交互式提示词优化器1 【免费免部署免配置体验】一个更贴近日常使用的交互式提示词优化器2

    目前配置了免费的 apikey,欢迎测试,感谢 @huan 焕佬的支持,额度有限,大家轻点用
    项目地址
    如果这个项目对你有帮助,欢迎给个 Star!

    核心亮点

    1. 智能交互引导

    不需要你是提示词专家,AI 会主动询问:

    • 你的角色定位是什么?
    • 目标受众是谁?
    • 需要什么深度的内容?
    • 期望的输出格式?

    通过交互式表单,几次点击就能明确需求!

    2. 多模态文件支持

    • 上传 PDF 论文,AI 自动解析内容
    • 粘贴图片截图,AI 理解视觉信息
    • 支持 DOCX、TXT 等多种格式

    3. 本地优先 (Local-First)

    • API Key 仅存储在浏览器本地
    • 对话历史使用 IndexedDB 离线存储
    • 无需担心隐私泄露

    4. 现代化体验

    • 深色模式支持
    • 响应式设计(移动端友好)
    • 基于 Shadcn/UI 的精美界面

    案例展示

    案例 1:模糊命令

    Example




    案例 2:复杂任务

    Example

    dog food example




    对比生成后


    然后我有点想选前者

    todo

    Todo

    接入之前看的一个佬的 gemini 网页 2api 项目,实现免配使用
    接入 CC/CODEX/ 寸止,进行交互式 Vibe Coding 提示词增强
    ▢ 提示词收藏与管理
    ▢ 目前元提示词不是很好,还要优化,一些指令遵从不好的模型,如 grok,会偏离流程
    ▢ 有些交互 bug
    ▢ 动画不是很好看
    ▢ icon 很丑,UI 太大众

    碎碎念

    其实用别人项目的时候我屁事都比较多,之前用过一个佬的优化提示词,后面用一直没能力也没时间弄出自己的想法,这次总算心一狠弄了出来,项目本身我还是挺喜欢的,至少满足了我的需求

    这个项目从前天想到到今天上线弄了三天,中间被老板因课题没进度批了一顿,还差点放弃开发,没想到前端项目还开发这么久,可能还是没有前端基础导致,连一个 AI chat ui 的 AI 返回一直白屏都让 cld 用 playwright 和反重力的 gemini 3 pro high 改了一天,不过做出来还是成就感满满,毕竟站在 AI 的肩膀上很快从想法到实现了个稍微复杂的项目,并且自我感觉比较完善

    技术细节

    一共花费挺少的,反重力 0 成本,cld 这边大概花了 10 块吧



    目前用的 ccg 工作流,但是一直没成功调用 codex,gemini,以及寸止,playwright 等 7 个 mcp,由于是纯前端项目,需要不断交互,主要用到前两个,ace 相关 mcp 也偶尔用到,anycode 不怎么用,之前以为跟 ccg 有冲突就没用,一般用开箱未配置的 wezterm


    参考项目

    1. smkalami/prompt-decorators: Prompt Decorators are structured prefixes, such as +++Reasoning and +++StepByStep, designed to enhance AI responses. Inspired by Python decorators, they make AI outputs more logical, accurate, and well-organized without requiring lengthy instructions, simplifying interactions for users.
    2. GitHub - anthropics/prompt-eng-interactive-tutorial: Anthropic's Interactive Prompt Engineering Tutorial
    3. GitHub - tranzwalle/prompt_builder: 基于 [Anthropic 的 Interactive Prompt Engineering Tutorial](https://github.com/anthropics/prompt-eng-interactive-tutorial) 构建的智能 Prompt 优化工具。
    4. GitHub - xavierchoi/Prompt-Enhancer
    5. GitHub - lwh8915/PromptX: PromptX 不仅仅是一个提示词存储工具,它是专为 AI 时代打造的生产力神器。采用 UI/UX Pro Max 设计标准,结合强大的 版本管理 和 智能分类,让你的 AI 工作流效率提升 10x。
    6. GitHub - Hunyuan-PromptEnhancer/PromptEnhancer: PromptEnhancer is a prompt-rewriting tool, refining prompts into clearer, structured versions for better image generation.
    7. GitHub - songtingze/prompt-optimizer: 大模型提示词优化器,让大模型根据测试结果进行反思生成优化建议,并结合用户要求进行提示词优化。
    8. GitHub - linshenkx/prompt-optimizer: 一款提示词优化器,助力于编写高质量的提示词

    参考帖子

    1. 新人水帖,一个提示词优化器项目 - 开发调优 - LINUX DO
    2. 提示词优化分享 - 递归自优化生成系统 - 开发调优 - LINUX DO
    3. 「SSRPrompt」为了方便内部项目的 prompt 管理,产品经理设计了这款开源软件 - 开发调优 - LINUX DO
    4. 【提示词工程】分享那些我认为好用的, 我在用的, 我愿意推荐的提示词 - 文档共建 - LINUX DO

    📌 转载信息
    原作者:
    systemoutprintlnhell
    转载时间:
    2026/1/16 18:50:38

    空闲时间搓了一个可自托管的 GitHub Stars 管理工具,项目大幅使用 vibe codeing,claude opus 贡献了百分之九十五的代码,开源地址:Starflow

    Github 自带的 star 功能个人觉得并不好用,尤其是 list,整理起来非常地繁杂,同类项目很多都没有更新,或者是不喜欢这样那样的界面,故有了此项目。

    我自己在一个小鸡上也部署了这个项目,占用大致一百多 MB,地址 Starflow, 可以在线试试,登录的话默认会读取私库!,介意请勿登录,自行托管即可。

    功能特性

    核心功能

    • Lists 分类管理 - 创建自定义 Lists,将仓库按项目、技术栈或用途分类,支持 24 种预设颜色
    • AI 智能分类 - 接入 OpenAI 兼容 API,一键自动分类所有未整理的仓库
    • 双向同步 - 与 GitHub 实时同步,取消 Star 也会同步到你的账号
    • README 预览 - 无需跳转即可查看仓库的 README 文档

    搜索与筛选

    • 全文搜索 - 按名称、描述快速搜索仓库
    • 多维筛选 - 按语言、List、星标数、更新时间等筛选
    • 排序方式 - 支持按 Star 时间、更新时间、星标数等排序

    数据管理

    • 笔记备注 - 为仓库添加个人笔记,记录使用心得和备忘
    • 导入导出 - 支持 JSON/CSV 格式导出,便于备份和迁移
    • 数据持久化 - PostgreSQL 存储,支持数据目录映射便于备份

    用户体验

    • 主题切换 - 支持亮色 / 暗色模式,偏好自动保存
    • 键盘快捷键 - 支持快捷键操作,提升效率
    • 响应式设计 - 适配桌面和移动端

    预览

    🌙 暗色模式


    ☀️ 亮色模式



    支持自托管,支持 docker-compose 部署,具体部署比如环境变量配置详情可以查看项目 Github README:

    services: starflow:  gemiluxvii/starflow:latest container_name: starflow restart: unless-stopped ports: - "3000:3000" environment: - DATABASE_URL=postgresql://starflow:starflow@db:5432/starflow - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID} - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET} - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} - NEXTAUTH_URL=${NEXTAUTH_URL} depends_on: db: condition: service_healthy db:  postgres:16-alpine container_name: starflow-db restart: unless-stopped environment: - POSTGRES_USER=starflow - POSTGRES_PASSWORD=starflow - POSTGRES_DB=starflow volumes: - ./data/postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U starflow"]
          interval: 5s timeout: 5s retries: 5 


    AI 分类

    Starflow 支持接入 OpenAI 兼容的 API 进行智能分类。

    支持的服务

    • OpenAI 官方 API
    • 第三方中转站
    • 本地部署的 Ollama、LocalAI 等

    配置方式

    1. 进入「设置」页面
    2. 在「AI 分类」部分填写:
      • API 地址(如 https://api.openai.com 或中转站地址)
      • API Key
      • 模型名称(如 gpt-3.5-turbo
    3. 点击「测试连接」验证配置
    4. 启用 AI 分类功能

    分类说明

    • 提供 15 种标准分类:AI 工具、代理工具、CLI 工具、前端、后端、数据库、DevOps、编辑器、开发工具、下载工具、媒体工具、安全工具、学习资源、系统工具、其他
    • 支持单个仓库分类和批量一键分类
    • 优先匹配已有 Lists,减少重复分类


    技术栈

    • 前端: Next.js 15, React 19, Tailwind CSS 4, Radix UI
    • 后端: Next.js API Routes, NextAuth.js 5, Prisma 5
    • 数据库: PostgreSQL
    • AI: OpenAI 兼容 API


    佬友也可以提提建议,喜欢的话点个 star,不胜感激


    📌 转载信息
    原作者:
    GEMILUXVII
    转载时间:
    2026/1/16 18:49:18

    1. 最近同事为 ZimaOS 项目写了一个极简的 SQLite ORM:zorm,主打一个 简单、够快、好维护。​
    2. 只支持 sqlite,一个文件搞定嵌入式存储,适合小型服务、边缘设备、单机工具这类场景。​
    3. API 尽量贴近原生 SQL,没有复杂的魔法,熟悉 database/sql 的同学几分钟就能上手。​
    4. 内置自 mock 能力,做单元测试不再纠结怎么 stub 掉数据库调用。​
    5. 当前已经在 Zima 系列内部项目中吃自己狗粮,稳定性和性能还不错。​
    6. GitHub 地址:GitHub - IceWhaleTech/zorm: Zima ORM library (just sqlite) that is simple, ultra-fast and self-mockable for Go ,欢迎佬友拍砖、提 issue、提 PR。​
    7. 如果你也在用 Go+SQLite 写小工具或边缘服务,欢迎试用看看,顺手点个 star 支持一下。​

    📌 转载信息
    原作者:
    linkliang
    转载时间:
    2026/1/16 18:48:38

    antigravity 也支持 skills 了,skills 逐渐成为大家的共识。随之而带的带来一个问题,每个工具的 skills 都是在自己的文件结构中去创建和 copy,而且 skills 也是可能需要优化和更新的,导致管理起来挺烦,所以想到基于主工具 claude code 来自动同步 skills 到其它各 ai 工具的想法。

    opencode 自身就会加载 claude code 的 skills,所以没必要同步

    Step 1

    准备好 fswatch,监听 ~/.claude/skills 的变化

    brew install fswatch
    

    Step 2

    准备一个 sync_skills.sh:

    #!/bin/bash
    fswatch -o ~/.claude/skills | while read f; do
        rsync -a --delete --exclude-from=~/.codex/skills/.exclude-list ~/.claude/skills/ ~/.codex/skills/
        rsync -a --delete --exclude-from=~/.gemini/skills/.exclude-list ~/.claude/skills/ ~/.gemini/skills/
        rsync -a --delete --exclude-from=~/.gemini/antigravity/skills/.exclude-list ~/.claude/skills/ ~/.gemini/antigravity/skills/
    done
    

    其中 --exclude-from 是为了在某些工具中想要排除一些 skills 的同步,比如有一些 skills 只能用于某个工具里,就可以创建一个.exclude-list 文件,把要排除的 skills 文件夹名丢进去,一行一个。

    Step 3

    如果想每次重启后自动运行,还可以创建一个 ~/Library/LaunchAgents/com.user.sync_claude_codex_skills.plist

    里面的 xxx 换成自己的

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.user.sync_claude_codex_skills</string>
    
        <key>ProgramArguments</key>
        <array>
            <string>/bin/bash</string>
            <string>/Users/xxx/sync_skills.sh</string>
        </array>
    
        <key>RunAtLoad</key>
        <true/>
    
        <key>KeepAlive</key>
        <true/>
    
        <key>StandardOutPath</key>
        <string>/tmp/sync_skills.stdout</string>
    
        <key>StandardErrorPath</key>
        <string>/tmp/sync_skills.stderr</string>
    
        <key>EnvironmentVariables</key>
        <dict>
            <key>PATH</key>
            <string>/opt/homebrew/bin:/usr/local/bin:/bin:/usr/bin</string>
        </dict>
    </dict>
    </plist>
    
    

    然后终端执行:

    launchctl load ~/Library/LaunchAgents/com.user.sync_claude_codex_skills.plist
    

    📌 转载信息
    原作者:
    Terran_Wu
    转载时间:
    2026/1/16 18:48:31

    前因:

    上次有佬友问如何自动定时同步上游仓库,当时我随手糊了一段脚本,结果发现 bug 满天飞,于是删除了。同时也推荐了 pull 这个工具,但是这个工具的同步比较随机,不可控。
    于是就搞了现在这个脚本,支持多仓库、多用户、多分支、多平台通知

    食用方法:
    fork 仓库,然后根据 README.md 进行配置。
    上游仓库:可以是任意公开仓库
    目标仓库:可以是任意用户的仓库(需要具备 repo 权限的 token)

    目标仓库支持你 fork 别人的,不影响 pr、创建分支等。也可以你自己创建一个空仓然后搬运。

    该脚本运行于 GitHub Aactions,运行后的 actions 日志会显示上游仓库地址、目标仓库 owner/repo,但是不会暴露各种 token 等私密信息。可以把仓库设置为私密,不影响同步功能和效果。

    推送的消息如下:


    📌 转载信息
    原作者:
    binghe
    转载时间:
    2026/1/16 17:41:31