Python 实现模型 API 成本统计:Token 计费、SQLite 账本与预算告警

用FastAPI构建API包装SaaS:鉴权、限流与计量计费实战 API与SaaS是软件交付领域的两个基础概念。API提供接口调用能力,而SaaS则强调按需订阅、按量付费的软件服务模式。将API包装成SaaS,核心并非简单的接口转发,而是需要构建多租户隔离、鉴权管理、限流控制与计量计费等平台级能力。这些模块让每一次调用都成为可度量、可追溯、可定价的商业单元,从而为开发者提供稳定的增值服务。在实际工程中,借助FastAPI的依赖注入与异步特性,可以高效实现API Key鉴权、内存级限流、上游请求转发及用量记录;结合Docker Compose,则能快速完成容器化部署。这种模 阅读详情

在项目刚接入模型 API 时,我们通常更关注调用是否成功、响应速度是否够快。

但随着调用量增加,另一个问题很快就会出现:

“今天到底消耗了多少 Token,又花了多少钱?”

如果只依赖服务商后台查看账单,往往存在以下问题:

  1. 无法按项目、用户或者业务功能拆分成本。
  2. 账单数据可能存在一定延迟。
  3. 无法在预算即将耗尽时主动告警。
  4. 很难定位某一天成本突然上涨的具体原因。
  5. 接入多个模型或多个渠道后,统计口径不统一。

本文使用 Python、Decimal 和 SQLite,实现一个轻量级的模型 API 成本统计模块。

最终实现的能力包括:

  • 分别计算输入 Token 和输出 Token 成本
  • 记录每一次模型调用
  • 防止重复写入账单
  • 按项目统计每日消费
  • 设置每日预算和告警阈值
  • 处理流式响应、失败请求等特殊情况

一、模型 API 成本如何计算

大多数文本模型会分别统计输入 Token 和输出 Token。

假设某个模型的价格为:

  • 输入:每 100 万 Token 0.20 元
  • 输出:每 100 万 Token 0.80 元

一次请求使用了 12,000 个输入 Token,并生成了 3,000 个输出 Token,那么费用为:

输入成本:

12,000 ÷ 1,000,000 × 0.20 = 0.0024 元

输出成本:

3,000 ÷ 1,000,000 × 0.80 = 0.0024 元

总成本:

0.0024 + 0.0024 = 0.0048 元

计算公式可以写成:

总成本 = 输入Token ÷ 1,000,000 × 输入单价
    + 输出Token ÷ 1,000,000 × 输出单价

需要注意,本文使用的价格仅为演示数据。实际项目必须根据当前供应商、具体模型和计费规则更新价格。

二、为什么金额不能直接使用 float

Python 中的 float 使用二进制浮点数表示数据,某些十进制小数无法被精确存储。

例如:

print(0.1 + 0.2)

输出结果并不是严格的 0.3:

0.30000000000000004

单次请求的误差很小,但经过几十万甚至上百万次累计后,可能影响账单核对。

因此,涉及金额时建议使用 Decimal,并且通过字符串创建:

from decimal import Decimal

price = Decimal("0.20")

不建议这样写:

price = Decimal(0.20)

因为传入 Decimal 之前,0.20 已经先被转换成了 float。

三、定义模型价格配置

首先使用 dataclass 保存模型价格。

from dataclasses import dataclass
from decimal import Decimal


@dataclass(frozen=True)
class ModelPrice:
    input_per_million: Decimal
    output_per_million: Decimal


PRICE_TABLE = {
    "example-model-small": ModelPrice(
        input_per_million=Decimal("0.20"),
        output_per_million=Decimal("0.80"),
    ),
    "example-model-large": ModelPrice(
        input_per_million=Decimal("1.00"),
        output_per_million=Decimal("4.00"),
    ),
}

这里把价格表独立出来有两个好处:

  1. 供应商调整价格时,只需要修改价格配置。
  2. 业务代码不需要关注不同模型的具体单价。

