普通视图

发现新文章,点击刷新页面。
今天 — 2026年2月3日首页

国投瑞银回应白银LOF估值调整:未提前公告,意在避免恐慌与挤兑

2026年2月3日 12:28
国投瑞银基金昨日晚间发布公告,宣布对旗下国投白银LOF所持白银期货合约的估值方法进行调整。受此影响,国投瑞银白银期货A当日复权单位净值跌幅超过31%,这一净值正是按照新估值方法重估后的结果。不过,此次估值调整在投资者中引发巨大争议,核心焦点集中在调整时点上——为何公告在2月2日交易结束后才发布?对此,国投瑞银基金回应称,如果提前公告,担心被解读为有意引导投资者不要赎回,进而推测基金资产流动性出现严重问题,引发市场恐慌,出现挤兑。(第一财经)

2025年我国有色金属主要产品产量再创新高

2026年2月3日 12:27
今天(2月3日),中国有色金属工业协会举行新闻发布会,介绍了2025年有色金属工业运行情况。协会相关负责人介绍,2025年我国有色金属主要产品产量再创新高,全球占比保持领先。2025年有色金属企业工业增加值增长6.9%,高于全国规上工业增加值增速1.0个百分点。十种有色金属产量首次突破8000万吨大关,达到8175万吨,比上年增长3.9%,“十四五”年均增速5.0%。(央视新闻)

恒生指数午间休盘涨0.2%,恒生科技指数跌1.32%

2026年2月3日 12:01
36氪获悉,恒生指数午间休盘涨0.2%,恒生科技指数跌1.32%;国防军工、机械、消费板块领涨,中集集团涨超14%,西锐涨超4%,泡泡玛特涨超3%;传媒、软件服务、零售板块跌幅居前,微盟集团跌超5%,快手跌超4%,阿里巴巴跌超1%;南向资金净买入4422.81万港元。

项目启动三阶段:从思到形

作者 LeonGao
2026年2月3日 11:55

🚀 一、项目启动三阶段:从思到形

项目启动可以拆成三个阶段,每个阶段对应上文的思维要点和执行准则。

阶段 1:思考与设计(脑力阶段)

“行万里路,不如脑子想清楚。”

目标:确定性要大于行动速度。

关键输出:

  • ✅ 业务目标清单(核心可交付是什么?)
  • ✅ 技术选型 & 模块划分(基于模板启动)
  • ✅ 组件粒度 & 数据流方向(决定架构风格)
  • ✅ 风险点与预案(接口不确定、UI延迟设计等)

方法落地:

  • 使用 oa-start-templatemachine-start-template 创建基础目录结构。
  • 先写出基础 store 结构与 route 命名方案。
  • output 一个简洁的架构草图或 README,让团队“心里有图”。

阶段 2:构建与闭环(执行阶段)

“快速出成果,但思考不放松。”

对应前文开发阶段 a → i:

阶段 实际应用 关键产出
a 梳理确定需求 项目 README, todo, milestone
b 构建静态页面 skeleton 页面或 Figma 转换样本
c 设计基础数据结构 定义 storetypes.ts
d 扩展业务结构 组织业务层数据流/adapter
e 构建 mock 服务 mock-server / msw / api sandbox
f 优化视图 规范 UI 风格(主题色、按钮设计)
g 优化交互 添加骨架屏、loading、状态提示
h 接入真实 API 严格字段匹配,确保无隐患
i 自测收尾 组件单测、E2E 或手动冒烟测试

落地技巧:

  • 在前 3 天内形成一个可“演示”的雏形(mock 驱动展示)。
  • 每次 merge 前保持自测闭环。
  • 使用 Git 分支命名规范(feature/xxxfix/xxx)。

阶段 3:沉淀与复盘(强化阶段)

“把握意味着能总结复用。”