生产环境中,可以进一步把价格配置存入数据库或者配置中心。

四、计算单次请求成本

接下来实现一个成本计算函数。

from decimal import Decimal, ROUND_HALF_UP


ONE_MILLION = Decimal("1000000")
STORAGE_PRECISION = Decimal("0.00000001")


def calculate_cost(
    input_tokens: int,
    output_tokens: int,
    price: ModelPrice,
) -> dict:
    if input_tokens < 0 or output_tokens < 0:
        raise ValueError("Token 数量不能为负数")

    input_cost = (
        Decimal(input_tokens)
        / ONE_MILLION
        * price.input_per_million
    )

    output_cost = (
        Decimal(output_tokens)
        / ONE_MILLION
        * price.output_per_million
    )

    total_cost = input_cost + output_cost

    return {
        "input_cost": input_cost.quantize(
            STORAGE_PRECISION,
            rounding=ROUND_HALF_UP,
        ),
        "output_cost": output_cost.quantize(
            STORAGE_PRECISION,
            rounding=ROUND_HALF_UP,
        ),
        "total_cost": total_cost.quantize(
            STORAGE_PRECISION,
            rounding=ROUND_HALF_UP,
        ),
    }

这里保留了 8 位小数。原因是模型调用的单次成本可能非常低,如果过早保留两位小数,大量请求都会被统计为 0。

更合理的做法是:

  • 计算和存储时保留较高精度
  • 页面展示时再格式化为合适的小数位数
  • 月度结算时根据业务规则统一取整

五、使用 SQLite 建立调用账本

下面建立一张 api_usage 表,记录每次模型调用。

import sqlite3


DB_PATH = "model_cost.db"


def get_connection():
    return sqlite3.connect(DB_PATH)


def init_db():
    with get_connection() as conn:
        conn.execute(
            """
            CREATE TABLE IF NOT EXISTS api_usage (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                request_id TEXT NOT NULL UNIQUE,
                project_id TEXT NOT NULL,
                model TEXT NOT NULL,
                input_tokens INTEGER NOT NULL,
                output_tokens INTEGER NOT NULL,
                input_cost TEXT NOT NULL,
                output_cost TEXT NOT NULL,
                total_cost TEXT NOT NULL,
                status TEXT NOT NULL,
                created_at TEXT NOT NULL
            )
            """
        )

        conn.execute(
            """
            CREATE INDEX IF NOT EXISTS
            idx_usage_project_created
            ON api_usage(project_id, created_at)
            """
        )

这里有两个设计细节。

第一,request_id 被设置为 UNIQUE。

如果调用方因为网络超时重复提交统计请求,相同 request_id 不会被重复计费。

第二,金额字段使用 TEXT 保存。

SQLite 的 REAL 本质上仍然是浮点数。使用字符串保存 Decimal,可以避免金额在存取过程中损失精度。

六、记录一次模型调用

下面将价格计算和数据库写入组合起来。

from datetime import datetime, timezone


def record_usage(
    request_id: str,
    project_id: str,
    model: str,
    input_tokens: int,
    output_tokens: int,
    status: str = "success",
) -> bool:
    if model not in PRICE_TABLE:
        raise ValueError(f"未配置模型价格:{model}")

    costs = calculate_cost(
        input_tokens=input_tokens,
        output_tokens=output_tokens,
        price=PRICE_TABLE[model],
    )

    created_at = datetime.now(timezone.utc).isoformat()

    with get_connection() as conn:
        cursor = conn.execute(
            """
            INSERT INTO api_usage (
                request_id,
                project_id,
                model,
                input_tokens,
                output_tokens,
                input_cost,
                output_cost,
                total_cost,
                status,
                created_at
            )
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
            ON CONFLICT(request_id) DO NOTHING
            """,
            (
                request_id,
                project_id,
                model,
                input_tokens,
                output_tokens,
                str(costs["input_cost"]),
                str(costs["output_cost"]),
                str(costs["total_cost"]),
                status,
                created_at,
            ),
        )

        return cursor.rowcount == 1

返回值为 True,表示成功写入;返回 False,表示 request_id 已存在,本次记录被忽略。

调用示例:

saved = record_usage(
    request_id="req_20260818_0001",
    project_id="customer-service",
    model="example-model-small",
    input_tokens=12000,
    output_tokens=3000,
)

print("是否成功写入:", saved)

七、准确统计每日消费

由于金额是以字符串形式存储的,不建议直接让 SQLite 使用 SUM 计算,否则可能被隐式转换成浮点数。

可以读取数据后使用 Decimal 累加。

from datetime import datetime, time, timezone
from decimal import Decimal


def get_daily_total(
    project_id: str,
    target_date,
) -> Decimal:
    start = datetime.combine(
        target_date,
        time.min,
        tzinfo=timezone.utc,
    )

    end = datetime.combine(
        target_date,
        time.max,
        tzinfo=timezone.utc,
    )

    with get_connection() as conn:
        rows = conn.execute(
            """
            SELECT total_cost
            FROM api_usage
            WHERE project_id = ?
              AND created_at >= ?
              AND created_at <= ?
            """,
            (
                project_id,
                start.isoformat(),
                end.isoformat(),
            ),
        ).fetchall()

    return sum(
        (Decimal(row[0]) for row in rows),
        start=Decimal("0"),
    )

如果系统按照北京时间统计每日预算,需要统一处理时区。

一种简单方案是:

  • 数据库统一存储 UTC 时间
  • 查询日报时把北京时间的起止时间转换成 UTC
  • 不要混用服务器本地时间和 UTC 时间

八、实现预算告警

下面设置三个预算状态:

  • normal:消费低于预算的 80%
  • warning:达到 80%,但尚未超出预算
  • exceeded:达到或超过预算
def check_budget(
    spent: Decimal,
    budget: Decimal,
    warning_ratio: Decimal = Decimal("0.80"),
) -> dict:
    if budget <= 0:
        raise ValueError("预算必须大于 0")

    ratio = spent / budget

    if ratio >= Decimal("1"):
        level = "exceeded"
        message = "今日预算已经用完"
    elif ratio >= warning_ratio:
        level = "warning"
        message = "今日消费已接近预算上限"
    else:
        level = "normal"
        message = "今日预算使用正常"

    return {
        "level": level,
        "message": message,
        "spent": spent,
        "budget": budget,
        "ratio": ratio,
        "remaining": max(
            budget - spent,
            Decimal("0"),
        ),
    }

使用示例:

from datetime import date
from decimal import Decimal


spent = get_daily_total(
    project_id="customer-service",
    target_date=date.today(),
)

result = check_budget(
    spent=spent,
    budget=Decimal("10.00"),
)

print("状态:", result["level"])
print("提示:", result["message"])
print("今日消费:", result["spent"])
print("剩余预算:", result["remaining"])
print(
    "使用比例:",
    f'{result["ratio"] * Decimal("100"):.2f}%',
)

九、完整可运行示例

把前面的代码保存为 cost_tracker.py,并在文件末尾添加:

if __name__ == "__main__":
    from datetime import date

    init_db()

    saved = record_usage(
        request_id="req_demo_0001",
        project_id="demo-project",
        model="example-model-small",
        input_tokens=12000,
        output_tokens=3000,
    )

    print("新增账单:", saved)

    spent = get_daily_total(
        project_id="demo-project",
        target_date=date.today(),
    )

    budget_result = check_budget(
        spent=spent,
        budget=Decimal("1.00"),
    )

    print("今日消费:", spent)
    print("预算状态:", budget_result)

运行:

python cost_tracker.py

首次运行后,当前目录会生成:

model_cost.db

再次运行时,由于示例中的 request_id 没有变化,不会重复写入账单。

十、接入真实模型调用

不同 SDK 返回 Token 用量的字段名称可能不同,常见形式类似:

usage = response.usage