要做的:

  1. ✍️ 整理出可复用模块(store、hooks、组件)。
  2. 🧩 提炼命名体系(统一命名风格与文件命名格式)。
  3. 📚 把项目经验补到团队 wiki 或模板中。
  4. ✨ 依据设计主题整理统一样式变量(主题色 / spacing / typography)。
  5. ⏱ 安排一次复盘会议——讨论“哪些思考提前做会更好”。

目标:

  • 下一次项目启动,可以直接从模板启动;
  • 启动文档具备复用性和方向感;
  • 团队在执行中提升“思考的肌肉”。

🧠 二、角色代入法:谁应该在什么时刻思考什么?

角色 聚焦点 关键问题
💡 架构师 结构、流转、命名、复用 “这个结构3个月后还能用吗?”
⚙️ 开发者 实现路径与闭环 “这功能最小化可行交付是什么?”
🧭 产品/负责人 节奏与清晰度 “项目现在的确定性够吗?”

🪞代入角色意味着——在执行前问一句:

“如果我是产品 / 使用者 / 接口方,我希望什么样的结果?”

这种内化的思维切换,就是“思考习惯”的落地方式。


🧩 三、架构主题与视觉的一致性打法

软件架构不是只在代码里体现,也体现在用户体验中。

实践建议:

  1. 提前定义主题 token(颜色、间距、圆角、阴影)。
  2. 根据团队品牌色(例如蓝、黑、灰系列)在 tailwind.config.js 或样式系统中建主题。
  3. 对标大厂组件风格(Google Material、GitHub Primer)。
  4. 制作 1 页 “UI标准卡”——即芯片、按钮、表单、输入框等样式对照。

这样从启动开始,视觉和架构就有“一致节奏感”。


🔁 四、以结果为导向的任务节奏

“如果结果不推动业务,就延后。”

  • 每次迭代定义“能演示的成果”(mock 也行)
  • 所有功能须验收:可复现、可扩展、可理解
  • 延迟不如简化,不要先做带不动的功能

通过这种节奏,团队的执行力会自动与“架构思维”对齐。


✨ 五、最终产物:一个项目启动模板应包含

模块 描述
/src/stores 核心 store + 业务结构化数据流
/src/routes 路由命名规则一致,文件结构即系统结构
/src/components 复用基础组件库(按模板标准命名)
/src/mocks mock 服务模拟真实交互
/theme.config 系统主题与品牌样式定义
/docs 项目架构文档 + 执行准则
/README.md 项目启动简述与执行清单

这就是一个真正“用架构思维启动项目”的标准蓝本。


🧭 结语

将“脑力”和“流水线”结合,就是让项目更有节奏感地前进。
架构的思维不是让流程更复杂,而是让每个人少走弯路

想清楚再行动,结构化代替堆砌,
模板化提升速度,复盘式积累成长。

李秉起接任SK海力士中国公司董事长

2026年2月3日 11:51
36氪获悉,爱企查App显示,近日,SK海力士半导体(中国)有限公司发生工商变更,金永式(KIM YOUNG SIK)卸任法定代表人、董事长,由李秉起(LEE BYOUNGKI)接任。该公司成立于2005年4月,注册资本约52亿美元,经营范围包括半导体设备的销售、租赁等,由SK海力士株式会社全资持股。

半日主力资金加仓电力设备股,抛售有色股

2026年2月3日 11:46
主力资金早间净流入电力设备、国防军工等板块,净流出有色金属、非银金融等板块。具体到个股来看,浙文互联、华胜天成、航天��展获净流入35.31亿元、30.67亿元、23.79亿元。净流出方面,寒武纪、兴业银锡、新易盛遭抛售27.8亿元、26.25亿元、20.93亿元。(第一财经)

北京人形机器人创新中心完成首轮超7亿元市场化融资

2026年2月3日 11:44
36氪获悉,近日,北京人形机器人创新中心完成首轮超7亿元市场化融资。本轮融资汇聚了北京市人工智能产业投资基金、亦庄国投、北京高精尖基金、华控基金等多家投资机构,并获得百度、东土科技等产业方的战略投资。此次融资标志着北京人形在持续深化技术研发的同时,正式步入市场化运营与产业化落地并行的新阶段。