record_usage(
    request_id=response.id,
    project_id="knowledge-base",
    model="example-model-small",
    input_tokens=usage.input_tokens,
    output_tokens=usage.output_tokens,
)

实际接入时不要直接照搬字段名称,应以所使用 SDK 的响应结构为准。

建议模型请求和账单写入遵循以下顺序:

发起模型请求
    ↓
取得最终响应
    ↓
读取实际 Token 用量
    ↓
使用唯一 request_id 写入账本
    ↓
检查项目预算
    ↓
必要时发送告警

十一、流式响应如何统计

流式接口会返回多个数据片段,但这些片段仍然属于同一个请求。

不要在每个数据片段到达时写一次账单,否则会造成:

  • 同一个请求被重复统计
  • 输出 Token 统计不完整
  • 数据库产生大量无效记录

正确的处理方式是:

  1. 接收并转发流式内容。
  2. 等待流结束。
  3. 从最终事件或 SDK 的统计对象中读取 Token 用量。
  4. 使用本次请求唯一的 request_id 写入一次账单。

伪代码如下:

final_usage = None

for event in stream:
    if event.type == "content":
        yield event.text

    if event.type == "completed":
        final_usage = event.usage

if final_usage is not None:
    record_usage(
        request_id=request_id,
        project_id=project_id,
        model=model,
        input_tokens=final_usage.input_tokens,
        output_tokens=final_usage.output_tokens,
    )

十二、失败请求是否需要计费

“请求失败”不一定等于“没有产生费用”。

例如:

  • 请求在到达模型之前就被参数校验拦截,通常没有模型用量。
  • 模型已经开始生成,但客户端中途断开,可能已经产生用量。
  • 流式响应传输失败,服务端可能已经完成部分生成。
  • 上游超时,不代表上游没有处理请求。

因此,不建议简单地把所有异常请求都记为零费用。

更稳妥的处理方式是:

  1. 优先读取服务端返回的实际 usage。
  2. 有实际用量就记录 Token 和成本。
  3. 没有 usage 时,将状态标记为 unknown 或 failed。
  4. 定期与供应商账单进行对账。
  5. 不同失败类型分开统计。

例如:

status = "success"

try:
    response = call_model()
except TimeoutError:
    status = "timeout"
    raise
finally:
    # 只有获得可信的 usage 后才写入成本
    if usage is not None:
        record_usage(
            request_id=request_id,
            project_id=project_id,
            model=model,
            input_tokens=usage.input_tokens,
            output_tokens=usage.output_tokens,
            status=status,
        )

十三、生产环境还需要考虑什么

本文实现的是一个轻量级版本,正式使用时还需要补充以下能力。

  1. 价格版本管理

模型价格可能发生变化。如果只维护一张当前价格表,历史账单重新计算后可能出现变化。

建议为价格增加生效时间:

model
input_price
output_price
effective_from
effective_to

计算费用时使用请求发生当时的价格。

  1. 缓存 Token

部分模型会区分普通输入 Token 和缓存命中 Token,两者价格可能不同,需要单独记录。

  1. 多模态计费

图片、音频、视频或工具调用可能采用不同计费方式,不能全部套用文本 Token 公式。

  1. 软限制与硬限制

软限制只发送提醒,不中断业务。

硬限制会在预算耗尽后停止请求,或者自动切换到成本更低的模型。

涉及核心业务时,建议优先使用软限制,避免因为统计延迟导致正常请求被错误拦截。

  1. 并发超额

高并发场景下,多个请求可能同时通过预算检查,最终一起造成超额。

如果必须执行严格的硬预算,需要使用事务、行锁、Redis 原子操作或者独立的配额服务。

  1. 账单对账

本地统计的作用是实时观察和业务拆分,但供应商的最终账单仍然是重要核对依据。

建议每天进行一次自动对账,检查:

  • 请求数量差异
  • Token 数量差异
  • 金额差异
  • 未知模型或未知价格
  • 本地缺失的请求

十四、总结

实现模型 API 成本统计,核心并不只是套用一个 Token 乘以价格的公式。

一套相对可靠的成本系统至少需要处理:

  • 输入与输出分别计费
  • Decimal 精确计算
  • 唯一请求编号和幂等写入
  • 项目级成本拆分
  • 日预算聚合和告警
  • 流式响应最终结算
  • 失败请求的实际用量
  • 价格变化和历史版本
  • 本地数据与供应商账单对账

对于小型项目,Python 加 SQLite 已经能够满足基础统计需求。

当请求量继续增长时,可以在保持相同数据结构的基础上,将 SQLite 替换为 MySQL、PostgreSQL 或其他数据库,再配合定时任务和监控系统完成更完善的成本治理。

10元跑AI Agent:DeepSeek API成本优化实战指南 AI Agent的成本控制本质是资源调度问题,核心在于理解大模型API的计费逻辑与上下文效率。DeepSeek API虽支持128K长上下文,但高token消耗往往源于冗余信息加载、缺乏动态分层管理及未做前置校验。通过将上下文拆解为静态知识(向量检索)、动态状态(精炼摘要)和实时载荷(Schema压缩),结合OpenClaw轻量级运行时框架的契约式技能设计与三层防御监控体系(Nginx熔断、LLM调用审计、财务归因),可实现95%常规请求零token消耗。本文聚焦真实生产场景下的成本可测、可控、可优化路径, 阅读详情

相关推荐

3天干完6个月的活,Claude把模型搬上AMD

一条挺刺激的消息:Anthropic 给投资人的材料里有一张幻灯片,写着它的 Claude Mythos Preview 只花了大约​,就摸清了怎么让另一个 Claude 模型在 AMD 的 MI355X 上跑起来。同一处还写了个对照数字:过去给一块新芯片做推理适配,通常要几十名工程师、​。3 天对 6 个月,这个比值太扎眼,当天中文互联网上就冒出一堆「英伟达的护城河塌了」的说法。我把能翻到的材料都翻了一遍,越看越觉得,塌掉的那一小块是真的,可塌的位置和很多人想的不一样。

DeepPing,日更,陪你聪明看世界。 409

Tokenmaxxing应对:LLM应用预算控制与工程实践

随着大语言模型 API 在企业级应用中的普及,token 消耗与成本控制成为架构设计的核心问题。Tokenmaxxing 一词所描述的极端 prompt 构造方式,往往导致预算迅速超限、请求被限流甚至账单翻倍。理解模型计费原理(输入输出 token 分别计价)并建立应用层预算管理机制,是保证服务稳定与成本可控的关键。通过请求前 token 预估、预扣额度、请求后实际用量校准以及失败回滚等手段,实现对单次调用的颗粒度成本约束。这套方案不仅适用于 Azure OpenAI,也能迁移至 OpenAI 官方 API

weixin_33800463的博客 318

【信息科学与工程学】计算机科学与自动化 第二百零一十一 软件开发模型01