宁德时代、深蓝汽车、长安汽车合资公司注册资本增至40亿元

2026年2月3日 11:40
36氪获悉,爱企查App显示,近日,时代长安动力电池有限公司发生工商变更,注册资本由15亿元人民币增至40亿元人民币,增幅约167%。时代长安动力电池有限公司成立于2023年6月,法定代表人为朱云峰,经营范围包括电池制造、电池销售、新兴能源技术研发、新材料技术研发等。股东信息显示,该公司由宁德时代新能源科技股份有限公司、深蓝汽车科技有限公司、重庆长安汽车股份有限公司共同持股。

WPS 365发布行业首个“医药报告一站式智能化写作平台”

2026年2月3日 11:34
36氪获悉,金山办公发布行业首个AI医药报告写作助手——WPS 365 Medical SmartReport,聚焦以医药临床研究报告(CSR)为代表的、符合国际人用药品注册技术协调会(ICH)规范的医药报告撰写场景。作为医药行业首个适配ICH规范的写作助手,产品支持20余种临床试验数据统计图表的智能处理,内容提取准确率高达95%以上;能够智能生成30余种符合ICH规范的报告,撰写准确率达90%。

Dart ——??运算符

作者 Haha_bj
2026年2月3日 11:31

你想了解 Dart 中的 ?? 运算符,它是 Dart 里处理 ** 可选值(可空类型)** 的常用运算符,核心作用是「空值合并」,我们从基础用法、核心特点、拓展用法到实际场景,一步步讲清楚,让你快速掌握。

一、先明确 ?? 运算符的核心定义

?? 被称为 「空值合并运算符(Null Coalescing Operator)」,作用是:判断运算符左侧的表达式是否为 null

  • 如果左侧不为 null,直接返回左侧的值
  • 如果左侧为 null,返回右侧的备选值

简单理解:「选左边的,左边是空的就选右边的」,用于给可空变量设置默认值,避免空值引发错误。

二、基础用法(最常用场景)

1. 基本语法格式

// 语法:左侧表达式 ?? 右侧备选值
variable ?? defaultValue

2. 示例(基础场景)

void main() {
  // 场景 1:左侧不为 null,返回左侧值
  String? name1 = "张三";
  String result1 = name1 ?? "未知用户";
  print("result1: $result1"); // 输出:result1: 张三

  // 场景 2:左侧为 null,返回右侧默认值
  String? name2 = null;
  String result2 = name2 ?? "未知用户";
  print("result2: $result2"); // 输出:result2: 未知用户

  // 场景 3:结合数值类型使用
  int? age1 = 20;
  int ageResult1 = age1 ?? 18;
  print("ageResult1: $ageResult1"); // 输出:ageResult1: 20

  int? age2 = null;
  int ageResult2 = age2 ?? 18;
  print("ageResult2: $ageResult2"); // 输出:ageResult2: 18
}

3. 关键注意点

  • ?? 只判断「左侧是否为 null」,不判断空字符串、0 等「空值但非 null」的情况

    void main() {
      // 左侧是空字符串(不是 null),返回左侧空字符串,而非右侧默认值
      String? emptyStr = "";
      String result = emptyStr ?? "默认字符串";
      print("result: '$result'"); // 输出:result: ''
    }
    
  • 右侧的备选值只有在左侧为 null 时才会被执行(惰性求值),提升性能:

    void main() {
      String? name = "李四";
      // 因为左侧不为 null,右侧的 print 不会执行,也不会调用 getDefaultName()
      String result = name ?? (print("右侧执行了") + getDefaultName());
      print("result: $result");
    }
    
    String getDefaultName() => "未知用户";
    

    运行结果:仅输出 result: 李四,右侧的打印和函数调用都未执行。

三、拓展用法:和其他运算符结合

1. ??=:空值赋值运算符(给变量本身设置默认值)

??=?? 的衍生运算符,作用是:如果变量本身为 null,就给它赋值右侧的值;如果变量不为 null,则不做任何修改(相当于「给变量设置默认值,仅在变量为空时生效」)。