编号类型模型领域模型中的知识点/因素/参数关联知识和法律法规1传统顺序模型瀑布模型 (Waterfall)通用软件开发、硬件紧密耦合系统、政府/军工项目、需求稳定的传统信息系统严格线性阶段:可行性研究→需求分析(SRS,含功能/非功能/接口/约束,使用IEEE 830模板)→系统设计(概要设计HLD:架构、模块划分、数据库ER图;详细设计LLD:伪代码、类图、接口定义)→实现(编码规范、代码审查、静态分析工具SonarQube)→测试(单元测试JUnit、集成测试、系统测试、验收测试UAT,测试计划提前编写

weixin_49199313的博客 159

AI推理成本失控的根源:Token与物理资源的映射关系

Token是大模型推理中连接算法逻辑与硬件资源的核心计量单位,其本质并非抽象计费符号,而是显存带宽、KV Cache容量、PCIe吞吐等底层物理资源的映射标尺。理解Token的生成、传输与驻留机制,是实现高效推理的前提。当Tokenizer padding策略失当、Batch Size超出GPU内存带宽阈值、LoRA微调引入幽灵梯度或监控指标忽略DRAM访问瓶颈时,就会引发典型的‘Token失控’现象——高显存占用、低吞吐、长延迟并存。本文聚焦AI工程落地中最易被忽视的‘工具链物理层适配’问题,结合vLLM

weixin_34216196的博客 437

如何处理动态语言(Python / JS)的“隐形”调用链?

本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。

xianyinsuifeng的博客 419

C++和蓝图1:Unreal Engine 中 C++ 与蓝图的桥梁

摘要: 本文介绍了Unreal Engine(UE)中C++与蓝图可视化脚本的结合机制,重点解析了宏系统(UCLASS、UPROPERTY、UFUNCTION)如何实现代码与蓝图的交互。相比Unity的纯C#脚本模式,UE的双轨制开发允许程序员用C++处理核心逻辑,同时通过蓝图让非程序员快速迭代。文章对比了两大引擎的编程范式差异,指出UE的反射系统和宏标记提供了更精细的控制,并给出了从Unity迁移到UE的具体思路。核心在于理解UE的混合编程优势:C++保证性能,蓝图提升开发效率,二者通过宏系统无缝协作。

qq_46348216的博客 1409

AI花销排行榜:用Token计量让成本透明化

在大模型应用普及的今天,AI成本管理成为开发者与团队必须面对的新课题。与传统的CPU、GPU计费不同,大语言模型服务按Token计量,将文本切分为最小计价单元,结合输入与输出分别定价,形成一套独特的成本核算体系。这种计量方式虽然精确,却因隐藏在API响应之中而难以被普通用户感知,导致很多人对自身AI花销毫无概念。TokenMaxxer以排行榜形态将Token消耗与费用可视化,借助群体参照激发成本优化意识,本质上是一种轻量化的FinOps实践。从个人开发者到小型团队,通过采集API响应中的usage字段、聚合

weixin_34341229的博客 423

【QML初学者文档】一问读懂QML基础开发(内附大量简单源码)

QML是Qt的一大特色,拥有强大的UI制作能力。但是想要学好QML,还需要一些细节和技巧的掌握。本篇文章将为你提供完整的QML知识体系,让你成为Qt的UI魔法师!

BenBierBa的博客 2万+

Codex 额度重置背后的开发者账本:从 API 调用到 TaoToken 统一 Key 的实践拆解

Codex 额度重置打乱调用节奏与成本模型,本文用 Python 脚本把每次 API 调用的 token 消耗落库 SQLite,并给出 Claude Code、Codex、Cline MCP 三套可复制配置,统一走 TaoToken 一把 Key,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 让额度账本可追踪。

weixin_32480007的博客 59

基于51单片机的智能灌溉系统

基于51单片机的智能灌溉系统

jiejiezuishuai的博客 2103

025、空间降噪与时域降噪:噪声抑制与细节保留的平衡艺术

《降噪技术的平衡艺术:空间与时域降噪的协同优化》 本文深入探讨了图像处理中空间降噪与时域降噪的技术原理与工程实践。空间降噪通过像素级处理提升单帧质量,而时域降噪则利用帧间信息增强稳定性。文章揭示了两种方法在实际应用中的矛盾点:过度降噪会导致细节损失,影响后续算法性能。作者结合车载环视系统等实战案例,详细分享了参数调优经验,包括运动自适应策略、边缘保持技巧和嵌入式平台优化方案。特别强调降噪的最终目标应服务于下游算法需求,而非单纯追求图像美观。文章为工程人员提供了从理论到实践的完整指导,展现了降噪技术在效果与性

sundong_81的博客 186

ChatGPT驱动的语义驱动型文本分析架构设计

文本分析正从传统规则统计范式迈向大语言模型赋能的语义理解新阶段。其核心原理在于将非结构化文本转化为可解释、可审计、可迭代的结构化洞察,关键技术价值体现在确定性输出控制、业务逻辑嵌入与全链路可追溯性上。典型应用场景包括电商差评归因、金融投诉分类、患者反馈分析等需高可信度决策支持的领域。本文聚焦ChatGPT在真实业务系统中的工程化落地,深入解析语义驱动架构如何通过三层解耦(预处理层、语义锚定层、结果合成层)平衡AI灵活性与业务确定性,实现文本分析从IT黑盒到业务白盒的关键跃迁。

weixin_33694172的博客 454

Python爬虫实战:高效爬取华尔街日报文章的技术与代码详解

在当今信息爆炸的时代,金融数据和分析对于投资者、研究人员和企业决策者来说至关重要。华尔街日报(WSJ)作为全球最具影响力的财经媒体之一,其文章内容具有极高的价值。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的华尔街日报文章爬虫,涵盖从基础到高级的各种技术要点。本文详细介绍了如何使用Python最新技术构建一个高效、稳定的华尔街日报文章爬虫。我们从基础爬虫实现开始,逐步添加了高级功能如分布式处理、反反爬虫策略、数据清洗和存储等。异步处理:使用asyncio和httpx实现高性能网络请求。

2201_76125261的博客 386

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 177

pycharm一直选择不了conda正确路径弹框报错:latinit property envs_dirs has not been initialized...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2923

Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)

摘要:基于Spring AI的智能合同审核系统开发 本文介绍了基于Spring Boot 3.2.0和Spring AI 1.0.0-M4构建的智能合同审核系统。系统采用分层架构设计,整合DeepSeek API实现文档解析、条款提取和风险分析功能。核心技术栈包括Spring AI、H2数据库、Apache POI/PDFBox等文档处理工具,实现了合同条款语义分析、异常识别和审核报告自动生成。项目解决了传统人工审核效率低、主观性强等问题,为合同管理提供了智能化解决方案。文章详细阐述了系统架构设计、技术选型

博客 654

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 425

DSP开发环境及工具之CCS

CCS( Code Composer Studio)是美国德州仪器(TI)公司的嵌入式处理器的开发环境,可以用于TI公司的各个系列处理器的软件开发和调试,如DSP,MCU,ARM等。CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件。从其名称可以看出,该文件的作用是指明如何链接程序的。编辑完C语言设置,添加cmd文件之后,然后检查编译配置选项。主要的操作都是在这个窗口之间做相应的切换。

小柚子的博客 4311

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 241

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

yolo 和 deft 算法的区别

你应该是打错了:是,不是 defrat;

曾大强博客 256

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 269

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 170

两张表合并之后,行数悄悄多了一倍

pandas merge 行数异常膨胀源于右表键不唯一,导致数据静默复制。实测显示,未聚合的右表(756行)与左表合并后行数增至504行,合计膨胀3.5倍,但无报错。validate 参数仅在检查键唯一性时有效,one_to_one 和 many_to_one 可拦截问题,但需结合 duplicated() 前置检查。正确做法为先按键聚合右表,再合并,避免重复。建议合并前后核对行数、合计,并使用 indicator=True 排查匹配情况,确保数据一致性。

patrickstar231的博客 226

智慧农业实战:育秧车间秧盘计数与苗情分级的Python实现

首先,建立统一的数据结构,保存每盘秧苗的编号、批次、覆盖度、叶色得分和播种天数。A = "壮苗"B = "合格苗"C = "弱苗"@dataclassdays: int。

荆棘鸟智能的博客 118

我用 200 行代码写了个“代码屎山检测器“,扫完公司的老项目后我沉默了

这个工具不能帮你把屎山铲平,但至少能让你知道自己面对的是多大的山,也能在代码评审时用数据说话——“这个 PR 把圈复杂度从 12 推到了 18,能不能拆一下?毕竟,不能量化的东西,就没法改进。

xixiaoyunya的博客 251
上一篇: Python + FastAPI 实现 API Key 鉴权:生成、哈希存储、撤销与限流
Kevin_ssr
博客等级 码龄2年 8粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值