void main() {
  // 场景 1:变量为 null,赋值右侧值
  String? name1 = null;
  name1 ??= "王五";
  print("name1: $name1"); // 输出:name1: 王五

  // 场景 2:变量不为 null,不修改
  String? name2 = "赵六";
  name2 ??= "未知用户";
  print("name2: $name2"); // 输出:name2: 赵六
}

对比 ????=

  • name ?? "未知":返回一个值,不修改 name 本身
  • name ??= "未知":直接修改 name 本身(仅当 namenull 时)。

2. ?. + ??:安全访问 + 空值兜底(高频组合)

?. 是「安全访问运算符」,作用是:如果对象不为 null,就访问对象的属性 / 方法;如果对象为 null,则返回 null(避免空指针异常)。

两者结合,可实现「安全访问属性,若对象为空或属性为空,就返回默认值」,是业务开发中的高频组合。

// 定义一个用户类
class User {
  String? name;
  User(this.name);
}

void main() {
  // 场景 1:对象不为 null,属性也不为 null
  User? user1 = User("钱七");
  String result1 = user1?.name ?? "未知用户";
  print("result1: $result1"); // 输出:result1: 钱七

  // 场景 2:对象不为 null,但属性为 null
  User? user2 = User(null);
  String result2 = user2?.name ?? "未知用户";
  print("result2: $result2"); // 输出:result2: 未知用户

  // 场景 3:对象本身为 null
  User? user3 = null;
  String result3 = user3?.name ?? "未知用户";
  print("result3: $result3"); // 输出:result3: 未知用户
}

四、实际业务场景示例

1. 接口返回数据兜底(避免空值展示)

// 模拟接口返回的用户数据(可能为 null)
Map<String, dynamic>? apiResponse = {
  "username": "小明",
  "age": null,
  "address": ""
};

void main() {
  // 提取用户名,为空则显示「游客」
  String username = apiResponse?["username"] ?? "游客";
  // 提取年龄,为空则默认 18
  int age = apiResponse?["age"] ?? 18;
  // 提取地址,为空字符串(非 null)则显示「未填写地址」(需额外判断)
  String address = apiResponse?["address"] ?? "未填写地址";
  address = address.isEmpty ? "未填写地址" : address;

  print("用户名:$username,年龄:$age,地址:$address");
  // 输出:用户名:小明,年龄:18,地址:未填写地址
}

2. 初始化可空变量的默认值

// 定义可空的配置变量
String? appTitle;
int? appVersionCode;

void initAppConfig() {
  // 给配置设置默认值(仅当变量为 null 时生效)
  appTitle ??= "我的Dart应用";
  appVersionCode ??= 1;
}

void main() {
  initAppConfig();
  print("应用标题:$appTitle,版本号:$appVersionCode");
  // 输出:应用标题:我的Dart应用,版本号:1
}

总结

  1. ??空值合并运算符,核心逻辑:「左侧非空返左侧,左侧为空返右侧」,用于给可空变量兜底。
  2. 关键特性:只判断 null、右侧惰性求值、不修改原变量。
  3. 常用拓展:??= 用于给变量本身设置默认值(仅为空时生效);?. + ?? 用于安全访问对象属性并兜底。
  4. 实际场景:接口数据兜底、变量默认值初始化、避免空指针异常,是 Dart 开发中的必备语法。

A股三大指数午间休盘集体上涨,航天军工板块走强

2026年2月3日 11:31
36氪获悉,A股三大指数午间休盘集体上涨,沪指涨0.38%,深成指涨0.93%,创业板指涨0.76%;航天军工、机械、发电设备板块领涨,航天发展涨停,金风科技、中国动力涨超6%;油气、贵金属、银行板块跌幅居前,湖南白银跌停,中国石油、中信银行跌超2%。

寒武纪股价盘中大幅跳水,公司回应:不清楚具体原因,市场很多传闻都是假的

2026年2月3日 11:22
今日,寒武纪股价盘中大幅跳水,一度跌近14%,总市值回落到4500亿元左右。就公司股价跳水一事,记者以投资者身份致电寒武纪董秘办,接线工作人员表示:“这个(股价波动原因)我们不太清楚,首先就是市场上很多的传闻,这肯定都是假的。然后二级市场资金、情绪的波动还是比较多的,大家理性对待。”(每经网)

国内首款AI经皮穿刺导航机器人获批上市

2026年2月3日 11:21
36氪获悉,据武汉经开区公众号消息,近日,由武汉经开区企业武汉市龙点睛智能科技有限公司(简称“武汉龙点睛”)自主研发的“龙点睛穿刺手术导航设备”,正式通过国家药品监督管理局(NMPA)三类医疗器械审批,获准上市。武汉龙点睛相关负责人介绍,经国家药监局批准的“三类”医疗器械注册证信息确认,公司自研的穿刺手术导航设备主机融合了深度学习软件功能。“这标志着国内首款人工智能经皮穿刺导航机器人正式获批上市,国产人工智能技术在临床治疗领域实现了从‘辅助诊断’向‘辅助治疗’的又一次跨越。”

Python API 调用保姆级教程:从原理到第一次成功请求(附完整代码)

2026年2月3日 11:18

Python API 调用保姆级教程:从原理到第一次成功请求(附完整代码)

在当今的软件开发中,API(应用程序编程接口) 几乎无处不在。从获取天气数据、支付接口,到调用 ChatGPT 进行对话,一切的核心都是“API 调用”。

很多初学者觉得 API 很高深,但实际上,只要你掌握了**“请求(Request)”“响应(Response)”**这两个核心概念,你就已经迈过了门槛。

本文将以 Python 语言为例,手把手教你如何发起一次标准的 API 调用。为了方便演示和保证连接稳定性,本教程将使用兼容性极佳的 4SAPI 接口作为测试环境。

一、 核心概念:API 到底在做什么?

在写代码之前,你需要理解 API 交互的四个要素:

  1. Endpoint(端点) :你要去哪里取数据?通常是一个 URL(例如 https://api.4sapi.com/v1)。

  2. Method(方法) :你要做什么?

    • GET:查数据(例如:查询余额)。
    • POST:提交数据(例如:发一段话给 AI,让它回复)。
  3. Headers(请求头) :你是谁?通常包含 Authorization(你的 API Key)和 Content-Type(数据格式)。

  4. Body(请求体) :具体内容是什么?(例如:你的 Prompt 提示词)。

二、 环境准备

我们将使用 Python 中最流行的 openai 库来完成这次调用。

为什么不用 requests 库?

虽然 requests 是基础,但在 AI 开发领域,使用官方 SDK 能自动处理重试、JSON 解析等繁琐工作。由于 4SAPI 完美兼容 OpenAI 协议,我们可以直接使用这个成熟的库。

1. 安装库

打开你的终端(Terminal)或 CMD,输入:

Bash

pip install openai

2. 获取 API Key

你需要一个“通行证”。

  • 如果你使用官方 OpenAI,去官网后台。

  • 本教程推荐演示环境:前往 4SAPI 控制台 申请一个令牌。

    • 推荐理由:4SAPI 的网络线路针对国内优化(CN2直连),在调试代码时不会因为网络超时(Timeout)而报错,非常适合新手学习和企业生产环境。

三、 代码实战:编写你的第一个 API 脚本

新建一个文件 main.py,并将以下代码复制进去。为了让你看懂每一行,我添加了详细的注释。

Python

import os
from openai import OpenAI

# ==========================================
# 步骤 1:客户端配置 (Client Configuration)
# ==========================================

# 初始化客户端
client = OpenAI(
    # 【关键配置】
    # 这里的 API Key 建议从环境变量读取,或者直接填入你的 4SAPI 令牌
    api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
    
    # 【核心技巧】
    # 将 base_url 指向中转站地址。
    # 如果不改这里,代码会默认去连 OpenAI 美国服务器(容易超时)。
    # 使用 4SAPI 可以利用其企业级 CN2 线路加速,确保握手成功。
    base_url="https://api.4sapi.com/v1" 
)

# ==========================================
# 步骤 2:构建请求 (Build Request)
# ==========================================

def call_ai_model():
    print(">>> 正在发送请求...")
    
    try:
        # 发起 Chat Completions 请求(这是目前最通用的 AI 接口标准)
        response = client.chat.completions.create(
            # 指定模型:4SAPI 后端支持映射,你可以填 gpt-4o, claude-3-5-sonnet 等
            model="gpt-4o-mini", 
            
            # 消息列表:模拟对话历史
            messages=[
                {"role": "system", "content": "你是一个Python代码助手,回答要简洁。"},
                {"role": "user", "content": "请写一个打印 Hello World 的函数"}
            ],
            
            # 参数设置
            temperature=0.7, # 创意度:0.7 是比较平衡的值
            stream=False     # 是否流式输出(初学者建议先设为 False)
        )
        
        # ==========================================
        # 步骤 3:解析响应 (Parse Response)
        # ==========================================
        
        # API 返回的是一个复杂的对象,我们需要提取核心内容
        content = response.choices[0].message.content
        
        print(">>> API 调用成功!返回结果如下:")
        print("-" * 30)
        print(content)
        print("-" * 30)
        
        # 打印一下消耗的 Token 数(4SAPI 后台也能看到详细日志)
        print(f"Token 消耗: {response.usage.total_tokens}")

    except Exception as e:
        print(f"❌ 调用失败: {e}")

# 执行函数
if __name__ == "__main__":
    call_ai_model()

四、 常见报错与排查 (Troubleshooting)

在调试 API 时,报错是家常便饭。以下是三种最常见的错误代码及其含义:

  1. 401 Unauthorized

    • 含义:身份验证失败。
    • 解决:检查 api_key 是否填错,或者是否有多余的空格。
  2. 429 Too Many Requests

    • 含义:请求太快,或者额度耗尽。
    • 解决:如果你用的是官方免费号,很容易触发这个。建议切换到 4SAPI 这样的企业级中转,由于其底层采用了 MySQL 8.2 高并发架构,能承载极高的并发量,几乎不会遇到误报的 429 错误。
  3. Connection Timeout / APIConnectionError

    • 含义:连不上服务器。
    • 解决:这是国内开发者最头疼的问题。通常是因为网络墙的原因。解决办法就是修改代码中的 base_url,指向一个国内访问友好的中转节点(如代码中演示的 api.4sapi.com)。

五、 进阶:如何像高手一样使用“流式输出”?

你注意过 ChatGPT 网页版是一个字一个字蹦出来的吗?这叫 Streaming(流式)

在 API 中实现这个功能非常简单,只需要改两个地方:

Python

# 1. 将 stream 设置为 True
response = client.chat.completions.create(
    model="gpt-4",
    messages=[...],
    stream=True  # <--- 修改这里
)

# 2. 循环处理生成器
print("AI 回复: ", end="")
for chunk in response:
    if chunk.choices[0].delta.content:
        # 即时打印每一个片段
        print(chunk.choices[0].delta.content, end="", flush=True)

提示:流式输出对网络稳定性要求极高。如果中间丢包,字就会断。这也是为什么生产环境推荐使用 4SAPI 的原因——其物理线路紧邻上游核心节点,能保证长连接不断开,让“打字机效果”丝般顺滑。

结语

恭喜你!到这里,你已经完成了一次标准的 API 调用。

你会发现,代码的核心逻辑其实非常固定。真正的难点往往在于网络环境配置账号维护。对于初学者和企业开发者,选择一个配置简单、兼容性好的基础设施(如文中演示的 4SAPI),能帮你节省 90% 的调试时间,让你专注于编写业务逻辑,而不是去修网络连接。

现在,去运行代码,开启你的 AI 开发之旅吧!

❌
❌