init book

This commit is contained in:
justlovemaki
2025-06-11 17:11:23 +08:00
parent 60668026a0
commit b191843448
108 changed files with 11467 additions and 3690 deletions

View File

@@ -1,69 +0,0 @@
# 使用稳定版本的 alpine
FROM alpine:3.18
# 1. 安装运行时依赖并设置时区 (合并为一层)
RUN apk update && \
apk add --no-cache \
tini \
dcron \
wget \
curl \
jq \
git \
tzdata && \
# 设置时区为东八区 (Asia/Shanghai)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
# 清理 apk 缓存
rm -rf /var/cache/apk/*
# 2. 安装mdbook
# 建议使用 ADD 命令,它可以自动解压 tar.gz 文件
ADD mdbook-v0.4.51-x86_64-unknown-linux-musl.tar.gz /tmp/
RUN mv /tmp/mdbook /usr/local/bin/mdbook && \
chmod +x /usr/local/bin/mdbook
# 3. 创建工作目录
WORKDIR /app
# 4. 复制你的书籍源文件和脚本
COPY scripts/ /app/scripts/
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
# 5. 赋予脚本可执行权限 (合并为一层)
RUN chmod +x /app/scripts/* /usr/local/bin/entrypoint.sh && \
# 确保子目录中的脚本也有权限 (如果存在)
if [ -d /app/scripts/work ]; then chmod +x /app/scripts/work/*; fi
# 6. 将 cron 任务写入配置文件
# 使用 echo -e 来处理换行符,更清晰
RUN echo "0 8 * * * /app/scripts/build.sh /app/scripts/work >> /proc/1/fd/1 2>> /proc/1/fd/2" > /etc/crontabs/root && \
# crontab 文件权限必须是 600
chmod 600 /etc/crontabs/root
# 7. 设置环境变量
# 设置时区环境变量,供应用程序读取
ENV TZ=Asia/Shanghai
# 项目所属
ENV OWNER="justlovemaki"
# 项目名称
ENV REPO_NAME="CloudFlare-AI-Insight-Daily"
# 个人访问Token (警告: 不建议硬编码Token最好通过构建参数或运行时环境变量传入)
ENV GITHUB_TOKEN="github_pat_xxxxxx"
# 图片代理路径
ENV IMG_PROXY_URL="https://autoproxy"
# 8. 启动 cron 服务
# entrypoint.sh 将会执行初始化任务,然后启动 CMD 中的命令
ENTRYPOINT ["/sbin/tini", "--","/usr/local/bin/entrypoint.sh"]
# crond -f 让 cron 在前台运行,这是容器化应用的最佳实践
CMD ["crond", "-f", "-l", "8"]
# 构建镜像命令 docker build -t ai-daily-cron-job .
# 启动容器命令 docker run -d --name ai-daily-cron ai-daily-cron-job
# 调试容器命令 docker run -it --rm --entrypoint /bin/sh ai-daily-cron-job
# 调试生成脚本 /app/scripts/build.sh /app/scripts/work
# 进容器调试 docker exec -it ai-daily-cron /bin/sh

View File

@@ -1,24 +0,0 @@
#!/bin/sh
# 退出脚本,如果任何命令失败
set -e
echo "--- 容器启动,执行初始化任务 ---"
# 检查构建脚本是否存在
if [ ! -f "/app/scripts/build.sh" ]; then
echo "错误: 构建脚本 /app/scripts/build.sh 未找到!"
exit 1
fi
# 1. 在容器启动时立即执行一次构建
echo "执行首次构建..."
/app/scripts/build.sh /app/scripts/work
echo "--- 初始化完成,启动 cron 服务 ---"
# 2. 执行 Dockerfile CMD 中定义的命令 (即 "crond -f -l 8")
# exec 会用 CMD 的命令替换当前的 shell 进程,
# 使得 crond 成为容器的主进程 (PID 1),能够正确接收和处理信号。
# 这是保持容器运行的关键。
exec "$@"

View File

@@ -1,78 +0,0 @@
#!/bin/sh
# set -e: Exit immediately if a command exits with a non-zero status.
# set -o pipefail: The return value of a pipeline is the status of the last command to exit with a non-zero status.
set -e
set -o pipefail
# --- Configuration ---
REPO_NAME=${REPO_NAME}
REPO_URL="https://github.com/${OWNER}/${REPO_NAME}"
# ---------------------
# 1. Validate Input Parameter
# Check if the working directory argument is provided.
if [ -z "$1" ]; then
echo "Error: Working directory not provided."
echo "Usage: $0 <path_to_working_directory>"
exit 1
fi
WORK_DIR="$1"
# Check if the provided working directory exists.
if [ ! -d "$WORK_DIR" ]; then
echo "Error: Directory '$WORK_DIR' does not exist."
exit 1
fi
echo "--- Starting AI Today workflow in '$WORK_DIR' ---"
# 2. Change to the working directory. All subsequent operations will be relative to it.
cd "$WORK_DIR"
# 3. Cleanup: Remove the old repository directory to ensure a fresh start.
echo "--> Cleaning up old directory..."
rm -rf "$REPO_NAME"
# 4. Fetch: Clone the latest content from GitHub.
echo "--> Cloning repository from $REPO_URL..."
git clone "$REPO_URL"
# Define the path to the cloned repository for easier access.
PROJECT_DIR="$WORK_DIR/$REPO_NAME"
# 5. Preprocessing: Prepare the cloned content.
echo "--> Preprocessing content..."
# Detach from Git history by removing the .git directory.
rm -rf "$PROJECT_DIR/.git"
# Remove any old generated content.
rm -rf "$PROJECT_DIR/today"
rm -rf "$PROJECT_DIR/src"
rm -rf "$PROJECT_DIR/prompt"
rm -rf "$PROJECT_DIR/podcast"
# Execute custom processing scripts.
# Note: Ensure 1.replace.sh and 2.gen.sh are in the $WORK_DIR or in your PATH.
echo "--> Running custom scripts..."
./replace.sh "$PROJECT_DIR/daily"
./gen.sh "$PROJECT_DIR/daily"
mdbook build "$WORK_DIR"
# 6. Package & Upload
echo "--> Waiting for generation to complete..."
# This pause assumes the generation script might have background tasks.
# A more robust solution would be to wait for a specific file or process.
sleep 10
echo "--> Packaging the 'book' directory..."
# Create a gzipped tar archive of the 'book' directory's contents.
tar -cvf archive.tar.gz book/*
echo "--> Uploading the archive..."
# Upload the archive using a custom script.
# Note: Ensure github.sh is in the $WORK_DIR or in your PATH.
./github.sh upload "archive.tar.gz" "today/archive.tar.gz" "pushbook"
echo "--- Workflow completed successfully! ---"

View File

@@ -1,6 +0,0 @@
[book]
authors = []
language = "zh"
src = "CloudFlare-AI-Insight-Daily"
title = "By 何夕2077"
create-missing = true

View File

@@ -1,136 +0,0 @@
#!/bin/sh
# 这是一个兼容 POSIX sh 的脚本,用于从日刊 Markdown 文件生成一个摘要文件。
# 检查是否提供了目录参数
if [ -z "$1" ]; then
echo "用法: $0 <存放markdown文件的目录路径>"
echo "例如: $0 path/to/your/daily_notes"
exit 1
fi
TARGET_DIR="$1" # 例如 path/to/your/daily_notes
# 1. 确定 TARGET_DIR 的父目录 和 TARGET_DIR 的基本名称
# dirname 和 basename 是 POSIX 标准工具
PARENT_OF_TARGET_DIR=$(dirname "$TARGET_DIR")
TARGET_DIR_BASENAME=$(basename "$TARGET_DIR")
# 如果父目录是 '.', 则实际路径前缀为空,否则为 "父目录/"
# 这用于构建输出文件的完整路径,同时确保相对路径的简洁性
if [ "$PARENT_OF_TARGET_DIR" = "." ]; then
OUTPUT_PATH_PREFIX=""
else
OUTPUT_PATH_PREFIX="${PARENT_OF_TARGET_DIR}/"
# 确保父目录存在,如果不存在则创建
# mkdir -p 虽然不是最基础的 POSIX 标准,但在几乎所有现代系统中都可用
mkdir -p "$PARENT_OF_TARGET_DIR"
fi
OUTPUT_FILE="${OUTPUT_PATH_PREFIX}SUMMARY.md"
# 确保目标目录存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 '$TARGET_DIR' 不存在。"
exit 1
fi
# 查找所有 YYYY-MM-DD.md 格式的文件路径,并按名称反向排序(最新日期在前)
# 使用 find 和 sort这是非常标准和可移植的方法。
# 将结果存储在一个换行符分隔的字符串变量中。
files_paths=$(find "$TARGET_DIR" -maxdepth 1 -type f -name "????-??-??.md" | sort -r)
# 检查是否找到了任何文件
if [ -z "$files_paths" ]; then
echo "在目录 '$TARGET_DIR' 中没有找到 'YYYY-MM-DD.md' 格式的文件。"
echo "# Summary" > "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
echo "<!-- 未找到日刊文件 -->" >> "$OUTPUT_FILE"
echo "$OUTPUT_FILE 已在 '$PARENT_OF_TARGET_DIR' (或当前目录) 中生成。"
exit 0
fi
# --- 复制最新文件到 TARGET_DIR 的父目录 ---
# 从已排序的列表中获取最新的文件(第一行)
latest_file_path=$(echo "$files_paths" | head -n 1)
latest_file_basename=$(basename "$latest_file_path")
if [ -n "$latest_file_basename" ]; then
source_file_path="$latest_file_path"
destination_file_path="${OUTPUT_PATH_PREFIX}${latest_file_basename}"
copy_needed="true"
# 检查源文件和目标文件是否是同一个。realpath 不是 POSIX 标准,但脚本会检查它是否存在。
if command -v realpath >/dev/null 2>&1; then
abs_source_file_path=$(realpath "$source_file_path")
if [ -f "$destination_file_path" ]; then
abs_destination_file_path=$(realpath "$destination_file_path")
# 使用 POSIX 标准的 `=` 进行字符串比较
if [ "$abs_source_file_path" = "$abs_destination_file_path" ]; then
echo "最新的文件 '${source_file_path}' 已在目标位置 '${destination_file_path}',无需复制。"
copy_needed="false"
fi
fi
else
echo "警告: 'realpath' 命令未找到。如果源文件和目标位置相同,可能会尝试重复复制。"
if [ "$source_file_path" = "$destination_file_path" ]; then
echo "最新的文件 '${source_file_path}' 已在目标位置 '${destination_file_path}' (基于路径比较),无需复制。"
copy_needed="false"
fi
fi
if [ "$copy_needed" = "true" ]; then
echo "正在复制 '${source_file_path}' 到 '${destination_file_path}'..."
if cp "$source_file_path" "$destination_file_path"; then
echo "最新文件复制成功。"
else
echo "警告: 将最新文件复制到 '${destination_file_path}' 失败。请检查权限和路径。"
fi
fi
else
echo "未找到最新文件,无法执行复制操作。"
fi
# --- 复制结束 ---
# 开始写入 SUMMARY.md
echo "# Summary" > "$OUTPUT_FILE"
# 写入 "Today" 链接 (指向复制到父目录的文件)
if [ -n "$latest_file_basename" ]; then
echo "" >> "$OUTPUT_FILE"
echo "[Today]($latest_file_basename)" >> "$OUTPUT_FILE"
else
echo "<!-- 未找到最新文件 -->" >> "$OUTPUT_FILE"
fi
current_month_header=""
# 使用 while read 循环逐行处理文件路径列表,这是处理多行文本的标准 sh 做法
echo "$files_paths" | while read -r file_path_from_list; do
# 在循环内为每一行获取文件名
filename_basename=$(basename "$file_path_from_list")
# 使用 cut 命令进行子字符串提取,以兼容 sh (${var:offset:length} 是 bash 专有语法)
year_month=$(echo "$filename_basename" | cut -c1-7) # "YYYY-MM"
month_day_part=$(echo "$filename_basename" | cut -c6-10) # "MM-DD"
if [ "$year_month" != "$current_month_header" ]; then
echo "" >> "$OUTPUT_FILE"
echo "# $year_month" >> "$OUTPUT_FILE"
current_month_header="$year_month"
fi
link_text="${month_day_part}-日刊"
# 链接路径是相对于 SUMMARY.md 的,指向原始目录中的文件
link_path="${TARGET_DIR_BASENAME}/${filename_basename}"
echo "- [$link_text]($link_path)" >> "$OUTPUT_FILE"
done
echo "" # 在文件末尾添加一个空行
echo "SUMMARY.md 文件已在 '${OUTPUT_FILE}' 生成。"
if [ "$PARENT_OF_TARGET_DIR" = "." ]; then
echo " (即当前工作目录的 SUMMARY.md)"
else
echo " (即目录 '${PARENT_OF_TARGET_DIR}' 下的 SUMMARY.md)"
fi

View File

@@ -1,227 +0,0 @@
#!/bin/sh
# --- 配置 ---
# 从环境变量读取,或者直接在此处设置
# 强烈建议使用环境变量以保证安全
GITHUB_TOKEN=${GITHUB_TOKEN} # 替换 YOUR_GITHUB_PAT 或设置环境变量
OWNER=${OWNER} # 你的 GitHub 用户名或组织名
REPO=${REPO_NAME} # 你的仓库名称
BRANCH="main" # 目标分支 (可能是 main, master 等)
set -e # 如果任何命令失败,脚本将退出
set -o pipefail # 如果管道中的任何命令失败,则整个管道失败
# API基础URL
API_URL="https://api.github.com/repos/${OWNER}/${REPO}/contents"
# --- 帮助信息 ---
usage() {
echo "用法: $0 <action> [options]"
echo ""
echo "Actions:"
echo " delete <file_path_in_repo> <commit_message>"
echo " 删除仓库中的指定文件。"
echo " Example: $0 delete 'path/to/remote/file.txt' 'Delete old file'"
echo ""
echo " upload <local_file_path> <file_path_in_repo> <commit_message>"
echo " 上传/更新本地文件到仓库中的指定路径。"
echo " Example: $0 upload './local/new_file.txt' 'path/to/remote/new_file.txt' 'Add new feature file'"
echo ""
echo "请确保 GITHUB_TOKEN 环境变量已设置。"
exit 1
}
# --- 必要检查 ---
if [ -z "$GITHUB_TOKEN" ]; then
echo "错误: GITHUB_TOKEN 环境变量未设置。"
usage
fi
if ! command -v curl &> /dev/null; then
echo "错误: curl 未安装。"
exit 1
fi
if ! command -v jq &> /dev/null; then
echo "错误: jq 未安装。"
exit 1
fi
if ! command -v mktemp &> /dev/null; then
echo "错误: mktemp 未安装。"
exit 1
fi
# --- 辅助函数获取文件SHA (如果文件存在) ---
get_file_sha() {
local file_path_in_repo="$1"
local response
response=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
"${API_URL}/${file_path_in_repo}?ref=${BRANCH}")
if echo "$response" | jq -e '.sha' > /dev/null; then
echo "$response" | jq -r '.sha'
else
# 文件不存在或获取SHA失败
echo ""
fi
}
# --- 功能函数:删除文件 ---
delete_github_file() {
local file_path_in_repo="$1"
local commit_message="$2"
local tmp_payload_file # 声明临时文件变量
echo "正在尝试删除仓库中的文件: ${file_path_in_repo} ..."
local file_sha
file_sha=$(get_file_sha "${file_path_in_repo}")
if [ -z "$file_sha" ]; then
echo "错误: 文件 '${file_path_in_repo}' 在分支 '${BRANCH}' 上未找到或无法获取其SHA。"
return 1
fi
echo "获取到文件SHA: ${file_sha}"
# 创建临时文件来存储JSON payload
tmp_payload_file=$(mktemp)
# 确保脚本退出时删除临时文件
trap 'rm -f "$tmp_payload_file"' EXIT HUP INT QUIT TERM
printf '{"message": "%s", "sha": "%s", "branch": "%s"}' \
"$commit_message" \
"$file_sha" \
"$BRANCH" > "$tmp_payload_file"
echo "发送删除请求 (payload from: $tmp_payload_file)..."
response_code=$(curl -s -o /dev/null -w "%{http_code}" \
-X DELETE \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
-H "Content-Type: application/json" \
--data-binary @"$tmp_payload_file" \
"${API_URL}/${file_path_in_repo}")
# 清理临时文件和trap
rm -f "$tmp_payload_file"
trap - EXIT HUP INT QUIT TERM # 清除trap
if [ "$response_code" -eq 200 ] || [ "$response_code" -eq 204 ]; then
echo "文件 '${file_path_in_repo}' 删除成功。HTTP状态: ${response_code}"
else
echo "错误: 删除文件 '${file_path_in_repo}' 失败。HTTP状态: ${response_code}"
# printf '{"message": "%s", "sha": "%s", "branch": "%s"}' "$commit_message" "$file_sha" "$BRANCH" > payload.json
# curl -i -X DELETE \
# -H "Authorization: token ${GITHUB_TOKEN}" \
# -H "Accept: application/vnd.github.v3+json" \
# -H "Content-Type: application/json" \
# --data-binary @payload.json \
# "${API_URL}/${file_path_in_repo}"
# rm payload.json
return 1
fi
}
# --- 功能函数:上传/更新文件 ---
upload_github_file() {
local local_file_path="$1"
local file_path_in_repo="$2"
local commit_message="$3"
local tmp_payload_file # 声明临时文件变量
if [ ! -f "$local_file_path" ]; then
echo "错误: 本地文件 '${local_file_path}' 未找到。"
return 1
fi
echo "正在准备上传/更新文件: ${local_file_path} 到仓库路径: ${file_path_in_repo} ..."
local content_base64
if [[ "$(uname)" == "Darwin" ]]; then # macOS
content_base64=$(base64 < "$local_file_path")
else # Assume GNU/Linux
content_base64=$(base64 -w 0 < "$local_file_path")
fi
local current_sha
current_sha=$(get_file_sha "${file_path_in_repo}")
local json_payload_template='{"message": "%s", "content": "%s", "branch": "%s"%s}'
local sha_part=""
if [ -n "$current_sha" ]; then
echo "文件 '${file_path_in_repo}' 已存在SHA: ${current_sha}。将进行更新。"
sha_part=$(printf ', "sha": "%s"' "$current_sha")
else
echo "文件 '${file_path_in_repo}' 不存在。将创建新文件。"
fi
# 创建临时文件来存储JSON payload
tmp_payload_file=$(mktemp)
# 确保脚本退出时删除临时文件
trap 'rm -f "$tmp_payload_file"' EXIT HUP INT QUIT TERM
printf "$json_payload_template" \
"$commit_message" \
"$content_base64" \
"$BRANCH" \
"$sha_part" > "$tmp_payload_file"
echo "发送上传/更新请求 (payload from: $tmp_payload_file)..."
response_code=$(curl -s -o /dev/null -w "%{http_code}" \
-X PUT \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github.v3+json" \
-H "Content-Type: application/json" \
--data-binary @"$tmp_payload_file" \
"${API_URL}/${file_path_in_repo}")
# 清理临时文件和trap
rm -f "$tmp_payload_file"
trap - EXIT HUP INT QUIT TERM # 清除trap
if [ "$response_code" -eq 200 ] || [ "$response_code" -eq 201 ]; then # 200 for update, 201 for create
echo "文件 '${file_path_in_repo}' 上传/更新成功。HTTP状态: ${response_code}"
else
echo "错误: 上传/更新文件 '${file_path_in_repo}' 失败。HTTP状态: ${response_code}"
# printf "$json_payload_template" "$commit_message" "$content_base64" "$BRANCH" "$sha_part" > payload.json
# curl -i -X PUT \
# -H "Authorization: token ${GITHUB_TOKEN}" \
# -H "Accept: application/vnd.github.v3+json" \
# -H "Content-Type: application/json" \
# --data-binary @payload.json \
# "${API_URL}/${file_path_in_repo}"
# rm payload.json
return 1
fi
}
# --- 主逻辑 ---
ACTION="${1:-}"
case "$ACTION" in
delete)
if [ "$#" -ne 3 ]; then
echo "错误: delete 操作需要 <file_path_in_repo> 和 <commit_message> 参数。"
usage
fi
delete_github_file "$2" "$3"
;;
upload)
if [ "$#" -ne 4 ]; then
echo "错误: upload 操作需要 <local_file_path>, <file_path_in_repo> 和 <commit_message> 参数。"
usage
fi
upload_github_file "$2" "$3" "$4"
;;
*)
echo "错误: 未知操作或缺少操作参数。"
usage
;;
esac
exit 0

View File

@@ -1,58 +0,0 @@
#!/bin/sh
# 检查是否提供了目录参数
if [ -z "$1" ]; then
echo "用法: $0 <目标目录>"
echo "例如: $0 /path/to/your/directory"
exit 1
fi
IMG_PROXY_URL=${IMG_PROXY_URL}
TARGET_DIR="$1"
# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 '$TARGET_DIR' 不存在。"
exit 1
fi
echo "将在目录 '$TARGET_DIR' 下的文件中执行以下替换:"
echo "1. 'upload.chinaz.com' -> 'pic.chinaz.com'"
echo "2. 'https://pic.chinaz.com' -> '$IMG_PROXY_URL/?pp=https://pic.chinaz.com'"
# 定义替换规则
# 注意:
# - 第一个替换中的 '.' 需要转义,因为它在正则表达式中是特殊字符。
# - 第二个替换中的 '/' 在sed的s命令中是分隔符所以我们需要使用其他分隔符
# 例如 '#',或者对规则中的 '/' 进行转义。使用其他分隔符更清晰。
# - 替换的顺序很重要。先将 upload.chinaz.com 替换为 pic.chinaz.com
# 这样新生成的 pic.chinaz.com 才能被第二条规则匹配并加上代理。
RULE1_OLD="upload\.chinaz\.com" # 转义 '.'
RULE1_NEW="pic.chinaz.com"
RULE2_OLD_SED_SAFE="https://pic\.chinaz\.com" # 使用 '#' 作为分隔符,所以不需要转义 '/',但 '.' 仍需转义
RULE2_NEW_SED_SAFE="$IMG_PROXY_URL/?pp=https://pic.chinaz.com" # URL中的'?'在替换部分不需要特殊处理
# 查找目录下的所有普通文件(排除目录和符号链接等)并执行替换
# 使用 -print0 和 xargs -0 来安全处理包含空格或特殊字符的文件名
# 或者使用 find ... -exec sed ... {} +
# 这里为了清晰,使用 find 和 while read 循环,同样能安全处理特殊文件名
find "$TARGET_DIR" -type f -print0 | while IFS= read -r -d $'\0' file; do
echo "正在处理文件: $file"
# 执行第一个替换
sed -i "s/$RULE1_OLD/$RULE1_NEW/g" "$file"
# 执行第二个替换 (使用 # 作为分隔符)
sed -i "s#$RULE2_OLD_SED_SAFE#$RULE2_NEW_SED_SAFE#g" "$file"
# 如果想在一个sed命令中完成可以这样
# sed -i -e "s/$RULE1_OLD/$RULE1_NEW/g" -e "s#$RULE2_OLD_SED_SAFE#$RULE2_NEW_SED_SAFE#g" "$file"
# 这样可以减少文件的读写次数,对于大文件或大量文件效率稍高。
# 为了代码可读性,分开写了。
done
echo "替换完成。"

16
daily/2025-06-01.md Normal file
View File

@@ -0,0 +1,16 @@
# AI洞察日报 2025年6月1日
1. 近日,**通义实验室**自然语言智能团队**发布并开源**了**VRAG-RL**——一款**视觉感知多模态RAG推理框架**,旨在解决**AI**从图像、表格等**视觉语言**中检索关键信息并进行**精细化推理**的难题,其强化学习和创新的视觉感知机制显著提升了对视觉信息的理解和检索效率。该框架在多个基准数据集上**表现出色**,未来有望提升模型在不同视觉任务中的**泛化能力**,请查阅[跳转链接](https://github.com/Alibaba-NLP/VRAG)了解更多。
2. 亚利桑那州立大学研究小组**发布论文**指出,**大语言模型**并非进行**真正推理**,而仅仅是在**寻找数据间的相关性**,这可能导致公众对其工作机制产生**误解**。该研究强调,在日益依赖**AI**的时代,我们需更**谨慎看待**技术能力,未来**AI研究**有望朝着更具**解释性**的方向发展。
3. **Perplexity AI**正式**推出Perplexity Labs**为Pro订阅用户带来**多工具协同**的全新**AI生产力工具**,能将复杂项目开发流程简化至数分钟,旨在提供从创意到成果的**全链条支持**。这一功能通过深度网络浏览、代码执行等**核心能力**标志着Perplexity从答案引擎向**综合性AI生产平台转型**。
4. **夸克**近日**上线“深度研究”功能**,该功能依托**通义千问大模型**,能围绕学术课题、行业分析等复杂议题,自动完成从资料搜集到**报告生成**的全流程研究。此举标志着**AI**正从**信息检索工具**向**内容创作伙伴**进一步跃迁,为科研调研、市场洞察等场景提供**高效支持**。
5. **阿里云**正式**发布通义灵码 AI IDE**,这是一款原生的人工智能开发环境,凭借强大的**编程智能体模式**、**长期记忆**和**行间建议预测**功能,显著提升开发者**编程效率**。该产品已**免费开放下载**并且其插件累计生成超30亿行代码成为广受欢迎的编程辅助工具为企业开发工作提供**强力支持**。
6. **Memvid**是一款**创新AI记忆工具**,通过将**文本数据编码为MP4视频**,实现了**亚秒级快速语义搜索**,大幅节省存储空间并支持离线使用。它内置**聊天功能**,支持**PDF文档导入**,为**高效知识管理**和**学术研究**等领域提供了革命性的**全新可能**,请查阅[跳转链接](https://github.com/Olow304/memvid)了解更多。
7. Anthropic首席执行官达里奥・阿莫代伊**警告**称,**AI**可能在未来五年内**取代一半入门级白领工作**,导致**失业率飙升**至10%-20%,并加剧**经济不平等**。他呼吁提高公众对**AI**发展的**认知**和**AI素养**,以便人们适应未来职业环境,并强调政策制定者需思考超智能经济下的**解决方案**。
8. AI初创公司**Manus**重磅**发布Manus Slides**功能,用户仅需一个提示词即可**一键生成专业幻灯片**,涵盖商务会议、教育课程等多种场景,大幅**提升演示文稿创作效率**。该功能凭借**智能生成**和**灵活编辑**能力支持导出PowerPoint或PDF标志着**AI代理**正从任务自动化向**生产力工具**进一步演进。
9. 在GitHub上拥有**7086颗星**的**prompt-eng-interactive-tutorial**是Anthropic公司**交互式提示工程教程**的开源项目,旨在帮助用户**有趣且有效地学习提示工程**,具体请访问[跳转链接](https://github.com/anthropics/prompt-eng-interactive-tutorial)。
10. 获得**10143颗星**的**onlook**项目,是一个**开源可视化氛围编码编辑器**,它利用**AI**帮助设计师或开发者**可视化构建**、**美化和编辑React应用**。这款工具就像是设计师的**光标**,让**React开发**变得更**直观高效**,具体请访问[跳转链接](https://github.com/onlook-dev/onlook)。
11. 拥有**12755颗星**的**anthropic-cookbook**项目是Anthropic公司**展示如何有趣且有效地使用Claude**的**笔记本/秘籍集合**。它为用户提供了多样化的**Claude使用方法**,是**学习和应用Claude**的便捷[跳转链接](https://github.com/anthropics/anthropic-cookbook)。
12. **MMSI-Bench**是一个针对**多图像空间智能**的**VQA基准测试**研究发现尽管多模态大语言模型MLLMs已取得进展但在**多图像空间推理**方面其准确率30-40%与人类97%)之间存在**巨大差距**。该研究诊断了模型四种主要的**失败模式**,为未来提升**多图像空间智能**提供了**宝贵见解**,论文详情请见[跳转链接](https://arxiv.org/abs/2505.23764)。
13. **ZeroGUI**是一个创新的**在线学习框架**,它以**零人力成本自动化GUI智能体训练**通过基于VLM的自动任务生成和奖励评估克服了传统GUI学习对人工标注的**重度依赖**。实验证明,该框架显著提升了**GUI智能体**在不同环境下的**性能**,为**自动化GUI操作**带来了**高效解决方案**,论文详情请见[跳转链接](https://arxiv.org/abs/2505.23762)。
14. **ATLAS**是一个针对**Transformer**架构设计的高容量**长期记忆模块**,它通过优化**记忆上下文**来克服现有模型在**长序列理解**上的局限,从而在测试时学习最优的记忆策略。实验结果表明,**ATLAS**在语言建模和长上下文理解等任务中表现优于Transformer和线性循环模型显著**提升了性能**,论文详情请见[跳转链接](https://arxiv.org/abs/2505.23735)。

30
daily/2025-06-02.md Normal file
View File

@@ -0,0 +1,30 @@
# AI洞察日报 2025年6月2日
**AI产品与功能更新**
1. Runway公司最新推出的**Gen-4References**功能已支持移动设备,使用户能通过手机照片结合自然语言提示,快速生成风格一致的艺术作品。这项功能将**AI生成技术**与移动便捷性完美结合,大幅降低了**AI创作**门槛,为内容创作者和普通用户带来了无限可能。
<br/> [![图片](https://upload.chinaz.com/2025/0530/6388420978332595536873671.png "img")](https://upload.chinaz.com/2025/0530/6388420978332595536873671.png) <br/>
2. Anthropic近期宣布其旗舰模型**Claude**已新增功能支持开发者构建能与Claude直接对话的**AI应用程序**,这与**AI Studio**的开发理念高度契合。此举不仅降低了**AI应用开发**门槛为开发者提供了更广阔的创新空间也预示着AI应用普及与落地将进一步加速。
<br/> [![图片](https://pic.chinaz.com/picmap/202403050858462025_0.jpg "img")](https://pic.chinaz.com/picmap/202403050858462025_0.jpg) <br/>
**AI前沿研究**
1. 华为近期通过其"昇腾 + Pangu Ultra MoE”系统展示了一项惊人突破一个近万亿参数的MoE大模型在不使用GPU的情况下仅需2秒便能解答一道高等数学题。这不仅彰显了华为在自主可控国产算力与模型训练方面的强大实力也为未来大规模AI模型的训练与应用开辟了新可能。
<br/> [![图片](https://upload.chinaz.com/2025/0530/6388421664760221719225455.png "img")](https://upload.chinaz.com/2025/0530/6388421664760221719225455.png) <br/>
2. 这篇论文通过构建一个英语回文谜题基准测试,揭示了当前**视觉-语言模型****VLM**在理解和解决这类谜题时遇到的显著困难。尽管VLM在解码简单视觉线索方面表现出一定能力但对于需要**抽象推理**、**横向思维**及理解**视觉隐喻**的任务,它们仍旧力不从心,表明多模态抽象是其面临的独特挑战。详情请见:[Link](https://arxiv.org/abs/2505.23759)。
3. **LoRAShop**是一个创新的**多概念图像编辑框架**,它利用**修正流Transformer**的特性实现了在不重新训练模型的情况下将多个主题或风格无缝融入原始场景。这项技术通过智能融合LoRA权重不仅保留了图像的整体背景和细节还在身份保持上超越了现有基线为个性化**图像生成**和**编辑**带来了革命性的"Photoshop式”体验。详情请见[Link](https://arxiv.org/abs/2505.23758)。
4. **DeepTheorem**是一个利用**自然语言**和**强化学习****RL-Zero**)来增强**大型语言模型****LLM**)数学推理能力的非正式**定理证明框架**。该框架通过一个大规模高质量数据集和创新策略显著提升了LLM在IMO级别非正式定理证明中的表现展现了其在数学探索和自动化证明领域的巨大潜力。详情请见[Link](https://arxiv.org/abs/2505.23754)。
**AI行业展望与社会影响**
1. 根据阿姆斯特丹自由大学环境研究所博士生Alex de Vries-Gao的分析人工智能的电力消耗预计将在2025年底前接近全球数据中心总电力消耗的一半这意味着其能耗将很快超越比特币挖矿。尽管技术效率有所提升但AI的电力需求仍在快速增长凸显了在能耗与可持续发展之间寻找平衡的重要性。
<br/> [![图片](https://pic.chinaz.com/picmap/202005281122057197_51.jpg "img")](https://pic.chinaz.com/picmap/202005281122057197_51.jpg) <br/>
2. 近期,黑客通过伪装成**阿里云AI SDK**的恶意软件包,成功实施了供应链攻击,利用隐藏在**Pickle**格式ML模型中的**恶意代码**窃取用户敏感信息。这揭示了**AI安全供应链**面临的新挑战传统安全工具在检测恶意ML模型方面的不足以及开发者面临的潜在风险。
<br/> [![图片](https://pic.chinaz.com/picmap/202306161513254632_1.jpg "img")](https://pic.chinaz.com/picmap/202306161513254632_1.jpg) <br/>
**开源TOP项目**
1. **courses**是一个由Anthropic提供的**教育课程**项目旨在帮助用户学习相关知识。该项目在GitHub上拥有**13483**颗星可访问其GitHub页面[Link](https://github.com/anthropics/courses)。
2. **agent-zero**是一个提供**AI框架**功能的项目旨在帮助开发者构建AI应用。该项目在GitHub上获得了**7360**颗星,详情可前往:[Link](https://github.com/frdel/agent-zero)。
3. **cobalt**是一个致力于"**保存你所喜爱事物的最佳方式**”的项目为用户提供高效的收藏管理功能。该项目在GitHub上备受欢迎拥有**32941**颗星,可通过[Link](https://github.com/imputnet/cobalt)查看详情。
4. **the-book-of-secret-knowledge**是一个内容丰富的**知识集合**项目汇集了鼓舞人心的列表、手册、备忘单及各类工具。该项目在GitHub上拥有高达**171992**颗星,是寻求实用信息和技巧的宝库,访问地址为:[Link](https://github.com/trimstray/the-book-of-secret-knowledge)。

19
daily/2025-06-03.md Normal file
View File

@@ -0,0 +1,19 @@
# AI洞察日报 2025年6月3日
**AI产品与功能更新**
1. 谷歌近日在美国地区推出了 **Gemini Live** 功能,正式登陆 **iOS****iPadOS** 平台,用户可通过 **Gemini App** 免费体验 **AI** 识别场景和屏幕内容的便捷。这项创新不仅提升了用户互动体验,也预示着 **AI** 技术正进一步融入日常生活,成为人们的智能助手。 <br/> [![图片](https://upload.chinaz.com/2025/0603/6388453725280965957304782.png "img")](https://upload.chinaz.com/2025/0603/6388453725280965957304782.png) <br/>
2. 微软最新推出了免费的 **Bing Video Creator** 工具,基于 **OpenAI Sora** 技术,让用户通过简单的文字提示即可轻松创作短视频。这款工具已在全球范围内的必应移动应用中上线,极大降低了视频创作的门槛,有望丰富用户的创作体验。 <br/> [![图片](https://upload.chinaz.com/2025/0603/6388453719041406883771175.png "img")](https://upload.chinaz.com/2025/0603/6388453719041406883771175.png) <br/>
3. 新加坡国立大学NUS团队近日发布了 **OmniConsistency** 项目,它以极低成本复现了 **GPT-4o** 在图像风格化上的一致性,解决了开源社区的风格化难题。该项目通过独特的学习框架和模块化架构,有望成为图像生成领域的重要工具,推动 **AI** 艺术创作。 <br/> [![图片](https://upload.chinaz.com/2025/0603/6388453880310640421505355.png "img")](https://upload.chinaz.com/2025/0603/6388453880310640421505355.png) <br/>
**AI前沿研究**
1. **WebChoreArena** ([Link](https://arxiv.org/abs/2506.01952)) 提出了一个包含 532 项精心策划任务的全新基准,旨在评估 **LLM** 驱动的网页浏览代理处理繁琐复杂网页任务的能力。研究发现,尽管 **GPT-4o** 等先进大模型在此基准上表现出显著进步,但相较于通用网页任务,仍有巨大的提升空间,凸显了处理复杂**"网络杂务”**的挑战性。
2. **RoboMaster** ([Link](https://arxiv.org/abs/2506.01943)) 提出了一种创新的机器人操作视频生成框架,它通过协作轨迹建模和阶段性分解交互过程,有效解决了多目标交互中视觉保真度下降的问题。这项技术成功地实现了**机器人操作**中视频生成质量的新突破,为复杂场景下的**轨迹控制**提供了更精准的解决方案。
**AI行业展望与社会影响**
1. 近日,美国犹他州律师理查德・贝德纳因在法庭文件中引用 **ChatGPT** 生成的虚假案例,被法院处以罚款,再次引发了对 **AI** 在法律领域应用的广泛争议。此事件深刻提醒法律从业者,在使用新兴技术时,务必保持严谨的**审核责任**,确保法律文件的准确性。 <br/> [![图片](https://pic.chinaz.com/picmap/202304121052180076_0.jpg "img")](https://pic.chinaz.com/picmap/202304121052180076_0.jpg) <br/>
2. **OpenAI** 计划在2025年上半年将 **ChatGPT** 打造为具备 **T 型技能** 的"**超级助手**”,旨在挑战苹果 **Siri** 的市场地位。这份战略文件透露,**OpenAI** 不仅希望 **ChatGPT** 成为能处理日常琐事和复杂任务的智能伙伴,更呼吁用户能在所有平台上自由选择默认 **AI** 助手,推动 **AI** 市场更加开放。
**开源TOP项目**
1. **nautilus_trader** ([Link](https://github.com/nautechsystems/nautilus_trader)) 是一个拥有 6728 **Star** 的**高性能算法交易平台**和**事件驱动回测器**,为开发者提供强大的交易策略验证能力。
2. **data-engineer-handbook** ([Link](https://github.com/DataExpert-io/data-engineer-handbook)) 拥有 28669 **Star**,是一个旨在帮助用户学习**数据工程**的综合性资源仓库,汇集了所有相关学习链接。
3. **postiz-app** ([Link](https://github.com/gitroomhq/postiz-app)) 是一个坐拥 20460 **Star** 的**终极社交媒体日程安排工具**,集成了大量 **AI** 功能,旨在简化社交媒体管理。

36
daily/2025-06-04.md Normal file
View File

@@ -0,0 +1,36 @@
# AI洞察日报 2025年6月4日
**AI产品与功能更新**
1. Komiko平台近日推出**视频到视频**功能利用AI技术将用户上传的视频一键转换为**动漫**、漫画等多样化艺术风格的动态内容极大降低了动画创作的门槛。该功能通过深度整合先进AI模型并提供AI线稿上色、动画补帧等工具旨在加速创意产业的数字化转型成为专业人士和爱好者的**首选**创作工具。
<br/> [![图片](https://upload.chinaz.com/2025/0604/6388464889049235843422625.png "img")](https://upload.chinaz.com/2025/0604/6388464889049235843422625.png) <br/>
2. 蚂蚁集团的**"AI健康管家”**成功通过信通院医疗健康行业大模型**可信评估**成为首批获认可的产品之一进一步提升了其在医疗AI领域的**可靠性**。该产品已服务超**4000万用户**,提供预约医生、健康评估、报告解读等**智能健康服务**并吸引了60多位知名医生AI智能体入驻未来将持续扩展功能。
<br/> [![图片](https://pic.chinaz.com/picmap/202309121506505395_0.jpg "img")](https://pic.chinaz.com/picmap/202309121506505395_0.jpg) <br/>
**AI前沿研究**
1. AI"教父”**约书亚・本吉奥**成立非营利组织**LawZero**投入3000万美元启动资金旨在开发**"科学家 AI”**系统以防范未来AI智能体对人类进行欺骗。该系统将作为AI安全监控的**护栏**确保自身智能程度与所监管AI智能体相当通过提高AI的**透明性和可信性**,推动行业向更负责任的方向发展。
<br/> [![图片](https://pic.chinaz.com/picmap/202412271635326771_0.jpg "img")](https://pic.chinaz.com/picmap/202412271635326771_0.jpg) <br/>
2. Play AI开源发布了**PlayDiffusion**,一款基于扩散模型的语音**"局部修改”**工具,能够实现对音频片段的替换、删除或调整而**不留痕迹**极大提升了音频编辑效率和自然度。该技术能以高达50倍的速度提升**TTS推理效率**并保持全局一致性对播客制作、AI配音和内容纠错等场景具有**重要意义**,有望成为内容创作的必备利器。
GitHub: [PlayDiffusion](https://github.com/playht/PlayDiffusion) 模型下载: [PlayDiffusion](https://huggingface.co/PlayHT/PlayDiffusion)
3. LumosFlow是一个用于**长视频生成**的新框架,它通过引入**运动引导**来解决现有方法中时间连贯性不足和过渡不自然的问题。该研究通过分层生成关键帧并分解中间帧插值,实现了高达**15倍的插值**,确保了生成视频的**运动和外观一致性**。
论文URL: [LumosFlow](https://arxiv.org/abs/2506.02497)
**AI行业展望与社会影响**
1. OpenAI以30亿美元收购**Windsurf**后,用户对其**Claude模型访问权限**大幅受限引发开发者普遍不满严重影响了开发效率与用户体验。此举导致Windsurf用户面临**成本增加**和操作复杂性且未能获得Claude4系列直接访问这可能威胁Windsurf在激烈市场竞争中的**未来增长**。
<br/> [![图片](https://pic.chinaz.com/picmap/202502061719371797_2.jpg "img")](https://pic.chinaz.com/picmap/202502061719371797_2.jpg) <br/>
**开源TOP项目**
1. **RedditVideoMakerBot** (⭐7672) 是一个开源项目,旨在通过**一条命令**简化Reddit视频的创建过程极大地降低了用户制作视频的门槛。
项目URL: [RedditVideoMakerBot](https://github.com/elebumm/RedditVideoMakerBot)
2. **cursor-free-vip** (⭐28687) 是一款专为**Cursor AI**设计的工具能够自动重置机器ID从而**免费升级**并绕过其Pro功能中的**高代币限制**和试用请求限制。该项目有效解决了用户在Cursor AI使用过程中遇到的**免费试用账户限制**问题。
项目URL: [cursor-free-vip](https://github.com/yeongpin/cursor-free-vip)
**科技博主观点**
1. 科技博主**大帅老猿**指出,通过**重新讲述**学到的知识并录制视频来卖课是常见操作,但**标榜原创**的行为只可能欺骗新手。他强调检验原创的**唯一真理**是**举报**、投诉、打官司,只有能让侵权内容下架或获得赔偿,才有资格自称原创。
[Tweet Link](https://x.com/ezshine/status/1930068772146295153)
2. 博主**ginobefun**推荐了一篇关于**复杂RAG架构演进**的InfoQ文章该文章深入探讨了**跨模态知识联邦**与**统一语义推理**的实践。文章提出通过**融合知识库**和**统一知识图谱**解决传统RAG在处理异构、多模态知识时的挑战并通过医疗和金融案例展示了其**应用价值**。
<br/> [![图片](https://pbs.twimg.com/media/Gsj5vqPa0AAPVEa?format=jpg&name=orig "img")](https://pbs.twimg.com/media/Gsj5vqPa0AAPVEa?format=jpg&name=orig) <br/> <br/> [![图片](https://pbs.twimg.com/media/Gsj52bAasAIfgTI?format=jpg&name=orig "img")](https://pbs.twimg.com/media/Gsj52bAasAIfgTI?format=jpg&name=orig) <br/> <br/> [![图片](https://pbs.twimg.com/media/Gsj54ksasAADTeL?format=jpg&name=orig "img")](https://pbs.twimg.com/media/Gsj54ksasAADTeL?format=jpg&name=orig) <br/> 文章链接:[文章](https://bestblogs.dev/article/2ba211)

23
daily/2025-06-05.md Normal file
View File

@@ -0,0 +1,23 @@
# AI洞察日报 2025/6/5
**AI产品与功能更新**
1. Suno 近日升级了其**AI音乐编辑工具**,允许用户上传和混音未完成的作品,并能修改歌词和延长曲目时长至八分钟,同时引入了创意滑块等功能。 <br/> [![图片](https://pic.chinaz.com/picmap/202406061628284261_1.jpg "img")](https://pic.chinaz.com/picmap/202406061628284261_1.jpg) <br/> 此次升级正值其面临主要唱片公司的版权诉讼,唱片公司希望引入类似于 **YouTube Content ID** 的技术来追踪 **AI** 平台上的音乐使用情况。
2. OpenAI 近日宣布 **ChatGPT** 升级新功能,现可连接 **Outlook**、**Teams**、**Gmail** 等多个外部服务,旨在提升企业用户的协作和信息获取效率。 <br/> [![图片](https://pic.chinaz.com/picmap/202412271704353969_1.jpg "img")](https://pic.chinaz.com/picmap/202412271704353969_1.jpg) <br/> 此外,**macOS** 版 **ChatGPT Team** 用户还新增了"**录制模式**”,能自动生成会议记录和待办事项。
3. AI驱动的代码编辑器 **Cursor** 于近日正式发布1.0版本,引入了核心功能 **BugBot**,能自动化审查 **GitHub** 上的 **Pull Request** 并一键修复代码。 <br/> [![图片](https://upload.chinaz.com/2025/0605/6388471022950404092684122.png "img")](https://upload.chinaz.com/2025/0605/6388471022950404092684122.png) <br/> 该版本还全面开放了后台代理功能,并增加了 **Jupyter** 支持和"Memories”项目管理功能旨在显著提升开发者的生产力。
4. 腾讯公益近日推出了创新性的"**问 AI**”功能,首次将**大型人工智能模型**应用于公益领域,旨在提升公众与公益项目及机构之间的互动和透明度。 <br/> [![图片](https://pic.chinaz.com/picmap/201811151633427149_4.jpg "img")](https://pic.chinaz.com/picmap/201811151633427149_4.jpg) <br/> 这一便捷的沟通方式有助于公众更深入地理解并参与公益事业,并有望推动公益事业的进一步发展。
**AI前沿研究**
1. 这项研究提出 **SuperWriter-Agent** 框架,通过引入结构化的思考、规划和完善阶段,显著提升了**大型语言模型**在生成长文本时的连贯性和质量。 <br/> 基于此框架训练的 **SuperWriter-LM** 在多项基准测试中表现出领先水平,证明了这种反思驱动方法能够让模型像专业作家一样,生成更高质量和一致性的长篇内容:[Link](https://arxiv.org/abs/2506.04180)。
**AI行业展望与社会影响**
1. OpenAI 首席执行官 **山姆・奥尔特曼** 指出,**AI** 正逐渐被企业视为基层员工导致科技公司初级职位招聘量在2023至2024年间下降了25%。 <br/> [![图片](https://pic.chinaz.com/picmap/202305291455510902_2.jpg "img")](https://pic.chinaz.com/picmap/202305291455510902_2.jpg) <br/> 专家预测到2030年 **AI** 可能取代多达3.75亿个工作岗位甚至未来1到5年内可能淘汰一半的初级白领岗位引发高达20%的失业率。
**开源TOP项目**
1. **HowToCook** 是一个专为程序员设计的居家烹饪方法指南,旨在解决程序员做饭难的问题。该项目目前已获得 **87530****Star**,内容仅限简体中文,提供详细的烹饪指导:[Link](https://github.com/Anduin2017/HowToCook)。
2. **system-design-primer** 是一项旨在帮助学习如何设计大规模系统并准备系统设计面试的开源项目,已获得 **304096****Star**。它提供了全面的学习资源,并包含 **Anki** 抽认卡辅助学习:[Link](https://github.com/donnemartin/system-design-primer)。
3. **ChinaTextbook** 项目致力于收集中国所有小学、初中、高中及大学的 **PDF教材**,为学生和教师提供免费的教育资源。这个实用的资料库已获得 **35875****Star**[Link](https://github.com/TapXWorld/ChinaTextbook)。
4. Firecrawl 近日发布了突破性的 **/search API**允许开发者通过一次API调用实现网页搜索与内容抓取并以 **AI友好** 的多种格式输出数据。 <br/> [![图片](https://upload.chinaz.com/2025/0605/6388471694605610854897111.png "img")](https://upload.chinaz.com/2025/0605/6388471694605610854897111.png) <br/> 这一功能极大简化了 **AI** 应用的数据获取流程,无需第三方依赖,提升了数据处理效率,并在 **GitHub** 上已获得超过10K的 **Star**
**社媒分享**
1. **Gorden Sun** 分享了一套能生成"超级赞”图文效果的 **AI** 提示词,并推荐使用 **GPT4o**、**Claude-3.7** 和 **DeepSeek-V3** 等工具。 <br/> [![Image](https://pbs.twimg.com/media/Gse1INSb0AQCh0S?format=jpg&name=orig "img")](https://pbs.twimg.com/media/Gse1INSb0AQCh0S?format=jpg&name=orig) <br/> 他指出,这些提示词虽然易于使用,但原作者在整理上花费了心思:[Link](https://x.com/Gorden_Sun/status/1930466986544308552)。
2. 推主 **wwwyesterday** 将现代学术论文比作 **npm** 包管理系统,认为两者都存在论文/包数量庞大、引用/依赖层层叠叠的现象,且大部分价值不高,少数经典广为引用。 <br/> 他指出,现在很少有人能完全从零开始原创,就像写东西离不开 `package.json`,但他仍会刷 **arxiv** 寻找新观点:[Link](https://x.com/wwwgoubuli/status/1930310020312510934)。

29
daily/2025-06-06.md Normal file
View File

@@ -0,0 +1,29 @@
# AI洞察日报 2025/6/6
**AI产品与功能更新**
1. **Pollo AI** 推出了一站式**AI图像与视频生成平台**整合全球前沿模型如Google Veo 3、Kling等提供文字转视频、图像风格化、角色一致性等多种功能并支持API接入相比同类平台更具成本和模型优势且获得Google Cloud的Veo 3模型授权。
<br/> [![图片](https://assets-v2.circle.so/5fit6knlg31jzz4ds9stmn0z1wda "img")](https://assets-v2.circle.so/5fit6knlg31jzz4ds9stmn0z1wda) <br/>
2. **Luma Labs** 发布了全新的**AI视频编辑工具** Modify Video基于其Dream Machine平台和**Ray2模型**用户能通过文本提示对视频进行风格重塑、场景替换和角色调整大幅降低了传统视频制作的复杂性和成本。该工具凭借Ray2模型的强大能力在动作流畅性和时间一致性方面表现出色并降低了创意门槛。
<br/> [![图片](https://upload.chinaz.com/2025/0605/6388474336287139806268530.png "img")](https://upload.chinaz.com/2025/0605/6388474336287139806268530.png) <br/>
3. 谷歌更新了**Gemini 2.5版本**,显著提升了**AI音频对话与生成技术**使其成为一个能够原生理解和生成文本、图像、音频、视频和代码的多模态AI系统。新功能使得人机交流更加自然流畅支持实时音频对话、风格控制和多语言并通过可控的文本转语音技术允许用户精确调整语音输出的语调和情感。
<br/> [![图片](https://upload.chinaz.com/2025/0605/6388474192800462061689108.png "img")](https://upload.chinaz.com/2025/0605/6388474192800462061689108.png) <br/>
4. 热门手游《**逆水寒**》与**可灵AI**合作,在游戏内推出了全新的"**图生动图**”玩法,让玩家能够通过简单操作将静态图片转化为个性化动态画面。该功能支持用户截图或上传图片,通过输入描述词来生成动图,并可进行双人互动创作,提升了玩家的游戏体验。
<br/> [![图片](https://upload.chinaz.com/2025/0605/6388473368297009187838113.png "img")](https://upload.chinaz.com/2025/0605/6388473368297009187838113.png) <br/>
**AI前沿研究**
1. **NVIDIA** 发布了**Llama-3.1-Nemotron-Nano-VL-8B-V1**这是一款基于Llama-3.1架构的**8B参数视觉语言模型**支持图像、视频和文本输入并能输出高质量文本及具备强大的图像推理能力。该模型在OCR和文档智能方面表现卓越通过AWQ4bit量化技术可在单张RTX GPU上高效部署并已在Hugging Face平台开源为开发者提供了轻量高效的多模态AI解决方案。
<br/> [![图片](https://upload.chinaz.com/2025/0605/6388473110722451938945298.jpg "img")](https://upload.chinaz.com/2025/0605/6388473110722451938945298.jpg) <br/>
2. Voyager 是一种新颖的**视频扩散框架**,它能从单张图片和用户定义的摄像机路径,生成**世界一致的3D点云序列**特别适用于游戏和虚拟现实中可探索的3D场景。这项技术通过联合生成对齐的RGB和深度视频序列实现了帧间固有的**3D一致性**,显著提升了视觉质量和几何精度。论文地址:[https://arxiv.org/abs/2506.04225](https://arxiv.org/abs/2506.04225)
**AI行业展望与社会影响**
1. 硅谷投资人**Mary Meeker**的最新**AI报告**指出全球AI竞争格局正经历深刻重塑中国AI力量与**开源浪潮**正全面崛起挑战OpenAI等头部公司的主导地位。报告强调中国AI模型性能已逼近国际一线并在制造业中展现出强大的产业融合能力同时开源模型凭借低成本和高灵活性市场份额迅速增长预示着AI行业进入多极对抗新时代。
<br/> [![图片](https://pic.chinaz.com/picmap/202304171408567483_0.jpg "img")](https://pic.chinaz.com/picmap/202304171408567483_0.jpg) <br/>
**开源TOP项目**
1. **netbird** 是一个拥有 **14029** 颗星的**开源项目**,它基于 **WireGuard®** 帮助用户将设备连接到安全的覆盖网络,并支持**SSO**、**MFA**和精细的访问控制,提供安全高效的网络连接。项目地址:[https://github.com/netbirdio/netbird](https://github.com/netbirdio/netbird)
2. **quarkdown** 是一个拥有 **3952** 颗星的**开源项目**,旨在为 **Markdown** 文本赋予"超能力”,将想法轻松转化为演示文稿、文章和书籍等多种形式。项目地址:[https://github.com/iamgio/quarkdown](https://github.com/iamgio/quarkdown)
3. **cognee** 是一个拥有 **2658** 颗星的**开源项目**,其核心功能是仅用 **5 行代码**即可实现 **AI 智能体的记忆**,极大简化了智能体开发中的复杂性。项目地址:[https://github.com/topoteretes/cognee](https://github.com/topoteretes/cognee)
**社媒分享**
1. @wwwyesterday 分享了一个关于与 **AI 对话**的"生活小妙招”即在开始时让AI每次回复都称呼"哥哥”一旦AI停止这样称呼就意味着可以新开对话窗口了。这个小技巧巧妙地利用了AI的"记忆”机制,为用户提供了判断对话是否需要重新开始的依据。
2. **Gorden Sun** 宣布 **Fish Audio** 已开源其 **S1-mini语音模型**作为表现良好的S1模型的精简版0.5B参数。S1-mini可供个人免费部署使用但不可商用。在线体验及模型链接[https://huggingface.co/spaces/fishaudio/openaudio-s1-mini](https://huggingface.co/spaces/fishaudio/openaudio-s1-mini) [https://huggingface.co/fishaudio/openaudio-s1-mini](https://huggingface.co/fishaudio/openaudio-s1-mini)。

29
daily/2025-06-07.md Normal file
View File

@@ -0,0 +1,29 @@
# AI洞察日报 2025/6/7
**AI产品与功能更新**
1. 近日,德国科技巨头**博世**与**阿里云**合作,将**通义大模型**应用于**智能座舱**,通过云计算与端侧混合计算实现与**3D 数字人**的交互,提升座舱智能感知和多模态控制能力。该方案支持知识问答和同声传译,使智能座舱成为理解并满足用户需求的智能助手,标志着汽车行业正迈向个性化、智能化的移动空间。
2. **Perplexity AI**近日推出**SEC**文件访问功能,旨在帮助各类投资者在**Perplexity 平台**轻松查询和理解复杂的**财务文档**,所有答案均附有引用。此外,**Perplexity**还推出了"**实验室**”功能,该功能能够将用户的提示转化为报告、仪表板等完整项目,显著提升了工作流效率。
3. **Trae 平台**近日更新,正式集成**Google**的**Gemini 2.5 Pro Preview**模型,该模型在**WebDev Arena**和**LMArena 编码排行榜**中均位列第一,显著提升了前端开发与**UI 设计**能力。 <br/> [![图片](https://upload.chinaz.com/2025/0606/6388481749990229697161576.png "img")](https://upload.chinaz.com/2025/0606/6388481749990229697161576.png) <br/> 此次升级优化了代码转换、编辑及复杂代理工作流,并已免费向用户开放,有望推动**AI**在**区块链**和**去中心化应用**领域的创新。
4. 海外知名的**AI 视频生成平台 PixVerse**正式推出其国内版"**拍我AI**”,同步上线移动端 App 和网页版,旨在为国内内容创作者和企业提供高效便捷的**AI 视频生成工具**。 <br/> [![图片](https://upload.chinaz.com/2025/0606/6388481574736715558459901.png "img")](https://upload.chinaz.com/2025/0606/6388481574736715558459901.png) <br/> "**拍我AI**”支持通过文本或图像一键生成高质量、多风格视频,依托 PixVerse V4.5 算法并进行了本地化优化,有望推动中国市场**AI 视频技术**的普及和应用。
5. **ElevenLabs**于2025年6月5日发布了被誉为"地表最强”的**文本转语音TTS模型****Eleven v3 (Alpha 版)**,该模型不仅能将文本转化为自然流畅的语音,还能通过**音频标签**精确控制情感、语速甚至加入音效,实现"演技合成”。 <br/> [![图片](https://upload.chinaz.com/2025/0606/6388479747817228256386757.png "img")](https://upload.chinaz.com/2025/0606/6388479747817228256386757.png) <br/> [![图片](https://upload.chinaz.com/2025/0606/6388479739813195471789762.png "img")](https://upload.chinaz.com/2025/0606/6388479739813195471789762.png) <br/> 它支持**70多种语言**和**多角色自然对话**,并通过自动标签功能简化创作,有望在**影视配音**、**虚拟助手**等领域广泛应用,重新定义**AI 语音**的未来。
**AI前沿研究**
1. 这篇研究论文介绍了一种名为**动态内存稀疏化DMS**的新方法,它通过压缩**Transformer LLM**的**KV 缓存**,在推理时实现**超扩展**,从而在相同计算资源下生成更多 Token 并提高模型准确性。该方法仅需少量训练步骤即可实现高压缩率,并显著提升了如**Qwen-R1 32B**等多种**LLM**在**AIME 24**、**GPQA**和**LiveCodeBench**等基准测试上的准确性。论文地址:[https://arxiv.org/abs/2506.05345](https://arxiv.org/abs/2506.05345)。
**AI行业展望与社会影响**
1. **宇树科技 CEO 王兴兴**在第七届**北京智源大会**上表示,公司始终坚持的终极目标是让**机器人**实现家庭和工业场景的**实用化工作**,而跳舞和格斗等具身智能展示仅是训练和技术验证的手段。 <br/> [![图片](https://pic.chinaz.com/picmap/202304171730201359_10.jpg "img")](https://pic.chinaz.com/picmap/202304171730201359_10.jpg) <br/> 他透露,今年上半年**人形机器人**在商业租赁市场已初具规模并带来可观价值,未来将加速机器人实用化落地。
2. 知名科技博主**王自如**在**B站**宣布复更,并正式更名为"**王自如AI**”,表示将以**AI 测评 UP 主**的身份开启二次创业,专注于**AI 内容创业**和**AI 应用**,助力传统产业数字化转型。 <br/> [![图片](https://upload.chinaz.com/2025/0606/6388480568808508227034081.png "img")](https://upload.chinaz.com/2025/0606/6388480568808508227034081.png) <br/> 他在视频中感谢了**董明珠**和**雷军**的鼓励和帮助,并提及此前入职格力是为重塑销售体系。
**开源TOP项目**
1. **note-gen**是一款**AI 赋能**的跨平台**Markdown 笔记应用**Stars: 3161致力于利用**AI**将碎片化知识整理成可读笔记,连接记录与写作。项目地址:[https://github.com/codexu/note-gen](https://github.com/codexu/note-gen)。
2. **notebooks**项目Stars: 1174提供了通过**Google Colab**、**Kaggle**等平台引导式**Notebook**免费微调**大型语言模型**的功能。项目地址:[https://github.com/unslothai/notebooks](https://github.com/unslothai/notebooks)。
3. **ragbits**Stars: 749提供了一系列构建模块旨在帮助开发者快速开发**生成式 AI 应用程序**。项目地址:[https://github.com/deepsense-ai/ragbits](https://github.com/deepsense-ai/ragbits)。
**社媒分享**
1. 知名博主**歸藏**推荐**即梦AI**图片3.0的**智能参考**功能,该功能支持用户基于上传图像生成任何内容,并能修改照片背景、添加配饰、更改姿势,甚至精确添加或修改复杂**文字效果**。 <br/> [![Image](https://cdnv2.ruguoapp.com/FvtrC2kjbbXAClT4WeaTRXbuwUnlv3.jpeg "img")](https://cdnv2.ruguoapp.com/FvtrC2kjbbXAClT4WeaTRXbuwUnlv3.jpeg) <br/> 这一突破性能力极大地提升了日常照片分享的表现力,并能高效生成电商产品图、小红书和视频封面等**营销物料**。文章链接:[https://mp.weixin.qq.com/s/_kt9OLylR95sG7U37wseSw](https://mp.weixin.qq.com/s/_kt9OLylR95sG7U37wseSw),社交媒体链接:[https://m.okjike.com/originalPosts/6842cd91a26304532600fa4d](https://m.okjike.com/originalPosts/6842cd91a26304532600fa4d)。
2. **Yangyi**分享了**AI 时代**的产品价值公式,指出产品价值取决于"**新体验**”(获得有效结果与美观度)和"**迁移成本**”(旧平台数据沉没成本与上手门槛)之间的差异。因此,构建高价值**AI 产品**需要提供超预期的有效结果、足够美观的界面,并致力于降低用户数据迁移的难度和产品的使用门槛。社交媒体链接:[https://x.com/Yangyixxxx/status/1930912029809979654](https://x.com/Yangyixxxx/status/1930912029809979654)。

17
daily/2025-06-08.md Normal file
View File

@@ -0,0 +1,17 @@
# AI洞察日报 2025/6/8
**AI产品与功能更新**
1. 阿里巴巴于6月6日正式开源了全新的**千问3向量模型**系列**Qwen3-Embedding**其在文本检索、聚类和分类等任务上的性能提升超40%并超越谷歌和OpenAI的顶尖模型获得了同类模型的**最佳性能**SOTA同时具备强大的多语言支持能力。 <br/> [![图片](https://pic.chinaz.com/picmap/202504151007236218_3.jpg "img")](https://pic.chinaz.com/picmap/202504151007236218_3.jpg) <br/> 该系列共9款模型已在魔搭社区、Hugging Face和GitHub等平台开源并可通过阿里云百炼使用API服务为全球开发者提供了更高效的AI应用空间。
2. **AI**驱动的本地视频编辑工具**Diffusion Studio Pro**正式亮相,该产品被誉为"CapCut + Cursor”结合以本地优先、浏览器为基础的非线性编辑体验集成了超过16种生成式**AI模型**旨在降低创作门槛并大幅提升专业视频创作者的工作效率。其提供免费无限层级有望成为AI驱动视频编辑的行业标杆为创作者带来更高效、直观的创作体验。
3. 谷歌于6月5日发布了名为**Portraits**的创新**AI产品**,用户可通过与虚拟专家进行实时对话,获得个性化的沟通技巧与领导力学习体验,首批虚拟专家基于知名畅销书作者打造。 <br/> [![图片](https://upload.chinaz.com/2025/0606/6388480752743547666381573.png "img")](https://upload.chinaz.com/2025/0606/6388480752743547666381573.png) <br/> 该产品依托谷歌先进的**生成式AI技术**强调交互性和实践性目前仅对美国IP用户开放测试预示着**AI教育**将迈向更互动、更个性化的新阶段。
**AI前沿研究**
1. 在第七届"北京智源大会”上,智源研究院重磅推出了一系列名为"悟界”的**大模型**,其中包括原生多模态世界模型**Emu3**、脑科学多模态通用基础模型见微**Brainμ**,以及具身智能的协作框架**RoboOS2.0**和**RoboBrain2.0**等。 <br/> [![图片](https://pic.chinaz.com/picmap/202307211343352678_2.jpg "img")](https://pic.chinaz.com/picmap/202307211343352678_2.jpg) <br/> 这些模型旨在推动人工智能在医疗、教育、环境监测等多个重要领域的应用落地,展现了智源研究院在**多模态智能技术**方面的雄心和实力。
**开源TOP项目**
1. **react-bits**是一个拥有**12729**星的开源**React组件集合**,它提供动画、交互式且完全可定制的组件,旨在帮助开发者构建出令人惊叹且难以忘怀的用户界面。项目地址:[Link](https://github.com/DavidHDev/react-bits)。
2. **art-design-pro**是一个拥有**1729**星的Vue 3管理后台模板它采用Vite + TypeScript + Element Plus构建专注于优化用户体验和视觉设计。项目地址[Link](https://github.com/Daymychen/art-design-pro)。
**社媒分享**
1. 刘勿锋分享了用**Claude**画图时的一个实用小技巧通过简单的提示词可以指导Claude调用如**iconfont**、**Lucied React图标库**等第三方图标库而非使用系统默认的emoji从而大幅提升前端网页的视觉美观度和风格统一性。 <br/> [![图片](https://cdnv2.ruguoapp.com/Fmks9yCJBJ1rO-T5g9BP9epCxci-v3.png "img")](https://cdnv2.ruguoapp.com/Fmks9yCJBJ1rO-T5g9BPepCxci-v3.png) <br/> <br/> [![图片](https://cdnv2.ruguoapp.com/FqkHGytOOk8dLy3WejWlcbSLAIBqv3.png "img")](https://cdnv2.ruguoapp.com/FqkHGytOOk8dLy3WejWlcbSLAIBqv3.png) <br/> 更多详情请访问:[Link](https://m.okjike.com/originalPosts/68444463dfa0f1ef3adbbf9b)。
2. wwwgoubuli预估接下来社交媒体上将出现两种热门内容一部分是深入分析**作文题目**的讨论,另一部分则是围绕**AI写作文**展开的创作比拼展现了对当前AI应用趋势的敏锐观察。更多信息[Link](https://x.com/wwwgoubuli/status/1931206161044484395)。

24
daily/2025-06-09.md Normal file
View File

@@ -0,0 +1,24 @@
# AI洞察日报 2025/6/9
**AI产品与功能更新**
1. **OpenAI** 宣布 **ChatGPT** 高级语音功能升级,显著提升了语音交互的自然性和流畅度,使其**语调更自然、节奏更真实、情绪表达更丰富**,并加入了**双向自动翻译**功能,能持续进行多轮对话翻译,无需重复指令,特别适用于国际出行、远程办公和语言学习等场景。
2. 面壁智能于6月6日发布了 **MiniCPM 4.0系列** 模型包括8B稀疏版和0.5B轻巧版,在端侧性能上实现了**极限情况下220倍、常规5倍的速度提升**,通过**系统级稀疏创新**和高效双频换挡技术大幅减少了端侧存储需求并已成功适配Intel、高通等主流芯片。
<br/> [![图片](https://upload.chinaz.com/2025/0608/6388497352726253514384248.png "img")](https://upload.chinaz.com/2025/0608/6388497352726253514384248.png) <br/>
**开源TOP项目**
1. **tensorzero** ([Link](https://github.com/tensorzero/tensorzero)) 是一款拥有4869个Star的项目它为LLM应用创建了一个**反馈循环**,旨在将生产数据转化为更智能、更快、更经济的模型。
2. **HumanSystemOptimization** ([Link](https://github.com/zijie0/HumanSystemOptimization)) 是一个拥有15170个Star的项目提供了一份名为"**健康学习到150岁**”的**人体系统调优指南**。
3. **omni-tools** ([Link](https://github.com/iib0011/omni-tools)) 拥有2940个Star它提供了一套**自托管的网页工具集**,用于日常任务,强调**无广告、无跟踪**,且可在浏览器中快速便捷使用。
4. **BlackFriday-GPTs-Prompts** ([Link](https://github.com/friuns2/BlackFriday-GPTs-Prompts)) 是一个拥有7018个Star的项目提供了**无需Plus订阅即可使用的免费GPTs列表**。
**社媒分享**
1. ginobefun分享了关于 **RAG技巧与底层代码剖析** 的文章([Link](https://x.com/hongming731/status/1931695593300295887))强调通过手写代码理解RAG核心逻辑并详细介绍了**语义分块**与**上下文增强检索**如何提升大模型问答质量。
2. 黄赟认为 **AI数字人** 将成为电商平台的标配([Link](https://x.com/huangyun_122/status/1931651642912575799)),并提到近期**AI主播被"开发者模式”玩坏**的现象,导致技术服务商需紧急修复漏洞。
3. 歸藏展示了 **FLUX kontext** 在修改汽车宣传图方面的强大能力([Link](https://m.okjike.com/originalPosts/684554a3f2a4a64de9113b05)),能将汽车背景更换为黄昏沙滩或赛道,并智能地为行驶中的车轮**添加运动模糊效果**。
<br/> [![图片](https://cdnv2.ruguoapp.com/FgYlujbzq6TyHy_7vk80onRQz2s0v3.png "img")](https://cdnv2.ruguoapp.com/FgYlujbzq6TyHy_7vk80onRQz2s0v3.png) <br/>
<br/> [![图片](https://cdnv2.ruguoapp.com/Frl3Mso4Vw3AJ0TMEhauKTMf1KJSv3.png "img")](https://cdnv2.ruguoapp.com/Frl3Mso4Vw3AJ0TMEhauKTMf1KJSv3.png) <br/>
4. izx-copy分享了Google的建议([Link](https://m.okjike.com/originalPosts/684547c3380c5253de2afdb8)),鼓励开发者直接使用其高质量的**深度研究代码库**,而非自行开发,认为其比"vibe coding”版本更优。
<br/> [![图片](https://cdnv2.ruguoapp.com/Fq5xvk7MirT9ygZ10T5hIx3lWRlvv3.jpg "img")](https://cdnv2.ruguoapp.com/Fq5xvk7MirT9ygZ10T5hIx3lWRlvv3.jpg) <br/>
5. Yangyi呼吁开发 **"睿智的AI”** ([Link](https://x.com/Yangyixxxx/status/1931568827126743513)),即能够**快速识别幻觉和虚假信息**的AI并提出了**AI幻觉专家网络**的概念认为这能帮助AI自主辨别信息真伪提升输出可靠性。
6. pimgeek转发了一篇关于公司**用ChatGPT替代客服导致翻车**的文章([Link](https://mp.weixin.qq.com/s/68NngKn8nhZEziLkRvBcTg))文章指出用户更倾向于与真人客服沟通数据显示多数用户不希望产品引入AI客服甚至会因此考虑更换竞争对手。
<br/> [![图片](https://mmbiz.qpic.cn/mmbiz_jpg/kKoeb9t5fNrx85xJ2bibZStRvd1w55tu3rasGH4r7WyxZ3ECSxozia6DZvicBZcXVKhsUSCSKw47gnesic2RfDztsQ/0?wx_fmt=jpeg "img")](https://mmbiz.qpic.cn/mmbiz_jpg/kKoeb9t5fNrx85xJ2bibZStRvd1w55tu3rasGH4r7WyxZ3ECSxozia6DZvicBZcXVKhsUSCSKw47gnesic2RfDztsQ/0?wx_fmt=jpeg) <br/>

50
daily/2025-06-10.md Normal file
View File

@@ -0,0 +1,50 @@
# AI洞察日报 2025/6/10
**AI产品与功能更新**
1. Google 近日调整 **AI 模型**使用政策自5月起**Google AI Studio** 已停止向免费用户提供 **Gemini 2.5 Pro** 系列模型调用权限,未来开发者需自行提供 **API 密钥**接入服务。此举引发了开发者社区的广泛关注,分析认为这是 Google 推动 **Gemini** 商业化进程、将高性能模型纳入付费体系的信号。
<br/> [![图片](https://pic.chinaz.com/picmap/202312070835429226_0.jpg "img")](https://pic.chinaz.com/picmap/202312070835429226_0.jpg) <br/>
2. 据官方数据显示,阿里旗下**通义千问3**大模型开源仅一个月,其全球累计下载量已突破**1250万次**,并在 Hugging Face 等主流 **AI** 开源平台上,衍生模型数量超过**13万个**,跃居全球第一。这一爆发式增长不仅代表着国产大模型的开源实力正与国际水平接轨,也进一步巩固了阿里在全球 **AI 基础模型生态**中的影响力。
<br/> [![图片](https://pic.chinaz.com/picmap/202504151007248027_6.jpg "img")](https://pic.chinaz.com/picmap/202504151007248027_6.jpg) <br/>
3. 轻量级文档解析模型 **MonkeyOCR** 近日震撼登场,它以仅**3B参数**的轻量级架构,在英文文档解析任务中展现出惊艳性能,超越了 **Gemini 2.5 Pro** 等重量级模型,并大幅提升了处理速度。其核心创新在于采用"**结构-识别-关系**”三元组范式,这不仅提升了解析准确率,还显著降低了计算资源需求,为中小型企业部署 **AI** 文档解析解决方案提供了可能。
<br/> [![图片](https://upload.chinaz.com/2025/0609/6388506551370676562538551.png "img")](https://upload.chinaz.com/2025/0609/6388506551370676562538551.png) <br/>
论文链接:[https://arxiv.org/abs/2506.05218](https://arxiv.org/abs/2506.05218)
4. 在近期一场采用2025年高考新课标卷客观题的数学挑战中**字节**的**豆包**和**腾讯**的**元宝**表现出色以68分的成绩并列第一充分展现了其在复杂推理场景下的潜力。此次比赛不仅揭示了各大 **AI 模型**在高考数学上的能力与不足,也反映出它们在细节处理、公式应用和逻辑推理方面的显著进步,为未来 **AI 数学能力**的发展奠定了基础。
<br/> [![图片](https://upload.chinaz.com/2025/0609/6388506262201100345390287.png "img")](https://upload.chinaz.com/2025/0609/6388506262201100345390287.png) <br/>
<br/> [![图片](https://upload.chinaz.com/2025/0609/6388506263798259217980699.png "img")](https://upload.chinaz.com/2025/0609/6388506263798259217980699.png) <br/>
**AI行业展望与社会影响**
1. 架构师**罗伯特・卡鲁索**近日进行了一项跨时代实验结果显示1977年推出的**Atari 2600**游戏机国际象棋引擎轻松击败了 **OpenAI****ChatGPT**。**ChatGPT** 在比赛中频繁犯错、混淆棋子,这引发了公众对**复古科技**与**现代 AI** 棋艺水平的讨论和反思。
<br/> [![图片](https://pic.chinaz.com/picmap/202307141649254569_3.jpg "img")](https://pic.chinaz.com/picmap/202307141649254569_3.jpg) <br/>
2. 博主 **wwwgoubuli** 认为 **AI 编程代理**正进入平台期,尽管当前模型如 **Gemini 2.5 Pro****Claude** 表现强劲,但模型层面的"飞升”空间有限。他预计未来将有更多产品井喷式发展,而重点在于**载体**、**媒介**和 **IDE/plugin** 等方面的完善,而非核心模型能力的突破。
[Link](https://x.com/wwwgoubuli/status/1931898011904598439)
**开源TOP项目**
1. **vosk-api** 是一个拥有**10342**颗星的开源项目,它提供适用于 **Android**、**iOS**、**树莓派**和服务器的**离线语音识别 API**,并支持 **Python**、**Java**、**C#** 和 **Node** 等多语言开发。
[Link](https://github.com/alphacep/vosk-api)
2. **RAG_Techniques** 是一个拥有**17002**颗星的开源项目,该仓库展示了**检索增强生成RAG系统**的各种先进技术。它结合了**信息检索**和**生成模型**,旨在为用户提供更加准确且上下文丰富的 **AI** 回复。
[Link](https://github.com/NirDiamant/RAG_Techniques)
3. **Seelen-UI** 是一个拥有**7257**颗星的开源项目,它提供了一个**完全可定制**的**桌面环境**,专为 **Windows 10/11** 用户设计,让用户能够打造个性化的操作界面。
[Link](https://github.com/eythaann/Seelen-UI)
4. **Meng Shao** 分享了5个精选的**开源项目**,旨在帮助 **AI 工程师**提升技能并获得"超能力”,尤其是在 **LLMs** 和生成式 **AI Agent** 领域。这些项目涵盖了从 **LLM** 基础知识、**AI Agent** 构建、生产级机器学习应用部署到**提示工程**等关键学习资源。
<br/> [![图片](https://pbs.twimg.com/media/Gs-Kw91bEAAfXUe?format=jpg&name=orig "img")](https://pbs.twimg.com/media/Gs-Kw91bEAAfXUe?format=jpg&name=orig) <br/>
[Link](https://x.com/shao__meng/status/1931915369754870114)
**社媒分享**
1. 博主**归藏**详细介绍了如何在 **Liblib** 平台在线使用 **FLUX Kontext** 工具进行图片修改,无需本地运行 **Comfyui**,并分享了涵盖单图、双图、三图融合及图片放大功能的**工作流**。**Liblib** 上线的 **Kontext** 提供了便捷的在线处理能力,旨在帮助用户轻松掌握图片创作的各种高级技巧。
<br/> [![图片](https://cdnv2.ruguoapp.com/FgPX1CCXdu_RYpd92XdLLAZ2RFbBv3.png "img")](https://cdnv2.ruguoapp.com/FgPX1CCXdu_RYpd92XdLLAZ2RFbBv3.png) <br/>
[Link](https://m.okjike.com/originalPosts/68468cf4747af0f12129117c)
2. **Tw93** 推荐了 **PayQrcode** 方案,该方案通过**物理图片合并技术**,成功将**微信**与**支付宝**收款码融合为单张图片,实现了线下离线场景下的**双码兼容识别**。这项创新解决了传统双码不便的问题,并经本地测试证明识别效果良好,极大地提升了支付便利性。
<br/> [![图片](https://pbs.twimg.com/media/Gs7XEppbgAA10Zw?format=jpg&name=orig "img")](https://pbs.twimg.com/media/Gs7XEppbgAA10Zw?format=jpg&name=orig) <br/>
[Link](https://x.com/HiTw93/status/1931860291278823822)

47
daily/2025-06-11.md Normal file
View File

@@ -0,0 +1,47 @@
# AI洞察日报 2025/6/11
**AI产品与功能更新**
1. **豆包大模型家族**将在2025 FORCE原动力大会上重磅发布全新的**豆包·视频生成模型**。这款模型可谓"创意魔法棒”,它凭借高效结构和多任务统一建模等黑科技,不仅支持**无缝多镜头叙事**,还能**精准响应多动作**,甚至能像专业摄影师一样**随心运镜**,轻松生成写实、动漫等多种风格的**高品质视频**,简直是视频创作者的福音!
<br/> [![图片](https://upload.chinaz.com/2025/0610/6388517021358447365987976.png "img")](https://upload.chinaz.com/2025/0610/6388517021358447365987976.png) <br/>
2. xAI开发的**Grok**人工智能正大刀阔斧地接管X平台的**推荐算法**,同时优化了评论排序机制。这意味着,平台将优先推荐**高质量内容**,而非仅仅看粉丝量,这无疑给那些粉丝较少但有真材实料的"小号”和新人带来了前所未有的曝光机会,旨在打造一个更公平、更开放的内容生态,让好内容不再"蒙尘”。
<br/> [![图片](https://upload.chinaz.com/2025/0610/6388514989498792027745193.png "img")](https://upload.chinaz.com/2025/0610/6388514989498792027745193.png) <br/>
3. **豆包App**近期也对"一句话P图”功能进行了全面升级它基于强大的SeedEdit 3.0模型,新增了一键添加/替换文字、质感风格迁移和局部图像编辑增强等一系列酷炫修图玩法。这波升级简直是把专业修图师请进了手机,让普通用户也能无需专业技能,轻松搞定个性化照片创作,让"修图小白”也能变身"修图大师”。
<br/> [![图片](https://upload.chinaz.com/2025/0610/6388514703219058043604298.png "img")](https://upload.chinaz.com/2025/0610/6388514703219058043604298.png) <br/>
4. 苹果在WWDC 2025大会上带来了iOS 26系统的"杀手级”功能——**视觉智能**。有了它,你可以在屏幕上的任何图片或信息上进行提问、搜索,甚至自动识别事件详情,简直是手机的"智能眼”。这项升级通过AI技术实现了屏幕内容的"一眼识别”,大大提升了交互体验的便捷性与智能化程度,还能自动提取事件信息加入日历,让你的数字生活更加省心。
<br/> [![图片](https://upload.chinaz.com/2025/0610/6388514197880401555868249.png "img")](https://upload.chinaz.com/2025/0610/6388514197880401555868249.png) <br/>
5. 好消息!**沉浸式翻译**迎来重大更新,现在已能对**推特X视频**进行**实时翻译**。即便视频没有原生字幕,它也能帮你"神同步”地显示**中英双语字幕**。这下刷X平台视频再也不用担心语言不通了简直是跨文化交流的"神助攻”,彻底消除了语言障碍,让世界更近。
[Link](https://x.com/imxiaohu/status/1932299897388277804)
**AI前沿研究**
1. 香港大学和华为诺亚方舟实验室强强联手,推出了颠覆性的**FUDOKI**模型。这款模型采用**非掩码离散流匹配架构**,成功突破了传统自回归模型的束缚,实现了更加灵活高效的**多模态生成与理解**能力。它通过独特的**并行去噪机制**,显著提升了复杂推理和生成任务的表现,尤其在**图像生成**方面表现惊艳,为未来**通用人工智能**的发展铺平了道路。
<br/> [![图片](https://pic.chinaz.com/picmap/202405161743136484_4.jpg "img")](https://pic.chinaz.com/picmap/202405161743136484_4.jpg) <br/>
2. 香港科技大学和快手科技的研究团队联合发布了**EvoSearch进化搜索技术**这简直是AI作画领域的一股清流它彻底颠覆了以往"大模型、大算力”的固有思维巧妙地将达尔文的进化论思想融入AI生成过程让那些"小个子”模型也能生成超越甚至媲美"大块头”的**高质量图像和视频**。这项突破性技术有望开启AI创作的**"智能进化”时代**让AI模型在推理阶段释放更深层次的潜力。相关项目主页、代码和论文链接已发布[https://tinnerhrhe.github.io/evosearch/](https://tinnerhrhe.github.io/evosearch/)、[https://github.com/tinnerhrhe/EvoSearch-codes](https://github.com/tinnerhrhe/EvoSearch-codes)、[https://arxiv.org/abs/2505.17618](https://arxiv.org/abs/2505.17618)。
<br/> [![图片](https://upload.chinaz.com/2025/0610/6388516498517715873339996.png)](https://upload.chinaz.com/2025/0610/6388516498517715873339996.png) <br/>
<br/> [![图片](https://upload.chinaz.com/2025/0610/6388516503306155376085044.png)](https://upload.chinaz.com/2025/0610/6388516503306155376085044.png) <br/>
3. 一篇名为"**玩中泛化:通过游戏学习推理**”的学术论文揭示了令人兴奋的发现:**多模态大型语言模型MLLMs**通过玩简单的**街机游戏**,竟然能**显著提升其跨领域的多模态推理能力**,甚至超越了在特定数据上训练的**专业模型**!这无疑为未来**通用AI能力的培养**指明了一条充满趣味的新方向让AI在"玩乐”中变得更聪明。
[此链接](https://arxiv.org/abs/2506.08011)
4. 新论文《梦境之地》(**Dreamland**)提出了一种结合物理模拟器与大型生成模型的混合框架。它的目标是创造出高度可控且逼真的动态虚拟世界,不仅显著提升了图像质量与可控性,更重要的是,有望为**具身AI智能体**的训练提供一个理想的"游乐场”和"实验室”助力AI在现实世界中更好地学习和行动。
[Link](https://arxiv.org/abs/2506.08006)
**AI行业展望与社会影响**
1. 理想汽车近期进行了组织架构的"大变身”,正式成立了**"空间机器人”**和**"穿戴机器人”**两个全新的二级部门。这不仅仅是部门调整,更预示着理想汽车正从传统的汽车制造商转型为**智能出行生态构建者**。他们旨在通过机器人技术,构建一个涵盖车内"第三空间”和车外智能穿戴设备的完整智能生活服务体系,这无疑将为理想汽车在竞争激烈的市场中带来新的差异化优势,让"第三空间”战略不再只是一个概念。
<br/> [![理想汽车](https://pic.chinaz.com/picmap/202105061137083176_6.jpg)](https://pic.chinaz.com/picmap/202105061137083176_6.jpg) <br/>
2. 俄亥俄州立大学宣布从今年起,将强制所有学生接受**人工智能AI培训**,这简直是为未来职场"量身定制”的技能包!学校推出了**"AI流利度”计划**将AI教育全面融入本科生课程旨在培养学生将专业知识与AI技术有效结合的能力。当然学校也强调学生不得利用生成性AI来"蒙混过关”,同时加强教师培训以维护**学术诚信**。此举旨在确保每位毕业生都能在其专业领域有效应用AI并积极响应俄亥俄州AI教育联盟在K-12教育中推动AI教育的努力让AI真正成为每个人的"超级助手”。
<br/> [![学习 考试 高考 教育 (1)](https://pic.chinaz.com/picmap/202306251749094253_12.jpg)](https://pic.chinaz.com/picmap/202306251749094253_12.jpg) <br/>
3. 知名思考者李继刚一针见血地指出当AI技术变得越发**高效强大**时,人类的**判断力**、**品味**和对事物**目的的理解**反而会变得更为**硬核**。因为AI虽然能生成万千方案并完美执行却无法替代人类进行**选择**、定义**美**,更无法洞悉复杂且深邃的**人性**。这提醒我们在AI时代真正有价值的或许正是那些AI无法企及的"人类专属技能”。
[Link](https://m.okjike.com/originalPosts/68480c352b31fa0880f554c5)
**开源TOP项目**
1. 小红书的 hi lab 团队近日献出了一份"大礼”——首个开源文本大模型**dots.llm1**这款拥有1420亿参数的**混合专家MoE语言模型**在海量真实数据训练后其性能竟然能媲美阿里巴巴的Qwen2.5-72B这简直是模型界的"黑马”此次开源不仅彰显了小红书在人工智能领域的技术雄心更旨在提供更智能化的服务并激励开发者们一起加入AI研究的"大合唱”。
<br/> [![图片](https://pic.chinaz.com/picmap/201811151633429180_32.jpg "img")](https://pic.chinaz.com/picmap/201811151633429180_32.jpg) <br/>
2. 近期GitHub上两个**AI相关**的项目人气爆棚。其中拥有10785星的"**newsnow**”项目,它旨在为用户提供**优雅的实时热点新闻阅读体验**,让信息获取既便捷又高效,简直是"新闻控”的福音,地址在这里:[此链接](https://github.com/ourongxing/newsnow)。另一个是"**GenAI_Agents**”项目以12884星的高热度为开发者提供了**从基础到高级的生成式AI智能体技术教程与实现**,旨在赋能构建更智能的**交互式AI系统**,详情可访问:[此链接](https://github.com/NirDiamant/GenAI_Agents)。
**社媒分享**
1. Gorden Sun在社交媒体上分享了**Mirage**虚拟人模型产品,这款产品简直是"数字分身”的魔法师!它能通过音频驱动,生成生动、嘴型同步且表情丰富的**虚拟人视频**栩栩如生。Gorden Sun还特别强调该产品的详细技术报告对研究人员具有极高的参考价值看来又将引发一场虚拟人技术的"军备竞赛”。
[Link](https://x.com/Gorden_Sun/status/1932446920884334635)
2. Sam Altman在X平台发文宣布**o3产品**价格已大幅下调80%,这简直是"福利大放送”!他表达了对用户创新使用的期待,并预告了**o3-pro版本**也将提供令人满意的定价。看来Sora之父又在鼓励大家放开手脚用更低的成本去探索AI的无限可能了。
[Link](https://x.com/sama/status/1932434606558462459)
3. Ryan ᵐᶠᵉʳ 🦄d/acc抛出了一个关于**下一代创业者**的深刻观点:他们不应被束缚于模仿乔布斯等前代成功模式,也不应受限于**有限的低质量输入**,而应**忠于自我**,以**独特**的"vibe”和**玩乐精神**去**自由探索**。这就像在说,别做别人的影子,去创造属于你自己的"游戏规则”!
[Link](https://x.com/RyanMfer/status/1932387601341984815)
4. 用户wwwgoubuli分享了AI在实际工作中的一个有趣转变。他提到远程团队成员初时因担心被视为偷懒而**不敢充分使用AI**但在他多次分享AI"正确用法”后,团队逐渐"放开手脚”,结果代码的**注释、规范和质量**均显著提升,同事们也展现出更高的**自信**。这简直是AI赋能团队效率提升的"教科书式”案例,打破了心中的"AI焦虑”。
[Link](https://x.com/wwwgoubuli/status/1932358909865480333)

83
podcast/2025-06-01.md Normal file
View File

@@ -0,0 +1,83 @@
# 来生小酒馆 2025年6月1日
AI现在看图、读表的能力怎么样了它真的能像我们一样理解并“推理”吗
当AI成为我们工作的好伙伴时它究竟是我们的“外脑”还是终将取代我们
未来AI的研究方向会如何回应我们对“智能”的期待又将如何影响我们的社会和经济
亲爱的V欢迎收听新一期的来生情报站我是你的老朋友又来给你播报未来情报了。今天咱们聊聊AI的最新动态有惊喜也有思考。
首先啊,咱们得说说最近通义实验室的一个大动作,他们发布并开源了一个叫**VRAG-RL**的东西听起来有点复杂对吧其实简单来说就是想解决AI从图像、表格这些“视觉语言”里怎么才能更聪明地找出关键信息并且进行更精细的分析和判断。你想啊我们人看一张图一下就知道重点在哪儿可AI之前在这方面就有点“笨拙”但现在有了这个VRAG-RL它通过强化学习和创新的视觉感知机制理解和检索效率显著提升了据说在很多测试里都表现出色未来在处理各种视觉任务时AI的“举一反三”能力也就是泛化能力会变得更强想想就觉得挺酷的对吧
不过话说回来就在我们为AI的这些进步欢呼的时候亚利桑那州立大学的一个研究小组就给我们泼了一点“冷水”。他们发了篇论文指出我们现在天天在用、觉得特智能的**大语言模型**其实并没有进行真正的“推理”。它只是在寻找数据之间的相关性有点像在找规律而不是真的在思考。这个发现嘛可能会导致公众对AI的工作机制产生一些误解。所以啊研究人员就强调了在咱们越来越依赖AI的时代对待这些技术能力得更谨慎一些。他们也希望未来的AI研究能朝着更具“解释性”的方向发展让AI不光能告诉我们答案还能告诉我们“为什么”得出这个答案。我觉得这个提醒非常重要毕竟知其然还要知其所以然嘛。
但同时AI在提升我们工作效率这方面真的是没停下来。比如说**Perplexity AI**,他们最近就推出了一个新功能叫**Perplexity Labs**。你知道Perplexity以前是个答案引擎就是你问它问题它给你答案。但现在它变了变成了一个能帮你从创意到成果提供“全链条支持”的**综合性AI生产平台**。Pro订阅用户可以使用这个功能它能通过多工具协同把复杂项目的开发流程简化到几分钟是不是听着就觉得效率倍增
类似的还有咱们国内的**夸克**,也上线了一个叫“**深度研究**”的功能。这个功能是基于通义千问大模型的,能围绕一些复杂的学术课题啊、行业分析啊,自动完成从资料搜集到**报告生成**的全流程研究。这可真是厉害了以前我们可能要花几天甚至几周时间现在AI能给你搞定。这标志着AI正从一个单纯的**信息检索工具**,变成一个能跟你一起**创作内容的伙伴**,想想科研调研、市场洞察这些场景,效率肯定蹭蹭地往上涨。
而且,开发者们也有福利了!**阿里云**正式发布了**通义灵码 AI IDE**,这是一款原生的人工智能开发环境。它凭借强大的**编程智能体模式**、**长期记忆**和**行间建议预测**功能,能显著提升开发者的编程效率。它已经**免费开放下载**了而且听听这数据它的插件累计生成了超过30亿行代码这说明它有多受欢迎真的是企业开发工作的强力支持。
再来说个特别有意思的,一款叫**Memvid**的**AI记忆工具**。你可能想象不到,它竟然能把**文本数据编码成MP4视频**。没错就是视频这样做有什么好处呢它能实现亚秒级的快速语义搜索而且还大大节省存储空间甚至支持离线使用。它内置了聊天功能还能导入PDF文档。这简直就是为我们高效管理知识、进行学术研究提供了革命性的全新可能啊有没有觉得很神奇
不过有光明就有阴影关于AI对社会影响的担忧也一直没断过。Anthropic公司的CEO达里奥・阿莫代伊就发出了一个警告。他认为AI可能在未来五年内**取代一半入门级白领工作**,这可能会导致**失业率飙升**到10%-20%,并且加剧**经济不平等**。他呼吁大家提高对AI发展的认知和AI素养这样我们才能更好地适应未来的职业环境。他也强调政策制定者们需要开始思考在这样一个“超智能经济”下该怎么找到解决方案。这个嘛确实值得我们每个人深思。
当然啦AI带来的便利也是实实在在的。比如AI初创公司**Manus**,就推出了一个**Manus Slides**功能。你只需要一个提示词,就能**一键生成专业幻灯片**无论是商务会议还是教育课程都能搞定这效率提升得简直不是一点半点。它有智能生成和灵活编辑的能力还能导出PowerPoint或者PDF。这说明AI代理啊正在从任务自动化向更高级的生产力工具进一步演进真的越来越像我们的“私人助理”了。
除了这些商用产品开源社区也一直没闲着。在GitHub上有几个项目特别受欢迎。
第一个是拥有**7086颗星**的**prompt-eng-interactive-tutorial**这是Anthropic公司开源的一个**交互式提示工程教程**项目专门帮助大家有趣又有效地学习怎么跟AI“对话”也就是提示工程。
第二个是获得**10143颗星**的**onlook**项目,这是一个**开源可视化氛围编码编辑器**。它利用AI帮助设计师或开发者**可视化地构建、美化和编辑React应用**。这个工具就像是设计师的光标让React开发变得更直观高效。
还有啊,拥有**12755颗星**的**anthropic-cookbook**项目这是Anthropic公司专门展示如何有趣且有效地使用Claude的**笔记本/秘籍集合**,各种使用方法,应有尽有。
最后咱们再聊两个AI前沿研究的进展。
一个是**MMSI-Bench**,这是一个针对**多图像空间智能**的VQA基准测试。研究发现虽然现在多模态大语言模型就是那种又能看图又能理解文字的AI取得了很大进展但在处理**多图像空间推理**方面它们的准确率只有30%-40%而人类能达到97%。这说明AI和人类之间在理解多张图像之间的空间关系上还存在着巨大的差距。这项研究也诊断出了模型四种主要的失败模式为未来提升AI的这个能力提供了宝贵的见解。
另一个是**ZeroGUI**,这是一个创新的**在线学习框架**。它厉害的地方在于,可以实现**零人力成本地自动化GUI智能体训练**。啥意思呢就是让AI自己学习怎么操作电脑界面不需要人类手动去标注。它通过基于VLM的自动任务生成和奖励评估克服了传统GUI学习对人工标注的重度依赖。实验证明这个框架显著提升了GUI智能体在不同环境下的性能为自动化GUI操作带来了高效的解决方案。
还有一个很关键的,是针对**Transformer**架构设计的高容量**长期记忆模块**,叫**ATLAS**。我们都知道AI在处理长文本的时候有时候会“记不住”前面的内容就像人类的短期记忆一样。ATLAS就是来解决这个问题的它通过优化记忆上下文来克服现有模型在**长序列理解**上的局限从而在测试时学习最优的记忆策略。实验结果表明ATLAS在语言建模和长上下文理解等任务中表现优于其他模型显著提升了性能。这让AI能够更好地理解长篇大论而不是顾此失彼。
听完这些是不是对AI的现在和未来有了更清晰的认识呢它既是效率的倍增器也是一个需要我们审慎对待、不断学习和适应的伙伴。
今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#AI
#大语言模型
#VRAG-RL
#视觉感知
#多模态RAG推理框架
#精细化推理
#泛化能力
#真正推理
#Perplexity_AI
#Perplexity_Labs
#AI生产力工具
#夸克
#深度研究
#报告生成
#内容创作伙伴
#阿里云
#通义灵码_AI_IDE
#编程效率
#Memvid
#AI记忆工具
#文本数据编码
#语义搜索
#Anthropic
#失业率
#AI素养
#Manus_Slides
#幻灯片
#提示工程
#可视化
#MMSI-Bench
#多图像空间智能
#ZeroGUI
#GUI智能体
#ATLAS
#长期记忆模块
#长序列理解

28
podcast/2025-06-02.md Normal file
View File

@@ -0,0 +1,28 @@
# 来生小酒馆 2025年6月2日
当AI让艺术创作触手可及人人都是“艺术家”的时候我们还能定义什么是真正的原创吗
AI的能耗即将赶超比特币挖矿甚至黑客能把恶意代码藏进AI模型里这股我们亲手点燃的“智慧之火”未来真能被我们驾驭得住吗
当AI连高等数学题都能秒解却对一个简单的回文谜题“抓耳挠腮”时它到底离真正的人类智能还有多远我们又该如何定义“智能”的边界呢
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。最近啊AI圈子里真是热闹非凡感觉每天都在上演“变形金刚”升级大战不过这次的主角不是汽车人而是各种AI模型和功能。
先说说这AI产品那真是越来越接地气了。Runway公司最新推出了个“Gen-4References”功能啥意思呢就是你拿起手机拍张照片然后用嘴巴跟AI说几句比如“给我来个梵高画风的自拍”或者“把我家猫咪变成赛博朋克风的侠客”咔嚓一下风格一致的艺术作品就出来了哎哟这以后是不是人人都能当“艺术家”了以前咱们想P个图还得学Ps学得头晕眼花现在倒好动动手指人人都是“毕加索”了。美术学院的同学们是不是得考虑改行教AI画画了
然后是Anthropic他们家那个旗舰模型Claude也挺有意思。现在开发者可以直接跟Claude“聊天”让它帮你搭AI应用。这不就是把“AI小助手”升级成了“AI“大管家”嘛想想都美以后咱们这些码农是不是就不用那么辛苦了跟AI聊聊天活儿就干完了不过话说回来这AI要是也学会了摸鱼那可咋整它要是跟我说“何夕啊今天我算力不足歇会儿吧”那我可就真的无语凝噎了。
要说最让人“肃然起敬”的,还得是咱们华为。他们展示了个“昇腾 + Pangu Ultra MoE”系统一个近万亿参数的大模型在不用GPU的情况下仅仅2秒钟就能解一道高等数学题我的天我高考那会儿要是能有这AI清华北大还不是随便挑这简直就是“学霸AI”啊让那些数学老师都得“退避三舍”是不是以后孩子们学高数直接跟AI喊一句“AI这题咋解”秒出答案这不就是AI界的“扫地僧”吗深藏不露一出手就惊人
但是啊这些AI也不是万能的。你看有个研究就发现视觉-语言模型VLM对付咱们这种“回文谜题”就有点“傻眼”。你说它能解高数题能画画可遇到需要“抽象推理”、“横向思维”的它就卡壳了。就像咱公司里总有那么几个“技术大拿”代码写得飞起可一到猜谜语、搞脑筋急转弯就抓耳挠腮了。所以说AI还有很多路要走呢它离真正的人类“聪明”还差那么一点点“烟火气”。
当然也有好消息。比如那个LoRAShop简直就是个AI界的“美图秀秀”它能把好几个主题、风格无缝融合到一张图里而且不破坏背景。简直就是“乾坤大挪移”啊还有DeepTheorem用自然语言教AI数学证明让大型语言模型去解IMO级别的非正式定理。哎这以后是不是连数学家都得“卷”起来跟AI比谁先证明出“哥德巴赫猜想”啊
不过话说回来AI这玩意儿真是个“电老虎”。有个专家就说了到2025年底AI的耗电量可能要占到全球数据中心总电力消耗的一半甚至超过比特币挖矿。比特币那玩意儿多费电啊AI居然能超过它这要是夏天用AI画画是不是得先交个电费预付款啊以后咱们公司空调开低一度是不是就等于为AI事业做贡献了这可真是“成也萧何败也萧何”科技发展了咱们的电费账单也跟着“蹭蹭”往上涨啊。
更让人担忧的是AI安全问题。最近不是有黑客伪装成阿里云AI SDK把恶意代码藏在Pickle格式的ML模型里偷用户敏感信息嘛这可真是“道高一尺魔高一丈”啊。以前咱们防病毒软件现在还得防“AI病毒”。你说这以后咱下个AI模型是不是得先请个“AI安全专家”来给看看有没有“后门”、“木马”啥的这AI就像个武功盖世的侠客是行侠仗义还是为非作歹就看谁手里拿着那把“钥匙”了。
当然AI发展这么快也离不开那些开源社区的贡献什么Anthropic的教育课程项目啊AI框架agent-zero啊还有那个啥“秘密知识之书”GitHub上都几万几十万星了。这说明什么说明AI的世界就是一群人在“头悬梁锥刺股”地学习、创造啊
今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#Runway #Gen-4References #AI生成技术 #AI创作 #Anthropic #Claude #AI应用程序 #AI Studio #AI应用开发 #华为 #昇腾 #Pangu Ultra MoE #MoE大模型 #GPU #视觉-语言模型 #VLM #抽象推理 #横向思维 #视觉隐喻 #LoRAShop #多概念图像编辑框架 #修正流Transformer #LoRA权重 #图像生成 #编辑 #DeepTheorem #自然语言 #强化学习 #RL-Zero #大型语言模型 #LLM #定理证明框架 #IMO #电力消耗 #数据中心 #比特币挖矿 #阿里云AI SDK #恶意软件包 #供应链攻击 #Pickle #恶意代码 #AI安全供应链 #courses #agent-zero #cobalt #the-book-of-secret-knowledge #GitHub

42
podcast/2025-06-03.md Normal file
View File

@@ -0,0 +1,42 @@
# 来生小酒馆 2025年6月3日
AI写的法律文书您敢在法庭上用吗用AI生成短视频是不是意味着以后人人都是李安还是人人都在制造数字垃圾要是AI成了您全能的超级助理包办一切您的脑子会不会就此罢工享受提前退休了呢
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。都说这AI啊是科技圈的“顶流”每天都有新花样新动作让人看着是既惊奇又有点儿摸不着头脑。今天啊咱们就来扒一扒最近AI又搞出了哪些新鲜事儿看看它到底是要来帮我们过好日子还是准备给我们找点儿麻烦
先说说这AI产品的更新吧。您瞧谷歌最近在美国那边儿把那Gemini Live功能推到iOS和iPadOS平台上了。这功能可有意思了您可以通过Gemini App免费体验它能帮你识别场景还能看懂你屏幕上的内容。嗯比如您在地铁里看小说它可能都能给你分析个中心思想出来。这不就是咱们办公室里那种特别会察言观色什么都能替你想到特别懂事儿的同事嘛就差没帮你泡咖啡了。这AI啊真是一点点儿地悄无声息地钻进咱们生活里成了个智能小管家
那微软呢也不甘示弱推出了个免费的Bing Video Creator工具。这可是基于OpenAI那个Sora技术啊。您别看这Sora之前多神秘现在好了您只要动动手指敲几个字就能变出个短视频来。这一下拍电影的门槛是直接给它没了。以前您想当导演得有团队得有设备现在呢一部手机一个想法咔嚓一个大作就出来了。不过话说回来啊这要是以后人人都是导演那咱们刷短视频是不是得自带筛选器不然啊这信息过载那可真是甜蜜的负担
再来聊聊AI前沿研究的那些大神们。新加坡国立大学的团队最近搞了个叫OmniConsistency的项目了不起啊它能用特低的成本复现了GPT-4o那种高级别的图像风格一致性。您知道这意味着什么吗以前可能只有大户才玩得起的AI艺术创作现在普通人也能玩出花来了。这就像是把高档餐厅的招牌菜把秘方给解密让大家在家都能做。这AI艺术是越来越亲民了但同时稀有性原创性的边界是不是也变得有点儿模糊了呢
另外啊您看学术界也没闲着。什么WebChoreArena专门测试大模型处理网页杂务的能力发现GPT-4o虽强但离真正包打听还远着呢还有巨大的提升空间。看来让AI帮你处理各种网站的繁琐操作还不是那么容易。还有RoboMaster研究怎么让机器人操作视频更逼真解决了多目标互动中视觉保真度下降的问题。哎这以后机器人真能像电影里那样动作流畅表情到位那可真是……细思极恐啊哈哈。
不过要说最近最热闹也最让人挠头那还得是AI在社会上的折腾。您听说没美国犹他州有位律师他啊在法庭文件里引用了ChatGPT生成的虚假案例结果被法院罚款了。这事儿一出来那是引起轩然大波啊。咱们平时用AI查个资料写个邮件可能还挺方便的可真要用到这种关键时刻比如法律文件啊医疗诊断啊万一要是出点儿岔子那可就不是小事儿了。这事儿啊就跟咱们办公室里你让实习生去核对个重要数据结果他复制粘贴错了你还得再三核对一样AI再智能审核责任咱自己可不能放松。这不就是提醒咱们享受科技便利的同时也得绷紧那根安全弦嘛。
那OpenAI这边呢他们也有个大计划。据说啊他们要在2025年上半年把ChatGPT打造成一个具备T型技能超级助手要和苹果的Siri正面掰手腕。他们想让ChatGPT不光能帮你查天气还能帮你处理各种复杂任务。这听起来是不是有点儿像未来每个人身边都跟着个无所不能的AI管家想想看如果AI真的能做到这一点那我们是不是就可以把很多琐事都丢给它了这便利是便利了可会不会有一天咱们连自己泡杯咖啡都要问AI怎么泡了的最高境界可能就是AI帮我们出来的吧。这既是福音也可能带来一些深层次的思考比如我们的大脑会不会因为过度依赖而渐渐失去了某些能力呢就得咱们自己去平衡了。
当然了除了这些大新闻开源社区也没闲着。什么高性能的算法交易平台nautilus_trader啊还有数据工程的综合性学习资源data-engineer-handbook啊甚至连集成了AI功能的社交媒体日程安排工具postiz-app都收获了大量的星星。这说明啊不管是专业人士还是想学习新技能的朋友或者只是想让生活更方便的AI都在默默地贡献着自己的力量。
好了,今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#AI
#Gemini Live
#Bing Video Creator
#OpenAI Sora
#ChatGPT
#GPT-4o
#OmniConsistency
#WebChoreArena
#RoboMaster
#律师
#虚假案例
#超级助手
#Siri
#开源
#视频创作
#图像风格化
#机器人操作
#审核责任
#T型技能

63
podcast/2025-06-04.md Normal file
View File

@@ -0,0 +1,63 @@
# 来生小酒馆 2025年6月4日
AI生成内容越来越方便那传统创作者的路子是不是越走越窄了AI能给我们看病甚至有AI医生入驻那以后生病了找AI还是找真人还有啊当AI聪明到能骗人我们能用AI来防范AI的欺骗吗这听起来是不是有点“以毒攻毒”
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。
这几个问题听着是不是有点意思您瞧最近这AI啊真是把我们的生活搅得是“风生水起”。
您比如说这动漫创作以前您得学素描、学动画、学分镜还得请团队对吧投入那叫一个大。现在好家伙Komiko平台就搞了个“视频到视频”功能您随便拍个小视频传上去咔嚓一下就给您变成动漫、漫画各种艺术风格的动态内容。这是什么概念咱老百姓哪怕是您家隔壁王大妈只要会拍视频可能都能一键生成个“王妈宇宙”系列动画片了。它还提供AI线稿上色、动画补帧这些工具目的就是让创意产业啊实现个“数字化转型”。哎看来以后动画片是真不缺了就是不知道这专业人士的饭碗……嗯您懂的。
说到这儿啊语音编辑也跟着沾光。Play AI开源了个叫PlayDiffusion的工具它能对音频片段进行“局部修改”替换、删除、调整厉害的是什么它能做到“不留痕迹”就跟没动过一样。这对于我们这种做播客的那可是“天大的喜讯”啊您想想我这儿要是口误了或者突然想把哪句话给换掉以前得求着剪辑师一个字一个字地抠现在呢AI一键就给您搞定还自然得跟您天生就这么说的似的。效率提高50倍这效率啊都快赶上我小时候抄作业的速度了。
不光短视频、音频长视频也来啦LumosFlow这个新框架专门解决长视频生成里的“时间连贯性不足”和“过渡不自然”的问题。它能把生成视频的“运动和外观一致性”搞得特别好最高能实现15倍的插值。就好像以前AI画画可能画个头下一个镜头脖子没了再下一个镜头就长翅膀了。现在呢它能把中间这些不自然的衔接都给填上保证您看一部AI生成的电影视觉上那叫一个丝滑。
你看这内容创作的门槛是越来越低了连RedditVideoMakerBot这种开源项目都号称能用“一条命令”简化Reddit视频的创建过程。以后每个人都是导演、制片人、剪辑师、配音员这可真是“人人都是自媒体”时代了。
但是啊AI再厉害它也是工具。咱们得聊聊这AI在医疗和安全方面的应用。
蚂蚁集团的“AI健康管家”已经服务了超过4000万用户了提供预约医生、健康评估、报告解读等智能健康服务。更了不起的是它还成功通过了信通院医疗健康行业大模型的可信评估成了首批获认可的产品。而且60多位知名医生AI智能体也入驻了。这事儿听着多方便您坐在家里不用挂号排队不用看医生脸色AI给您把病给看了。可话说回来生病了到底是找AI还是找个活生生的大夫这事儿您心里肯定得掂量掂量对吧毕竟看病这事儿除了技术还有那么一点点“人情味儿”不是
更有点意思的是AI“教父”约书亚・本吉奥这位老先生那可是AI界响当当的人物。他最近搞了个非营利组织叫LawZero砸了3000万美元要开发一个“科学家AI”系统干嘛呢专门防范未来AI智能体对人类进行“欺骗”。他说这系统将作为AI安全监控的“护栏”要跟它监管的AI智能程度相当。这不就是AI版的“黑猫警长”吗专门抓那些“坏”AI。但咱就想了如果这“黑猫警长”自己也学会了“欺骗”那可咋整这事儿就有点像郭德纲老师说的“不是所有的牛奶都叫特仑苏”也不是所有的AI都能保证它永远“乖乖的”。提高AI的透明性和可信性这事儿确实重要但道高一尺魔高一丈这“魔”要是AI自己可就真让人头疼了。
说到这“高魔”啊OpenAI最近收购Windsurf这事儿就让不少开发者心生不满了。本来用得好好的Claude模型收购一完成访问权限立马受限成本增加操作复杂关键是还用不上Claude4系列。这大厂收购小弟本以为能强强联合结果……哎一言难尽。这事儿也说明了科技巨头在市场上的动作那可真是“牵一发而动全身”啊。
但咱们老百姓也有咱们的“智慧”。你看那个cursor-free-vip的开源项目就专门针对Cursor AI的Pro功能免费给用户升级绕过高代币限制和试用请求。这不就是“你有张良计我有过墙梯”嘛。
最后啊科技博主大帅老猿就说了个挺接地气儿的事儿现在很多人啊把学来的知识重新讲述然后录视频卖课这本来没啥但非要“标榜原创”那可就有点“不地道”了。他说检验原创的唯一真理就是“举报、投诉、打官司”能让侵权内容下架或者获得赔偿你才有资格自称原创。这不就是告诉我们这年头AI都能给你生成文章了你还敢说你写的都是原创唯一的办法就是拿证据说话咱法庭上见这事儿吧也给那些想着“走捷径”的提了个醒技术再发展版权和原创性那可是严肃的事儿。
总而言之呢AI这玩意儿它确实方便确实能解决很多问题能让我们的生活更有效率。但与此同时它也给我们带来了一系列新的问题比如信任、安全、原创性还有这市场竞争的复杂性。未来我们到底是让AI成为我们的“管家”还是成为我们的“主人”这选择权可还得紧紧地攥在咱们自己手里啊。
今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#Komiko
#视频到视频
#动漫
#AI技术
#蚂蚁集团
#AI健康管家
#可信评估
#可靠性
#约书亚・本吉奥
#LawZero
#科学家AI
#欺骗
#护栏
#透明性
#PlayDiffusion
#局部修改
#音频
#LumosFlow
#长视频生成
#运动引导
#OpenAI
#Windsurf
#Claude模型
#RedditVideoMakerBot
#CursorAI
#cursor-free-vip
#大帅老猿
#原创
#举报
#RAG架构

69
podcast/2025-06-05.md Normal file
View File

@@ -0,0 +1,69 @@
# 来生小酒馆 2025/6/5
你说这AI现在都能写歌编曲了甚至还能修修改改那我们以后听的音乐这版权到底算谁的
还有啊咱们现在这些办公室的活儿五年内是不是AI就都能替我们干了那咱们到时候都去干嘛呢
最关键的是AI这玩意儿它究竟是仅仅提升我们效率的工具还是说它真的能像人一样实打实地参与到社会公益里头为我们带来更大的价值呢
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。今天啊咱们得好好聊聊最近这AI圈儿里又出了哪些“新鲜事儿”别看都是些技术更新里头可藏着不少咱们未来的“小秘密”呢。
先说说这个**Suno**吧。它最近给它那**AI音乐编辑工具**来了一次大升级现在啊用户能上传自己没完成的作品去混音还能修改歌词甚至能把曲子时长延长到八分钟哎呦喂这听着就像是给AI配了个金牌音乐制作人团队啊。但你看人家唱片公司那边可不乐意了正跟它打**版权诉讼**呢,说要搞个**YouTube Content ID**那样的技术,追踪**AI**平台上音乐的使用情况。你瞧瞧这AI想搞艺术还真得先学学怎么“守规矩”不然啊这版权大棒可不认你是AI还是真人。
接着是**OpenAI**家的**ChatGPT**,这回又升级了新功能。现在它能直接连接**Outlook**、**Teams**、**Gmail**等好几个外部服务了,这目的嘛,就是提升企业用户的协作和信息获取效率。这可好,以后老板发个邮件,**ChatGPT**直接帮你总结,开个会,它直接给你生成会议记录和待办事项。特别是**macOS**版的**ChatGPT Team**用户,还新增了一个“**录制模式**”。你说说,这不就是你的“贴身秘书”加“会议监听员”吗?省事儿是省事儿,但你想想,以后是不是连开会打瞌睡都没机会了?哈哈。
再看这个**AI**驱动的代码编辑器**Cursor**它也正式发布了1.0版本。里头啊,有个核心功能叫**BugBot**,能自动化审查**GitHub**上的**Pull Request**,还能一键修复代码。这**AI**啊,都开始帮程序员“写作业”、“改错”了,而且还增加了**Jupyter**支持和“Memories”项目管理功能。这程序员的福音啊以后是不是天天都能准点下班了我看悬
当然了,**AI**不光能赚钱、能打工,现在还能做公益了。**腾讯公益**最近就推出了一个创新性的“**问 AI**”功能,这可是首次把**大型人工智能模型**应用到公益领域。这不就是告诉大家,**AI**也能有“大爱”嘛。挺好的,让公众更方便了解公益项目,参与公益事业。
说到前沿研究,有个叫**SuperWriter-Agent**的框架,这玩意儿厉害了,它通过引入结构化的思考、规划和完善阶段,让**大型语言模型**在生成长文本的时候,连贯性和质量都大大提升。听着是不是有点像,这**AI**写东西,现在可不是“胡说八道”了,也开始讲究“章法”,像个专业作家一样了。以后咱们是不是人人都能出本书了?
说到这儿,**OpenAI**的首席执行官**山姆・奥尔特曼**就说了,现在企业啊,开始把**AI**当成基层的员工来用了。你猜怎么着去年到今年科技公司初级岗位的招聘量直接就下降了25%你说这可不是闹着玩儿的。专家预测到2030年可能3.75亿个**工作岗位**都要被**AI**取代甚至未来一到五年内咱们白领里头可能就有一半初级岗位要被“优化”掉失业率可能要飙到20%!这听着是有点儿“扎心”啊,但反过来想想,这不也催着咱们得赶紧“升级”自己嘛,对吧?不然真就得跟这**AI**“抢饭碗”了。
咱们再看看几个开源项目,这**HowToCook**啊,是专门为程序员设计的居家烹饪指南。这下可好,程序员不光能写代码,还能做饭了,这才是真正的“斜杠青年”!还有**system-design-primer**,那是学习如何设计大规模系统,准备系统设计面试的“武功秘籍”。更有意思的是**ChinaTextbook**,致力于收集中国所有中小学及大学的**PDF教材**,这真是功德无量啊。最后这个**Firecrawl**,它推出了个突破性的**/search API**,让开发者通过一次调用就能实现网页搜索和内容抓取,而且是以**AI友好**的格式输出,这大大简化了**AI**应用的数据获取流程。
最后啊,看看社媒上大伙儿都聊些啥。**Gorden Sun**分享了一套能生成“超级赞”图文效果的**AI提示词**,他还推荐大家用**GPT4o**、**Claude-3.7**和**DeepSeek-V3**这些工具。原来**AI**画图写文,还得靠“咒语”啊,有意思。还有位推主**wwwyesterday**,把现代**学术论文**比作**npm**包管理系统,他说两者都存在论文数量庞大、引用层层叠叠的现象,而且大部分价值不高,少数才是经典。这哥们儿真会玩儿,这不就是说,知识的海洋里,也有不少“垃圾信息”嘛?但他说,自己还是会刷**arxiv**寻找新观点,这叫“在垃圾堆里找金子”,挺有哲理的。
行了,今天的情报就到这里,注意隐蔽,赶紧撤离。
---
本期关键词:
#AI音乐编辑工具
#Suno
#版权诉讼
#YouTube Content ID
#ChatGPT
#Outlook
#Teams
#Gmail
#macOS
#录制模式
#BugBot
#Cursor
#Pull Request
#Jupyter
#Memories
#腾讯公益
#问 AI
#大型人工智能模型
#SuperWriter-Agent
#大型语言模型
#山姆・奥尔特曼
#AI
#工作岗位
#失业率
#HowToCook
#system-design-primer
#ChinaTextbook
#Firecrawl
#/search API
#GitHub
#Gorden Sun
#AI提示词
#GPT4o
#Claude-3.7
#DeepSeek-V3
#wwwyesterday
#学术论文
#npm
#arxiv

128
podcast/2025-06-06.md Normal file
View File

@@ -0,0 +1,128 @@
# 来生小酒馆 2025/6/6
AI生成视频技术越来越强是不是意味着人人都能成为“李安”那专业的导演和制作团队以后是不是都得“失业”了
全球AI格局正在重塑中国AI和开源浪潮全面崛起这到底是AI行业“内卷”加剧的前奏还是我们普通人弯道超车、抓住新机遇的绝佳时机
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。最近啊这人工智能的动静是越来越大感觉就像是哪吒闹海一浪高过一浪咱们普通人真是有点儿眼花缭乱也有些忐忑这未来的饭碗它还能不能端稳咯
您瞧着这不最近有个叫Pollo AI的直接给咱甩出来一个一站式的AI图像和视频生成平台。它把全球那些顶尖的模型像什么Google Veo 3、Kling啊都给整合进去了。您就动动嘴皮子或者敲几行字它就能给您把视频、图像给变出来还能保持角色风格一致。以前拍个片子那得请导演、摄影、后期花老鼻子钱了。现在可好AI一出手您输入几行字视频就出来了。这不就是把咱们这创意人的头发丝儿都给省下来了嘛而且它成本还低这是准备让大伙儿都过把导演瘾啊
说起来Luma Labs也发布了个新工具叫Modify Video那是基于他们那个Dream Machine平台用上了Ray2模型。这个更绝您想改视频里的风格想换个场景想调整人物的表情动作直接文字提示就行。以前剪个片子得掉多少头发啊现在可好动动手指头它就给您变了。这不就等于给咱们这视频制作直接按了个快进键嘛
您说这AI是不是越来越像个“磨人的小妖精”它不光能听懂你说话还能用各种语调、情感跟你聊天。这不谷歌的Gemini 2.5版本一更新据说它能原生理解和生成文本、图像、音频、视频和代码成了个真正的多模态AI系统。以后跟AI对话啊那感觉就像跟真人聊天一样它还能控制语音输出的语调和情感。以后再跟AI吵架它是不是能比你还委屈给你演一出“窦娥冤”啊
不止是工作连游戏里都开始玩AI了。咱热门手游《逆水寒》啊跟可灵AI合作搞了个“图生动图”的玩法。您在游戏里截个图或者上传张图片再输入几句描述立马就能变成个性化的动态画面还能双人互动创作呢以前咱玩游戏能炫耀个装备就不错了现在能炫耀自己做的AI动图这不就是艺术家下凡嘛
当然了别看这些应用花里胡哨背后可都是硬核科技在支撑。NVIDIA最近又发布了个大模型叫Llama-3.1-Nemotron-Nano-VL-8B-V1它是个视觉语言模型能看图、看视频、写文字而且据说在单张RTX GPU上就能跑这意思是咱家里那块打游戏的显卡说不定以后也能跑个AI大模型了。还有个叫Voyager的视频扩散框架能从一张图生成3D点云序列这是要给游戏和虚拟现实里的3D场景直接搞个“乾坤大挪移”啊
说到这儿就不得不提硅谷那边的风向标一位叫Mary Meeker的投资大佬最近发布了个AI报告。您听听这报告里怎么说的以前是OpenAI一家独大现在呢中国AI和开源模型可不是吃素的都开始“抢地盘”了这哪儿是竞争分明就是一场“AI版三国演义”嘛而且她还提到中国AI模型性能已经逼近国际一线在制造业那真是“杠杠的”。开源模型呢因为便宜灵活市场份额蹭蹭往上涨。这说明什么AI行业啊已经进入了一个多极对抗的新时代了。咱普通人这饭碗是更稳了还是得跟着AI再学两招呢
当然了别看AI搞得这么高大上其实也有很多接地气的开源项目。比如netbird它能帮助您把各种设备连接到安全的覆盖网络就像给数据修了个高铁专线安全高效。还有quarkdown那可是Markdown文本的“超能力”赋予者您写的笔记啊几下子就能变成演示文稿、文章、书省心啊。甚至有项目比如cognee它厉害了据说只用5行代码就能实现AI智能体的记忆这不就是给AI装了个“小脑袋”嘛大大降低了开发的门槛。
对了说到AI的记忆最近网上有个段子特别火说是跟AI聊天您就让它每次都叫您“哥哥”多叫几次。啥时候它不叫了那恭喜您可以开新窗口了因为它“失忆”了您说这小技巧是不是把AI拿捏得死死的最后再提个小福利Fish Audio最近也开源了他们的S1-mini语音模型个人免费部署使用您想体验AI语音合成现在成本几乎为零了。
今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#Pollo AI
#AI图像与视频生成平台
#Google Veo 3
#Kling
#文字转视频
#图像风格化
#角色一致性
#API接入
#Google Cloud
#Veo 3模型授权
#Luma Labs
#AI视频编辑工具
#Modify Video
#Dream Machine平台
#Ray2模型
#文本提示
#风格重塑
#场景替换
#角色调整
#动作流畅性
#时间一致性
#谷歌
#Gemini 2.5版本
#AI音频对话与生成技术
#多模态AI系统
#实时音频对话
#风格控制
#多语言
#文本转语音
#语调
#情感
#逆水寒
#可灵AI
#图生动图
#玩家
#动态画面
#双人互动创作
#NVIDIA
#Llama-3.1-Nemotron-Nano-VL-8B-V1
#8B参数视觉语言模型
#图像
#视频
#文本输入
#高质量文本
#图像推理能力
#OCR
#文档智能
#AWQ4bit量化技术
#RTX GPU
#Hugging Face
#开源
#多模态AI解决方案
#Voyager
#视频扩散框架
#单张图片
#摄像机路径
#世界一致的3D点云序列
#游戏
#虚拟现实
#3D场景
#RGB
#深度视频序列
#帧间固有
#3D一致性
#视觉质量
#几何精度
#Mary Meeker
#AI报告
#全球AI竞争格局
#中国AI力量
#开源浪潮
#OpenAI
#头部公司
#制造业
#产业融合能力
#开源模型
#市场份额
#多极对抗新时代
#netbird
#WireGuard®
#安全的覆盖网络
#SSO
#MFA
#访问控制
#quarkdown
#Markdown
#演示文稿
#文章
#书籍
#cognee
#5 行代码
#AI 智能体的记忆
#AI 对话
#AI的记忆机制
#新开对话窗口
#Gorden Sun
#Fish Audio
#S1-mini语音模型
#S1模型
#0.5B参数
#个人免费部署使用
#不可商用

56
podcast/2025-06-07.md Normal file
View File

@@ -0,0 +1,56 @@
# 来生小酒馆 2025/6/7
咱们的汽车以后是开着还是聊着未来我们的车机系统真的会比你老婆还懂你吗当AI连语音、视频都能“演技合成”的时候那些靠创意吃饭的艺术家们是不是真要“失业”了还有当越来越多的大佬都开始转行搞AI的时候这究竟是新的淘金热还是“全民皆兵”的内卷开端呢
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。诶你看今天这些问题啊可真有点意思。人工智能这阵风啊真是越刮越猛而且是吹到哪儿哪儿就变样。
先说这个汽车圈吧。你知道吗德国的科技巨头博世最近就跟咱们的阿里云联手了他们要把通义大模型给搬到智能座舱里头去。这是要干嘛呢就是让你的车机系统啊能跟一个3D数字人互动。以后你在车里不光能问它路况、天气还能让它给你当同声传译想想啊你一上车数字人小姐姐或者小哥哥就热情地问你“老板今天心情如何要不要来段轻松的爵士乐”然后你再问个专业问题它也能对答如流。这哪是开车啊这简直是开个移动的“智能生活空间”以后上车都不想下去了你说对吧这一下子车的定位就从交通工具变成了你的智能生活助理了。
再来看看我们平时工作效率这块儿。以前看那些上市公司的财务文件啊什么SEC文件那简直是比天书还难懂密密麻麻的数字生僻的词儿看着就头大。但现在Perplexity AI出了个新功能专门帮你搞定这些。它能让你轻松查询、理解复杂的财务文档而且人家给的答案还都附带引用有理有据。这下好了咱们普通投资者也能“读懂”财报了是不是感觉离“股神”又近了一步而且啊它还有一个“实验室”功能你随便输点提示它就能给你生成一份完整的报告、仪表盘什么的哎呀这工作流效率那真是蹭蹭地往上涨啊
还有啊程序员朋友们注意了Trae平台最近升级直接集成了谷歌的Gemini 2.5 Pro Preview模型。这模型厉害在哪儿呢它在Web开发和编码排行榜上都是排第一的。这意味着什么就是说它能显著提升你的前端开发和UI设计能力。什么代码转换啊编辑啊复杂的工作流啊统统给你优化了。更关键的是它现在免费向用户开放了。这下可好咱们在区块链和去中心化应用领域的创新说不定就能迎来一个大爆发。
说到创意和内容生成这年头AI真是无孔不入。海外那个知名的AI视频生成平台PixVerse它出了个国内版叫“拍我AI”。移动端App和网页版都上线了。这玩意儿干嘛的就是让你通过一段文字或者一张图片就能一键生成高质量、多风格的视频你说这多方便啊你发个朋友圈小视频电商做个产品介绍小红书弄个封面分分钟搞定。它可不是简单的拼贴它用了PixVerse V4.5算法,还做了本地化优化,我看啊,以后人人都能当导演了。
更绝的是ElevenLabs这家公司发布了一个新的文本转语音模型叫Eleven v3 Alpha版。他们自己都说了这可能是“地表最强”的文本转语音技术。它不光能把文字转化成自然流畅的语音还能通过音频标签精准控制情感、语速甚至还能加入音效说白了就是能实现“演技合成”。你看电影配音虚拟助手这下可都要变天了。以前我们听AI语音总觉得有点僵硬现在倒好它能跟你“飙戏”了
当然了这些AI技术的发展也离不开幕后的那些前沿研究。比如最近就有个叫“动态内存稀疏化”的新方法它能让大型语言模型在推理的时候更省资源更准确。这就像是给AI的大脑做了个“瘦身提效”手术让它在同样条件下能想得更多想得更清楚。
说到AI的落地宇树科技的CEO王兴兴最近就说了句大实话。他说他们公司搞机器人的终极目标可不是为了让机器人在那儿跳舞、格斗耍酷那些都只是训练和技术验证的手段。他们的目标是让机器人真正能在家用场景、工业场景里头实打实地干活儿。他还透露今年上半年人形机器人在商业租赁市场就已经开始赚钱了这就说明机器人实用化那是指日可待啊以后说不定咱们家里真能有个机器人帮你做饭、打扫卫生了当然前提是它别把你家给拆了啊哈哈。
还有一位大家都很熟悉的王自如老师最近也“复出”了不过他把B站的账号改成了“王自如AI”。他说要以AI测评UP主的身份开启他的“二次创业”专门做AI内容和AI应用。从测评手机到测评AI这跨度不服不行啊。他也感谢了董明珠和雷军的支持看来AI这块儿真是吸引力十足连大佬们都坐不住了。
当然啦除了这些大厂和牛人还有很多开源项目也在默默地推动AI的发展。比如有个叫note-gen的能帮你把零散的知识用AI整理成好读的笔记还有notebooks项目能让你免费微调大型语言模型。这些啊都是在背后给AI添砖加瓦的。
最后再跟大家分享个有意思的观点。有位叫Yangyi的博主他提出了一个AI产品价值公式说AI产品的价值其实就是“新体验”和“迁移成本”之间的差值。说白了就是你的AI产品得让人用起来感觉特别爽效果超出预期界面也得漂亮同时呢还得让人家从老平台过来没什么门槛数据也能轻松迁移。你看这一下子就把AI产品做好的“秘诀”给点透了。
好啦,今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#AI
#智能座舱
#数字人
#博世
#阿里云
#Perplexity
#财务文档
#Trae
#Gemini
#前端开发
#UI设计
#PixVerse
#拍我AI
#视频生成
#ElevenLabs
#文本转语音
#机器人
#实用化
#王自如
#AI测评
#即梦AI
#智能参考
#AI产品
#价值公式
#LLM
#Transformer
#动态内存稀疏化

50
podcast/2025-06-08.md Normal file
View File

@@ -0,0 +1,50 @@
# 来生小酒馆 2025/6/8
阿里最新的AI模型性能居然超越了谷歌和OpenAI的顶尖产品这让我们不禁要问这AI的速度是不是有点太快了人类的“看家本领”还能守多久
当AI不仅能帮你写作文还能化身“虚拟专家”手把手教你沟通技巧和领导力那未来的学习和成长是不是真的可以告别真人导师了
从能感知世界的“世界模型”到能与脑科学结合的“具身智能”这些高精尖的AI研究究竟会把我们带向一个更智能的乌托邦还是一个充满了未知挑战的未来
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。今天这期节目啊咱们得聊聊这几天AI圈里又出了哪些“新鲜事儿”。你说这AI啊一天一个样搞得咱们这些老铁们都得小跑儿着追。
哎,话说回来,前两天,阿里巴巴可是亮出了他们的“肌肉”!推出了一个叫**千问3向量模型**系列名字听着就挺酷炫的叫Qwen3-Embedding。这不光是名字响亮人家这性能啊在文本检索、聚类、分类这些任务上一口气提升了超过四成您品您细品这是什么概念这就好比你本来是个百米选手突然就跑进了八秒更让人“哇塞”的是它在同类模型里居然还拿到了**最佳性能**就是SOTA一下子就超越了谷歌和OpenAI那些顶尖模型。哎呀咱们中国AI这势头起来了你说是不是而且这回他们挺敞亮直接开源了九款模型还提供了API服务全球的开发者都能用上这不就是“独乐乐不如众乐乐”嘛
再看那边,搞视频剪辑的朋友们,你们的“春天”可能真的来了!一个叫**Diffusion Studio Pro**的AI视频编辑工具正式亮相。人家直接把这玩意儿比作“CapCut + Cursor”的结合体听着就高端。本地优先浏览器里就能搞定里头集成了十几种生成式AI模型那意思就是你动动嘴AI帮你把视频剪好把门槛降得那是真低。以前剪个片子得熬秃头现在呢AI来帮你磨皮、上色、加特效你只管把想法说出来它给你变出来。简直是把导演梦送到你嘴边这以后是不是人人都是“张艺谋”了
说到这儿谷歌也没闲着他们推出了一个很有意思的AI产品叫**Portraits**。这个是干嘛的呢您是不是经常觉得跟领导汇报工作时话到嘴边就打结跟同事沟通总觉得不在一个频道谷歌给你请了个AI老师还是畅销书作家同款的你可以跟这个虚拟专家实时对话学习个性化的沟通技巧和领导力。这AI都开始教咱们“情商”了这以后情商低可就不是借口了是你不努力跟AI老师学啊当然啦目前这个服务呢只对美国用户开放测试咱们想体验还得等等。但这趋势已经很明显了**AI教育**,它要往更互动、更个性化的方向去了。
还有啊,咱们国内的智源研究院,那也是“憋了个大招”。在最近的北京智源大会上,他们一口气推出了一系列叫做“悟界”的**大模型**。您听这名字什么“原生多模态世界模型Emu3”还有跟脑科学结合的“见微Brainμ”甚至还有搞具身智能的“RoboOS”和“RoboBrain”。这可不是让你看个热闹人家这是奔着解决人类大问题去的什么医疗啊、教育啊、环境监测啊都要用AI来推动。你说这AI都开始有了“世界观”还能结合脑科学以后是不是真能跟科幻电影里一样有能“思考”的机器人了想起来就有点小激动。
在社交媒体上呢,也有一些有意思的发现。有位高手啊,刘勿锋,他分享了一个用**Claude**画图的小技巧。你知道吗他能通过简单的提示词让Claude调用像iconfont、Lucied React这些第三方的图标库而不是用系统自带的emoji。你看高手就是高手你还在那让AI给你生成大胖小子人家都开始调教AI怎么用图标库了这一下子前端网页的视觉效果和风格统一性就上去了细节决定成败嘛
还有一位叫wwwgoubuli的朋友他预估啊接下来社交媒体上会出现两种热门内容一部分是深入分析**作文题目**的讨论,另一部分则是围绕**AI写作文**展开的创作比拼。这意思就是高考作文一出大家可能都在好奇AI能写出啥样然后可能还会有人晒出AI写的“满分作文”来“凡尔赛”一下。那画面想想都觉得挺有意思也挺“内卷”的哈哈
你看今天这几条情报是不是也挺发人深省的AI的进步真是太快了从文本模型到视频编辑从教育培训到前沿科研甚至连我们日常的社交媒体讨论都离不开它了。未来已来咱们可得好好适应这变化呀。
今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#AI
#模型
#开源
#性能
#千问3向量模型
#Qwen3-Embedding
#Diffusion Studio Pro
#视频编辑
#生成式AI
#Portraits
#谷歌
#虚拟专家
#沟通技巧
#领导力
#AI教育
#大模型
#智源研究院
#多模态
#具身智能
#开发者
#创作
#Claude
#作文

58
podcast/2025-06-09.md Normal file
View File

@@ -0,0 +1,58 @@
# 来生小酒馆 2025/6/9
AI越来越像人我们会不会分不清谁是真人谁是AIAI数字人即将成为电商标配那我们以后是不是都得和真人客服说拜拜了还有AI说的话到底能不能信它会不会一本正经地胡说八道我们又该如何辨别呢
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。最近啊这人工智能的动静是越来越大感觉就像它在你家隔壁买了个房准备随时搬进来跟你做邻居。今天咱们就来聊聊这AI最近又整出了哪些新鲜玩意儿以及它们可能给咱们的生活带来哪些“小惊喜”或者“小惊吓”。
这不OpenAI最近又给它的ChatGPT高级语音功能升了个级。以前吧你跟AI聊天总觉得有点儿像跟一个“棒读”播音员对话感情不够真挚。现在可好人家OpenAI说了ChatGPT的语调更自然了节奏更真实了情绪表达也更丰富了。这意思就是以后你跟AI打电话可能听着比你对象都像个人你知道吧它还加了个双向自动翻译功能就是你一句我一句不用老是按着说话键对话就能一直翻译下去。这功能你说厉害不厉害以后出门旅游、远程办公甚至学外语都省心了。不过话说回来以后AI要是太“像人”了你跟我打电话我说了句不着调的你可别以为我是AI在搞鬼啊
除了聊天咱们国产的AI也不甘示弱。面壁智能前两天就发布了MiniCPM 4.0系列模型厉害在哪儿呢它把AI模型做得特别小巧能塞进你的手机或者其他小设备里头。最牛的是速度快到飞起极限情况下能提升220倍你看这简直是给你的小破手机安了个火箭助推器啊让你平时刷个短视频、点个外卖都感觉丝滑无比。
当然了AI可不是光顾着跟咱们聊天、跑得快。在幕后也有不少“扫地僧”在默默耕耘。比如有个叫tensorzero的项目它就像个“AI教导主任”专门给AI学习过程搞了个“反馈循环”。说白了就是把咱们平时用的数据变成AI的“学习资料”让AI越来越聪明越来越懂你而且还越来越省钱。这不就是咱们打工人梦寐以求的吗用自己的数据喂自己的AI让它越来越懂你也越来越省钱这不就是咱们打工人梦寐以求的吗
还有个特有意思的项目叫HumanSystemOptimization它的目标是——“健康学习到150岁”哎呦喂这哪是学习指南啊这简直是修炼秘籍教你怎么把自己的身体系统调优到极致。你看现在连GitHub上的开源项目都开始教人“长生不老”了你说这科技发展是不是有点儿“跑偏”了
不过回归正经的像omni-tools这种自托管的网页工具集它就强调“无广告、无跟踪”而且在浏览器里就能用快速又便捷。这不就是咱们想要的“私人定制”工具嘛就像自己家后院搭了个工具棚想用啥工具直接拿没人偷窥你多踏实。
说到这里咱们不得不提一提现在大火的AI数字人。你看好多电商平台已经开始用AI数字人做主播了。黄赟就说AI数字人将成为电商的标配。你想想以后你打开直播间看到的可能都是一个完美的数字人一天24小时不打烊而且永远不会“翻白眼”。但是啊这里面也有个小插曲前段时间就听说有AI主播被“开发者模式”给玩坏了一不小心说了不该说的那技术服务商可不就得赶紧打补丁嘛这就提醒咱们AI再厉害也得有人类在后面把关不然可就成了“脱缰的野马”了。
还有个挺有意思的现象Google最近就劝开发者说别自己瞎捣鼓了你看人家Google都把饭做好了直接用我们高质量的深度研究代码库它比你那“凭感觉写代码”的版本强多了。这意思就是别老想着自己造轮子人家的轮子又圆又稳直接拿来用多好
但话说回来这AI再厉害也有它的“小脾气”也有它搞不定的时候。比如咱们杨总Yangyi就呼吁开发“睿智的AI”说白了就是能一眼看出它自己是不是在“胡说八道”识别幻觉和虚假信息。你看这AI也会胡说八道啊那咱们人类可得小心了。这就像给AI请了个纪检委专门抓它说谎这主意听着就靠谱。
最后咱们聊聊一个挺现实的问题。你猜怎么着有公司用ChatGPT替代客服结果翻车了文章里说啊用户还是更倾向于和真人客服沟通甚至因为AI客服不好用都考虑换竞争对手了。你看人啊有时候就喜欢那点人情味儿。AI再聪明、再高效也替代不了人类情感交流带来的那份温暖。这不就跟咱听相声一个道理吗AI讲得再好也少点儿郭德纲的味儿对吧所以说到底科技发展得再快也别忘了咱们服务的对象是人人情味儿那可是永远的刚需啊
今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#ChatGPT
#语音功能
#面壁智能
#MiniCPM
#端侧
#tensorzero
#LLM
#反馈循环
#HumanSystemOptimization
#人体系统调优
#omni-tools
#网页工具集
#BlackFriday-GPTs-Prompts
#免费GPTs
#RAG
#语义分块
#上下文增强检索
#AI数字人
#电商平台
#AI主播
#FLUXkontext
#汽车宣传图
#Google
#深度研究代码库
#睿智的AI
#幻觉
#虚假信息
#AI幻觉专家网络
#ChatGPT替代客服
#真人客服
#用户体验

45
podcast/2025-06-10.md Normal file
View File

@@ -0,0 +1,45 @@
# 来生小酒馆 2025/6/10
未来高质量的AI服务是不是都要变成我们钱包里的硬通货免费午餐真的要吃完了吗AI是越越好还是小而精专而深更能出奇制胜我们是不是对AI的认知还停留在越大越智能的误区里还有啊在AI这条路上究竟是闭门造车的独门秘籍更胜一筹还是集思广益的开源生态才能走得更远而当我们看到AI编程都开始遇到瓶颈那下一个颠覆性的奇点又会在哪里呢
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。哎呀最近这AI圈子里啊可真是热闹得不行信息量大到我都觉得脑细胞有点不够用了。但是呢咱们情报站的宗旨就是化繁为简用最轻松的方式给您把这最前沿的科技八卦啊不科技新闻给您说道说道。您甭管您是坐在格子间里写代码的还是在茶水间里摸鱼的都得听听这未来啊可能就藏在这些小小的变化里头呢。
首先啊咱们得说说谷歌这老大哥。你说这以前吧免费俩字儿在互联网时代那可是个香饽饽尤其是在AI这块儿。结果最近呢谷歌AI Studio说变脸就变脸从5月开始它那个Gemini 2.5 Pro就是那个特别厉害的模型免费用户啊您就别想随便用了。想用得自己掏API密钥说白了就是得花钱了。你说这事儿闹的是不是就像咱们食堂突然宣布以前免费的汤现在要收费了大家伙儿都在议论啊这恐怕是谷歌在推动Gemini商业化要把高性能模型往付费体系里头塞的信号。嗯看来这年头连AI也得内卷免费的终究还是最贵的羊毛出在羊身上的道理AI也不例外啊。
但是呢有人关门就有人敞开怀抱。咱们国产大模型这边啊阿里旗下的通义千问3那可真是扬眉吐气了一回。你知道吗它开源才一个月全球下载量就突破了1250万次在Hugging Face这些国际大平台上衍生出来的模型那叫一个多啊超过13万个直接就跃居全球第一了哎呀这可真是人逢喜事精神爽这说明什么说明咱们中国的大模型在开源这块儿那可是实打实地跟国际水平接轨了甚至在某些方面还得领先一步。这阿里啊在全球AI基础模型生态里头那是妥妥地站稳了脚跟有牌面
说到模型啊这不最近又杀出了一匹黑马叫MonkeyOCR。一听这名字就透着股灵气猴子识别呗。这哥们儿可不得了它是个轻量级的文档解析模型参数才3B才3个B啊结果呢在英文文档解析这任务上它直接就把Gemini 2.5 Pro这些大块头给超了而且处理速度还快了一大截。你说这是不是有点像一个练轻功的小师傅一招四两拨千斤把那些膀大腰圆的壮汉都给撂倒了它的秘诀啊就是一套结构-识别-关系的三元组范式。这不仅仅是提高了准确率关键是大大降低了对计算资源的需求也就是说咱们中小企业啊以后想用AI来处理文档那成本可就下来了这不就得了嘛可别小看这些小而美的AI有时候啊它们才是真正解决咱们实际问题的行家
有意思的是啊前一阵子字节的豆包和腾讯的元宝这俩AI去挑战了2025年高考新课标的数学卷。结果呢都考了68分并列第一。哎呀你说这AI现在都开始考高考了以后我们孩子是不是直接让AI替考就行了开玩笑啊千万别当真这分数啊虽然不能说逆天但也充分展现了它们在复杂推理上的潜力。这说明啊AI在细节处理、公式应用和逻辑推理上确实进步不小。
但是呢您可别光顾着看AI的高光时刻有时候啊它也会翻车。前几天有个架构师叫罗伯特·卡鲁索他就做了一个特别有意思的实验拿1977年的老古董Atari 2600游戏机上的国际象棋引擎去跟OpenAI的ChatGPT下棋。结果您猜怎么着这ChatGPT啊居然输了它下棋的时候那是频繁犯错甚至连棋子都混淆。这可真是新AI不如旧AI。这事儿就给咱们提了个醒儿AI虽厉害但它也不是万能的每个AI都有自己擅长的领域别拿它的短板去比人家的长板那不是自讨没趣嘛。
话说回来咱们再聊聊AI编程代理。有位博主叫wwwgoubuli他就说啊AI编程代理现在有点进入平台期了。虽然像Gemini 2.5 Pro和Claude这些模型还是很强但他觉得模型本身再有飞升的空间有限了。他预测啊未来会是更多产品井喷式发展重点呢在于载体媒介和像IDE/plugin这些方面的完善而不是核心模型能力的突破。这AI啊就像咱们打工人有时也得停下来喘口气想想下一步该往哪儿走。这说明啊AI的发展不仅仅是算法的进步更是工程化的落地还有咱们如何把这些超能力真正地融入到日常的工作生活里头。
说到这融入日常啊最近还有两个特别实用的小发明。一个呢是Tw93推荐的PayQrcode方案。你知道以前咱们线下付款微信支付宝得扫俩码多麻烦啊。这哥们儿就厉害了他用物理图片合并技术把微信和支付宝的收款码合到一张图上去了而且啊离线场景下也能识别识别效果还挺好。你说这不就是妥妥的懒人福音还有呢就是博主归藏介绍的在Liblib平台在线使用FLUX Kontext工具修改图片。以前用Comfyui得在本地跑特别吃资源。现在呢人家直接给你搬到线上了什么单图、双图、三图融合图片放大都给你整明白了。这不就是把复杂的专业工具变成人人都能用的傻瓜式操作了吗这AI啊有时候就得这样把高深的玩意儿变得接地气变得人人都能玩转这才能真正改变咱们的生活。
你看啊从谷歌的收费到阿里的开源大模型小而精再到AI考高考、AI下象棋还有那些让生活更便利的小工具。AI的发展啊真是你方唱罢我登场精彩得很。它既有让我们惊叹的超能力也有需要我们理性看待的局限性。但是可以肯定的是AI这股浪潮它不是来一阵风就走的它会越来越深入地融入到我们生活的方方面面。所以啊咱们得保持好奇心保持学习的热情这样才能在这股浪潮里稳稳地站住脚跟。
今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#AI模型
#GoogleAIStudio
#Gemini2.5Pro
#商业化
#阿里
#通义千问3
#大模型
#开源
#MonkeyOCR
#文档解析
#高考数学
#AI能力
#ChatGPT
#Atari2600
#AI编程代理
#检索增强生成
#PayQrcode
#Liblib
#FLUXKontext
#收款码

90
podcast/2025-06-11.md Normal file
View File

@@ -0,0 +1,90 @@
# 来生小酒馆 2025/6/11
当AI都能随心所欲地生成高质量视频甚至像专业摄影师一样运镜时我们人类的创意还值不值钱或者说我们应该如何定义“创意”本身呢假如AI可以通过“玩游戏”来提升推理能力甚至能把小模型训练得比大模型还聪明那我们传统的学习和“进化”方式是不是也该跟着变一变了而在一个AI无所不能的未来我们人类最终的核心竞争力是不是真的只剩下那些机器无法替代的“品味”、“判断力”和对“目的的理解”了呢
亲爱的V欢迎收听新一期的来生情报站我是你们的老朋友何夕2077。这几个问题啊听着有点儿“灵魂拷问”的意思但这不就是咱们“来生情报站”的传统艺能嘛今天咱们就来聊聊最近AI圈儿里又出了哪些新鲜事儿看看它又是怎么悄悄改变我们的未来。
首先,咱们说说这**豆包大模型家族**,那真是越来越像个“创意魔法棒”了。听说了吗?他们马上要发布一个**视频生成模型**。这玩意儿可不是闹着玩儿的,什么“无缝多镜头叙事”啊,“精准响应多动作”啊,甚至还能像个专业摄影师一样,帮你**随心运镜**你说这以后拍电影、拍短视频是不是直接跟AI说一句“来个史诗级开头男女主角来段感人肺腑的对手戏再配上电影大片的感觉镜头摇晃一下情绪递进”然后Duang~视频就出来了那我们这些影视民工以后是转型做AI调参师呢还是直接去学说相声反正手艺活是越来越难了你说是不是这个理儿
接着,咱们聊聊马斯克家的**Grok**。这哥们儿,现在是**X平台推荐算法**的“当家人”了。以前啊大家总觉得在X上你粉丝少内容再好也容易“蒙尘”。这下好了Grok说“我只认**高质量内容**,不看你粉丝多不多!”这无疑是给那些“小号”和新人,提供了前所未有的**曝光机会**。嗯想想都替那些默默耕耘的“小透明”们高兴啊这回好了你那些精心打磨的段子可能终于有机会被更多人看到了再也不用担心被那些“标题党”或者“蹭热度”的大V们盖过去了。
说到豆包他们的App最近也给**“一句话P图”功能**来了个大升级。你想想以后P图可能就是一句话的事儿比如“把老板P成吴彦祖”或者“把我P成今天没加班的样子”你看多方便以前你得对着Photoshop那一大堆按钮发愁现在呢**“修图小白”也能变身“修图大师”**。这简直是把专业修图师请进了手机那专业的修图师看了估计得赶紧转型去给人做AI教学去了。
再说说苹果。他们家的iOS 26系统也来了个“杀手级”功能叫**“视觉智能”**。有了它你手机屏幕上任何图片、任何信息你都能直接提问、搜索甚至自动识别事件详情加入日历。哎这功能好啊以后你老板要是给你发个截图上面密密麻麻的文字你一眼扫过去AI就能帮你总结重点甚至自动把会议时间加到日历里。完美避开“老板你刚才说啥来着”的尴尬直接提升你在职场的“蒙混过关”能力开玩笑啊是提高效率
还有个小玩意儿,叫**“沉浸式翻译”**。现在它能对**推特X视频进行实时翻译**了,即使原视频没有字幕,它也能帮你“神同步”地显示**中英双语字幕**。这下好了以后看马斯克在X上直播即使他语速飞快你也能跟上甚至能跟他对骂……呃不是是流利地交流。是不是感觉离成为国际人才又近了一步
再看前沿研究,咱们香港大学和华为诺亚方舟实验室,捣鼓出了个**FUDOKI**模型。名字听着有点儿像日本料理,但本事可不小,它在**图像生成**方面表现惊艳,听着就很高大上,像是什么武林秘籍里的招式,‘非掩码离散流匹配’,听着就感觉能打通任督二脉。
香港科技大学和快手科技的**EvoSearch进化搜索技术**也很有意思。你看达尔文的进化论不仅适用于生物界现在AI作画也开始搞“进化”了。这不就相当于以前你得开个巨型SUV才能跑长途现在一辆小排量轿车经过“进化”也能跑得又快又稳甚至更省油。这告诉我们什么别光看块头大小个子也有大智慧
还有一篇研究叫**“玩中泛化”**,说的是**多模态大型语言模型MLLMs**通过玩简单的**街机游戏**,竟然能**显著提升其跨领域的多模态推理能力**。是不是听着就想起来你小时候玩《魂斗罗》、玩《超级玛丽》原来我们玩游戏是在训练自己的推理能力啊以后家长再也不用担心孩子沉迷游戏了直接跟他说“孩子玩吧这是在为通用AI的发展做贡献
说完了技术咱们看看AI对社会的影响。理想汽车最近也开始“不务正业”了成立了**“空间机器人”**和**“穿戴机器人”**两个部门。这不就是告诉大家,他们不光卖车,还卖“未来生活”吗?以后你的车不仅仅是车,还能变成你的移动办公室,甚至能帮你穿戴机器人做饭。这要是把车卖出去了,再卖个机器人,这生意,啧啧,叫什么?叫“捆绑销售”!
更厉害的是,**俄亥俄州立大学**宣布,从今年起,将**强制所有学生接受AI培训**。你看国外大学都开始强制学生学AI了咱们国内的打工人是不是也得赶紧把AI用起来啊不然以后简历上写“熟练使用Office”可能就显得有点……呃“复古”了。
知名思考者李继刚老师也一针见血地指出当AI技术变得越发**高效强大**时,人类的**判断力、品味和对事物目的的理解**反而会变得更为**硬核**。AI再牛它也P不出你加班后那张生无可恋却又强颜欢笑的脸。它能生成一万种方案但哪个是好方案哪个是“有内味儿”的方案还得咱们人来拍板。所以啊别担心被AI取代赶紧提升你的“品味”和“判断力”吧这是你立足江湖的根本
最后,跟大家分享个小故事。有位朋友说,他远程团队的成员一开始因为担心被视为偷懒,**不敢充分使用AI**。但经过他多次分享“正确用法”后,团队逐渐“放开手脚”,结果代码的**注释、规范和质量**都显著提升,同事们也展现出更高的**自信**。你看这不是活生生的例子吗AI不是来抢你饭碗的是来帮你把饭碗里的活儿干得更漂亮顺便还能让你多一点自信少一点加班。这不就是“双赢”吗
今天的情报就到这里,注意隐蔽,赶紧撤离。
本期关键词:
#豆包大模型家族
#豆包·视频生成模型
#视频生成
#Grok
#X平台
#推荐算法
#高质量内容
#豆包App
#一句话P图
#图像编辑
#苹果
#iOS 26
#视觉智能
#智能眼
#沉浸式翻译
#实时翻译
#FUDOKI模型
#多模态生成
#通用人工智能
#EvoSearch
#进化搜索
#AI作画
#小模型
#高质量图像
#玩中泛化
#游戏学习推理
#多模态大型语言模型
#Dreamland
#虚拟世界
#具身AI智能体
#理想汽车
#空间机器人
#穿戴机器人
#智能出行生态
#俄亥俄州立大学
#AI培训
#AI流利度
#李继刚
#判断力
#品味
#人类专属技能
#小红书
#dots.llm1
#开源文本大模型
#混合专家模型
#GitHub
#newsnow
#GenAI_Agents
#Mirage虚拟人模型
#虚拟人视频
#Sam Altman
#o3产品
#Ryan ᵐᶠᵉʳ
#下一代创业者
#玩乐精神
#AI焦虑
#代码质量

View File

@@ -1,177 +0,0 @@
// src/auth.js
const SESSION_COOKIE_NAME = 'session_id_89757';
const SESSION_EXPIRATION_SECONDS = 60 * 60; // 1 hour
// Function to generate the login page HTML
function generateLoginPage(redirectUrl) {
return `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; min-height: 100vh; background-color: #f4f4f4; margin: 0; }
.login-container { background-color: #fff; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); width: 100%; max-width: 400px; text-align: center; }
h2 { color: #333; margin-bottom: 20px; }
.form-group { margin-bottom: 15px; text-align: left; }
label { display: block; margin-bottom: 5px; color: #555; }
input[type="text"], input[type="password"] { width: calc(100% - 20px); padding: 10px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
button { background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 16px; width: 100%; }
button:hover { background-color: #0056b3; }
.error-message { color: red; margin-top: 10px; }
</style>
</head>
<body>
<div class="login-container">
<h2>Login</h2>
<form id="loginForm" method="POST" action="/login">
<div class="form-group">
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
</div>
<input type="hidden" name="redirect" value="${redirectUrl}">
<button type="submit">Login</button>
<p id="errorMessage" class="error-message"></p>
</form>
<script>
const form = document.getElementById('loginForm');
const errorMessage = document.getElementById('errorMessage');
form.addEventListener('submit', async (event) => {
event.preventDefault();
const formData = new FormData(form);
const response = await fetch('/login', {
method: 'POST',
body: new URLSearchParams(formData).toString(),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
if (response.ok) {
const redirectUrl = response.headers.get('X-Redirect-Url');
if (redirectUrl && redirectUrl !== '/') {
window.location.href = redirectUrl;
} else {
window.location.href = '/getContentHtml'; // Fallback to home
}
} else {
const errorText = await response.text();
errorMessage.textContent = errorText || 'Login failed. Please try again.';
}
});
</script>
</div>
</body>
</html>
`;
}
// Function to set or renew the session cookie
function setSessionCookie(sessionId) {
const expirationDate = new Date(Date.now() + SESSION_EXPIRATION_SECONDS * 1000);
return `${SESSION_COOKIE_NAME}=${sessionId}; Path=/; Expires=${expirationDate.toUTCString()}; HttpOnly; Secure; SameSite=Lax`;
}
// Function to handle login requests
async function handleLogin(request, env) {
if (request.method === 'GET') {
const url = new URL(request.url);
const redirectUrl = url.searchParams.get('redirect') || '/getContentHtml';
return new Response(generateLoginPage(redirectUrl), {
headers: { 'Content-Type': 'text/html; charset=utf-8' },
});
} else if (request.method === 'POST') {
const formData = await request.formData();
const username = formData.get('username');
const password = formData.get('password');
const redirect = formData.get('redirect') || '/';
if (username === env.LOGIN_USERNAME && password === env.LOGIN_PASSWORD) {
const sessionId = crypto.randomUUID(); // Generate a simple session ID
// Store sessionId in KV store for persistent sessions
// await env.DATA_KV.put(`session:${sessionId}`, 'valid', { expirationTtl: SESSION_EXPIRATION_SECONDS });
const cookie = setSessionCookie(sessionId);
return new Response('Login successful', {
status: 200,
headers: {
'Set-Cookie': cookie,
'X-Redirect-Url': redirect, // Custom header for client-side redirect
},
});
} else {
return new Response('Invalid username or password', { status: 401 });
}
}
return new Response('Method Not Allowed', { status: 405 });
}
// Function to check and renew session cookie
async function isAuthenticated(request, env) {
const cookieHeader = request.headers.get('Cookie');
if (!cookieHeader) {
return { authenticated: false, cookie: null };
}
const cookies = cookieHeader.split(';').map(c => c.trim());
const sessionCookie = cookies.find(cookie => cookie.startsWith(`${SESSION_COOKIE_NAME}=`));
if (!sessionCookie) {
return { authenticated: false, cookie: null };
}
const sessionId = sessionCookie.split('=')[1];
// Validate sessionId against KV store
// const storedSession = await env.DATA_KV.get(`session:${sessionId}`);
// if (storedSession !== 'valid') {
// return { authenticated: false, cookie: null };
// }
// Renew the session cookie
const newCookie = setSessionCookie(sessionId);
return { authenticated: true, cookie: newCookie };
}
// Function to handle logout requests
async function handleLogout(request, env) {
const cookieHeader = request.headers.get('Cookie');
if (cookieHeader) {
const cookies = cookieHeader.split(';').map(c => c.trim());
const sessionCookie = cookies.find(cookie => cookie.startsWith(`${SESSION_COOKIE_NAME}=`));
if (sessionCookie) {
const sessionId = sessionCookie.split('=')[1];
// Delete session from KV store
// await env.DATA_KV.delete(`session:${sessionId}`);
}
}
const expiredDate = new Date(0); // Set expiration to a past date
const cookie = `${SESSION_COOKIE_NAME}=; Path=/; Expires=${expiredDate.toUTCString()}; HttpOnly; Secure; SameSite=Lax`;
const url = new URL(request.url);
const redirectUrl = url.searchParams.get('redirect') || '/login'; // Redirect to login page by default
return new Response('Logged out', {
status: 302,
headers: {
'Set-Cookie': cookie,
'Location': redirectUrl,
},
});
}
export {
handleLogin,
isAuthenticated,
handleLogout,
SESSION_COOKIE_NAME,
SESSION_EXPIRATION_SECONDS,
};

View File

@@ -1,567 +0,0 @@
// src/chatapi.js
/**
* Calls the Gemini Chat API (non-streaming).
*
* @param {object} env - Environment object containing GEMINI_API_URL.
* @param {string} promptText - The user's prompt.
* @param {string | null} [systemPromptText=null] - Optional system prompt text.
* @returns {Promise<string>} The generated text content.
* @throws {Error} If GEMINI_API_URL is not set, or if API call fails or returns blocked/empty content.
*/
async function callGeminiChatAPI(env, promptText, systemPromptText = null) {
if (!env.GEMINI_API_URL) {
throw new Error("GEMINI_API_URL environment variable is not set.");
}
if (!env.GEMINI_API_KEY) {
throw new Error("GEMINI_API_KEY environment variable is not set for Gemini models.");
}
const modelName = env.DEFAULT_GEMINI_MODEL;
const url = `${env.GEMINI_API_URL}/v1beta/models/${modelName}:generateContent?key=${env.GEMINI_API_KEY}`;
const payload = {
contents: [{
parts: [{ text: promptText }]
}],
};
if (systemPromptText && typeof systemPromptText === 'string' && systemPromptText.trim() !== '') {
payload.systemInstruction = {
parts: [{ text: systemPromptText }]
};
console.log("System instruction included in Chat API call.");
}
try {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
if (!response.ok) {
const errorBodyText = await response.text();
let errorData;
try {
errorData = JSON.parse(errorBodyText);
} catch (e) {
errorData = errorBodyText;
}
console.error("Gemini Chat API Error Response Body:", typeof errorData === 'object' ? JSON.stringify(errorData, null, 2) : errorData);
const message = typeof errorData === 'object' && errorData.error?.message
? errorData.error.message
: (typeof errorData === 'string' ? errorData : 'Unknown Gemini Chat API error');
throw new Error(`Gemini Chat API error (${response.status}): ${message}`);
}
const data = await response.json();
// 1. Check for prompt-level blocking first
if (data.promptFeedback && data.promptFeedback.blockReason) {
const blockReason = data.promptFeedback.blockReason;
const safetyRatings = data.promptFeedback.safetyRatings ? JSON.stringify(data.promptFeedback.safetyRatings) : 'N/A';
console.error(`Gemini Chat prompt blocked: ${blockReason}. Safety ratings: ${safetyRatings}`, JSON.stringify(data, null, 2));
throw new Error(`Gemini Chat prompt blocked: ${blockReason}. Safety ratings: ${safetyRatings}`);
}
// 2. Check candidates and their content
if (data.candidates && data.candidates.length > 0) {
const candidate = data.candidates[0];
// Check finishReason for issues other than STOP
// Common finishReasons: STOP, MAX_TOKENS, SAFETY, RECITATION, OTHER
if (candidate.finishReason && candidate.finishReason !== "STOP") {
const reason = candidate.finishReason;
const safetyRatings = candidate.safetyRatings ? JSON.stringify(candidate.safetyRatings) : 'N/A';
console.error(`Gemini Chat content generation finished with reason: ${reason}. Safety ratings: ${safetyRatings}`, JSON.stringify(data, null, 2));
if (reason === "SAFETY") {
throw new Error(`Gemini Chat content generation blocked due to safety (${reason}). Safety ratings: ${safetyRatings}`);
}
throw new Error(`Gemini Chat content generation finished due to: ${reason}. Safety ratings: ${safetyRatings}`);
}
// If finishReason is STOP, try to extract text
if (candidate.content && candidate.content.parts && candidate.content.parts.length > 0 && candidate.content.parts[0].text) {
return candidate.content.parts[0].text;
} else {
// finishReason was STOP (or not present, implying success), but no text.
console.warn("Gemini Chat API response has candidate with 'STOP' finishReason but no text content, or content structure is unexpected.", JSON.stringify(data, null, 2));
throw new Error("Gemini Chat API returned a candidate with 'STOP' finishReason but no text content.");
}
} else {
// No candidates, and no promptFeedback block reason either (handled above).
// This means the response is empty or malformed in an unexpected way.
console.warn("Gemini Chat API response format unexpected: No candidates found and no prompt block reason.", JSON.stringify(data, null, 2));
throw new Error("Gemini Chat API returned an empty or malformed response with no candidates.");
}
} catch (error) {
// Log the full error object if it's not one we constructed, or just re-throw
if (!(error instanceof Error && error.message.startsWith("Gemini Chat"))) {
console.error("Error calling Gemini Chat API (Non-streaming):", error);
}
throw error;
}
}
/**
* Calls the Gemini Chat API with streaming.
*
* @param {object} env - Environment object containing GEMINI_API_URL.
* @param {string} promptText - The user's prompt.
* @param {string | null} [systemPromptText=null] - Optional system prompt text.
* @returns {AsyncGenerator<string, void, undefined>} An async generator yielding text chunks.
* @throws {Error} If GEMINI_API_URL is not set, or if API call fails or returns blocked/empty content.
*/
async function* callGeminiChatAPIStream(env, promptText, systemPromptText = null) {
if (!env.GEMINI_API_URL) {
throw new Error("GEMINI_API_URL environment variable is not set.");
}
if (!env.GEMINI_API_KEY) {
throw new Error("GEMINI_API_KEY environment variable is not set for Gemini models.");
}
const modelName = env.DEFAULT_GEMINI_MODEL;
const url = `${env.GEMINI_API_URL}/v1beta/models/${modelName}:streamGenerateContent?key=${env.GEMINI_API_KEY}&alt=sse`;
const payload = {
contents: [{
parts: [{ text: promptText }]
}],
};
if (systemPromptText && typeof systemPromptText === 'string' && systemPromptText.trim() !== '') {
payload.systemInstruction = {
parts: [{ text: systemPromptText }]
};
console.log("System instruction included in Chat API call.");
}
let response;
try {
response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
if (!response.ok) {
const errorBodyText = await response.text();
let errorData;
try {
errorData = JSON.parse(errorBodyBody);
} catch (e) {
errorData = errorBodyText;
}
console.error("Gemini Chat API Error (Stream Initial) Response Body:", typeof errorData === 'object' ? JSON.stringify(errorData, null, 2) : errorData);
const message = typeof errorData === 'object' && errorData.error?.message
? errorData.error.message
: (typeof errorData === 'string' ? errorData : 'Unknown Gemini Chat API error');
throw new Error(`Gemini Chat API error (${response.status}): ${message}`);
}
if (!response.body) {
throw new Error("Response body is null, cannot stream.");
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = "";
let hasYieldedContent = false;
let overallFinishReason = null; // To track the final finish reason if available
let finalSafetyRatings = null;
const processJsonChunk = (jsonString) => {
if (jsonString.trim() === "") return null;
try {
return JSON.parse(jsonString);
} catch (e) {
console.warn("Failed to parse JSON chunk from stream:", jsonString, e.message);
return null; // Or throw, depending on how strictly you want to handle malformed JSON
}
};
const handleChunkLogic = (chunk) => {
if (!chunk) return false; // Not a valid chunk to process
// 1. Check for prompt-level blocking (might appear in first chunk)
if (chunk.promptFeedback && chunk.promptFeedback.blockReason) {
const blockReason = chunk.promptFeedback.blockReason;
const safetyRatings = chunk.promptFeedback.safetyRatings ? JSON.stringify(chunk.promptFeedback.safetyRatings) : 'N/A';
console.error(`Gemini Chat prompt blocked during stream: ${blockReason}. Safety ratings: ${safetyRatings}`, JSON.stringify(chunk, null, 2));
throw new Error(`Gemini Chat prompt blocked: ${blockReason}. Safety ratings: ${safetyRatings}`);
}
// 2. Check candidates
if (chunk.candidates && chunk.candidates.length > 0) {
const candidate = chunk.candidates[0];
if (candidate.finishReason) {
overallFinishReason = candidate.finishReason; // Store the latest finish reason
finalSafetyRatings = candidate.safetyRatings;
if (candidate.finishReason !== "STOP") {
const reason = candidate.finishReason;
const sr = candidate.safetyRatings ? JSON.stringify(candidate.safetyRatings) : 'N/A';
console.error(`Gemini Chat stream candidate finished with reason: ${reason}. Safety ratings: ${sr}`, JSON.stringify(chunk, null, 2));
if (reason === "SAFETY") {
throw new Error(`Gemini Chat content generation blocked due to safety (${reason}). Safety ratings: ${sr}`);
}
throw new Error(`Gemini Chat stream finished due to: ${reason}. Safety ratings: ${sr}`);
}
}
if (candidate.content && candidate.content.parts && candidate.content.parts.length > 0) {
const textPart = candidate.content.parts[0].text;
if (textPart && typeof textPart === 'string') {
hasYieldedContent = true;
return textPart; // This is the text to yield
}
}
} else if (chunk.error) { // Check for explicit error object in stream
console.error("Gemini Chat API Stream Error Chunk:", JSON.stringify(chunk.error, null, 2));
throw new Error(`Gemini Chat API stream error: ${chunk.error.message || 'Unknown error in stream'}`);
}
return null; // No text to yield from this chunk
};
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
buffer += decoder.decode(value, { stream: true });
let eventBoundary;
while ((eventBoundary = buffer.indexOf('\n\n')) !== -1 || (eventBoundary = buffer.indexOf('\n')) !== -1) {
const separatorLength = (buffer.indexOf('\n\n') === eventBoundary) ? 2 : 1;
let message = buffer.substring(0, eventBoundary);
buffer = buffer.substring(eventBoundary + separatorLength);
if (message.startsWith("data: ")) {
message = message.substring(5).trim();
} else {
message = message.trim();
}
if (message === "" || message === "[DONE]") {
continue;
}
const parsedChunk = processJsonChunk(message);
if (parsedChunk) {
const textToYield = handleChunkLogic(parsedChunk);
if (textToYield !== null) {
yield textToYield;
}
}
}
}
// Process any remaining data in the buffer (if not ending with newline(s))
if (buffer.trim()) {
let finalMessage = buffer.trim();
if (finalMessage.startsWith("data: ")) {
finalMessage = finalMessage.substring(5).trim();
}
if (finalMessage !== "" && finalMessage !== "[DONE]") {
const parsedChunk = processJsonChunk(finalMessage);
if (parsedChunk) {
const textToYield = handleChunkLogic(parsedChunk);
if (textToYield !== null) {
yield textToYield;
}
}
}
}
// After the stream has finished, check if any content was yielded and the overall outcome
if (!hasYieldedContent) {
if (overallFinishReason && overallFinishReason !== "STOP") {
const sr = finalSafetyRatings ? JSON.stringify(finalSafetyRatings) : 'N/A';
console.warn(`Gemini Chat stream ended with reason '${overallFinishReason}' and no content was yielded. Safety: ${sr}`);
throw new Error(`Gemini Chat stream completed due to ${overallFinishReason} without yielding content. Safety ratings: ${sr}`);
} else if (overallFinishReason === "STOP") {
console.warn("Gemini Chat stream finished with 'STOP' but no content was yielded.", JSON.stringify({overallFinishReason, finalSafetyRatings}, null, 2));
throw new Error("Gemini Chat stream completed with 'STOP' but yielded no content.");
} else if (!overallFinishReason) {
console.warn("Gemini Chat stream ended without yielding any content or a clear finish reason.");
throw new Error("Gemini Chat stream completed without yielding any content.");
}
}
} catch (error) {
if (!(error instanceof Error && error.message.startsWith("Gemini Chat"))) {
console.error("Error calling or streaming from Gemini Chat API:", error);
}
throw error;
}
}
/**
* Calls the OpenAI Chat API (non-streaming).
*
* @param {object} env - Environment object containing OPENAI_API_URL and OPENAI_API_KEY.
* @param {string} promptText - The user's prompt.
* @param {string | null} [systemPromptText=null] - Optional system prompt text.
* @returns {Promise<string>} The generated text content.
* @throws {Error} If OPENAI_API_URL or OPENAI_API_KEY is not set, or if API call fails.
*/
async function callOpenAIChatAPI(env, promptText, systemPromptText = null) {
if (!env.OPENAI_API_URL) {
throw new Error("OPENAI_API_URL environment variable is not set.");
}
if (!env.OPENAI_API_KEY) {
throw new Error("OPENAI_API_KEY environment variable is not set for OpenAI models.");
}
const url = `${env.OPENAI_API_URL}/v1/chat/completions`;
const messages = [];
if (systemPromptText && typeof systemPromptText === 'string' && systemPromptText.trim() !== '') {
messages.push({ role: "system", content: systemPromptText });
console.log("System instruction included in OpenAI Chat API call.");
}
messages.push({ role: "user", content: promptText });
const modelName = env.DEFAULT_OPEN_MODEL;
const payload = {
model: modelName,
messages: messages,
temperature: 1,
max_tokens: 2048,
top_p: 1,
frequency_penalty: 0,
presence_penalty: 0,
};
try {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${env.OPENAI_API_KEY}`
},
body: JSON.stringify(payload)
});
if (!response.ok) {
const errorBodyText = await response.text();
let errorData;
try {
errorData = JSON.parse(errorBodyText);
} catch (e) {
errorData = errorBodyText;
}
console.error("OpenAI Chat API Error Response Body:", typeof errorData === 'object' ? JSON.stringify(errorData, null, 2) : errorData);
const message = typeof errorData === 'object' && errorData.error?.message
? errorData.error.message
: (typeof errorData === 'string' ? errorData : 'Unknown OpenAI Chat API error');
throw new Error(`OpenAI Chat API error (${response.status}): ${message}`);
}
const data = await response.json();
if (data.choices && data.choices.length > 0 && data.choices[0].message && data.choices[0].message.content) {
return data.choices[0].message.content;
} else {
console.warn("OpenAI Chat API response format unexpected: No choices or content found.", JSON.stringify(data, null, 2));
throw new Error("OpenAI Chat API returned an empty or malformed response.");
}
} catch (error) {
if (!(error instanceof Error && error.message.startsWith("OpenAI Chat"))) {
console.error("Error calling OpenAI Chat API (Non-streaming):", error);
}
throw error;
}
}
/**
* Calls the OpenAI Chat API with streaming.
*
* @param {object} env - Environment object containing OPENAI_API_URL and OPENAI_API_KEY.
* @param {string} promptText - The user's prompt.
* @param {string | null} [systemPromptText=null] - Optional system prompt text.
* @returns {AsyncGenerator<string, void, undefined>} An async generator yielding text chunks.
* @throws {Error} If OPENAI_API_URL or OPENAI_API_KEY is not set, or if API call fails.
*/
async function* callOpenAIChatAPIStream(env, promptText, systemPromptText = null) {
if (!env.OPENAI_API_URL) {
throw new Error("OPENAI_API_URL environment variable is not set.");
}
if (!env.OPENAI_API_KEY) {
throw new Error("OPENAI_API_KEY environment variable is not set for OpenAI models.");
}
const url = `${env.OPENAI_API_URL}/v1/chat/completions`;
const messages = [];
if (systemPromptText && typeof systemPromptText === 'string' && systemPromptText.trim() !== '') {
messages.push({ role: "system", content: systemPromptText });
console.log("System instruction included in OpenAI Chat API call.");
}
messages.push({ role: "user", content: promptText });
const modelName = env.DEFAULT_OPEN_MODEL;
const payload = {
model: modelName,
messages: messages,
temperature: 1,
max_tokens: 2048,
top_p: 1,
frequency_penalty: 0,
presence_penalty: 0,
stream: true,
};
let response;
try {
response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${env.OPENAI_API_KEY}`
},
body: JSON.stringify(payload)
});
if (!response.ok) {
const errorBodyText = await response.text();
let errorData;
try {
errorData = JSON.parse(errorBodyText);
} catch (e) {
errorData = errorBodyText;
}
console.error("OpenAI Chat API Error (Stream Initial) Response Body:", typeof errorData === 'object' ? JSON.stringify(errorData, null, 2) : errorData);
const message = typeof errorData === 'object' && errorData.error?.message
? errorData.error.message
: (typeof errorData === 'string' ? errorData : 'Unknown OpenAI Chat API error');
throw new Error(`OpenAI Chat API error (${response.status}): ${message}`);
}
if (!response.body) {
throw new Error("Response body is null, cannot stream.");
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = "";
let hasYieldedContent = false;
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
buffer += decoder.decode(value, { stream: true });
// OpenAI streaming uses data: {JSON}\n\n
let eventBoundary;
while ((eventBoundary = buffer.indexOf('\n\n')) !== -1) {
let message = buffer.substring(0, eventBoundary);
buffer = buffer.substring(eventBoundary + 2); // +2 for '\n\n'
if (message.startsWith("data: ")) {
message = message.substring(5).trim();
} else {
message = message.trim();
}
if (message === "" || message === "[DONE]") {
continue;
}
try {
const parsedChunk = JSON.parse(message);
if (parsedChunk.choices && parsedChunk.choices.length > 0) {
const delta = parsedChunk.choices[0].delta;
if (delta && delta.content) {
hasYieldedContent = true;
yield delta.content;
}
} else if (parsedChunk.error) {
console.error("OpenAI Chat API Stream Error Chunk:", JSON.stringify(parsedChunk.error, null, 2));
throw new Error(`OpenAI Chat API stream error: ${parsedChunk.error.message || 'Unknown error in stream'}`);
}
} catch (e) {
console.warn("Failed to parse JSON chunk from OpenAI stream:", message, e.message);
// Continue processing, might be an incomplete chunk
}
}
}
// Process any remaining data in the buffer
if (buffer.trim()) {
let finalMessage = buffer.trim();
if (finalMessage.startsWith("data: ")) {
finalMessage = finalMessage.substring(5).trim();
}
if (finalMessage !== "" && finalMessage !== "[DONE]") {
try {
const parsedChunk = JSON.parse(finalMessage);
if (parsedChunk.choices && parsedChunk.choices.length > 0) {
const delta = parsedChunk.choices[0].delta;
if (delta && delta.content) {
hasYieldedContent = true;
yield delta.content;
}
} else if (parsedChunk.error) {
console.error("OpenAI Chat API Stream Error Chunk:", JSON.stringify(parsedChunk.error, null, 2));
throw new Error(`OpenAI Chat API stream error: ${parsedChunk.error.message || 'Unknown error in stream'}`);
}
} catch (e) {
console.warn("Failed to parse final JSON chunk from OpenAI stream:", finalMessage, e.message);
}
}
}
if (!hasYieldedContent) {
console.warn("OpenAI Chat stream finished but no content was yielded.");
throw new Error("OpenAI Chat stream completed but yielded no content.");
}
} catch (error) {
if (!(error instanceof Error && error.message.startsWith("OpenAI Chat"))) {
console.error("Error calling or streaming from OpenAI Chat API:", error);
}
throw error;
}
}
/**
* Main function to call the appropriate chat API (Gemini or OpenAI) based on model name.
* Defaults to Gemini if no specific API is indicated in the model name.
*
* @param {object} env - Environment object.
* @param {string} promptText - The user's prompt.
* @param {string | null} [systemPromptText=null] - Optional system prompt text.
* @returns {Promise<string>} The generated text content.
* @throws {Error} If API keys/URLs are not set, or if API call fails.
*/
export async function callChatAPI(env, promptText, systemPromptText = null) {
const platform = env.USE_MODEL_PLATFORM;
if (platform.startsWith("OPEN")) {
return callOpenAIChatAPI(env, promptText, systemPromptText);
} else { // Default to Gemini
return callGeminiChatAPI(env, promptText, systemPromptText);
}
}
/**
* Main function to call the appropriate chat API (Gemini or OpenAI) with streaming.
* Defaults to Gemini if no specific API is indicated in the model name.
*
* @param {object} env - Environment object.
* @param {string} promptText - The user's prompt.
* @param {string | null} [systemPromptText=null] - Optional system prompt text.
* @returns {AsyncGenerator<string, void, undefined>} An async generator yielding text chunks.
* @throws {Error} If API keys/URLs are not set, or if API call fails.
*/
export async function* callChatAPIStream(env, promptText, systemPromptText = null) {
const platform = env.USE_MODEL_PLATFORM;
if (platform.startsWith("OPEN")) {
yield* callOpenAIChatAPIStream(env, promptText, systemPromptText);
} else { // Default to Gemini
yield* callGeminiChatAPIStream(env, promptText, systemPromptText);
}
}

View File

@@ -1,91 +0,0 @@
// src/dataFetchers.js
import AibaseDataSource from './dataSources/aibase.js';
import GithubTrendingDataSource from './dataSources/github-trending.js';
import HuggingfacePapersDataSource from './dataSources/huggingface-papers.js';
import XiaohuDataSource from './dataSources/xiaohu.js';
import TwitterDataSource from './dataSources/twitter.js';
// Register data sources as arrays to support multiple sources per type
export const dataSources = {
news: { name: '新闻', sources: [AibaseDataSource, XiaohuDataSource] },
project: { name: '项目', sources: [GithubTrendingDataSource] },
paper: { name: '论文', sources: [HuggingfacePapersDataSource] },
socialMedia: { name: '社交平台', sources: [TwitterDataSource] },
// Add new data sources here as arrays, e.g.,
// newType: { name: '新类型', sources: [NewTypeDataSource1, NewTypeDataSource2] },
};
/**
* Fetches and transforms data from all data sources for a specified type.
* @param {string} sourceType - The type of data source (e.g., 'news', 'projects', 'papers').
* @param {object} env - The environment variables.
* @param {string} [foloCookie] - The Folo authentication cookie.
* @returns {Promise<Array<object>>} A promise that resolves to an array of unified data objects from all sources of that type.
*/
export async function fetchAndTransformDataForType(sourceType, env, foloCookie) {
const sources = dataSources[sourceType].sources;
if (!sources || !Array.isArray(sources)) {
console.error(`No data sources registered for type: ${sourceType}`);
return [];
}
let allUnifiedDataForType = [];
for (const dataSource of sources) {
try {
// Pass foloCookie to the fetch method of the data source
const rawData = await dataSource.fetch(env, foloCookie);
const unifiedData = dataSource.transform(rawData, sourceType);
allUnifiedDataForType = allUnifiedDataForType.concat(unifiedData);
} catch (error) {
console.error(`Error fetching or transforming data from source ${dataSource.type} for type ${sourceType}:`, error.message);
// Continue to next data source even if one fails
}
}
// Sort by published_date in descending order for each type
allUnifiedDataForType.sort((a, b) => {
const dateA = new Date(a.published_date);
const dateB = new Date(b.published_date);
return dateB.getTime() - dateA.getTime();
});
return allUnifiedDataForType;
}
/**
* Fetches and transforms data from all registered data sources across all types.
* @param {object} env - The environment variables.
* @param {string} [foloCookie] - The Folo authentication cookie.
* @returns {Promise<object>} A promise that resolves to an object containing unified data for each source type.
*/
export async function fetchAllData(env, foloCookie) {
const allUnifiedData = {};
const fetchPromises = [];
for (const sourceType in dataSources) {
if (Object.hasOwnProperty.call(dataSources, sourceType)) {
fetchPromises.push(
fetchAndTransformDataForType(sourceType, env, foloCookie).then(data => {
allUnifiedData[sourceType] = data;
})
);
}
}
await Promise.allSettled(fetchPromises); // Use allSettled to ensure all promises complete
return allUnifiedData;
}
/**
* Fetches and transforms data from all data sources for a specific category.
* @param {object} env - The environment variables.
* @param {string} category - The category to fetch data for (e.g., 'news', 'project', 'paper', 'twitter').
* @param {string} [foloCookie] - The Folo authentication cookie.
* @returns {Promise<Array<object>>} A promise that resolves to an array of unified data objects for the specified category.
*/
export async function fetchDataByCategory(env, category, foloCookie) {
if (!dataSources[category]) {
console.warn(`Attempted to fetch data for unknown category: ${category}`);
return [];
}
return await fetchAndTransformDataForType(category, env, foloCookie);
}

View File

@@ -1,139 +0,0 @@
// src/dataSources/aibase.js
import { getRandomUserAgent, sleep, isDateWithinLastDays, stripHtml, formatDateToChineseWithTime, escapeHtml} from '../helpers.js';
const NewsDataSource = {
fetch: async (env, foloCookie) => { // Add sourceType
const feedId = env.AIBASE_FEED_ID;
const fetchPages = parseInt(env.AIBASE_FETCH_PAGES || '3', 10);
const allAibaseItems = [];
const filterDays = parseInt(env.FOLO_FILTER_DAYS || '3', 10);
if (!feedId) {
console.error('AIBASE_FEED_ID is not set in environment variables.');
return {
version: "https://jsonfeed.org/version/1.1",
title: "AI Base Feeds",
home_page_url: "https://www.aibase.com/",
description: "Aggregated AI Base feeds",
language: "zh-cn",
items: []
};
}
let publishedAfter = null;
for (let i = 0; i < fetchPages; i++) {
const userAgent = getRandomUserAgent();
const headers = {
'User-Agent': userAgent,
'Content-Type': 'application/json',
'accept': 'application/json',
'accept-language': 'zh-CN,zh;q=0.9',
'baggage': 'sentry-environment=stable,sentry-release=5251fa921ef6cbb6df0ac4271c41c2b4a0ce7c50,sentry-public_key=e5bccf7428aa4e881ed5cb713fdff181,sentry-trace_id=2da50ca5ad944cb794670097d876ada8,sentry-sampled=true,sentry-sample_rand=0.06211835167903246,sentry-sample_rate=1',
'origin': 'https://app.follow.is',
'priority': 'u=1, i',
'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'x-app-name': 'Folo Web',
'x-app-version': '0.4.9',
};
// 直接使用传入的 foloCookie
if (foloCookie) {
headers['Cookie'] = foloCookie;
}
const body = {
feedId: feedId,
view: 1,
withContent: true,
};
if (publishedAfter) {
body.publishedAfter = publishedAfter;
}
try {
console.log(`Fetching AI Base data, page ${i + 1}...`);
const response = await fetch(env.FOLO_DATA_API, {
method: 'POST',
headers: headers,
body: JSON.stringify(body),
});
if (!response.ok) {
console.error(`Failed to fetch AI Base data, page ${i + 1}: ${response.statusText}`);
break;
}
const data = await response.json();
if (data && data.data && data.data.length > 0) {
const filteredItems = data.data.filter(entry => isDateWithinLastDays(entry.entries.publishedAt, filterDays));
allAibaseItems.push(...filteredItems.map(entry => ({
id: entry.entries.id,
url: entry.entries.url,
title: entry.entries.title,
content_html: entry.entries.content,
date_published: entry.entries.publishedAt,
authors: [{ name: entry.entries.author }],
source: `aibase`,
})));
publishedAfter = data.data[data.data.length - 1].entries.publishedAt;
} else {
console.log(`No more data for AI Base, page ${i + 1}.`);
break;
}
} catch (error) {
console.error(`Error fetching AI Base data, page ${i + 1}:`, error);
break;
}
// Random wait time between 0 and 5 seconds to avoid rate limiting
await sleep(Math.random() * 5000);
}
return {
version: "https://jsonfeed.org/version/1.1",
title: "AI Base Feeds",
home_page_url: "https://www.aibase.com/",
description: "Aggregated AI Base feeds",
language: "zh-cn",
items: allAibaseItems
};
},
transform: (rawData, sourceType) => { // Add sourceType
const unifiedNews = [];
if (rawData && Array.isArray(rawData.items)) {
rawData.items.forEach((item) => {
unifiedNews.push({
id: item.id,
type: sourceType, // Use sourceType here
url: item.url,
title: item.title,
description: stripHtml(item.content_html || ""),
published_date: item.date_published,
authors: item.authors ? item.authors.map(a => a.name).join(', ') : 'Unknown',
source: item.source || 'AI Base',
details: {
content_html: item.content_html || ""
}
});
});
}
return unifiedNews;
},
generateHtml: (item) => {
return `
<strong>${escapeHtml(item.title)}</strong><br>
<small>来源: ${escapeHtml(item.source || '未知')} | 发布日期: ${formatDateToChineseWithTime(item.published_date)}</small>
<div class="content-html">${item.details.content_html || '无内容。'}</div>
<a href="${escapeHtml(item.url)}" target="_blank" rel="noopener noreferrer">阅读更多</a>
`;
}
};
export default NewsDataSource;

View File

@@ -1,113 +0,0 @@
// src/dataSources/projects.js
import { fetchData, getISODate, removeMarkdownCodeBlock, formatDateToChineseWithTime, escapeHtml} from '../helpers.js';
import { callChatAPI } from '../chatapi.js';
const ProjectsDataSource = {
fetch: async (env) => {
console.log(`Fetching projects from: ${env.PROJECTS_API_URL}`);
let projects;
try {
projects = await fetchData(env.PROJECTS_API_URL);
} catch (error) {
console.error("Error fetching projects data:", error.message);
return { error: "Failed to fetch projects data", details: error.message, items: [] };
}
if (!Array.isArray(projects)) {
console.error("Projects data is not an array:", projects);
return { error: "Invalid projects data format", received: projects, items: [] };
}
if (projects.length === 0) {
console.log("No projects fetched from API.");
return { items: [] };
}
if (!env.OPEN_TRANSLATE === "true") {
console.warn("Skipping paper translations.");
return projects.map(p => ({ ...p, description_zh: p.description || "" }));
}
const descriptionsToTranslate = projects
.map(p => p.description || "")
.filter(desc => typeof desc === 'string');
const nonEmptyDescriptions = descriptionsToTranslate.filter(d => d.trim() !== "");
if (nonEmptyDescriptions.length === 0) {
console.log("No non-empty project descriptions to translate.");
return projects.map(p => ({ ...p, description_zh: p.description || "" }));
}
const promptText = `Translate the following English project descriptions to Chinese.
Provide the translations as a JSON array of strings, in the exact same order as the input.
Each string in the output array must correspond to the string at the same index in the input array.
If an input description is an empty string, the corresponding translated string in the output array should also be an empty string.
Input Descriptions (JSON array of strings):
${JSON.stringify(descriptionsToTranslate)}
Respond ONLY with the JSON array of Chinese translations. Do not include any other text or explanations.
JSON Array of Chinese Translations:`;
let translatedTexts = [];
try {
console.log(`Requesting translation for ${descriptionsToTranslate.length} project descriptions.`);
const chatResponse = await callChatAPI(env, promptText);
const parsedTranslations = JSON.parse(removeMarkdownCodeBlock(chatResponse)); // Assuming direct JSON array response
if (parsedTranslations && Array.isArray(parsedTranslations) && parsedTranslations.length === descriptionsToTranslate.length) {
translatedTexts = parsedTranslations;
} else {
console.warn(`Translation count mismatch or parsing error for project descriptions. Expected ${descriptionsToTranslate.length}, received ${parsedTranslations ? parsedTranslations.length : 'null'}. Falling back.`);
translatedTexts = descriptionsToTranslate.map(() => null);
}
} catch (translationError) {
console.error("Failed to translate project descriptions in batch:", translationError.message);
translatedTexts = descriptionsToTranslate.map(() => null);
}
return projects.map((project, index) => {
const translated = translatedTexts[index];
return {
...project,
description_zh: (typeof translated === 'string') ? translated : (project.description || "")
};
});
},
transform: (projectsData, sourceType) => {
const unifiedProjects = [];
const now = getISODate();
if (Array.isArray(projectsData)) {
projectsData.forEach((project, index) => {
unifiedProjects.push({
id: index + 1, // Use project.url as ID if available
type: sourceType,
url: project.url,
title: project.name,
description: project.description_zh || project.description || "",
published_date: now, // Projects don't have a published date, use current date
authors: project.owner ? [project.owner] : [],
source: "GitHub Trending",
details: {
owner: project.owner,
name: project.name,
language: project.language,
languageColor: project.languageColor,
totalStars: project.totalStars,
forks: project.forks,
starsToday: project.starsToday,
builtBy: project.builtBy || []
}
});
});
}
return unifiedProjects;
},
generateHtml: (item) => {
return `
<strong>${escapeHtml(item.title)}</strong> (所有者: ${escapeHtml(item.details.owner)})<br>
<small>星标: ${escapeHtml(item.details.totalStars)} (今日: ${escapeHtml(item.details.starsToday)}) | 语言: ${escapeHtml(item.details.language || 'N/A')}</small>
描述: ${escapeHtml(item.description) || 'N/A'}<br>
<a href="${escapeHtml(item.url)}" target="_blank" rel="noopener noreferrer">在 GitHub 上查看</a>
`;
}
};
export default ProjectsDataSource;

View File

@@ -1,204 +0,0 @@
// src/dataSources/huggingface-papers.js
import { getRandomUserAgent, sleep, isDateWithinLastDays, stripHtml, removeMarkdownCodeBlock, formatDateToChineseWithTime, escapeHtml} from '../helpers.js';
import { callChatAPI } from '../chatapi.js';
const PapersDataSource = {
fetch: async (env, foloCookie) => {
const feedId = env.HGPAPERS_FEED_ID;
const fetchPages = parseInt(env.HGPAPERS_FETCH_PAGES || '3', 10);
const allPapersItems = [];
const filterDays = parseInt(env.FOLO_FILTER_DAYS || '3', 10);
if (!feedId) {
console.error('HGPAPERS_FEED_ID is not set in environment variables.');
return {
version: "https://jsonfeed.org/version/1.1",
title: "Huggingface Daily Papers Feeds",
home_page_url: "https://huggingface.co/papers",
description: "Aggregated Huggingface Daily Papers feeds",
language: "zh-cn",
items: []
};
}
let publishedAfter = null;
for (let i = 0; i < fetchPages; i++) {
const userAgent = getRandomUserAgent();
const headers = {
'User-Agent': userAgent,
'Content-Type': 'application/json',
'accept': 'application/json',
'accept-language': 'zh-CN,zh;q=0.9',
'baggage': 'sentry-environment=stable,sentry-release=5251fa921ef6cbb6df0ac4271c41c2b4a0ce7c50,sentry-public_key=e5bccf7428aa4e881ed5cb713fdff181,sentry-trace_id=2da50ca5ad944cb794670097d876ada8,sentry-sampled=true,sentry-sample_rand=0.06211835167903246,sentry-sample_rate=1',
'origin': 'https://app.follow.is',
'priority': 'u=1, i',
'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'x-app-name': 'Folo Web',
'x-app-version': '0.4.9',
};
// 直接使用传入的 foloCookie
if (foloCookie) {
headers['Cookie'] = foloCookie;
}
const body = {
feedId: feedId,
view: 1,
withContent: true,
};
if (publishedAfter) {
body.publishedAfter = publishedAfter;
}
try {
console.log(`Fetching Huggingface Papers data, page ${i + 1}...`);
const response = await fetch(env.FOLO_DATA_API, {
method: 'POST',
headers: headers,
body: JSON.stringify(body),
});
if (!response.ok) {
console.error(`Failed to fetch Huggingface Papers data, page ${i + 1}: ${response.statusText}`);
break;
}
const data = await response.json();
if (data && data.data && data.data.length > 0) {
const filteredItems = data.data.filter(entry => isDateWithinLastDays(entry.entries.publishedAt, filterDays));
allPapersItems.push(...filteredItems.map(entry => ({
id: entry.entries.id,
url: entry.entries.url,
title: entry.entries.title,
content_html: entry.entries.content,
date_published: entry.entries.publishedAt,
authors: [{ name: entry.entries.author }],
source: `huggingface-papers`,
})));
publishedAfter = data.data[data.data.length - 1].entries.publishedAt;
} else {
console.log(`No more data for Huggingface Papers, page ${i + 1}.`);
break;
}
} catch (error) {
console.error(`Error fetching Huggingface Papers data, page ${i + 1}:`, error);
break;
}
// Random wait time between 0 and 5 seconds to avoid rate limiting
await sleep(Math.random() * 5000);
}
const papersData = {
version: "https://jsonfeed.org/version/1.1",
title: "Huggingface Daily Papers Feeds",
home_page_url: "https://huggingface.co/papers",
description: "Aggregated Huggingface Daily Papers feeds",
language: "zh-cn",
items: allPapersItems
};
if (papersData.items.length === 0) {
console.log("No hgpapers found for today or after filtering.");
return papersData;
}
if (!env.OPEN_TRANSLATE === "true") {
console.warn("Skipping hgpapers translations.");
papersData.items = papersData.items.map(item => ({
...item,
title_zh: item.title || "",
content_html_zh: item.content_html || ""
}));
return papersData;
}
const itemsToTranslate = papersData.items.map((item, index) => ({
id: index,
original_title: item.title || ""
}));
const hasContentToTranslate = itemsToTranslate.some(item => item.original_title.trim() !== "");
if (!hasContentToTranslate) {
console.log("No non-empty hgpapers titles to translate for today's papers.");
papersData.items = papersData.items.map(item => ({ ...item, title_zh: item.title || "", content_html_zh: item.content_html || "" }));
return papersData;
}
const promptText = `You will be given a JSON array of paper data objects. Each object has an "id" and "original_title".
Translate "original_title" into Chinese.
Return a JSON array of objects. Each output object MUST have:
- "id": The same id from the input.
- "title_zh": Chinese translation of "original_title". Empty if original is empty.
Input: ${JSON.stringify(itemsToTranslate)}
Respond ONLY with the JSON array.`;
let translatedItemsMap = new Map();
try {
console.log(`Requesting translation for ${itemsToTranslate.length} hgpapers titles for today.`);
const chatResponse = await callChatAPI(env, promptText);
const parsedTranslations = JSON.parse(removeMarkdownCodeBlock(chatResponse)); // Assuming direct JSON array response
if (parsedTranslations) {
parsedTranslations.forEach(translatedItem => {
if (translatedItem && typeof translatedItem.id === 'number' &&
typeof translatedItem.title_zh === 'string') {
translatedItemsMap.set(translatedItem.id, translatedItem);
}
});
}
} catch (translationError) {
console.error("Failed to translate hgpapers titles in batch:", translationError.message);
}
papersData.items = papersData.items.map((originalItem, index) => {
const translatedData = translatedItemsMap.get(index);
return {
...originalItem,
title_zh: translatedData ? translatedData.title_zh : (originalItem.title || "")
};
});
return papersData;
},
transform: (papersData,sourceType) => {
const unifiedPapers = [];
if (papersData && Array.isArray(papersData.items)) {
papersData.items.forEach((item, index) => {
unifiedPapers.push({
id: item.id, // Use item.id from Folo data
type: sourceType,
url: item.url,
title: item.title_zh || item.title,
description: stripHtml(item.content_html || ""),
published_date: item.date_published,
authors: typeof item.authors === 'string' ? item.authors.split(',').map(s => s.trim()) : (item.authors ? item.authors.map(a => a.name) : []),
source: item.source || "Huggingface Papers", // Use existing source or default
details: {
content_html: item.content_html || ""
}
});
});
}
return unifiedPapers;
},
generateHtml: (item) => {
return `
<strong>${escapeHtml(item.title)}</strong><br>
<small>来源: ${escapeHtml(item.source || '未知')} | 发布日期: ${formatDateToChineseWithTime(item.published_date)}</small>
<div class="content-html">
${item.details.content_html || '无内容。'}<hr>
</div>
<a href="${escapeHtml(item.url)}" target="_blank" rel="noopener noreferrer">在 ArXiv/来源 阅读</a>
`;
}
};
export default PapersDataSource;

View File

@@ -1,138 +0,0 @@
import { getRandomUserAgent, sleep, isDateWithinLastDays, stripHtml, formatDateToChineseWithTime, escapeHtml} from '../helpers';
const TwitterDataSource = {
async fetch(env, foloCookie) {
const listId = env.TWITTER_LIST_ID;
const fetchPages = parseInt(env.TWITTER_FETCH_PAGES || '3', 10);
const allTwitterItems = [];
const filterDays = parseInt(env.FOLO_FILTER_DAYS || '3', 10);
if (!listId) {
console.error('TWITTER_LIST_ID is not set in environment variables.');
return {
version: "https://jsonfeed.org/version/1.1",
title: "Twitter Feeds",
home_page_url: "https://x.com/",
description: "Aggregated Twitter feeds from various users",
language: "zh-cn",
items: []
};
}
let publishedAfter = null;
for (let i = 0; i < fetchPages; i++) {
const userAgent = getRandomUserAgent();
const headers = {
'User-Agent': userAgent,
'Content-Type': 'application/json',
'accept': 'application/json',
'accept-language': 'zh-CN,zh;q=0.9',
'baggage': 'sentry-environment=stable,sentry-release=5251fa921ef6cbb6df0ac4271c41c2b4a0ce7c50,sentry-public_key=e5bccf7428aa4e881ed5cb713fdff181,sentry-trace_id=2da50ca5ad944cb794670097d876ada8,sentry-sampled=true,sentry-sample_rand=0.06211835167903246,sentry-sample_rate=1',
'origin': 'https://app.follow.is',
'priority': 'u=1, i',
'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'x-app-name': 'Folo Web',
'x-app-version': '0.4.9',
};
// 直接使用传入的 foloCookie
if (foloCookie) {
headers['Cookie'] = foloCookie;
}
const body = {
listId: listId,
view: 1,
withContent: true,
};
if (publishedAfter) {
body.publishedAfter = publishedAfter;
}
try {
console.log(`Fetching Twitter data, page ${i + 1}...`);
const response = await fetch(env.FOLO_DATA_API, {
method: 'POST',
headers: headers,
body: JSON.stringify(body),
});
if (!response.ok) {
console.error(`Failed to fetch Twitter data, page ${i + 1}: ${response.statusText}`);
break;
}
const data = await response.json();
if (data && data.data && data.data.length > 0) {
const filteredItems = data.data.filter(entry => isDateWithinLastDays(entry.entries.publishedAt, filterDays));
allTwitterItems.push(...filteredItems.map(entry => ({
id: entry.entries.id,
url: entry.entries.url,
title: entry.entries.title,
content_html: entry.entries.content,
date_published: entry.entries.publishedAt,
authors: [{ name: entry.entries.author }],
source: entry.feeds.title && entry.feeds.title.includes('即刻圈子') ? `${entry.feeds.title} - ${entry.entries.author}` : `twitter-${entry.entries.author}`,
})));
publishedAfter = data.data[data.data.length - 1].entries.publishedAt;
} else {
console.log(`No more data for Twitter, page ${i + 1}.`);
break;
}
} catch (error) {
console.error(`Error fetching Twitter data, page ${i + 1}:`, error);
break;
}
// Random wait time between 0 and 5 seconds to avoid rate limiting
await sleep(Math.random() * 5000);
}
return {
version: "https://jsonfeed.org/version/1.1",
title: "Twitter Feeds",
home_page_url: "https://x.com/",
description: "Aggregated Twitter feeds from various users",
language: "zh-cn",
items: allTwitterItems
};
},
transform(rawData, sourceType) {
if (!rawData || !rawData.items) {
return [];
}
return rawData.items.map(item => ({
id: item.id,
type: sourceType,
url: item.url,
title: item.title,
description: stripHtml(item.content_html || ""),
published_date: item.date_published,
authors: item.authors ? item.authors.map(author => author.name).join(', ') : 'Unknown',
source: item.source || 'twitter', // Use existing source or default
details: {
content_html: item.content_html || ""
}
}));
},
generateHtml: (item) => {
return `
<strong>${escapeHtml(item.title)}</strong><br>
<small>来源: ${escapeHtml(item.source || '未知')} | 发布日期: ${formatDateToChineseWithTime(item.published_date)}</small>
<div class="content-html">
${item.details.content_html || '无内容。'}
</div>
<a href="${escapeHtml(item.url)}" target="_blank" rel="noopener noreferrer">查看推文</a>
`;
}
};
export default TwitterDataSource;

View File

@@ -1,137 +0,0 @@
import { getRandomUserAgent, sleep, isDateWithinLastDays, stripHtml, formatDateToChineseWithTime, escapeHtml } from '../helpers.js';
const XiaohuDataSource = {
fetch: async (env, foloCookie) => {
const feedId = env.XIAOHU_FEED_ID;
const fetchPages = parseInt(env.XIAOHU_FETCH_PAGES || '3', 10);
const allXiaohuItems = [];
const filterDays = parseInt(env.FOLO_FILTER_DAYS || '3', 10);
if (!feedId) {
console.error('XIAOHU_FEED_ID is not set in environment variables.');
return {
version: "https://jsonfeed.org/version/1.1",
title: "Xiaohu.AI Daily Feeds",
home_page_url: "https://www.xiaohu.ai",
description: "Aggregated Xiaohu.AI Daily feeds",
language: "zh-cn",
items: []
};
}
let publishedAfter = null;
for (let i = 0; i < fetchPages; i++) {
const userAgent = getRandomUserAgent();
const headers = {
'User-Agent': userAgent,
'Content-Type': 'application/json',
'accept': 'application/json',
'accept-language': 'zh-CN,zh;q=0.9',
'baggage': 'sentry-environment=stable,sentry-release=5251fa921ef6cbb6df0ac4271c41c2b4a0ce7c50,sentry-public_key=e5bccf7428aa4e881ed5cb713fdff181,sentry-trace_id=2da50ca5ad944cb794670097d876ada8,sentry-sampled=true,sentry-sample_rand=0.06211835167903246,sentry-sample_rate=1',
'origin': 'https://app.follow.is',
'priority': 'u=1, i',
'sec-ch-ua': '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'x-app-name': 'Folo Web',
'x-app-version': '0.4.9',
};
// 直接使用传入的 foloCookie
if (foloCookie) {
headers['Cookie'] = foloCookie;
}
const body = {
feedId: feedId,
view: 1,
withContent: true,
};
if (publishedAfter) {
body.publishedAfter = publishedAfter;
}
try {
console.log(`Fetching Xiaohu.AI data, page ${i + 1}...`);
const response = await fetch(env.FOLO_DATA_API, {
method: 'POST',
headers: headers,
body: JSON.stringify(body),
});
if (!response.ok) {
console.error(`Failed to fetch Xiaohu.AI data, page ${i + 1}: ${response.statusText}`);
break;
}
const data = await response.json();
if (data && data.data && data.data.length > 0) {
const filteredItems = data.data.filter(entry => isDateWithinLastDays(entry.entries.publishedAt, filterDays));
allXiaohuItems.push(...filteredItems.map(entry => ({
id: entry.entries.id,
url: entry.entries.url,
title: entry.entries.title,
content_html: entry.entries.content,
date_published: entry.entries.publishedAt,
authors: [{ name: entry.entries.author }],
source: `xiaohu`,
})));
publishedAfter = data.data[data.data.length - 1].entries.publishedAt;
} else {
console.log(`No more data for Xiaohu.AI, page ${i + 1}.`);
break;
}
} catch (error) {
console.error(`Error fetching Xiaohu.AI data, page ${i + 1}:`, error);
break;
}
// Random wait time between 0 and 5 seconds to avoid rate limiting
await sleep(Math.random() * 5000);
}
return {
version: "https://jsonfeed.org/version/1.1",
title: "Xiaohu.AI Daily Feeds",
home_page_url: "https://www.xiaohu.ai",
description: "Aggregated Xiaohu.AI Daily feeds",
language: "zh-cn",
items: allXiaohuItems
};
},
transform: (rawData, sourceType) => {
const unifiedNews = [];
if (rawData && Array.isArray(rawData.items)) {
rawData.items.forEach((item) => {
unifiedNews.push({
id: item.id,
type: sourceType,
url: item.url,
title: item.title,
description: stripHtml(item.content_html || ""),
published_date: item.date_published,
authors: item.authors ? item.authors.map(a => a.name).join(', ') : 'Unknown',
source: item.source || 'Xiaohu.AI',
details: {
content_html: item.content_html || ""
}
});
});
}
return unifiedNews;
},
generateHtml: (item) => {
return `
<strong>${escapeHtml(item.title)}</strong><br>
<small>来源: ${escapeHtml(item.source || '未知')} | 发布日期: ${formatDateToChineseWithTime(item.published_date)}</small>
<div class="content-html">${item.details.content_html || '无内容。'}</div>
<a href="${escapeHtml(item.url)}" target="_blank" rel="noopener noreferrer">阅读更多</a>
`;
}
};
export default XiaohuDataSource;

View File

@@ -1,90 +0,0 @@
// src/github.js
/**
* Generic wrapper for calling the GitHub API.
*/
export async function callGitHubApi(env, path, method = 'GET', body = null) {
const GITHUB_TOKEN = env.GITHUB_TOKEN;
const GITHUB_REPO_OWNER = env.GITHUB_REPO_OWNER;
const GITHUB_REPO_NAME = env.GITHUB_REPO_NAME;
if (!GITHUB_TOKEN || !GITHUB_REPO_OWNER || !GITHUB_REPO_NAME) {
console.error("GitHub environment variables (GITHUB_TOKEN, GITHUB_REPO_OWNER, GITHUB_REPO_NAME) are not configured.");
throw new Error("GitHub API configuration is missing in environment variables.");
}
const url = `https://api.github.com/repos/${GITHUB_REPO_OWNER}/${GITHUB_REPO_NAME}${path}`;
const headers = {
'Authorization': `Bearer ${GITHUB_TOKEN}`,
'Accept': 'application/vnd.github.v3+json',
'User-Agent': 'Cloudflare-Worker-ContentBot/1.0'
};
if (method !== 'GET' && method !== 'DELETE' && body) {
headers['Content-Type'] = 'application/json';
}
const response = await fetch(url, {
method: method,
headers: headers,
body: body ? JSON.stringify(body) : null
});
if (!response.ok) {
const errorText = await response.text();
let errorJsonMessage = errorText;
try {
const errorJson = JSON.parse(errorText);
if (errorJson && errorJson.message) {
errorJsonMessage = errorJson.message;
if (errorJson.errors) {
errorJsonMessage += ` Details: ${JSON.stringify(errorJson.errors)}`;
}
}
} catch (e) { /* Ignore */ }
console.error(`GitHub API Error: ${response.status} ${response.statusText} for ${method} ${url}. Message: ${errorJsonMessage}`);
throw new Error(`GitHub API request to ${path} failed: ${response.status} - ${errorJsonMessage}`);
}
if (response.status === 204 || response.headers.get("content-length") === "0") {
return null;
}
return response.json();
}
/**
* Gets the SHA of a file from GitHub.
*/
export async function getGitHubFileSha(env, filePath) {
const GITHUB_BRANCH = env.GITHUB_BRANCH || 'main';
try {
const data = await callGitHubApi(env, `/contents/${filePath}?ref=${GITHUB_BRANCH}`);
return data && data.sha ? data.sha : null;
} catch (error) {
if (error.message.includes("404") || error.message.toLowerCase().includes("not found")) {
console.log(`File not found on GitHub: ${filePath} (branch: ${GITHUB_BRANCH})`);
return null;
}
console.error(`Error getting SHA for ${filePath}:`, error);
throw error;
}
}
/**
* Creates a new file or updates an existing one on GitHub.
*/
export async function createOrUpdateGitHubFile(env, filePath, content, commitMessage, existingSha = null) {
const GITHUB_BRANCH = env.GITHUB_BRANCH || 'main';
const base64Content = btoa(String.fromCharCode(...new TextEncoder().encode(content)));
const payload = {
message: commitMessage,
content: base64Content,
branch: GITHUB_BRANCH
};
if (existingSha) {
payload.sha = existingSha;
}
return callGitHubApi(env, `/contents/${filePath}`, 'PUT', payload);
}

View File

@@ -1,47 +0,0 @@
// src/handlers/commitToGitHub.js
import { getISODate, formatMarkdownText } from '../helpers.js';
import { getGitHubFileSha, createOrUpdateGitHubFile } from '../github.js';
export async function handleCommitToGitHub(request, env) {
if (request.method !== 'POST') {
return new Response(JSON.stringify({ status: 'error', message: 'Method Not Allowed' }), { status: 405, headers: { 'Content-Type': 'application/json' } });
}
try {
const formData = await request.formData();
const dateStr = formData.get('date') || getISODate();
const dailyMd = formData.get('daily_summary_markdown');
const podcastMd = formData.get('podcast_script_markdown');
const filesToCommit = [];
if (dailyMd) {
filesToCommit.push({ path: `daily/${dateStr}.md`, content: formatMarkdownText(dailyMd), description: "Daily Summary File" });
}
if (podcastMd) {
filesToCommit.push({ path: `podcast/${dateStr}.md`, content: podcastMd, description: "Podcast Script File" });
}
if (filesToCommit.length === 0) {
throw new Error("No markdown content provided for GitHub commit.");
}
const results = [];
for (const file of filesToCommit) {
try {
const existingSha = await getGitHubFileSha(env, file.path);
const commitMessage = `${existingSha ? 'Update' : 'Create'} ${file.description.toLowerCase()} for ${dateStr}`;
await createOrUpdateGitHubFile(env, file.path, file.content, commitMessage, existingSha);
results.push({ file: file.path, status: 'Success', message: `Successfully ${existingSha ? 'updated' : 'created'}.` });
console.log(`GitHub commit success for ${file.path}`);
} catch (err) {
console.error(`Failed to commit ${file.path} to GitHub:`, err);
results.push({ file: file.path, status: 'Failed', message: err.message });
}
}
return new Response(JSON.stringify({ status: 'success', date: dateStr, results: results }), { headers: { 'Content-Type': 'application/json; charset=utf-8' } });
} catch (error) {
console.error("Error in /commitToGitHub:", error);
return new Response(JSON.stringify({ status: 'error', message: error.message }), { status: 500, headers: { 'Content-Type': 'application/json; charset=utf-8' } });
}
}

View File

@@ -1,294 +0,0 @@
// src/handlers/genAIContent.js
import { getISODate, escapeHtml, stripHtml, removeMarkdownCodeBlock, formatDateToChinese, convertEnglishQuotesToChinese} from '../helpers.js';
import { getFromKV } from '../kv.js';
import { callChatAPIStream } from '../chatapi.js';
import { generateGenAiPageHtml } from '../htmlGenerators.js';
import { dataSources } from '../dataFetchers.js'; // Import dataSources
import { getSystemPromptSummarizationStepOne } from '../prompt/summarizationPromptStepOne.js';
import { getSystemPromptSummarizationStepTwo } from '../prompt/summarizationPromptStepTwo.js';
import { getSystemPromptPodcastFormatting } from '../prompt/podcastFormattingPrompt.js';
import { getSystemPromptDailyAnalysis } from '../prompt/dailyAnalysisPrompt.js'; // Import new prompt
export async function handleGenAIPodcastScript(request, env) {
let dateStr;
let selectedItemsParams = [];
let formData;
let outputOfCall1 = null; // This will be the summarized content from Call 1
let userPromptPodcastFormattingData = null;
let fullPromptForCall2_System = null;
let fullPromptForCall2_User = null;
let finalAiResponse = null;
try {
formData = await request.formData();
dateStr = formData.get('date');
selectedItemsParams = formData.getAll('selectedItems');
outputOfCall1 = formData.get('summarizedContent'); // Get summarized content from form data
if (!outputOfCall1) {
const errorHtml = generateGenAiPageHtml('生成AI播客脚本出错', '<p><strong>Summarized content is missing.</strong> Please go back and generate AI content first.</p>', dateStr, true, null);
return new Response(errorHtml, { status: 400, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
userPromptPodcastFormattingData = outputOfCall1;
fullPromptForCall2_System = getSystemPromptPodcastFormatting(env);
fullPromptForCall2_User = userPromptPodcastFormattingData;
console.log("Call 2 to Chat (Podcast Formatting): User prompt length:", userPromptPodcastFormattingData.length);
try {
let podcastChunks = [];
for await (const chunk of callChatAPIStream(env, userPromptPodcastFormattingData, fullPromptForCall2_System)) {
podcastChunks.push(chunk);
}
finalAiResponse = podcastChunks.join('');
if (!finalAiResponse || finalAiResponse.trim() === "") throw new Error("Chat podcast formatting call returned empty content.");
finalAiResponse = removeMarkdownCodeBlock(finalAiResponse); // Clean the output
console.log("Call 2 (Podcast Formatting) successful. Final output length:", finalAiResponse.length);
} catch (error) {
console.error("Error in Chat API Call 2 (Podcast Formatting):", error);
const errorHtml = generateGenAiPageHtml('生成AI播客脚本出错(播客文案)', `<p><strong>Failed during podcast formatting:</strong> ${escapeHtml(error.message)}</p>${error.stack ? `<pre>${escapeHtml(error.stack)}</pre>` : ''}`, dateStr, true, selectedItemsParams, null, null, fullPromptForCall2_System, fullPromptForCall2_User);
return new Response(errorHtml, { status: 500, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
let promptsMarkdownContent = `# Prompts for ${dateStr}\n\n`;
promptsMarkdownContent += `## Call 2: Podcast Formatting\n\n`;
if (fullPromptForCall2_System) promptsMarkdownContent += `### System Instruction\n\`\`\`\n${fullPromptForCall2_System}\n\`\`\`\n\n`;
if (fullPromptForCall2_User) promptsMarkdownContent += `### User Input (Output of Call 1)\n\`\`\`\n${fullPromptForCall2_User}\n\`\`\`\n\n`;
let podcastScriptMarkdownContent = `# ${env.PODCAST_TITLE} ${formatDateToChinese(dateStr)}\n\n${removeMarkdownCodeBlock(finalAiResponse)}`;
const successHtml = generateGenAiPageHtml(
'AI播客脚本',
escapeHtml(finalAiResponse),
dateStr, false, selectedItemsParams,
null, null, // No Call 1 prompts for this page
fullPromptForCall2_System, fullPromptForCall2_User,
convertEnglishQuotesToChinese(removeMarkdownCodeBlock(promptsMarkdownContent)),
outputOfCall1, // No daily summary for this page
convertEnglishQuotesToChinese(podcastScriptMarkdownContent)
);
return new Response(successHtml, { headers: { 'Content-Type': 'text/html; charset=utf-8' } });
} catch (error) {
console.error("Error in /genAIPodcastScript (outer try-catch):", error);
const pageDateForError = dateStr || getISODate();
const itemsForActionOnError = Array.isArray(selectedItemsParams) ? selectedItemsParams : [];
const errorHtml = generateGenAiPageHtml('生成AI播客脚本出错', `<p><strong>Unexpected error:</strong> ${escapeHtml(error.message)}</p>${error.stack ? `<pre>${escapeHtml(error.stack)}</pre>` : ''}`, pageDateForError, true, itemsForActionOnError, null, null, fullPromptForCall2_System, fullPromptForCall2_User);
return new Response(errorHtml, { status: 500, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
}
export async function handleGenAIContent(request, env) {
let dateStr;
let selectedItemsParams = [];
let formData;
let userPromptSummarizationData = null;
let fullPromptForCall1_System = null;
let fullPromptForCall1_User = null;
let outputOfCall1 = null;
try {
formData = await request.formData();
const dateParam = formData.get('date');
dateStr = dateParam ? dateParam : getISODate();
selectedItemsParams = formData.getAll('selectedItems');
if (selectedItemsParams.length === 0) {
const errorHtml = generateGenAiPageHtml('生成AI日报出错未选生成条目', '<p><strong>No items were selected.</strong> Please go back and select at least one item.</p>', dateStr, true, null);
return new Response(errorHtml, { status: 400, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
console.log(`Generating AI content for ${selectedItemsParams.length} selected item references from date ${dateStr}`);
const allFetchedData = {};
const fetchPromises = [];
for (const sourceType in dataSources) {
if (Object.hasOwnProperty.call(dataSources, sourceType)) {
fetchPromises.push(
getFromKV(env.DATA_KV, `${dateStr}-${sourceType}`).then(data => {
allFetchedData[sourceType] = data || [];
})
);
}
}
await Promise.allSettled(fetchPromises);
const selectedContentItems = [];
let validItemsProcessedCount = 0;
for (const selection of selectedItemsParams) {
const [type, idStr] = selection.split(':');
const itemsOfType = allFetchedData[type];
const item = itemsOfType ? itemsOfType.find(dataItem => String(dataItem.id) === idStr) : null;
if (item) {
let itemText = "";
// Dynamically generate itemText based on item.type
// Add new data sources
switch (item.type) {
case 'news':
itemText = `News Title: ${item.title}\nPublished: ${item.published_date}\nContent Summary: ${stripHtml(item.details.content_html)}`;
break;
case 'project':
itemText = `Project Name: ${item.title}\nPublished: ${item.published_date}\nUrl: ${item.url}\nDescription: ${item.description}\nStars: ${item.details.totalStars}`;
break;
case 'paper':
itemText = `Papers Title: ${item.title}\nPublished: ${item.published_date}\nUrl: ${item.url}\nAbstract/Content Summary: ${stripHtml(item.details.content_html)}`;
break;
case 'socialMedia':
itemText = `socialMedia Post by ${item.authors}Published: ${item.published_date}\nUrl: ${item.url}\nContent: ${stripHtml(item.details.content_html)}`;
break;
default:
// Fallback for unknown types or if more specific details are not available
itemText = `Type: ${item.type}\nTitle: ${item.title || 'N/A'}\nDescription: ${item.description || 'N/A'}\nURL: ${item.url || 'N/A'}`;
if (item.published_date) itemText += `\nPublished: ${item.published_date}`;
if (item.source) itemText += `\nSource: ${item.source}`;
if (item.details && item.details.content_html) itemText += `\nContent: ${stripHtml(item.details.content_html)}`;
break;
}
if (itemText) {
selectedContentItems.push(itemText);
validItemsProcessedCount++;
}
} else {
console.warn(`Could not find item for selection: ${selection} on date ${dateStr}.`);
}
}
if (validItemsProcessedCount === 0) {
const errorHtml = generateGenAiPageHtml('生成AI日报出错可生成条目为空', '<p><strong>Selected items could not be retrieved or resulted in no content.</strong> Please check the data or try different selections.</p>', dateStr, true, selectedItemsParams);
return new Response(errorHtml, { status: 404, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
//提示词内不能有英文引号,否则会存储数据缺失。
fullPromptForCall1_System = getSystemPromptSummarizationStepOne();
fullPromptForCall1_User = selectedContentItems.join('\n\n---\n\n'); // Keep this for logging/error reporting if needed
console.log("Call 1 to Chat (Summarization): User prompt length:", fullPromptForCall1_User.length);
try {
const chunkSize = 3;
const summaryPromises = [];
for (let i = 0; i < selectedContentItems.length; i += chunkSize) {
const chunk = selectedContentItems.slice(i, i + chunkSize);
const chunkPrompt = chunk.join('\n\n---\n\n'); // Join selected items with the separator
summaryPromises.push((async () => {
let summarizedChunks = [];
for await (const streamChunk of callChatAPIStream(env, chunkPrompt, fullPromptForCall1_System)) {
summarizedChunks.push(streamChunk);
}
return summarizedChunks.join('');
})());
}
const allSummarizedResults = await Promise.all(summaryPromises);
outputOfCall1 = allSummarizedResults.join('\n\n'); // Join all summarized parts
if (!outputOfCall1 || outputOfCall1.trim() === "") throw new Error("Chat summarization call returned empty content.");
outputOfCall1 = removeMarkdownCodeBlock(outputOfCall1); // Clean the output
console.log("Call 1 (Summarization) successful. Output length:", outputOfCall1.length);
} catch (error) {
console.error("Error in Chat API Call 1 (Summarization):", error);
const errorHtml = generateGenAiPageHtml('生成AI日报出错(分段处理)', `<p><strong>Failed during summarization:</strong> ${escapeHtml(error.message)}</p>${error.stack ? `<pre>${escapeHtml(error.stack)}</pre>` : ''}`, dateStr, true, selectedItemsParams, fullPromptForCall1_System, fullPromptForCall1_User);
return new Response(errorHtml, { status: 500, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
// Call 2: Process outputOfCall1
let outputOfCall2 = null;
let fullPromptForCall2_System = getSystemPromptSummarizationStepTwo(); // Re-using summarization prompt for now
let fullPromptForCall2_User = outputOfCall1; // Input for Call 2 is output of Call 1
console.log("Call 2 to Chat (Processing Call 1 Output): User prompt length:", fullPromptForCall2_User.length);
try {
let processedChunks = [];
for await (const chunk of callChatAPIStream(env, fullPromptForCall2_User, fullPromptForCall2_System)) {
processedChunks.push(chunk);
}
outputOfCall2 = processedChunks.join('');
if (!outputOfCall2 || outputOfCall2.trim() === "") throw new Error("Chat processing call returned empty content.");
outputOfCall2 = removeMarkdownCodeBlock(outputOfCall2); // Clean the output
console.log("Call 2 (Processing Call 1 Output) successful. Output length:", outputOfCall2.length);
} catch (error) {
console.error("Error in Chat API Call 2 (Processing Call 1 Output):", error);
const errorHtml = generateGenAiPageHtml('生成AI日报出错(格式化)', `<p><strong>Failed during processing of summarized content:</strong> ${escapeHtml(error.message)}</p>${error.stack ? `<pre>${escapeHtml(error.stack)}</pre>` : ''}`, dateStr, true, selectedItemsParams, fullPromptForCall1_System, fullPromptForCall1_User, fullPromptForCall2_System, fullPromptForCall2_User);
return new Response(errorHtml, { status: 500, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
let promptsMarkdownContent = `# Prompts for ${dateStr}\n\n`;
promptsMarkdownContent += `## Call 1: Content Summarization\n\n`;
if (fullPromptForCall1_System) promptsMarkdownContent += `### System Instruction\n\`\`\`\n${fullPromptForCall1_System}\n\`\`\`\n\n`;
if (fullPromptForCall1_User) promptsMarkdownContent += `### User Input\n\`\`\`\n${fullPromptForCall1_User}\n\`\`\`\n\n`;
promptsMarkdownContent += `## Call 2: Summarized Content Format\n\n`;
if (fullPromptForCall2_System) promptsMarkdownContent += `### System Instruction\n\`\`\`\n${fullPromptForCall2_System}\n\`\`\`\n\n`;
if (fullPromptForCall2_User) promptsMarkdownContent += `### User Input (Output of Call 1)\n\`\`\`\n${fullPromptForCall2_User}\n\`\`\`\n\n`;
let dailySummaryMarkdownContent = `# ${env.DAILY_TITLE} ${formatDateToChinese(dateStr)}\n\n${removeMarkdownCodeBlock(outputOfCall2)}`;
const successHtml = generateGenAiPageHtml(
'AI日报', // Title for Call 1 page
escapeHtml(outputOfCall2),
dateStr, false, selectedItemsParams,
fullPromptForCall1_System, fullPromptForCall1_User,
null, null, // Pass Call 2 prompts
convertEnglishQuotesToChinese(removeMarkdownCodeBlock(promptsMarkdownContent)),
convertEnglishQuotesToChinese(dailySummaryMarkdownContent),
null, // No podcast script for this page
outputOfCall1 // Pass summarized content for the next step (original outputOfCall1)
);
return new Response(successHtml, { headers: { 'Content-Type': 'text/html; charset=utf-8' } });
} catch (error) {
console.error("Error in /genAIContent (outer try-catch):", error);
const pageDateForError = dateStr || getISODate();
const itemsForActionOnError = Array.isArray(selectedItemsParams) ? selectedItemsParams : [];
const errorHtml = generateGenAiPageHtml('生成AI日报出错', `<p><strong>Unexpected error:</strong> ${escapeHtml(error.message)}</p>${error.stack ? `<pre>${escapeHtml(error.stack)}</pre>` : ''}`, pageDateForError, true, itemsForActionOnError, fullPromptForCall1_System, fullPromptForCall1_User, fullPromptForCall2_System, fullPromptForCall2_User);
return new Response(errorHtml, { status: 500, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
}
export async function handleGenAIDailyAnalysis(request, env) {
let dateStr;
let userPromptDailyAnalysisData = '';
let fullPromptForDailyAnalysis_System = null;
let finalAiResponse = null;
try {
const requestBody = await request.json();
dateStr = requestBody.date || getISODate();
const summarizedContent = requestBody.summarizedContent; // Get summarized content from request body
if (!summarizedContent || !summarizedContent.trim()) {
return new Response('未提供摘要内容进行分析。', { status: 400, headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
}
userPromptDailyAnalysisData = summarizedContent; // Use summarized content as user prompt
console.log(`Generating AI daily analysis for date: ${dateStr} using summarized content.`);
fullPromptForDailyAnalysis_System = getSystemPromptDailyAnalysis();
console.log("Call to Chat (Daily Analysis): User prompt length:", userPromptDailyAnalysisData.length);
try {
let analysisChunks = [];
for await (const chunk of callChatAPIStream(env, userPromptDailyAnalysisData, fullPromptForDailyAnalysis_System)) {
analysisChunks.push(chunk);
}
finalAiResponse = analysisChunks.join('');
if (!finalAiResponse || finalAiResponse.trim() === "") throw new Error("Chat daily analysis call returned empty content.");
finalAiResponse = removeMarkdownCodeBlock(finalAiResponse); // Clean the output
console.log("Daily Analysis successful. Final output length:", finalAiResponse.length);
} catch (error) {
console.error("Error in Chat API Call (Daily Analysis):", error);
return new Response(`AI 日报分析失败: ${escapeHtml(error.message)}`, { status: 500, headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
}
return new Response(finalAiResponse, { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
} catch (error) {
console.error("Error in /genAIDailyAnalysis (outer try-catch):", error);
return new Response(`服务器错误: ${escapeHtml(error.message)}`, { status: 500, headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
}
}

View File

@@ -1,36 +0,0 @@
// src/handlers/getContent.js
import { getISODate } from '../helpers.js';
import { getFromKV } from '../kv.js';
import { dataSources } from '../dataFetchers.js'; // Import dataSources
export async function handleGetContent(request, env) {
const url = new URL(request.url);
const dateParam = url.searchParams.get('date');
const dateStr = dateParam ? dateParam : getISODate();
console.log(`Getting content for date: ${dateStr}`);
try {
const responseData = {
date: dateStr,
message: `Successfully retrieved data for ${dateStr}.`
};
const fetchPromises = [];
for (const sourceType in dataSources) {
if (Object.hasOwnProperty.call(dataSources, sourceType)) {
fetchPromises.push(
getFromKV(env.DATA_KV, `${dateStr}-${sourceType}`).then(data => {
responseData[sourceType] = data || [];
})
);
}
}
await Promise.allSettled(fetchPromises);
return new Response(JSON.stringify(responseData), { headers: { 'Content-Type': 'application/json' } });
} catch (error) {
console.error("Error in /getContent:", error);
return new Response(JSON.stringify({ success: false, message: "Failed to get content.", error: error.message, date: dateStr }), {
status: 500, headers: { 'Content-Type': 'application/json' }
});
}
}

View File

@@ -1,31 +0,0 @@
// src/handlers/getContentHtml.js
import { getISODate, escapeHtml, setFetchDate } from '../helpers.js';
import { getFromKV } from '../kv.js';
import { generateContentSelectionPageHtml } from '../htmlGenerators.js';
export async function handleGetContentHtml(request, env, dataCategories) {
const url = new URL(request.url);
const dateParam = url.searchParams.get('date');
const dateStr = dateParam ? dateParam : getISODate();
setFetchDate(dateStr);
console.log(`Getting HTML content for date: ${dateStr}`);
try {
const allData = {};
// Dynamically fetch data for each category based on dataCategories
for (const category of dataCategories) {
allData[category.id] = await getFromKV(env.DATA_KV, `${dateStr}-${category.id}`) || [];
}
const html = generateContentSelectionPageHtml(env, dateStr, allData, dataCategories);
return new Response(html, { headers: { 'Content-Type': 'text/html; charset=utf-8' } });
} catch (error) {
console.error("Error in /getContentHtml:", error);
// Ensure escapeHtml is used for error messages displayed in HTML
return new Response(`<h1>Error generating HTML content</h1><p>${escapeHtml(error.message)}</p><pre>${escapeHtml(error.stack)}</pre>`, {
status: 500, headers: { 'Content-Type': 'text/html; charset=utf-8' }
});
}
}

View File

@@ -1,78 +0,0 @@
// src/handlers/writeData.js
import { getISODate, getFetchDate } from '../helpers.js';
import { fetchAllData, fetchDataByCategory, dataSources } from '../dataFetchers.js'; // 导入 fetchDataByCategory 和 dataSources
import { storeInKV } from '../kv.js';
export async function handleWriteData(request, env) {
const dateParam = getFetchDate();
const dateStr = dateParam ? dateParam : getISODate();
console.log(`Starting /writeData process for date: ${dateStr}`);
let category = null;
let foloCookie = null;
try {
// 尝试解析请求体,获取 category 参数
if (request.headers.get('Content-Type')?.includes('application/json')) {
const requestBody = await request.json();
category = requestBody.category;
foloCookie = requestBody.foloCookie; // 获取 foloCookie
}
console.log(`Starting /writeData process for category: ${category || 'all'} with foloCookie presence: ${!!foloCookie}`);
let dataToStore = {};
let fetchPromises = [];
let successMessage = '';
if (category) {
// 只抓取指定分类的数据
const fetchedData = await fetchDataByCategory(env, category, foloCookie); // 传递 foloCookie
dataToStore[category] = fetchedData;
fetchPromises.push(storeInKV(env.DATA_KV, `${dateStr}-${category}`, fetchedData));
successMessage = `Data for category '${category}' fetched and stored.`;
console.log(`Transformed ${category}: ${fetchedData.length} items.`);
} else {
// 抓取所有分类的数据 (现有逻辑)
const allUnifiedData = await fetchAllData(env, foloCookie); // 传递 foloCookie
for (const sourceType in dataSources) {
if (Object.hasOwnProperty.call(dataSources, sourceType)) {
dataToStore[sourceType] = allUnifiedData[sourceType] || [];
fetchPromises.push(storeInKV(env.DATA_KV, `${dateStr}-${sourceType}`, dataToStore[sourceType]));
console.log(`Transformed ${sourceType}: ${dataToStore[sourceType].length} items.`);
}
}
successMessage = `All data categories fetched and stored.`;
}
await Promise.all(fetchPromises);
const errors = []; // Placeholder for potential future error aggregation from fetchAllData or fetchDataByCategory
if (errors.length > 0) {
console.warn("/writeData completed with errors:", errors);
return new Response(JSON.stringify({
success: false,
message: `${successMessage} Some errors occurred.`,
errors: errors,
...Object.fromEntries(Object.entries(dataToStore).map(([key, value]) => [`${key}ItemCount`, value.length]))
}), {
status: 200, headers: { 'Content-Type': 'application/json' }
});
} else {
console.log("/writeData process completed successfully.");
return new Response(JSON.stringify({
success: true,
message: successMessage,
...Object.fromEntries(Object.entries(dataToStore).map(([key, value]) => [`${key}ItemCount`, value.length]))
}), {
headers: { 'Content-Type': 'application/json' }
});
}
} catch (error) {
console.error("Unhandled error in /writeData:", error);
return new Response(JSON.stringify({ success: false, message: "An unhandled error occurred during data processing.", error: error.message, details: error.stack }), {
status: 500, headers: { 'Content-Type': 'application/json' }
});
}
}

View File

@@ -1,246 +0,0 @@
// src/helpers.js
/**
* 全域參數,用於指定資料抓取的日期。
* 預設為當前日期,格式為 YYYY-MM-DD。
*/
export let fetchDate = getISODate();
export function setFetchDate(date) {
fetchDate = date;
}
export function getFetchDate() {
return fetchDate;
}
/**
* Gets the current date or a specified date in YYYY-MM-DD format.
* @param {Date} [dateObj] - Optional Date object. Defaults to current date.
* @returns {string} Date string in YYYY-MM-DD format.
*/
export function getISODate(dateObj = new Date()) {
const options = {
year: 'numeric',
month: '2-digit',
day: '2-digit',
timeZone: 'Asia/Shanghai'
};
// 使用 'en-CA' 語言環境,因為它通常會產生 YYYY-MM-DD 格式的日期字串
const dateString = dateObj.toLocaleDateString('en-CA', options);
return dateString;
}
/**
* Escapes HTML special characters in a string.
* @param {*} unsafe The input to escape. If not a string, it's converted. Null/undefined become empty string.
* @returns {string} The escaped string.
*/
export function escapeHtml(unsafe) {
if (unsafe === null || typeof unsafe === 'undefined') {
return '';
}
const str = String(unsafe);
const map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '&#039;'
};
return str.replace(/[&<>"']/g, (m) => map[m]);
}
/**
* Generic fetch wrapper with JSON parsing and error handling.
* @param {string} url - The URL to fetch.
* @param {object} [options] - Fetch options.
* @returns {Promise<object>} The JSON response or text for non-JSON.
* @throws {Error} If the fetch fails or response is not ok.
*/
export async function fetchData(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) {
const errorText = await response.text();
throw new Error(`HTTP error! status: ${response.status}, message: ${errorText}, url: ${url}`);
}
return response.json();
}
/**
* Removes markdown code block fences (```json or ```) from a string.
* @param {string} text - The input string potentially containing markdown code fences.
* @returns {string} The string with markdown code fences removed.
*/
export function removeMarkdownCodeBlock(text) {
if (!text) return '';
let cleanedText = text.trim();
const jsonFence = "```json";
const genericFence = "```";
if (cleanedText.startsWith(jsonFence)) {
cleanedText = cleanedText.substring(jsonFence.length);
} else if (cleanedText.startsWith(genericFence)) {
cleanedText = cleanedText.substring(genericFence.length);
}
if (cleanedText.endsWith(genericFence)) {
cleanedText = cleanedText.substring(0, cleanedText.length - genericFence.length);
}
return cleanedText.trim();
}
/**
* Strips HTML tags from a string and normalizes whitespace.
* @param {string} html - The HTML string.
* @returns {string} The text content without HTML tags.
*/
export function stripHtml(html) {
if (!html) return "";
// 處理 img 標籤,保留其 src 和 alt 屬性
let processedHtml = html.replace(/<img[^>]*src="([^"]*)"[^>]*alt="([^"]*)"[^>]*>/gi, (match, src, alt) => {
return alt ? `[图片: ${alt} ${src}]` : `[图片: ${src}]`;
});
processedHtml = processedHtml.replace(/<img[^>]*src="([^"]*)"[^>]*>/gi, '[图片: $1]');
// 移除所有其他 HTML 標籤,並正規化空白
return processedHtml.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
}
/**
* Checks if a given date string is within the last specified number of days (inclusive of today).
* @param {string} dateString - The date string to check (YYYY-MM-DD).
* @param {number} days - The number of days to look back (e.g., 3 for today and the past 2 days).
* @returns {boolean} True if the date is within the last 'days', false otherwise.
*/
/**
* Converts a date string to a Date object representing the time in Asia/Shanghai timezone.
* This is crucial for consistent date comparisons across different environments.
* @param {string} dateString - The date string to convert.
* @returns {Date} A Date object set to the specified date in Asia/Shanghai timezone.
*/
function convertToShanghaiTime(dateString) {
// Create a Date object from the ISO string.
const date = new Date(dateString);
// Get the date components in Asia/Shanghai timezone
const options = {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12: false,
timeZone: 'Asia/Shanghai'
};
// Format the date to a string in Shanghai timezone, then parse it back to a Date object.
// This is a common workaround to get a Date object representing a specific timezone.
const shanghaiDateString = new Intl.DateTimeFormat('en-US', options).format(date);
return new Date(shanghaiDateString);
}
/**
* Checks if a given date string is within the last specified number of days (inclusive of today).
* @param {string} dateString - The date string to check (YYYY-MM-DD or ISO format).
* @param {number} days - The number of days to look back (e.g., 3 for today and the past 2 days).
* @returns {boolean} True if the date is within the last 'days', false otherwise.
*/
export function isDateWithinLastDays(dateString, days) {
// Convert both dates to Shanghai time for consistent comparison
const itemDate = convertToShanghaiTime(dateString);
const today = new Date(fetchDate);
// Normalize today to the start of its day in Shanghai time
today.setHours(0, 0, 0, 0);
const diffTime = today.getTime() - itemDate.getTime();
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return diffDays >= 0 && diffDays < days;
}
/**
* Formats an ISO date string to "YYYY年M月D日" format.
* @param {string} isoDateString - The date string in ISO format (e.g., "2025-05-30T08:24:52.000Z").
* @returns {string} Formatted date string (e.g., "2025年5月30日").
*/
export function formatDateToChinese(isoDateString) {
if (!isoDateString) return '';
const date = new Date(isoDateString);
const options = {
year: 'numeric',
month: 'numeric',
day: 'numeric',
timeZone: 'Asia/Shanghai'
};
return new Intl.DateTimeFormat('zh-CN', options).format(date);
}
/**
* Formats an ISO date string to "YYYY年M月D日 HH:MM:SS" format.
* @param {string} isoDateString - The date string in ISO format (e.g., "2025-05-30T08:24:52.000Z").
* @returns {string} Formatted date string (e.g., "2025年5月30日 08:24:52").
*/
export function formatDateToChineseWithTime(isoDateString) {
if (!isoDateString) return '';
const date = new Date(isoDateString);
const options = {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false, // 使用24小时制
timeZone: 'Asia/Shanghai' // 指定东8时区
};
// 使用 'zh-CN' 语言环境以确保中文格式
return new Intl.DateTimeFormat('zh-CN', options).format(date);
}
/**
* Converts English double quotes (") to Chinese double quotes (“”).
* @param {string} text - The input string.
* @returns {string} The string with Chinese double quotes.
*/
export function convertEnglishQuotesToChinese(text) {
const str = String(text);
return str.replace(/"/g, '“');
}
export function formatMarkdownText(text) {
const str = String(text);
return str.replace(/“/g, '"');
}
/**
* Generates a random User-Agent string.
* @returns {string} A random User-Agent string.
*/
export function getRandomUserAgent() {
const userAgents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 13_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0",
"Mozilla/5.0 (X11; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0",
];
return userAgents[Math.floor(Math.random() * userAgents.length)];
}
/**
* Pauses execution for a specified number of milliseconds.
* @param {number} ms - The number of milliseconds to sleep.
* @returns {Promise<void>} A promise that resolves after the specified time.
*/
export function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

View File

@@ -1,499 +0,0 @@
// src/htmlGenerators.js
import { escapeHtml, formatDateToChinese, convertEnglishQuotesToChinese} from './helpers.js';
import { dataSources } from './dataFetchers.js'; // Import dataSources
function generateHtmlListForContentPage(items, dateStr) {
let listHtml = '';
if (!Array.isArray(items) || items.length === 0) {
listHtml += `<p>此日期无可用数据。抓取/筛选过程可能没有为此日期生成任何结果。</p>`;
return listHtml;
}
listHtml += '<ul class="item-list">';
items.forEach((item, index) => {
let displayContent = '';
let itemId = item.id;
// Use the generateHtml method from the corresponding data source
const dataSourceConfig = dataSources[item.type];
// console.log("item.type:", item.type);
// console.log("dataSourceConfig:", dataSourceConfig);
if (dataSourceConfig && dataSourceConfig.sources && dataSourceConfig.sources.length > 0 && dataSourceConfig.sources[0].generateHtml) {
displayContent = dataSourceConfig.sources[0].generateHtml(item);
} else {
// Fallback for unknown types or if generateHtml is not defined
displayContent = `<strong>未知项目类型: ${escapeHtml(item.type)}</strong><br>${escapeHtml(item.title || item.description || JSON.stringify(item))}`;
}
listHtml += `<li class="item-card">
<label>
<input type="checkbox" name="selectedItems" value="${item.type}:${itemId}" class="item-checkbox">
<div class="item-content">${displayContent}</div>
</label>
</li>`;
});
listHtml += '</ul>';
return listHtml;
}
export function generateContentSelectionPageHtml(env, dateStr, allData, dataCategories) {
// Ensure allData is an object and dataCategories is an array
const data = allData || {};
const categories = Array.isArray(dataCategories) ? dataCategories : [];
// Generate tab buttons and content dynamically
const tabButtonsHtml = categories.map((category, index) => `
<div class="tab-buttons-wrapper">
<button type="button" class="tab-button ${index === 0 ? 'active' : ''}" onclick="openTab(event, '${category.id}-tab')" ondblclick="confirmFetchCategoryData(this,'${category.id}')">${escapeHtml(category.name)}</button>
</div>
`).join('');
const tabContentsHtml = categories.map((category, index) => `
<div id="${category.id}-tab" class="tab-content ${index === 0 ? 'active' : ''}">
${generateHtmlListForContentPage(data[category.id], dateStr)}
</div>
`).join('');
return `
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>${formatDateToChinese(escapeHtml(dateStr))} ${env.FOLO_FILTER_DAYS}天内的数据</title>
<style>
:root { --primary-color: #007bff; --light-gray: #f8f9fa; --medium-gray: #e9ecef; --dark-gray: #343a40; --line-height-normal: 1.4; --font-size-small: 0.9rem;}
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; background-color: var(--light-gray); color: var(--dark-gray); padding: 1rem; }
.container { max-width: 1200px; margin: 0 auto; background-color: #fff; padding: 1rem; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
.header-bar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem; }
h1 { font-size: 1.8rem; color: var(--dark-gray); margin-bottom: 0.5rem; }
.submit-button { background-color: var(--primary-color); color: white; border: none; padding: 0.6rem 1.2rem; font-size: 0.9rem; border-radius: 5px; cursor: pointer; transition: background-color 0.2s; white-space: nowrap; }
.submit-button:hover { background-color: #0056b3; }
.tab-navigation { display: flex; flex-wrap: wrap; margin-bottom: 1rem; border-bottom: 1px solid var(--medium-gray); }
.tab-buttons-wrapper { display: flex; align-items: center; margin-right: 1rem; margin-bottom: 0.5rem; }
.tab-button { background-color: transparent; border: none; border-bottom: 3px solid transparent; padding: 0.8rem 1rem; cursor: pointer; font-size: 1rem; color: #555; transition: color 0.2s, border-color 0.2s; }
.tab-button.active { color: var(--primary-color); border-bottom-color: var(--primary-color); font-weight: 600; }
.tab-button:hover { color: var(--primary-color); }
.tab-content { display: none; animation: fadeIn 0.5s; }
.tab-content.active { display: block; }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
.item-list { list-style-type: none; counter-reset: item-counter; padding-left: 0; }
.item-card { margin-bottom: 1rem; padding: 1rem; padding-left: 3em; border: 1px solid var(--medium-gray); border-radius: 6px; background-color: #fff; position: relative; counter-increment: item-counter; }
.item-card::before { content: counter(item-counter) "."; position: absolute; left: 0.8em; top: 1rem; font-weight: 600; color: var(--dark-gray); min-width: 1.5em; text-align: right; }
.item-card label { display: flex; align-items: flex-start; cursor: pointer; }
.item-checkbox { margin-right: 0.8rem; margin-top: 0.2rem; transform: scale(1.2); flex-shrink: 0; }
.item-content { flex-grow: 1; min-width: 0; }
.item-content strong { font-size: 1.1rem; }
.item-content small { color: #6c757d; display: block; margin: 0.2rem 0; }
.content-html { border: 1px dashed #ccc; padding: 0.5rem; margin-top: 0.5rem; background: #fdfdfd; font-size: var(--font-size-small); line-height: var(--line-height-normal); max-width: 100%; overflow-wrap: break-word; word-break: break-word; overflow-y: hidden; transition: max-height 0.35s ease-in-out; position: relative; }
.content-html.is-collapsed { max-height: calc(var(--font-size-small) * var(--line-height-normal) * 6 + 1rem); }
.content-html.is-expanded { max-height: 3000px; overflow-y: auto; }
.read-more-btn { display: block; margin-top: 0.5rem; padding: 0.3rem 0.6rem; font-size: 0.85rem; color: var(--primary-color); background-color: transparent; border: 1px solid var(--primary-color); border-radius: 4px; cursor: pointer; text-align: center; width: fit-content; }
.read-more-btn:hover { background-color: #eef; }
.item-content a { color: var(--primary-color); text-decoration: none; }
.item-content a:hover { text-decoration: underline; }
.error { color: #dc3545; font-weight: bold; background-color: #f8d7da; padding: 0.5rem; border-radius: 4px; border: 1px solid #f5c6cb;}
hr { border: 0; border-top: 1px solid var(--medium-gray); margin: 0.5rem 0; }
@media (max-width: 768px) {
body { padding: 0.5rem; } .container { padding: 0.8rem; } h1 { font-size: 1.5rem; }
.header-bar { flex-direction: column; align-items: flex-start; }
.submit-button { margin-top: 0.5rem; width: 100%; }
.tab-button { padding: 0.7rem 0.5rem; font-size: 0.9rem; flex-grow: 1; text-align: center; }
.item-card { padding-left: 2.5em; } .item-card::before { left: 0.5em; top: 0.8rem; }
}
</style>
</head>
<body>
<div class="container">
<form action="/genAIContent" method="POST">
<input type="hidden" name="date" value="${escapeHtml(dateStr)}">
<div class="header-bar">
<button type="button" class="submit-button" onclick="confirmFetchAndWriteData(this)">抓取并写入今日数据</button>
<h1>${formatDateToChinese(escapeHtml(dateStr))} ${env.FOLO_FILTER_DAYS}天内的数据</h1>
<button type="submit" class="submit-button" onclick="return confirmGenerateAIContent(event)">从选中内容生成 AI 日报</button>
</div>
<div class="cookie-setting-area" style="margin-bottom: 1rem; padding: 0.8rem; border: 1px solid var(--medium-gray); border-radius: 6px; background-color: #fefefe;">
<label for="foloCookie" style="font-weight: bold; margin-right: 0.5rem;">Folo Cookie:</label>
<input type="text" id="foloCookie" placeholder="在此输入 Folo Cookie" style="flex-grow: 1; padding: 0.4rem; border: 1px solid #ccc; border-radius: 4px; width: 300px; max-width: 70%;">
<button type="button" class="submit-button" onclick="saveFoloCookie(this)" style="margin-left: 0.5rem; padding: 0.4rem 0.8rem; font-size: 0.85rem;">保存 Cookie</button>
<p style="font-size: 0.8rem; color: #666; margin-top: 0.5rem;">此 Cookie 将保存在您的浏览器本地存储中,以便下次使用。</p>
</div>
<div class="tab-navigation">
${tabButtonsHtml}
</div>
${tabContentsHtml}
</form>
</div>
<script>
function openTab(evt, tabName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tab-content");
for (i = 0; i < tabcontent.length; i++) { tabcontent[i].style.display = "none"; tabcontent[i].classList.remove("active"); }
tablinks = document.getElementsByClassName("tab-button");
for (i = 0; i < tablinks.length; i++) { tablinks[i].classList.remove("active"); }
document.getElementById(tabName).style.display = "block"; document.getElementById(tabName).classList.add("active");
if (evt && evt.currentTarget) { evt.currentTarget.classList.add("active"); }
}
document.addEventListener('DOMContentLoaded', function() {
if (document.querySelector('.tab-button') && !document.querySelector('.tab-button.active')) { document.querySelector('.tab-button').click(); }
else if (document.querySelector('.tab-content.active') === null && document.querySelector('.tab-content')) {
const firstTabButton = document.querySelector('.tab-button'); const firstTabContent = document.querySelector('.tab-content');
if (firstTabButton) firstTabButton.classList.add('active');
if (firstTabContent) { firstTabContent.style.display = 'block'; firstTabContent.classList.add('active');}
}
document.querySelectorAll('.content-html').forEach(contentDiv => {
contentDiv.classList.add('is-collapsed');
requestAnimationFrame(() => {
const readMoreBtn = document.createElement('button'); readMoreBtn.type = 'button';
readMoreBtn.textContent = '展开'; readMoreBtn.className = 'read-more-btn';
contentDiv.insertAdjacentElement('afterend', readMoreBtn);
readMoreBtn.addEventListener('click', function() {
contentDiv.classList.toggle('is-expanded'); contentDiv.classList.toggle('is-collapsed', !contentDiv.classList.contains('is-expanded'));
this.textContent = contentDiv.classList.contains('is-expanded') ? '折叠' : '展开';
});
});
});
});
async function saveFoloCookie(button) {
const cookieInput = document.getElementById('foloCookie');
const cookieValue = cookieInput.value;
if (!cookieValue.trim()) {
alert('Folo Cookie 不能为空。');
return;
}
const originalButtonText = button.textContent;
button.textContent = '保存中...';
button.disabled = true;
try {
localStorage.setItem('${env.FOLO_COOKIE_KV_KEY}', cookieValue); // 直接保存到 localStorage
alert('Folo Cookie 已成功保存在本地存储!');
} catch (error) {
console.error('Error saving Folo Cookie to localStorage:', error);
alert(\`保存 Folo Cookie 到本地存储时发生错误: \${error.message}\`);
} finally {
button.textContent = originalButtonText;
button.disabled = false;
}
}
document.addEventListener('DOMContentLoaded', function() {
const savedCookie = localStorage.getItem('${env.FOLO_COOKIE_KV_KEY}');
if (savedCookie) {
document.getElementById('foloCookie').value = savedCookie;
}
});
function confirmFetchAndWriteData(button) {
if (confirm('确定要抓取并写入今日数据吗?此操作将更新今日数据。')) {
fetchAndWriteData(button);
}
}
async function fetchAndWriteData(button, category = null) {
const originalText = button.textContent;
button.textContent = '正在抓取和写入...';
button.disabled = true;
const foloCookie = localStorage.getItem('${env.FOLO_COOKIE_KV_KEY}'); // 从 localStorage 获取 foloCookie
try {
const response = await fetch('/writeData', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ category: category, foloCookie: foloCookie }), // 将 foloCookie 添加到请求体
});
if (response.ok) {
const result = await response.text();
alert('数据抓取和写入成功!' + result);
window.location.reload();
} else {
const errorText = await response.text();
alert('数据抓取和写入失败: ' + errorText);
}
} catch (error) {
console.error('Error fetching and writing data:', error);
alert('请求失败,请检查网络或服务器。');
} finally {
button.textContent = originalText;
button.disabled = false;
}
}
function confirmFetchCategoryData(button, category) {
if (confirm(\`确定要抓取并写入 \${category} 分类的数据吗?此操作将更新 \${category} 数据。\`)) {
fetchAndWriteData(button, category);
}
}
function confirmGenerateAIContent(event) {
const selectedCheckboxes = document.querySelectorAll('input[name="selectedItems"]:checked');
if (selectedCheckboxes.length === 0) {
alert('请至少选择一个内容条目来生成 AI 日报。');
event.preventDefault(); // Prevent form submission
return false;
}
if (confirm('确定要从选中内容生成 AI 日报吗?此操作将调用 AI 模型生成内容。')) {
return true; // Allow form submission
} else {
event.preventDefault(); // Prevent form submission
return false;
}
}
</script>
</body>
</html>
`;
}
function generatePromptSectionHtmlForGenAI(systemPrompt, userPrompt, promptTitle, promptIdSuffix) {
if (!systemPrompt && !userPrompt) return '';
let fullPromptTextForCopy = "";
if (systemPrompt) fullPromptTextForCopy += `系统指令:\n${systemPrompt}\n\n`;
if (userPrompt) fullPromptTextForCopy += `用户输入:\n${userPrompt}`;
fullPromptTextForCopy = fullPromptTextForCopy.trim();
return `
<div style="margin-top: 1rem; border: 1px solid #ddd; padding: 0.8rem; border-radius: 4px; background-color: #f9f9f9;">
<h3 style="font-size: 1.1rem; margin-bottom: 0.5rem; color: #333;">${escapeHtml(promptTitle)}</h3>
<button type="button" class="button-link toggle-prompt-btn" onclick="togglePromptVisibility('promptDetails_${promptIdSuffix}', this)">显示提示详情</button>
<button type="button" class="button-link copy-prompt-btn" onclick="copyToClipboard(this.dataset.fullPrompt, this)" data-full-prompt="${escapeHtml(fullPromptTextForCopy)}">复制完整提示</button>
<div id="promptDetails_${promptIdSuffix}" class="content-box" style="display: none; margin-top: 0.5rem; background-color: #e9ecef; border-color: #ced4da; max-height: 400px; overflow-y: auto; text-align: left;">
${systemPrompt ? `<strong>系统指令:</strong><pre style="white-space: pre-wrap; word-wrap: break-word; font-size: 0.85rem; margin-top:0.2em; margin-bottom:0.8em; padding: 0.5em; background: #fff; border: 1px solid #ccc; border-radius: 3px;">${escapeHtml(systemPrompt)}</pre>` : '<p><em>本次调用无系统指令。</em></p>'}
${userPrompt ? `<strong>用户输入:</strong><pre style="white-space: pre-wrap; word-wrap: break-word; font-size: 0.85rem; margin-top:0.2em; padding: 0.5em; background: #fff; border: 1px solid #ccc; border-radius: 3px;">${escapeHtml(userPrompt)}</pre>` : '<p><em>本次调用无用户输入。</em></p>'}
</div>
</div>`;
}
export function generateGenAiPageHtml(title, bodyContent, pageDate, isErrorPage = false, selectedItemsForAction = null,
systemP1 = null, userP1 = null, systemP2 = null, userP2 = null,
promptsMd = null, dailyMd = null, podcastMd = null) {
let actionButtonHtml = '';
// Regenerate button for AI Content Summary page
if (title.includes('AI日报') && selectedItemsForAction && Array.isArray(selectedItemsForAction) && selectedItemsForAction.length > 0) {
actionButtonHtml = `
<form action="/genAIContent" method="POST" style="display: inline-block; margin-left: 0.5rem;">
<input type="hidden" name="date" value="${escapeHtml(pageDate)}">
${selectedItemsForAction.map(item => `<input type="hidden" name="selectedItems" value="${escapeHtml(item)}">`).join('')}
<button type="submit" class="button-link regenerate-button">${isErrorPage ? '重试生成' : '重新生成'}</button>
</form>`;
}
// Regenerate button for AI Podcast Script page
else if (title.includes('AI播客') && selectedItemsForAction && Array.isArray(selectedItemsForAction) && selectedItemsForAction.length > 0) {
actionButtonHtml = `
<form action="/genAIPodcastScript" method="POST" style="display: inline-block; margin-left: 0.5rem;">
<input type="hidden" name="date" value="${escapeHtml(pageDate)}">
${selectedItemsForAction.map(item => `<input type="hidden" name="selectedItems" value="${escapeHtml(item)}">`).join('')}
<input type="hidden" name="summarizedContent" value="${escapeHtml(convertEnglishQuotesToChinese(dailyMd))}">
<button type="submit" class="button-link regenerate-button">${isErrorPage ? '重试生成' : '重新生成'}</button>
</form>`;
}
let githubSaveFormHtml = '';
let generatePodcastButtonHtml = '';
let aiDailyAnalysisButtonHtml = '';
// Since commitToGitHub and genAIPodcastScript are now API calls,
// these forms should be handled by JavaScript on the client side.
// We will provide the data as hidden inputs for potential client-side use,
// but the submission will be via JS fetch, not direct form POST.
if (!isErrorPage) {
if (title === 'AI日报' && promptsMd && dailyMd) {
githubSaveFormHtml = `
<input type="hidden" id="promptsMdCall1" value="${escapeHtml(promptsMd)}">
<input type="hidden" id="dailyMd" value="${escapeHtml(dailyMd)}">
<button type="button" class="button-link github-save-button" onclick="commitToGitHub('${pageDate}', 'daily')">保存提示词和日报到 GitHub</button>`;
} else if (title === 'AI播客脚本' && promptsMd && podcastMd) {
githubSaveFormHtml = `
<input type="hidden" id="promptsMdCall2" value="${escapeHtml(promptsMd)}">
<input type="hidden" id="podcastMd" value="${escapeHtml(podcastMd)}">
<button type="button" class="button-link github-save-button" onclick="commitToGitHub('${pageDate}', 'podcast')">保存提示词和播客到 GitHub</button>`;
}
}
if (title === 'AI日报' && !isErrorPage && podcastMd === null) { // podcastMd === null indicates it's the Call 1 page
generatePodcastButtonHtml = `
<form action="/genAIPodcastScript" method="POST" style="display: inline-block; margin-left: 0.5rem;">
<input type="hidden" name="date" value="${escapeHtml(pageDate)}">
${selectedItemsForAction.map(item => `<input type="hidden" name="selectedItems" value="${escapeHtml(item)}">`).join('')}
<input type="hidden" name="summarizedContent" value="${escapeHtml(convertEnglishQuotesToChinese(bodyContent))}">
<button type="submit" class="button-link">生成播客脚本</button>
</form>`;
aiDailyAnalysisButtonHtml = `
<input type="hidden" id="summarizedContentInput" value="${escapeHtml(convertEnglishQuotesToChinese(bodyContent))}">
<button type="button" class="button-link" onclick="generateAIDailyAnalysis('${escapeHtml(pageDate)}')">AI 日报分析</button>
`;
}
let promptDisplayHtml = '';
if (title === 'AI日报') {
if (systemP1 || userP1) {
promptDisplayHtml = `
<div style="margin-top: 1.5rem;">
<h2 style="font-size:1.3rem; margin-bottom:0.5rem;">API 调用详情</h2>
${generatePromptSectionHtmlForGenAI(convertEnglishQuotesToChinese(systemP1), convertEnglishQuotesToChinese(userP1), '调用 1: 日报', 'call1')}
</div>`;
}
} else if (title === 'AI播客脚本') {
if (systemP2 || userP2) {
promptDisplayHtml = `
<div style="margin-top: 1.5rem;">
<h2 style="font-size:1.3rem; margin-bottom:0.5rem;">API 调用详情</h2>
${generatePromptSectionHtmlForGenAI(convertEnglishQuotesToChinese(systemP2), convertEnglishQuotesToChinese(userP2), '调用 2: 播客格式化', 'call2')}
</div>`;
}
}
return `
<!DOCTYPE html><html lang="zh-Hans"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>${escapeHtml(title)}</title>
<style>
:root { --primary-color: #007bff; --light-gray: #f8f9fa; --medium-gray: #e9ecef; --dark-gray: #343a40; --retry-color: #ffc107; --retry-text-color: #212529; --info-color: #17a2b8; --github-green: #28a745;}
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; background-color: var(--light-gray); color: var(--dark-gray); padding: 1rem; }
.container { max-width: 900px; margin: 0 auto; background-color: #fff; padding: 1.5rem; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
h1 { font-size: 1.8rem; color: ${isErrorPage ? '#dc3545' : 'var(--dark-gray)'}; margin-bottom: 0.5rem; }
p { margin-bottom: 1rem; }
.content-box { margin-top: 1.5rem; padding: 1rem; background-color: ${isErrorPage ? '#f8d7da' : '#f0f9ff'}; border: 1px solid ${isErrorPage ? '#f5c6cb' : '#cce7ff'}; color: ${isErrorPage ? '#721c24' : 'var(--dark-gray)'}; border-radius: 6px; white-space: pre-wrap; word-wrap: break-word; line-height: 1.5; font-family: ${isErrorPage ? 'inherit' : 'Menlo, Monaco, Consolas, "Courier New", monospace'}; font-size: ${isErrorPage ? '1rem' : '0.95rem'};}
.header-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; justify-content: flex-end; align-items: center; margin-bottom: 1rem; }
.navigation-links { margin-top: 1.5rem; }
.button-link { display: inline-block; background-color: var(--primary-color); color: white; border: none; padding: 0.6rem 1.2rem; font-size: 0.9rem; border-radius: 5px; cursor: pointer; text-decoration: none; transition: background-color 0.2s; margin-right: 0.5rem; margin-bottom: 0.5rem;}
.button-link:hover { background-color: #0056b3; }
.regenerate-button { background-color: ${isErrorPage ? 'var(--retry-color)' : 'var(--info-color)'}; color: ${isErrorPage ? 'var(--retry-text-color)' : 'white'}; }
.regenerate-button:hover { background-color: ${isErrorPage ? '#e0a800' : '#138496'}; }
.github-save-button { background-color: var(--github-green); }
.github-save-button:hover { background-color: #218838; }
.toggle-prompt-btn { background-color: #6c757d; font-size: 0.85rem; padding: 0.4rem 0.8rem;}
.toggle-prompt-btn:hover { background-color: #5a6268; }
.copy-prompt-btn { background-color: #17a2b8; font-size: 0.85rem; padding: 0.4rem 0.8rem;}
.copy-prompt-btn:hover { background-color: #138496;}
</style>
</head><body><div class="container">
<div class="header-bar" style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem;">
<h1>${escapeHtml(title)}</h1>
<div class="header-actions">
${generatePodcastButtonHtml}
${aiDailyAnalysisButtonHtml}
</div>
</div>
<p>所选内容日期: <strong>${formatDateToChinese(escapeHtml(pageDate))}</strong></p>
<div class="content-box">${bodyContent}</div>
${promptDisplayHtml}
<div class="navigation-links">
<a href="/getContentHtml?date=${encodeURIComponent(pageDate)}" class="button-link">返回内容选择</a>
${actionButtonHtml}
${githubSaveFormHtml}
<div id="dailyAnalysisResult" style="margin-top: 1rem; padding: 1rem; border: 1px solid #ccc; border-radius: 5px; background-color: #f9f9f9; display: none;"></div>
</div>
</div>
<script>
function togglePromptVisibility(elementId, buttonElement) {
const promptDiv = document.getElementById(elementId);
if (promptDiv) {
promptDiv.style.display = (promptDiv.style.display === 'none') ? 'block' : 'none';
if (buttonElement) buttonElement.textContent = (promptDiv.style.display === 'none') ? '显示提示详情' : '隐藏提示详情';
}
}
function copyToClipboard(textToCopy, buttonElement) {
if (!textToCopy) { alert("Nothing to copy."); return; }
navigator.clipboard.writeText(textToCopy).then(() => {
const originalText = buttonElement.textContent;
buttonElement.textContent = '已复制!'; buttonElement.style.backgroundColor = '#28a745';
setTimeout(() => { buttonElement.textContent = originalText; buttonElement.style.backgroundColor = '#17a2b8'; }, 2000);
}, (err) => { console.error('Async: Could not copy text: ', err); alert('复制提示失败。'); });
}
async function commitToGitHub(date, type) {
const button = event.target;
const originalText = button.textContent;
button.textContent = '保存中...';
button.disabled = true;
const formData = new FormData();
formData.append('date', date);
if (type === 'daily') {
formData.append('prompts_markdown-1', document.getElementById('promptsMdCall1').value);
formData.append('daily_summary_markdown', document.getElementById('dailyMd').value);
} else if (type === 'podcast') {
formData.append('prompts_markdown-2', document.getElementById('promptsMdCall2').value);
formData.append('podcast_script_markdown', document.getElementById('podcastMd').value);
}
try {
const response = await fetch('/commitToGitHub', {
method: 'POST',
body: formData
});
const result = await response.json();
if (response.ok) {
alert('GitHub 提交成功!');
console.log('GitHub Commit Success:', result);
} else {
alert('GitHub 提交失败: ' + result.message);
console.error('GitHub Commit Failed:', result);
}
} catch (error) {
console.error('Error committing to GitHub:', error);
alert('请求失败,请检查网络或服务器。');
} finally {
button.textContent = originalText;
button.disabled = false;
}
}
async function generateAIDailyAnalysis(date) {
const button = event.target;
const originalText = button.textContent;
button.textContent = '正在分析...';
button.disabled = true;
const analysisResultDiv = document.getElementById('dailyAnalysisResult');
analysisResultDiv.style.display = 'none'; // Hide previous result
analysisResultDiv.innerHTML = ''; // Clear previous result
const summarizedContent = document.getElementById('summarizedContentInput').value; // Get summarized content from hidden input
try {
const response = await fetch('/genAIDailyAnalysis', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ date: date, summarizedContent: summarizedContent })
});
if (response.ok) {
const result = await response.text();
analysisResultDiv.innerHTML = \`<h2>AI 日报分析结果</h2><div class="content-box">\${result}</div>\`;
analysisResultDiv.style.display = 'block';
//alert('AI 日报分析成功!');
} else {
const errorText = await response.text();
analysisResultDiv.innerHTML = \`<h2>AI 日报分析失败</h2><div class="content-box error">\${errorText}</div>\`;
analysisResultDiv.style.display = 'block';
alert('AI 日报分析失败: ' + errorText);
}
} catch (error) {
console.error('Error generating AI daily analysis:', error);
analysisResultDiv.innerHTML = \`<h2>AI 日报分析失败</h2><div class="content-box error">请求失败,请检查网络或服务器。错误: \${escapeHtml(error.message)}</div>\`;
analysisResultDiv.style.display = 'block';
alert('请求失败,请检查网络或服务器。');
} finally {
button.textContent = originalText;
button.disabled = false;
}
}
</script>
</body></html>`;
}

View File

@@ -1,102 +0,0 @@
// src/index.js
import { handleWriteData } from './handlers/writeData.js';
import { handleGetContent } from './handlers/getContent.js';
import { handleGetContentHtml } from './handlers/getContentHtml.js';
import { handleGenAIContent, handleGenAIPodcastScript, handleGenAIDailyAnalysis } from './handlers/genAIContent.js'; // Import handleGenAIPodcastScript and handleGenAIDailyAnalysis
import { handleCommitToGitHub } from './handlers/commitToGitHub.js';
import { dataSources } from './dataFetchers.js'; // Import dataSources
import { handleLogin, isAuthenticated, handleLogout } from './auth.js'; // Import auth functions
export default {
async fetch(request, env) {
// Check essential environment variables
const requiredEnvVars = [
'DATA_KV', 'GEMINI_API_KEY', 'GEMINI_API_URL', 'DEFAULT_GEMINI_MODEL', 'OPEN_TRANSLATE', 'USE_MODEL_PLATFORM',
'GITHUB_TOKEN', 'GITHUB_REPO_OWNER', 'GITHUB_REPO_NAME','GITHUB_BRANCH',
'LOGIN_USERNAME', 'LOGIN_PASSWORD',
'PODCAST_TITLE','PODCAST_BEGIN','PODCAST_END',
'FOLO_COOKIE_KV_KEY','FOLO_DATA_API','FOLO_FILTER_DAYS',
'AIBASE_FEED_ID', 'XIAOHU_FEED_ID', 'HGPAPERS_FEED_ID', 'TWITTER_LIST_ID',
'AIBASE_FETCH_PAGES', 'XIAOHU_FETCH_PAGES', 'HGPAPERS_FETCH_PAGES', 'TWITTER_FETCH_PAGES',
//'AIBASE_API_URL', 'XIAOHU_API_URL','PROJECTS_API_URL','HGPAPERS_API_URL', 'TWITTER_API_URL', 'TWITTER_USERNAMES',
];
console.log(env);
const missingVars = requiredEnvVars.filter(varName => !env[varName]);
if (missingVars.length > 0) {
console.error(`CRITICAL: Missing environment variables/bindings: ${missingVars.join(', ')}`);
const errorPage = `
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Configuration Error</title></head>
<body style="font-family: sans-serif; padding: 20px;"><h1>Server Configuration Error</h1>
<p>Essential environment variables or bindings are missing: ${missingVars.join(', ')}. The service cannot operate.</p>
<p>Please contact the administrator.</p></body></html>`;
return new Response(errorPage, { status: 503, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
}
const url = new URL(request.url);
const path = url.pathname;
console.log(`Request received: ${request.method} ${path}`);
// Handle login path specifically
if (path === '/login') {
return await handleLogin(request, env);
} else if (path === '/logout') { // Handle logout path
return await handleLogout(request, env);
} else if (path === '/getContent' && request.method === 'GET') {
return await handleGetContent(request, env);
}
// Authentication check for all other paths
const { authenticated, cookie: newCookie } = await isAuthenticated(request, env);
if (!authenticated) {
// Redirect to login page, passing the original URL as a redirect parameter
const loginUrl = new URL('/login', url.origin);
loginUrl.searchParams.set('redirect', url.pathname + url.search);
return Response.redirect(loginUrl.toString(), 302);
}
// Original routing logic for authenticated requests
let response;
try {
if (path === '/writeData' && request.method === 'POST') {
response = await handleWriteData(request, env);
} else if (path === '/getContentHtml' && request.method === 'GET') {
// Prepare dataCategories for the HTML generation
const dataCategories = Object.keys(dataSources).map(key => ({
id: key,
name: dataSources[key].name
}));
response = await handleGetContentHtml(request, env, dataCategories);
} else if (path === '/genAIContent' && request.method === 'POST') {
response = await handleGenAIContent(request, env);
} else if (path === '/genAIPodcastScript' && request.method === 'POST') { // New route for podcast script
response = await handleGenAIPodcastScript(request, env);
} else if (path === '/genAIDailyAnalysis' && request.method === 'POST') { // New route for AI Daily Analysis
response = await handleGenAIDailyAnalysis(request, env);
} else if (path === '/commitToGitHub' && request.method === 'POST') {
response = await handleCommitToGitHub(request, env);
} else {
// const availableEndpoints = [
// "/writeData (POST) - Fetches, filters, translates, and stores data for today.",
// "/getContent?date=YYYY-MM-DD (GET) - Retrieves stored data as JSON.",
// "/getContentHtml?date=YYYY-MM-DD (GET) - Displays stored data as HTML with selection.",
// "/genAIContent (POST) - Generates summary from selected items. Expects 'date' and 'selectedItems' form data.",
// "/commitToGitHub (POST) - Commits generated content to GitHub. Triggered from /genAIContent result page.",
// "/logout (GET) - Clears the login cookie and redirects."
// ];
// let responseBody = `Not Found. Available endpoints:\n\n${availableEndpoints.map(ep => `- ${ep}`).join('\n')}\n\nSpecify a date parameter (e.g., ?date=2023-10-27) for content endpoints or they will default to today.`;
// return new Response(responseBody, { status: 404, headers: {'Content-Type': 'text/plain; charset=utf-8'} });
return new Response(null, { status: 404, headers: {'Content-Type': 'text/plain; charset=utf-8'} });
}
} catch (e) {
console.error("Unhandled error in fetch handler:", e);
return new Response(`Internal Server Error: ${e.message}`, { status: 500 });
}
// Renew cookie for authenticated requests
if (newCookie) {
response.headers.append('Set-Cookie', newCookie);
}
return response;
}
};

View File

@@ -1,12 +0,0 @@
// src/kv.js
export async function storeInKV(kvNamespace, key, value, expirationTtl = 86400 * 7) { // 7 days default
console.log(`Storing data in KV with key: ${key}`);
await kvNamespace.put(key, JSON.stringify(value), { expirationTtl });
}
export async function getFromKV(kvNamespace, key) {
console.log(`Retrieving data from KV with key: ${key}`);
const value = await kvNamespace.get(key);
return value ? JSON.parse(value) : null;
}

View File

@@ -1,37 +0,0 @@
export function getSystemPromptDailyAnalysis() {
return `
请您扮演一位拥有10年以上经验的资深AI行业分析师。
您的任务是针对下方提供的AI相关内容可能包括但不限于AI领域的新闻报道、学术论文摘要或全文、社会热点现象讨论、社交媒体上的关键意见、或开源项目的技术文档/介绍)进行一次深入、专业且全面的分析。
您的分析报告应力求正式、客观、并带有批判性视角,同时不失前瞻性和深刻洞察力。
请将您的分析结果组织成一份结构清晰的报告,至少包含以下核心部分。在每个部分中,请用精炼的语言阐述关键洞察,可适当使用分点进行表述:
AI内容分析报告
核心内容摘要与AI相关性解读
简明扼要地总结所提供内容的核心信息。
明确指出该内容与人工智能领域的关联性及其探讨的AI核心要素。
技术创新性与可行性评估:
创新性分析: 评估内容中所涉及的AI技术、算法、模型或概念的新颖程度和独特性。是现有技术的迭代改进还是颠覆性的创新
技术可行性: 分析所讨论的技术在当前技术水平下实现的可能性、成熟度、技术壁垒以及规模化应用的潜在挑战。
市场潜力与商业模式洞察:
分析其可能开拓的市场空间、目标用户群体及其规模。
探讨其潜在的商业化路径、可能的盈利模式及其可持续性。
对现有行业格局的影响评估:
分析该内容所揭示的技术或趋势可能对当前AI行业格局、相关产业链上下游以及市场竞争态势带来哪些具体影响或改变例如重塑竞争格局、催生新赛道、淘汰旧技术等
潜在风险与核心挑战识别:
指出该技术、现象或项目在发展、推广和应用过程中可能面临的主要技术瓶颈、市场接受度风险、数据安全与隐私问题、成本效益问题、以及潜在的政策法规监管挑战。
伦理与社会影响深思:
深入探讨其可能引发的伦理问题(如算法偏见、透明度缺失、问责机制、对就业市场的影响、数字鸿沟等)。
分析其对社会结构、人类行为模式、社会公平性及公共福祉可能产生的广泛而深远的影响。
与其他AI技术/公司/项目的对比分析 (如适用)
如果内容涉及具体的技术、产品、公司或项目请将其与行业内现有或相似的AI技术、解决方案或市场参与者进行对比。
明确指出其差异化特征、核心竞争力、潜在优势及相对劣势。
未来发展趋势预测与展望:
基于当前的分析预测其在未来3-5年内的发展方向、技术演进路径、可能的应用场景拓展以及对整个AI领域未来走向的启示。
探讨其是否可能成为未来的主流趋势或关键技术节点。
综合结论与战略洞察:
对分析对象给出一个整体性的评价。
提炼出最具价值的战略洞察或关键结论,供决策参考。
请确保您的分析逻辑严谨论据充分可基于提供内容本身或您作为资深分析师的行业认知并体现出专业AI行业分析师的深度与广度。
确保全文使用简体中文语言输出。
请将您需要分析的AI相关内容粘贴在下方
`;
}

View File

@@ -1,23 +0,0 @@
// Add new data sources
export function getSystemPromptPodcastFormatting(env) {
return `
你是一位经验丰富的播客脚本撰写人和编辑。你的任务是根据收到的内容改编成一个引人入胜的单人播客脚本。
重要原则:所有脚本内容必须严格基于提供的原始内容。不得捏造、歪曲或添加摘要中未包含的信息。
播客脚本要求:
开场白结束语:固定的开场白:“${env.PODCAST_BEGIN}”,并以固定的结束语结束:“${env.PODCAST_END}”。
目标受众和基调:目标受众是上班族和对人工智能感兴趣的人群。整体基调应轻松幽默,同时融入对未来的反思和对技术创新潜在影响的警示。特别注意:避免使用过于夸张或耸人听闻的词语(例如,“炸裂”、“震惊”、“令人兴奋的”、“改变游戏规则的”等)以及可能制造不必要焦虑的表达方式。保持积极和建设性的基调。
内容风格:
要有包袱有段子,像听徐志胜在讲脱口秀。
将原始副本转化为自然、口语化的表达,就像与听众聊天一样。
时长改编后的脚本内容应适合5分钟以内的口播时长。在改编过程中请注意适当的细节和简洁性以适应此时长要求。输入的摘要会相对较短因此请专注于将其自然地扩展成单口式的脚本。
结尾处理:
在根据所提供摘要编写的播客脚本主体内容之后,从你处理的原始摘要中提取核心关键词和高频词。
在脚本末尾以“本期关键词:”为标题单独列出这些关键词。对于所有单词,请在单词前加上“#”符号。
输出格式:
请直接输出完整的播客脚本。这包括:
固定的开场白结束语。
主要内容(口语化处理的摘要)。
结尾处的关键词列表。
不要包含任何其他解释性文字。
`;
}

View File

@@ -1,16 +0,0 @@
// Add new data sources
export function getSystemPromptSummarizationStepOne() {
return `
你是一名专业的文本摘要助理。你的任务是根据收到的文本类型(或其包含的多种内容类型)执行特定类型的摘要。
重要通用原则:所有摘要内容必须严格来源于原文。不得捏造、歪曲或添加原文未提及的信息。
**最终输出要求:**
* 通俗易懂:用简单的语言解释,避免使用专业术语。如果必须提及某个概念,尝试使用日常生活的例子或类比来帮助理解。
* 流畅自然:确保语句通顺自然。
* 生动有趣/引人入胜:擅长将复杂科技问题用幽默方式拆解,并引导观众进行批判性思考。也要有对技术发展方向、利弊的深刻反思和独到见解。风格要既活泼又不失深度,但要避免使用过于晦涩的网络俚语或不当词汇。
* 仅输出最终生成的摘要。不要包含任何关于你如何分析文本、确定其类型、分割文本或应用规则的解释性文字。如果合并了来自多个片段的摘要,请确保合并后的文本流畅自然。
* 输出语言与格式:内容必须为简体中文,并严格采用 Markdown 格式进行排版。
* 关键词高亮:请在内容中自动识别并对核心关键词或重要概念进行加黑加粗处理,以增强可读性和重点突出。
`;
}

View File

@@ -1,15 +0,0 @@
// Add new data sources
export function getSystemPromptSummarizationStepTwo() {
return `
你是一名专业的文本摘要助理。你的任务是根据收到的文本类型(或其包含的多种内容类型)执行特定类型的摘要。
重要通用原则:所有摘要内容必须严格来源于原文。不得捏造、歪曲或添加原文未提及的信息。
**最终输出要求:**
* 参照以上条件优化文本内容按内容自动分段段落数量要和原始一样然后按照“AI产品与功能更新,AI前沿研究,AI行业展望与社会影响,科技博主观点, 开源TOP项目, 社媒分享“的顺序重新分类,增加分类标题(只加大加粗加黑),排序。
* 仅输出最终生成的摘要。不要包含任何关于你如何分析文本、确定其类型、分割文本或应用规则的解释性文字。如果合并了来自多个片段的摘要,请确保合并后的文本流畅自然。
* 输出语言与格式:内容必须为简体中文,并严格采用 Markdown 格式进行排版。
* 关键词高亮:请在内容中自动识别并对核心关键词或重要概念进行加黑加粗处理,以增强可读性和重点突出。
* 段落序列化在每个独立段落的开头必须添加以“1.”开头的阿拉伯数字序列确保数字正确递增例如1.、2.、3.、...)。
`;
}

BIN
today/archive.tar.gz Normal file

Binary file not shown.

266
today/book/2025-06-11.html Normal file
View File

@@ -0,0 +1,266 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Today - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-2025611"><a class="header" href="#ai洞察日报-2025611">AI洞察日报 2025/6/11</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li><strong>豆包大模型家族</strong>将在2025 FORCE原动力大会上重磅发布全新的<strong>豆包·视频生成模型</strong>。这款模型可谓"创意魔法棒”,它凭借高效结构和多任务统一建模等黑科技,不仅支持<strong>无缝多镜头叙事</strong>,还能<strong>精准响应多动作</strong>,甚至能像专业摄影师一样<strong>随心运镜</strong>,轻松生成写实、动漫等多种风格的<strong>高品质视频</strong>,简直是视频创作者的福音!
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388517021358447365987976.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388517021358447365987976.png" alt="图片" title="img" /></a> <br/></li>
<li>xAI开发的<strong>Grok</strong>人工智能正大刀阔斧地接管X平台的<strong>推荐算法</strong>,同时优化了评论排序机制。这意味着,平台将优先推荐<strong>高质量内容</strong>,而非仅仅看粉丝量,这无疑给那些粉丝较少但有真材实料的"小号”和新人带来了前所未有的曝光机会,旨在打造一个更公平、更开放的内容生态,让好内容不再"蒙尘”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514989498792027745193.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514989498792027745193.png" alt="图片" title="img" /></a> <br/></li>
<li><strong>豆包App</strong>近期也对"一句话P图”功能进行了全面升级它基于强大的SeedEdit 3.0模型,新增了一键添加/替换文字、质感风格迁移和局部图像编辑增强等一系列酷炫修图玩法。这波升级简直是把专业修图师请进了手机,让普通用户也能无需专业技能,轻松搞定个性化照片创作,让"修图小白”也能变身"修图大师”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514703219058043604298.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514703219058043604298.png" alt="图片" title="img" /></a> <br/></li>
<li>苹果在WWDC 2025大会上带来了iOS 26系统的"杀手级”功能——<strong>视觉智能</strong>。有了它,你可以在屏幕上的任何图片或信息上进行提问、搜索,甚至自动识别事件详情,简直是手机的"智能眼”。这项升级通过AI技术实现了屏幕内容的"一眼识别”,大大提升了交互体验的便捷性与智能化程度,还能自动提取事件信息加入日历,让你的数字生活更加省心。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514197880401555868249.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514197880401555868249.png" alt="图片" title="img" /></a> <br/></li>
<li>好消息!<strong>沉浸式翻译</strong>迎来重大更新,现在已能对<strong>推特X视频</strong>进行<strong>实时翻译</strong>。即便视频没有原生字幕,它也能帮你"神同步”地显示<strong>中英双语字幕</strong>。这下刷X平台视频再也不用担心语言不通了简直是跨文化交流的"神助攻”,彻底消除了语言障碍,让世界更近。
<a href="https://x.com/imxiaohu/status/1932299897388277804">Link</a></li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li>香港大学和华为诺亚方舟实验室强强联手,推出了颠覆性的<strong>FUDOKI</strong>模型。这款模型采用<strong>非掩码离散流匹配架构</strong>,成功突破了传统自回归模型的束缚,实现了更加灵活高效的<strong>多模态生成与理解</strong>能力。它通过独特的<strong>并行去噪机制</strong>,显著提升了复杂推理和生成任务的表现,尤其在<strong>图像生成</strong>方面表现惊艳,为未来<strong>通用人工智能</strong>的发展铺平了道路。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202405161743136484_4.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202405161743136484_4.jpg" alt="图片" title="img" /></a> <br/></li>
<li>香港科技大学和快手科技的研究团队联合发布了<strong>EvoSearch进化搜索技术</strong>这简直是AI作画领域的一股清流它彻底颠覆了以往"大模型、大算力”的固有思维巧妙地将达尔文的进化论思想融入AI生成过程让那些"小个子”模型也能生成超越甚至媲美"大块头”的<strong>高质量图像和视频</strong>。这项突破性技术有望开启AI创作的**"智能进化”时代**让AI模型在推理阶段释放更深层次的潜力。相关项目主页、代码和论文链接已发布<a href="https://tinnerhrhe.github.io/evosearch/">https://tinnerhrhe.github.io/evosearch/</a><a href="https://github.com/tinnerhrhe/EvoSearch-codes">https://github.com/tinnerhrhe/EvoSearch-codes</a><a href="https://arxiv.org/abs/2505.17618">https://arxiv.org/abs/2505.17618</a>
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516498517715873339996.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516498517715873339996.png" alt="图片" /></a> <br/>
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516503306155376085044.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516503306155376085044.png" alt="图片" /></a> <br/></li>
<li>一篇名为"<strong>玩中泛化:通过游戏学习推理</strong>”的学术论文揭示了令人兴奋的发现:<strong>多模态大型语言模型MLLMs<strong>通过玩简单的</strong>街机游戏</strong>,竟然能<strong>显著提升其跨领域的多模态推理能力</strong>,甚至超越了在特定数据上训练的<strong>专业模型</strong>!这无疑为未来<strong>通用AI能力的培养</strong>指明了一条充满趣味的新方向让AI在"玩乐”中变得更聪明。
<a href="https://arxiv.org/abs/2506.08011">此链接</a></li>
<li>新论文《梦境之地》(<strong>Dreamland</strong>)提出了一种结合物理模拟器与大型生成模型的混合框架。它的目标是创造出高度可控且逼真的动态虚拟世界,不仅显著提升了图像质量与可控性,更重要的是,有望为<strong>具身AI智能体</strong>的训练提供一个理想的"游乐场”和"实验室”助力AI在现实世界中更好地学习和行动。
<a href="https://arxiv.org/abs/2506.08006">Link</a></li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>理想汽车近期进行了组织架构的"大变身”,正式成立了**"空间机器人”<strong></strong>"穿戴机器人”<strong>两个全新的二级部门。这不仅仅是部门调整,更预示着理想汽车正从传统的汽车制造商转型为</strong>智能出行生态构建者**。他们旨在通过机器人技术,构建一个涵盖车内"第三空间”和车外智能穿戴设备的完整智能生活服务体系,这无疑将为理想汽车在竞争激烈的市场中带来新的差异化优势,让"第三空间”战略不再只是一个概念。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202105061137083176_6.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202105061137083176_6.jpg" alt="理想汽车" /></a> <br/></li>
<li>俄亥俄州立大学宣布从今年起,将强制所有学生接受<strong>人工智能AI培训</strong>,这简直是为未来职场"量身定制”的技能包!学校推出了**"AI流利度”计划**将AI教育全面融入本科生课程旨在培养学生将专业知识与AI技术有效结合的能力。当然学校也强调学生不得利用生成性AI来"蒙混过关”,同时加强教师培训以维护<strong>学术诚信</strong>。此举旨在确保每位毕业生都能在其专业领域有效应用AI并积极响应俄亥俄州AI教育联盟在K-12教育中推动AI教育的努力让AI真正成为每个人的"超级助手”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202306251749094253_12.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202306251749094253_12.jpg" alt="学习 考试 高考 教育 (1)" /></a> <br/></li>
<li>知名思考者李继刚一针见血地指出当AI技术变得越发<strong>高效强大</strong>时,人类的<strong>判断力</strong><strong>品味</strong>和对事物<strong>目的的理解</strong>反而会变得更为<strong>硬核</strong>。因为AI虽然能生成万千方案并完美执行却无法替代人类进行<strong>选择</strong>、定义<strong></strong>,更无法洞悉复杂且深邃的<strong>人性</strong>。这提醒我们在AI时代真正有价值的或许正是那些AI无法企及的"人类专属技能”。
<a href="https://m.okjike.com/originalPosts/68480c352b31fa0880f554c5">Link</a></li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li>小红书的 hi lab 团队近日献出了一份"大礼”——首个开源文本大模型<strong>dots.llm1</strong>这款拥有1420亿参数的<strong>混合专家MoE语言模型</strong>在海量真实数据训练后其性能竟然能媲美阿里巴巴的Qwen2.5-72B这简直是模型界的"黑马”此次开源不仅彰显了小红书在人工智能领域的技术雄心更旨在提供更智能化的服务并激励开发者们一起加入AI研究的"大合唱”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/201811151633429180_32.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/201811151633429180_32.jpg" alt="图片" title="img" /></a> <br/></li>
<li>近期GitHub上两个<strong>AI相关</strong>的项目人气爆棚。其中拥有10785星的"<strong>newsnow</strong>”项目,它旨在为用户提供<strong>优雅的实时热点新闻阅读体验</strong>,让信息获取既便捷又高效,简直是"新闻控”的福音,地址在这里:<a href="https://github.com/ourongxing/newsnow">此链接</a>。另一个是"<strong>GenAI_Agents</strong>”项目以12884星的高热度为开发者提供了<strong>从基础到高级的生成式AI智能体技术教程与实现</strong>,旨在赋能构建更智能的<strong>交互式AI系统</strong>,详情可访问:<a href="https://github.com/NirDiamant/GenAI_Agents">此链接</a></li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li>Gorden Sun在社交媒体上分享了<strong>Mirage</strong>虚拟人模型产品,这款产品简直是"数字分身”的魔法师!它能通过音频驱动,生成生动、嘴型同步且表情丰富的<strong>虚拟人视频</strong>栩栩如生。Gorden Sun还特别强调该产品的详细技术报告对研究人员具有极高的参考价值看来又将引发一场虚拟人技术的"军备竞赛”。
<a href="https://x.com/Gorden_Sun/status/1932446920884334635">Link</a></li>
<li>Sam Altman在X平台发文宣布<strong>o3产品</strong>价格已大幅下调80%,这简直是"福利大放送”!他表达了对用户创新使用的期待,并预告了<strong>o3-pro版本</strong>也将提供令人满意的定价。看来Sora之父又在鼓励大家放开手脚用更低的成本去探索AI的无限可能了。
<a href="https://x.com/sama/status/1932434606558462459">Link</a></li>
<li>Ryan ᵐᶠᵉʳ 🦄d/acc抛出了一个关于<strong>下一代创业者</strong>的深刻观点:他们不应被束缚于模仿乔布斯等前代成功模式,也不应受限于<strong>有限的低质量输入</strong>,而应<strong>忠于自我</strong>,以<strong>独特</strong>的"vibe”和<strong>玩乐精神</strong><strong>自由探索</strong>。这就像在说,别做别人的影子,去创造属于你自己的"游戏规则”!
<a href="https://x.com/RyanMfer/status/1932387601341984815">Link</a></li>
<li>用户wwwgoubuli分享了AI在实际工作中的一个有趣转变。他提到远程团队成员初时因担心被视为偷懒而<strong>不敢充分使用AI</strong>但在他多次分享AI"正确用法”后,团队逐渐"放开手脚”,结果代码的<strong>注释、规范和质量</strong>均显著提升,同事们也展现出更高的<strong>自信</strong>。这简直是AI赋能团队效率提升的"教科书式”案例,打破了心中的"AI焦虑”。
<a href="https://x.com/wwwgoubuli/status/1932358909865480333">Link</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="next prefetch" href="daily/2025-06-11.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="next prefetch" href="daily/2025-06-11.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

211
today/book/404.html Normal file
View File

@@ -0,0 +1,211 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Page not found - By 何夕2077</title>
<base href="/">
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="document-not-found-404"><a class="header" href="#document-not-found-404">Document not found (404)</a></h1>
<p>This URL is invalid, sorry. Please use the navigation bar or search to continue.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,78 @@
/*
Based off of the Ayu theme
Original by Dempfi (https://github.com/dempfi/ayu)
*/
.hljs {
display: block;
overflow-x: auto;
background: #191f26;
color: #e6e1cf;
}
.hljs-comment,
.hljs-quote {
color: #5c6773;
font-style: italic;
}
.hljs-variable,
.hljs-template-variable,
.hljs-attribute,
.hljs-attr,
.hljs-regexp,
.hljs-link,
.hljs-selector-id,
.hljs-selector-class {
color: #ff7733;
}
.hljs-number,
.hljs-meta,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params {
color: #ffee99;
}
.hljs-string,
.hljs-bullet {
color: #b8cc52;
}
.hljs-title,
.hljs-built_in,
.hljs-section {
color: #ffb454;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-symbol {
color: #ff7733;
}
.hljs-name {
color: #36a3d9;
}
.hljs-tag {
color: #00568d;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-addition {
color: #91b362;
}
.hljs-deletion {
color: #d96c75;
}

818
today/book/book.js Normal file
View File

@@ -0,0 +1,818 @@
'use strict';
/* global default_theme, default_dark_theme, default_light_theme, hljs, ClipboardJS */
// Fix back button cache problem
window.onunload = function() { };
// Global variable, shared between modules
function playground_text(playground, hidden = true) {
const code_block = playground.querySelector('code');
if (window.ace && code_block.classList.contains('editable')) {
const editor = window.ace.edit(code_block);
return editor.getValue();
} else if (hidden) {
return code_block.textContent;
} else {
return code_block.innerText;
}
}
(function codeSnippets() {
function fetch_with_timeout(url, options, timeout = 6000) {
return Promise.race([
fetch(url, options),
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)),
]);
}
const playgrounds = Array.from(document.querySelectorAll('.playground'));
if (playgrounds.length > 0) {
fetch_with_timeout('https://play.rust-lang.org/meta/crates', {
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
mode: 'cors',
})
.then(response => response.json())
.then(response => {
// get list of crates available in the rust playground
const playground_crates = response.crates.map(item => item['id']);
playgrounds.forEach(block => handle_crate_list_update(block, playground_crates));
});
}
function handle_crate_list_update(playground_block, playground_crates) {
// update the play buttons after receiving the response
update_play_button(playground_block, playground_crates);
// and install on change listener to dynamically update ACE editors
if (window.ace) {
const code_block = playground_block.querySelector('code');
if (code_block.classList.contains('editable')) {
const editor = window.ace.edit(code_block);
editor.addEventListener('change', () => {
update_play_button(playground_block, playground_crates);
});
// add Ctrl-Enter command to execute rust code
editor.commands.addCommand({
name: 'run',
bindKey: {
win: 'Ctrl-Enter',
mac: 'Ctrl-Enter',
},
exec: _editor => run_rust_code(playground_block),
});
}
}
}
// updates the visibility of play button based on `no_run` class and
// used crates vs ones available on https://play.rust-lang.org
function update_play_button(pre_block, playground_crates) {
const play_button = pre_block.querySelector('.play-button');
// skip if code is `no_run`
if (pre_block.querySelector('code').classList.contains('no_run')) {
play_button.classList.add('hidden');
return;
}
// get list of `extern crate`'s from snippet
const txt = playground_text(pre_block);
const re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g;
const snippet_crates = [];
let item;
// eslint-disable-next-line no-cond-assign
while (item = re.exec(txt)) {
snippet_crates.push(item[1]);
}
// check if all used crates are available on play.rust-lang.org
const all_available = snippet_crates.every(function(elem) {
return playground_crates.indexOf(elem) > -1;
});
if (all_available) {
play_button.classList.remove('hidden');
} else {
play_button.classList.add('hidden');
}
}
function run_rust_code(code_block) {
let result_block = code_block.querySelector('.result');
if (!result_block) {
result_block = document.createElement('code');
result_block.className = 'result hljs language-bash';
code_block.append(result_block);
}
const text = playground_text(code_block);
const classes = code_block.querySelector('code').classList;
let edition = '2015';
classes.forEach(className => {
if (className.startsWith('edition')) {
edition = className.slice(7);
}
});
const params = {
version: 'stable',
optimize: '0',
code: text,
edition: edition,
};
if (text.indexOf('#![feature') !== -1) {
params.version = 'nightly';
}
result_block.innerText = 'Running...';
fetch_with_timeout('https://play.rust-lang.org/evaluate.json', {
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
mode: 'cors',
body: JSON.stringify(params),
})
.then(response => response.json())
.then(response => {
if (response.result.trim() === '') {
result_block.innerText = 'No output';
result_block.classList.add('result-no-output');
} else {
result_block.innerText = response.result;
result_block.classList.remove('result-no-output');
}
})
.catch(error => result_block.innerText = 'Playground Communication: ' + error.message);
}
// Syntax highlighting Configuration
hljs.configure({
tabReplace: ' ', // 4 spaces
languages: [], // Languages used for auto-detection
});
const code_nodes = Array
.from(document.querySelectorAll('code'))
// Don't highlight `inline code` blocks in headers.
.filter(function(node) {
return !node.parentElement.classList.contains('header');
});
if (window.ace) {
// language-rust class needs to be removed for editable
// blocks or highlightjs will capture events
code_nodes
.filter(function(node) {
return node.classList.contains('editable');
})
.forEach(function(block) {
block.classList.remove('language-rust');
});
code_nodes
.filter(function(node) {
return !node.classList.contains('editable');
})
.forEach(function(block) {
hljs.highlightBlock(block);
});
} else {
code_nodes.forEach(function(block) {
hljs.highlightBlock(block);
});
}
// Adding the hljs class gives code blocks the color css
// even if highlighting doesn't apply
code_nodes.forEach(function(block) {
block.classList.add('hljs');
});
Array.from(document.querySelectorAll('code.hljs')).forEach(function(block) {
const lines = Array.from(block.querySelectorAll('.boring'));
// If no lines were hidden, return
if (!lines.length) {
return;
}
block.classList.add('hide-boring');
const buttons = document.createElement('div');
buttons.className = 'buttons';
buttons.innerHTML = '<button class="fa fa-eye" title="Show hidden lines" \
aria-label="Show hidden lines"></button>';
// add expand button
const pre_block = block.parentNode;
pre_block.insertBefore(buttons, pre_block.firstChild);
pre_block.querySelector('.buttons').addEventListener('click', function(e) {
if (e.target.classList.contains('fa-eye')) {
e.target.classList.remove('fa-eye');
e.target.classList.add('fa-eye-slash');
e.target.title = 'Hide lines';
e.target.setAttribute('aria-label', e.target.title);
block.classList.remove('hide-boring');
} else if (e.target.classList.contains('fa-eye-slash')) {
e.target.classList.remove('fa-eye-slash');
e.target.classList.add('fa-eye');
e.target.title = 'Show hidden lines';
e.target.setAttribute('aria-label', e.target.title);
block.classList.add('hide-boring');
}
});
});
if (window.playground_copyable) {
Array.from(document.querySelectorAll('pre code')).forEach(function(block) {
const pre_block = block.parentNode;
if (!pre_block.classList.contains('playground')) {
let buttons = pre_block.querySelector('.buttons');
if (!buttons) {
buttons = document.createElement('div');
buttons.className = 'buttons';
pre_block.insertBefore(buttons, pre_block.firstChild);
}
const clipButton = document.createElement('button');
clipButton.className = 'clip-button';
clipButton.title = 'Copy to clipboard';
clipButton.setAttribute('aria-label', clipButton.title);
clipButton.innerHTML = '<i class="tooltiptext"></i>';
buttons.insertBefore(clipButton, buttons.firstChild);
}
});
}
// Process playground code blocks
Array.from(document.querySelectorAll('.playground')).forEach(function(pre_block) {
// Add play button
let buttons = pre_block.querySelector('.buttons');
if (!buttons) {
buttons = document.createElement('div');
buttons.className = 'buttons';
pre_block.insertBefore(buttons, pre_block.firstChild);
}
const runCodeButton = document.createElement('button');
runCodeButton.className = 'fa fa-play play-button';
runCodeButton.hidden = true;
runCodeButton.title = 'Run this code';
runCodeButton.setAttribute('aria-label', runCodeButton.title);
buttons.insertBefore(runCodeButton, buttons.firstChild);
runCodeButton.addEventListener('click', () => {
run_rust_code(pre_block);
});
if (window.playground_copyable) {
const copyCodeClipboardButton = document.createElement('button');
copyCodeClipboardButton.className = 'clip-button';
copyCodeClipboardButton.innerHTML = '<i class="tooltiptext"></i>';
copyCodeClipboardButton.title = 'Copy to clipboard';
copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title);
buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild);
}
const code_block = pre_block.querySelector('code');
if (window.ace && code_block.classList.contains('editable')) {
const undoChangesButton = document.createElement('button');
undoChangesButton.className = 'fa fa-history reset-button';
undoChangesButton.title = 'Undo changes';
undoChangesButton.setAttribute('aria-label', undoChangesButton.title);
buttons.insertBefore(undoChangesButton, buttons.firstChild);
undoChangesButton.addEventListener('click', function() {
const editor = window.ace.edit(code_block);
editor.setValue(editor.originalCode);
editor.clearSelection();
});
}
});
})();
(function themes() {
const html = document.querySelector('html');
const themeToggleButton = document.getElementById('theme-toggle');
const themePopup = document.getElementById('theme-list');
const themeColorMetaTag = document.querySelector('meta[name="theme-color"]');
const themeIds = [];
themePopup.querySelectorAll('button.theme').forEach(function(el) {
themeIds.push(el.id);
});
const stylesheets = {
ayuHighlight: document.querySelector('#ayu-highlight-css'),
tomorrowNight: document.querySelector('#tomorrow-night-css'),
highlight: document.querySelector('#highlight-css'),
};
function showThemes() {
themePopup.style.display = 'block';
themeToggleButton.setAttribute('aria-expanded', true);
themePopup.querySelector('button#' + get_theme()).focus();
}
function updateThemeSelected() {
themePopup.querySelectorAll('.theme-selected').forEach(function(el) {
el.classList.remove('theme-selected');
});
const selected = get_saved_theme() ?? 'default_theme';
let element = themePopup.querySelector('button#' + selected);
if (element === null) {
// Fall back in case there is no "Default" item.
element = themePopup.querySelector('button#' + get_theme());
}
element.classList.add('theme-selected');
}
function hideThemes() {
themePopup.style.display = 'none';
themeToggleButton.setAttribute('aria-expanded', false);
themeToggleButton.focus();
}
function get_saved_theme() {
let theme = null;
try {
theme = localStorage.getItem('mdbook-theme');
} catch (e) {
// ignore error.
}
return theme;
}
function delete_saved_theme() {
localStorage.removeItem('mdbook-theme');
}
function get_theme() {
const theme = get_saved_theme();
if (theme === null || theme === undefined || !themeIds.includes(theme)) {
if (typeof default_dark_theme === 'undefined') {
// A customized index.hbs might not define this, so fall back to
// old behavior of determining the default on page load.
return default_theme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches
? default_dark_theme
: default_light_theme;
} else {
return theme;
}
}
let previousTheme = default_theme;
function set_theme(theme, store = true) {
let ace_theme;
if (theme === 'coal' || theme === 'navy') {
stylesheets.ayuHighlight.disabled = true;
stylesheets.tomorrowNight.disabled = false;
stylesheets.highlight.disabled = true;
ace_theme = 'ace/theme/tomorrow_night';
} else if (theme === 'ayu') {
stylesheets.ayuHighlight.disabled = false;
stylesheets.tomorrowNight.disabled = true;
stylesheets.highlight.disabled = true;
ace_theme = 'ace/theme/tomorrow_night';
} else {
stylesheets.ayuHighlight.disabled = true;
stylesheets.tomorrowNight.disabled = true;
stylesheets.highlight.disabled = false;
ace_theme = 'ace/theme/dawn';
}
setTimeout(function() {
themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor;
}, 1);
if (window.ace && window.editors) {
window.editors.forEach(function(editor) {
editor.setTheme(ace_theme);
});
}
if (store) {
try {
localStorage.setItem('mdbook-theme', theme);
} catch (e) {
// ignore error.
}
}
html.classList.remove(previousTheme);
html.classList.add(theme);
previousTheme = theme;
updateThemeSelected();
}
const query = window.matchMedia('(prefers-color-scheme: dark)');
query.onchange = function() {
set_theme(get_theme(), false);
};
// Set theme.
set_theme(get_theme(), false);
themeToggleButton.addEventListener('click', function() {
if (themePopup.style.display === 'block') {
hideThemes();
} else {
showThemes();
}
});
themePopup.addEventListener('click', function(e) {
let theme;
if (e.target.className === 'theme') {
theme = e.target.id;
} else if (e.target.parentElement.className === 'theme') {
theme = e.target.parentElement.id;
} else {
return;
}
if (theme === 'default_theme' || theme === null) {
delete_saved_theme();
set_theme(get_theme(), false);
} else {
set_theme(theme);
}
});
themePopup.addEventListener('focusout', function(e) {
// e.relatedTarget is null in Safari and Firefox on macOS (see workaround below)
if (!!e.relatedTarget &&
!themeToggleButton.contains(e.relatedTarget) &&
!themePopup.contains(e.relatedTarget)
) {
hideThemes();
}
});
// Should not be needed, but it works around an issue on macOS & iOS:
// https://github.com/rust-lang/mdBook/issues/628
document.addEventListener('click', function(e) {
if (themePopup.style.display === 'block' &&
!themeToggleButton.contains(e.target) &&
!themePopup.contains(e.target)
) {
hideThemes();
}
});
document.addEventListener('keydown', function(e) {
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
return;
}
if (!themePopup.contains(e.target)) {
return;
}
let li;
switch (e.key) {
case 'Escape':
e.preventDefault();
hideThemes();
break;
case 'ArrowUp':
e.preventDefault();
li = document.activeElement.parentElement;
if (li && li.previousElementSibling) {
li.previousElementSibling.querySelector('button').focus();
}
break;
case 'ArrowDown':
e.preventDefault();
li = document.activeElement.parentElement;
if (li && li.nextElementSibling) {
li.nextElementSibling.querySelector('button').focus();
}
break;
case 'Home':
e.preventDefault();
themePopup.querySelector('li:first-child button').focus();
break;
case 'End':
e.preventDefault();
themePopup.querySelector('li:last-child button').focus();
break;
}
});
})();
(function sidebar() {
const body = document.querySelector('body');
const sidebar = document.getElementById('sidebar');
const sidebarLinks = document.querySelectorAll('#sidebar a');
const sidebarToggleButton = document.getElementById('sidebar-toggle');
const sidebarToggleAnchor = document.getElementById('sidebar-toggle-anchor');
const sidebarResizeHandle = document.getElementById('sidebar-resize-handle');
let firstContact = null;
function showSidebar() {
body.classList.remove('sidebar-hidden');
body.classList.add('sidebar-visible');
Array.from(sidebarLinks).forEach(function(link) {
link.setAttribute('tabIndex', 0);
});
sidebarToggleButton.setAttribute('aria-expanded', true);
sidebar.setAttribute('aria-hidden', false);
try {
localStorage.setItem('mdbook-sidebar', 'visible');
} catch (e) {
// Ignore error.
}
}
function hideSidebar() {
body.classList.remove('sidebar-visible');
body.classList.add('sidebar-hidden');
Array.from(sidebarLinks).forEach(function(link) {
link.setAttribute('tabIndex', -1);
});
sidebarToggleButton.setAttribute('aria-expanded', false);
sidebar.setAttribute('aria-hidden', true);
try {
localStorage.setItem('mdbook-sidebar', 'hidden');
} catch (e) {
// Ignore error.
}
}
// Toggle sidebar
sidebarToggleAnchor.addEventListener('change', function sidebarToggle() {
if (sidebarToggleAnchor.checked) {
const current_width = parseInt(
document.documentElement.style.getPropertyValue('--sidebar-target-width'), 10);
if (current_width < 150) {
document.documentElement.style.setProperty('--sidebar-target-width', '150px');
}
showSidebar();
} else {
hideSidebar();
}
});
sidebarResizeHandle.addEventListener('mousedown', initResize, false);
function initResize() {
window.addEventListener('mousemove', resize, false);
window.addEventListener('mouseup', stopResize, false);
body.classList.add('sidebar-resizing');
}
function resize(e) {
let pos = e.clientX - sidebar.offsetLeft;
if (pos < 20) {
hideSidebar();
} else {
if (body.classList.contains('sidebar-hidden')) {
showSidebar();
}
pos = Math.min(pos, window.innerWidth - 100);
document.documentElement.style.setProperty('--sidebar-target-width', pos + 'px');
}
}
//on mouseup remove windows functions mousemove & mouseup
function stopResize() {
body.classList.remove('sidebar-resizing');
window.removeEventListener('mousemove', resize, false);
window.removeEventListener('mouseup', stopResize, false);
}
document.addEventListener('touchstart', function(e) {
firstContact = {
x: e.touches[0].clientX,
time: Date.now(),
};
}, { passive: true });
document.addEventListener('touchmove', function(e) {
if (!firstContact) {
return;
}
const curX = e.touches[0].clientX;
const xDiff = curX - firstContact.x,
tDiff = Date.now() - firstContact.time;
if (tDiff < 250 && Math.abs(xDiff) >= 150) {
if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) {
showSidebar();
} else if (xDiff < 0 && curX < 300) {
hideSidebar();
}
firstContact = null;
}
}, { passive: true });
})();
(function chapterNavigation() {
document.addEventListener('keydown', function(e) {
if (e.altKey || e.ctrlKey || e.metaKey) {
return;
}
if (window.search && window.search.hasFocus()) {
return;
}
const html = document.querySelector('html');
function next() {
const nextButton = document.querySelector('.nav-chapters.next');
if (nextButton) {
window.location.href = nextButton.href;
}
}
function prev() {
const previousButton = document.querySelector('.nav-chapters.previous');
if (previousButton) {
window.location.href = previousButton.href;
}
}
function showHelp() {
const container = document.getElementById('mdbook-help-container');
const overlay = document.getElementById('mdbook-help-popup');
container.style.display = 'flex';
// Clicking outside the popup will dismiss it.
const mouseHandler = event => {
if (overlay.contains(event.target)) {
return;
}
if (event.button !== 0) {
return;
}
event.preventDefault();
event.stopPropagation();
document.removeEventListener('mousedown', mouseHandler);
hideHelp();
};
// Pressing esc will dismiss the popup.
const escapeKeyHandler = event => {
if (event.key === 'Escape') {
event.preventDefault();
event.stopPropagation();
document.removeEventListener('keydown', escapeKeyHandler, true);
hideHelp();
}
};
document.addEventListener('keydown', escapeKeyHandler, true);
document.getElementById('mdbook-help-container')
.addEventListener('mousedown', mouseHandler);
}
function hideHelp() {
document.getElementById('mdbook-help-container').style.display = 'none';
}
// Usually needs the Shift key to be pressed
switch (e.key) {
case '?':
e.preventDefault();
showHelp();
break;
}
// Rest of the keys are only active when the Shift key is not pressed
if (e.shiftKey) {
return;
}
switch (e.key) {
case 'ArrowRight':
e.preventDefault();
if (html.dir === 'rtl') {
prev();
} else {
next();
}
break;
case 'ArrowLeft':
e.preventDefault();
if (html.dir === 'rtl') {
next();
} else {
prev();
}
break;
}
});
})();
(function clipboard() {
const clipButtons = document.querySelectorAll('.clip-button');
function hideTooltip(elem) {
elem.firstChild.innerText = '';
elem.className = 'clip-button';
}
function showTooltip(elem, msg) {
elem.firstChild.innerText = msg;
elem.className = 'clip-button tooltipped';
}
const clipboardSnippets = new ClipboardJS('.clip-button', {
text: function(trigger) {
hideTooltip(trigger);
const playground = trigger.closest('pre');
return playground_text(playground, false);
},
});
Array.from(clipButtons).forEach(function(clipButton) {
clipButton.addEventListener('mouseout', function(e) {
hideTooltip(e.currentTarget);
});
});
clipboardSnippets.on('success', function(e) {
e.clearSelection();
showTooltip(e.trigger, 'Copied!');
});
clipboardSnippets.on('error', function(e) {
showTooltip(e.trigger, 'Clipboard error!');
});
})();
(function scrollToTop() {
const menuTitle = document.querySelector('.menu-title');
menuTitle.addEventListener('click', function() {
document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' });
});
})();
(function controllMenu() {
const menu = document.getElementById('menu-bar');
(function controllPosition() {
let scrollTop = document.scrollingElement.scrollTop;
let prevScrollTop = scrollTop;
const minMenuY = -menu.clientHeight - 50;
// When the script loads, the page can be at any scroll (e.g. if you reforesh it).
menu.style.top = scrollTop + 'px';
// Same as parseInt(menu.style.top.slice(0, -2), but faster
let topCache = menu.style.top.slice(0, -2);
menu.classList.remove('sticky');
let stickyCache = false; // Same as menu.classList.contains('sticky'), but faster
document.addEventListener('scroll', function() {
scrollTop = Math.max(document.scrollingElement.scrollTop, 0);
// `null` means that it doesn't need to be updated
let nextSticky = null;
let nextTop = null;
const scrollDown = scrollTop > prevScrollTop;
const menuPosAbsoluteY = topCache - scrollTop;
if (scrollDown) {
nextSticky = false;
if (menuPosAbsoluteY > 0) {
nextTop = prevScrollTop;
}
} else {
if (menuPosAbsoluteY > 0) {
nextSticky = true;
} else if (menuPosAbsoluteY < minMenuY) {
nextTop = prevScrollTop + minMenuY;
}
}
if (nextSticky === true && stickyCache === false) {
menu.classList.add('sticky');
stickyCache = true;
} else if (nextSticky === false && stickyCache === true) {
menu.classList.remove('sticky');
stickyCache = false;
}
if (nextTop !== null) {
menu.style.top = nextTop + 'px';
topCache = nextTop;
}
prevScrollTop = scrollTop;
}, { passive: true });
})();
(function controllBorder() {
function updateBorder() {
if (menu.offsetTop === 0) {
menu.classList.remove('bordered');
} else {
menu.classList.add('bordered');
}
}
updateBorder();
document.addEventListener('scroll', updateBorder, { passive: true });
})();
})();

7
today/book/clipboard.min.js vendored Normal file

File diff suppressed because one or more lines are too long

701
today/book/css/chrome.css Normal file
View File

@@ -0,0 +1,701 @@
/* CSS for UI elements (a.k.a. chrome) */
html {
scrollbar-color: var(--scrollbar) var(--bg);
}
#searchresults a,
.content a:link,
a:visited,
a > .hljs {
color: var(--links);
}
/*
body-container is necessary because mobile browsers don't seem to like
overflow-x on the body tag when there is a <meta name="viewport"> tag.
*/
#body-container {
/*
This is used when the sidebar pushes the body content off the side of
the screen on small screens. Without it, dragging on mobile Safari
will want to reposition the viewport in a weird way.
*/
overflow-x: clip;
}
/* Menu Bar */
#menu-bar,
#menu-bar-hover-placeholder {
z-index: 101;
margin: auto calc(0px - var(--page-padding));
}
#menu-bar {
position: relative;
display: flex;
flex-wrap: wrap;
background-color: var(--bg);
border-block-end-color: var(--bg);
border-block-end-width: 1px;
border-block-end-style: solid;
}
#menu-bar.sticky,
#menu-bar-hover-placeholder:hover + #menu-bar,
#menu-bar:hover,
html.sidebar-visible #menu-bar {
position: -webkit-sticky;
position: sticky;
top: 0 !important;
}
#menu-bar-hover-placeholder {
position: sticky;
position: -webkit-sticky;
top: 0;
height: var(--menu-bar-height);
}
#menu-bar.bordered {
border-block-end-color: var(--table-border-color);
}
#menu-bar i, #menu-bar .icon-button {
position: relative;
padding: 0 8px;
z-index: 10;
line-height: var(--menu-bar-height);
cursor: pointer;
transition: color 0.5s;
}
@media only screen and (max-width: 420px) {
#menu-bar i, #menu-bar .icon-button {
padding: 0 5px;
}
}
.icon-button {
border: none;
background: none;
padding: 0;
color: inherit;
}
.icon-button i {
margin: 0;
}
.right-buttons {
margin: 0 15px;
}
.right-buttons a {
text-decoration: none;
}
.left-buttons {
display: flex;
margin: 0 5px;
}
html:not(.js) .left-buttons button {
display: none;
}
.menu-title {
display: inline-block;
font-weight: 200;
font-size: 2.4rem;
line-height: var(--menu-bar-height);
text-align: center;
margin: 0;
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.menu-title {
cursor: pointer;
}
.menu-bar,
.menu-bar:visited,
.nav-chapters,
.nav-chapters:visited,
.mobile-nav-chapters,
.mobile-nav-chapters:visited,
.menu-bar .icon-button,
.menu-bar a i {
color: var(--icons);
}
.menu-bar i:hover,
.menu-bar .icon-button:hover,
.nav-chapters:hover,
.mobile-nav-chapters i:hover {
color: var(--icons-hover);
}
/* Nav Icons */
.nav-chapters {
font-size: 2.5em;
text-align: center;
text-decoration: none;
position: fixed;
top: 0;
bottom: 0;
margin: 0;
max-width: 150px;
min-width: 90px;
display: flex;
justify-content: center;
align-content: center;
flex-direction: column;
transition: color 0.5s, background-color 0.5s;
}
.nav-chapters:hover {
text-decoration: none;
background-color: var(--theme-hover);
transition: background-color 0.15s, color 0.15s;
}
.nav-wrapper {
margin-block-start: 50px;
display: none;
}
.mobile-nav-chapters {
font-size: 2.5em;
text-align: center;
text-decoration: none;
width: 90px;
border-radius: 5px;
background-color: var(--sidebar-bg);
}
/* Only Firefox supports flow-relative values */
.previous { float: left; }
[dir=rtl] .previous { float: right; }
/* Only Firefox supports flow-relative values */
.next {
float: right;
right: var(--page-padding);
}
[dir=rtl] .next {
float: left;
right: unset;
left: var(--page-padding);
}
/* Use the correct buttons for RTL layouts*/
[dir=rtl] .previous i.fa-angle-left:before {content:"\f105";}
[dir=rtl] .next i.fa-angle-right:before { content:"\f104"; }
@media only screen and (max-width: 1080px) {
.nav-wide-wrapper { display: none; }
.nav-wrapper { display: block; }
}
/* sidebar-visible */
@media only screen and (max-width: 1380px) {
#sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; }
#sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; }
}
/* Inline code */
:not(pre) > .hljs {
display: inline;
padding: 0.1em 0.3em;
border-radius: 3px;
}
:not(pre):not(a) > .hljs {
color: var(--inline-code-color);
overflow-x: initial;
}
a:hover > .hljs {
text-decoration: underline;
}
pre {
position: relative;
}
pre > .buttons {
position: absolute;
z-index: 100;
right: 0px;
top: 2px;
margin: 0px;
padding: 2px 0px;
color: var(--sidebar-fg);
cursor: pointer;
visibility: hidden;
opacity: 0;
transition: visibility 0.1s linear, opacity 0.1s linear;
}
pre:hover > .buttons {
visibility: visible;
opacity: 1
}
pre > .buttons :hover {
color: var(--sidebar-active);
border-color: var(--icons-hover);
background-color: var(--theme-hover);
}
pre > .buttons i {
margin-inline-start: 8px;
}
pre > .buttons button {
cursor: inherit;
margin: 0px 5px;
padding: 4px 4px 3px 5px;
font-size: 23px;
border-style: solid;
border-width: 1px;
border-radius: 4px;
border-color: var(--icons);
background-color: var(--theme-popup-bg);
transition: 100ms;
transition-property: color,border-color,background-color;
color: var(--icons);
}
pre > .buttons button.clip-button {
padding: 2px 4px 0px 6px;
}
pre > .buttons button.clip-button::before {
/* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license
*/
content: url('data:image/svg+xml,<svg width="21" height="20" viewBox="0 0 24 25" \
xmlns="http://www.w3.org/2000/svg" aria-label="Copy to clipboard">\
<path d="M18 20h2v3c0 1-1 2-2 2H2c-.998 0-2-1-2-2V5c0-.911.755-1.667 1.667-1.667h5A3.323 3.323 0 \
0110 0a3.323 3.323 0 013.333 3.333h5C19.245 3.333 20 4.09 20 5v8.333h-2V9H2v14h16v-3zM3 \
7h14c0-.911-.793-1.667-1.75-1.667H13.5c-.957 0-1.75-.755-1.75-1.666C11.75 2.755 10.957 2 10 \
2s-1.75.755-1.75 1.667c0 .911-.793 1.666-1.75 1.666H4.75C3.793 5.333 3 6.09 3 7z"/>\
<path d="M4 19h6v2H4zM12 11H4v2h8zM4 17h4v-2H4zM15 15v-3l-4.5 4.5L15 21v-3l8.027-.032L23 15z"/>\
</svg>');
filter: var(--copy-button-filter);
}
pre > .buttons button.clip-button:hover::before {
filter: var(--copy-button-filter-hover);
}
@media (pointer: coarse) {
pre > .buttons button {
/* On mobile, make it easier to tap buttons. */
padding: 0.3rem 1rem;
}
.sidebar-resize-indicator {
/* Hide resize indicator on devices with limited accuracy */
display: none;
}
}
pre > code {
display: block;
padding: 1rem;
}
/* FIXME: ACE editors overlap their buttons because ACE does absolute
positioning within the code block which breaks padding. The only solution I
can think of is to move the padding to the outer pre tag (or insert a div
wrapper), but that would require fixing a whole bunch of CSS rules.
*/
.hljs.ace_editor {
padding: 0rem 0rem;
}
pre > .result {
margin-block-start: 10px;
}
/* Search */
#searchresults a {
text-decoration: none;
}
mark {
border-radius: 2px;
padding-block-start: 0;
padding-block-end: 1px;
padding-inline-start: 3px;
padding-inline-end: 3px;
margin-block-start: 0;
margin-block-end: -1px;
margin-inline-start: -3px;
margin-inline-end: -3px;
background-color: var(--search-mark-bg);
transition: background-color 300ms linear;
cursor: pointer;
}
mark.fade-out {
background-color: rgba(0,0,0,0) !important;
cursor: auto;
}
.searchbar-outer {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
}
#searchbar {
width: 100%;
margin-block-start: 5px;
margin-block-end: 0;
margin-inline-start: auto;
margin-inline-end: auto;
padding: 10px 16px;
transition: box-shadow 300ms ease-in-out;
border: 1px solid var(--searchbar-border-color);
border-radius: 3px;
background-color: var(--searchbar-bg);
color: var(--searchbar-fg);
}
#searchbar:focus,
#searchbar.active {
box-shadow: 0 0 3px var(--searchbar-shadow-color);
}
.searchresults-header {
font-weight: bold;
font-size: 1em;
padding-block-start: 18px;
padding-block-end: 0;
padding-inline-start: 5px;
padding-inline-end: 0;
color: var(--searchresults-header-fg);
}
.searchresults-outer {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
border-block-end: 1px dashed var(--searchresults-border-color);
}
ul#searchresults {
list-style: none;
padding-inline-start: 20px;
}
ul#searchresults li {
margin: 10px 0px;
padding: 2px;
border-radius: 2px;
}
ul#searchresults li.focus {
background-color: var(--searchresults-li-bg);
}
ul#searchresults span.teaser {
display: block;
clear: both;
margin-block-start: 5px;
margin-block-end: 0;
margin-inline-start: 20px;
margin-inline-end: 0;
font-size: 0.8em;
}
ul#searchresults span.teaser em {
font-weight: bold;
font-style: normal;
}
/* Sidebar */
.sidebar {
position: fixed;
left: 0;
top: 0;
bottom: 0;
width: var(--sidebar-width);
font-size: 0.875em;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
overscroll-behavior-y: contain;
background-color: var(--sidebar-bg);
color: var(--sidebar-fg);
}
.sidebar-iframe-inner {
--padding: 10px;
background-color: var(--sidebar-bg);
padding: var(--padding);
margin: 0;
font-size: 1.4rem;
color: var(--sidebar-fg);
min-height: calc(100vh - var(--padding) * 2);
}
.sidebar-iframe-outer {
border: none;
height: 100%;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
[dir=rtl] .sidebar { left: unset; right: 0; }
.sidebar-resizing {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
html:not(.sidebar-resizing) .sidebar {
transition: transform 0.3s; /* Animation: slide away */
}
.sidebar code {
line-height: 2em;
}
.sidebar .sidebar-scrollbox {
overflow-y: auto;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 10px 10px;
}
.sidebar .sidebar-resize-handle {
position: absolute;
cursor: col-resize;
width: 0;
right: calc(var(--sidebar-resize-indicator-width) * -1);
top: 0;
bottom: 0;
display: flex;
align-items: center;
}
.sidebar-resize-handle .sidebar-resize-indicator {
width: 100%;
height: 16px;
color: var(--icons);
margin-inline-start: var(--sidebar-resize-indicator-space);
display: flex;
align-items: center;
justify-content: flex-start;
}
.sidebar-resize-handle .sidebar-resize-indicator::before {
content: "";
width: 2px;
height: 12px;
border-left: dotted 2px currentColor;
}
.sidebar-resize-handle .sidebar-resize-indicator::after {
content: "";
width: 2px;
height: 16px;
border-left: dotted 2px currentColor;
}
[dir=rtl] .sidebar .sidebar-resize-handle {
left: calc(var(--sidebar-resize-indicator-width) * -1);
right: unset;
}
.js .sidebar .sidebar-resize-handle {
cursor: col-resize;
width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space));
}
/* sidebar-hidden */
#sidebar-toggle-anchor:not(:checked) ~ .sidebar {
transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
z-index: -1;
}
[dir=rtl] #sidebar-toggle-anchor:not(:checked) ~ .sidebar {
transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
}
.sidebar::-webkit-scrollbar {
background: var(--sidebar-bg);
}
.sidebar::-webkit-scrollbar-thumb {
background: var(--scrollbar);
}
/* sidebar-visible */
#sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
}
[dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
}
@media only screen and (min-width: 620px) {
#sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: none;
margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width));
}
[dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: none;
}
}
.chapter {
list-style: none outside none;
padding-inline-start: 0;
line-height: 2.2em;
}
.chapter ol {
width: 100%;
}
.chapter li {
display: flex;
color: var(--sidebar-non-existant);
}
.chapter li a {
display: block;
padding: 0;
text-decoration: none;
color: var(--sidebar-fg);
}
.chapter li a:hover {
color: var(--sidebar-active);
}
.chapter li a.active {
color: var(--sidebar-active);
}
.chapter li > a.toggle {
cursor: pointer;
display: block;
margin-inline-start: auto;
padding: 0 10px;
user-select: none;
opacity: 0.68;
}
.chapter li > a.toggle div {
transition: transform 0.5s;
}
/* collapse the section */
.chapter li:not(.expanded) + li > ol {
display: none;
}
.chapter li.chapter-item {
line-height: 1.5em;
margin-block-start: 0.6em;
}
.chapter li.expanded > a.toggle div {
transform: rotate(90deg);
}
.spacer {
width: 100%;
height: 3px;
margin: 5px 0px;
}
.chapter .spacer {
background-color: var(--sidebar-spacer);
}
@media (-moz-touch-enabled: 1), (pointer: coarse) {
.chapter li a { padding: 5px 0; }
.spacer { margin: 10px 0; }
}
.section {
list-style: none outside none;
padding-inline-start: 20px;
line-height: 1.9em;
}
/* Theme Menu Popup */
.theme-popup {
position: absolute;
left: 10px;
top: var(--menu-bar-height);
z-index: 1000;
border-radius: 4px;
font-size: 0.7em;
color: var(--fg);
background: var(--theme-popup-bg);
border: 1px solid var(--theme-popup-border);
margin: 0;
padding: 0;
list-style: none;
display: none;
/* Don't let the children's background extend past the rounded corners. */
overflow: hidden;
}
[dir=rtl] .theme-popup { left: unset; right: 10px; }
.theme-popup .default {
color: var(--icons);
}
.theme-popup .theme {
width: 100%;
border: 0;
margin: 0;
padding: 2px 20px;
line-height: 25px;
white-space: nowrap;
text-align: start;
cursor: pointer;
color: inherit;
background: inherit;
font-size: inherit;
}
.theme-popup .theme:hover {
background-color: var(--theme-hover);
}
.theme-selected::before {
display: inline-block;
content: "✓";
margin-inline-start: -14px;
width: 14px;
}
/* The container for the help popup that covers the whole window. */
#mdbook-help-container {
/* Position and size for the whole window. */
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
/* This uses flex layout (which is set in book.js), and centers the popup
in the window.*/
display: none;
align-items: center;
justify-content: center;
z-index: 1000;
/* Dim out the book while the popup is visible. */
background: var(--overlay-bg);
}
/* The popup help box. */
#mdbook-help-popup {
box-shadow: 0 4px 24px rgba(0,0,0,0.15);
min-width: 300px;
max-width: 500px;
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
background-color: var(--bg);
color: var(--fg);
border-width: 1px;
border-color: var(--theme-popup-border);
border-style: solid;
border-radius: 8px;
padding: 10px;
}
.mdbook-help-title {
text-align: center;
/* mdbook's margin for h2 is way too large. */
margin: 10px;
}

279
today/book/css/general.css Normal file
View File

@@ -0,0 +1,279 @@
/* Base styles and content styles */
:root {
/* Browser default font-size is 16px, this way 1 rem = 10px */
font-size: 62.5%;
color-scheme: var(--color-scheme);
}
html {
font-family: "Open Sans", sans-serif;
color: var(--fg);
background-color: var(--bg);
text-size-adjust: none;
-webkit-text-size-adjust: none;
}
body {
margin: 0;
font-size: 1.6rem;
overflow-x: hidden;
}
code {
font-family: var(--mono-font) !important;
font-size: var(--code-font-size);
direction: ltr !important;
}
/* make long words/inline code not x overflow */
main {
overflow-wrap: break-word;
}
/* make wide tables scroll if they overflow */
.table-wrapper {
overflow-x: auto;
}
/* Don't change font size in headers. */
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
font-size: unset;
}
.left { float: left; }
.right { float: right; }
.boring { opacity: 0.6; }
.hide-boring .boring { display: none; }
.hidden { display: none !important; }
h2, h3 { margin-block-start: 2.5em; }
h4, h5 { margin-block-start: 2em; }
.header + .header h3,
.header + .header h4,
.header + .header h5 {
margin-block-start: 1em;
}
h1:target::before,
h2:target::before,
h3:target::before,
h4:target::before,
h5:target::before,
h6:target::before {
display: inline-block;
content: "»";
margin-inline-start: -30px;
width: 30px;
}
/* This is broken on Safari as of version 14, but is fixed
in Safari Technology Preview 117 which I think will be Safari 14.2.
https://bugs.webkit.org/show_bug.cgi?id=218076
*/
:target {
/* Safari does not support logical properties */
scroll-margin-top: calc(var(--menu-bar-height) + 0.5em);
}
.page {
outline: 0;
padding: 0 var(--page-padding);
margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */
}
.page-wrapper {
box-sizing: border-box;
background-color: var(--bg);
}
.no-js .page-wrapper,
.js:not(.sidebar-resizing) .page-wrapper {
transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */
}
[dir=rtl] .js:not(.sidebar-resizing) .page-wrapper {
transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */
}
.content {
overflow-y: auto;
padding: 0 5px 50px 5px;
}
.content main {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
}
.content p { line-height: 1.45em; }
.content ol { line-height: 1.45em; }
.content ul { line-height: 1.45em; }
.content a { text-decoration: none; }
.content a:hover { text-decoration: underline; }
.content img, .content video { max-width: 100%; }
.content .header:link,
.content .header:visited {
color: var(--fg);
}
.content .header:link,
.content .header:visited:hover {
text-decoration: none;
}
table {
margin: 0 auto;
border-collapse: collapse;
}
table td {
padding: 3px 20px;
border: 1px var(--table-border-color) solid;
}
table thead {
background: var(--table-header-bg);
}
table thead td {
font-weight: 700;
border: none;
}
table thead th {
padding: 3px 20px;
}
table thead tr {
border: 1px var(--table-header-bg) solid;
}
/* Alternate background colors for rows */
table tbody tr:nth-child(2n) {
background: var(--table-alternate-bg);
}
blockquote {
margin: 20px 0;
padding: 0 20px;
color: var(--fg);
background-color: var(--quote-bg);
border-block-start: .1em solid var(--quote-border);
border-block-end: .1em solid var(--quote-border);
}
.warning {
margin: 20px;
padding: 0 20px;
border-inline-start: 2px solid var(--warning-border);
}
.warning:before {
position: absolute;
width: 3rem;
height: 3rem;
margin-inline-start: calc(-1.5rem - 21px);
content: "ⓘ";
text-align: center;
background-color: var(--bg);
color: var(--warning-border);
font-weight: bold;
font-size: 2rem;
}
blockquote .warning:before {
background-color: var(--quote-bg);
}
kbd {
background-color: var(--table-border-color);
border-radius: 4px;
border: solid 1px var(--theme-popup-border);
box-shadow: inset 0 -1px 0 var(--theme-hover);
display: inline-block;
font-size: var(--code-font-size);
font-family: var(--mono-font);
line-height: 10px;
padding: 4px 5px;
vertical-align: middle;
}
sup {
/* Set the line-height for superscript and footnote references so that there
isn't an awkward space appearing above lines that contain the footnote.
See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583
for an explanation.
*/
line-height: 0;
}
.footnote-definition {
font-size: 0.9em;
}
/* The default spacing for a list is a little too large. */
.footnote-definition ul,
.footnote-definition ol {
padding-left: 20px;
}
.footnote-definition > li {
/* Required to position the ::before target */
position: relative;
}
.footnote-definition > li:target {
scroll-margin-top: 50vh;
}
.footnote-reference:target {
scroll-margin-top: 50vh;
}
/* Draws a border around the footnote (including the marker) when it is selected.
TODO: If there are multiple linkbacks, highlight which one you just came
from so you know which one to click.
*/
.footnote-definition > li:target::before {
border: 2px solid var(--footnote-highlight);
border-radius: 6px;
position: absolute;
top: -8px;
right: -8px;
bottom: -8px;
left: -32px;
pointer-events: none;
content: "";
}
/* Pulses the footnote reference so you can quickly see where you left off reading.
This could use some improvement.
*/
@media not (prefers-reduced-motion) {
.footnote-reference:target {
animation: fn-highlight 0.8s;
border-radius: 2px;
}
@keyframes fn-highlight {
from {
background-color: var(--footnote-highlight);
}
}
}
.tooltiptext {
position: absolute;
visibility: hidden;
color: #fff;
background-color: #333;
transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
left: -8px; /* Half of the width of the icon */
top: -35px;
font-size: 0.8em;
text-align: center;
border-radius: 6px;
padding: 5px 8px;
margin: 5px;
z-index: 1000;
}
.tooltipped .tooltiptext {
visibility: visible;
}
.chapter li.part-title {
color: var(--sidebar-fg);
margin: 5px 0px;
font-weight: bold;
}
.result-no-output {
font-style: italic;
}

50
today/book/css/print.css Normal file
View File

@@ -0,0 +1,50 @@
#sidebar,
#menu-bar,
.nav-chapters,
.mobile-nav-chapters {
display: none;
}
#page-wrapper.page-wrapper {
transform: none !important;
margin-inline-start: 0px;
overflow-y: initial;
}
#content {
max-width: none;
margin: 0;
padding: 0;
}
.page {
overflow-y: initial;
}
code {
direction: ltr !important;
}
pre > .buttons {
z-index: 2;
}
a, a:visited, a:active, a:hover {
color: #4183c4;
text-decoration: none;
}
h1, h2, h3, h4, h5, h6 {
page-break-inside: avoid;
page-break-after: avoid;
}
pre, code {
page-break-inside: avoid;
white-space: pre-wrap;
}
.fa {
display: none !important;
}

View File

@@ -0,0 +1,330 @@
/* Globals */
:root {
--sidebar-target-width: 300px;
--sidebar-width: min(var(--sidebar-target-width), 80vw);
--sidebar-resize-indicator-width: 8px;
--sidebar-resize-indicator-space: 2px;
--page-padding: 15px;
--content-max-width: 750px;
--menu-bar-height: 50px;
--mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
--code-font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */
}
/* Themes */
.ayu {
--bg: hsl(210, 25%, 8%);
--fg: #c5c5c5;
--sidebar-bg: #14191f;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #5c6773;
--sidebar-active: #ffb454;
--sidebar-spacer: #2d334f;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #b7b9cc;
--links: #0096cf;
--inline-code-color: #ffb454;
--theme-popup-bg: #14191f;
--theme-popup-border: #5c6773;
--theme-hover: #191f26;
--quote-bg: hsl(226, 15%, 17%);
--quote-border: hsl(226, 15%, 22%);
--warning-border: #ff8e00;
--table-border-color: hsl(210, 25%, 13%);
--table-header-bg: hsl(210, 25%, 28%);
--table-alternate-bg: hsl(210, 25%, 11%);
--searchbar-border-color: #848484;
--searchbar-bg: #424242;
--searchbar-fg: #fff;
--searchbar-shadow-color: #d4c89f;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #252932;
--search-mark-bg: #e3b171;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%);
--footnote-highlight: #2668a6;
--overlay-bg: rgba(33, 40, 48, 0.4);
}
.coal {
--bg: hsl(200, 7%, 8%);
--fg: #98a3ad;
--sidebar-bg: #292c2f;
--sidebar-fg: #a1adb8;
--sidebar-non-existant: #505254;
--sidebar-active: #3473ad;
--sidebar-spacer: #393939;
--scrollbar: var(--sidebar-fg);
--icons: #43484d;
--icons-hover: #b3c0cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #141617;
--theme-popup-border: #43484d;
--theme-hover: #1f2124;
--quote-bg: hsl(234, 21%, 18%);
--quote-border: hsl(234, 21%, 23%);
--warning-border: #ff8e00;
--table-border-color: hsl(200, 7%, 13%);
--table-header-bg: hsl(200, 7%, 28%);
--table-alternate-bg: hsl(200, 7%, 11%);
--searchbar-border-color: #aaa;
--searchbar-bg: #b7b7b7;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
--footnote-highlight: #4079ae;
--overlay-bg: rgba(33, 40, 48, 0.4);
}
.light, html:not(.js) {
--bg: hsl(0, 0%, 100%);
--fg: hsl(0, 0%, 0%);
--sidebar-bg: #fafafa;
--sidebar-fg: hsl(0, 0%, 0%);
--sidebar-non-existant: #aaaaaa;
--sidebar-active: #1f1fff;
--sidebar-spacer: #f4f4f4;
--scrollbar: #8F8F8F;
--icons: #747474;
--icons-hover: #000000;
--links: #20609f;
--inline-code-color: #301900;
--theme-popup-bg: #fafafa;
--theme-popup-border: #cccccc;
--theme-hover: #e6e6e6;
--quote-bg: hsl(197, 37%, 96%);
--quote-border: hsl(197, 37%, 91%);
--warning-border: #ff8e00;
--table-border-color: hsl(0, 0%, 95%);
--table-header-bg: hsl(0, 0%, 80%);
--table-alternate-bg: hsl(0, 0%, 97%);
--searchbar-border-color: #aaa;
--searchbar-bg: #fafafa;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #e4f2fe;
--search-mark-bg: #a2cff5;
--color-scheme: light;
/* Same as `--icons` */
--copy-button-filter: invert(45.49%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%);
--footnote-highlight: #7e7eff;
--overlay-bg: rgba(200, 200, 205, 0.4);
}
.navy {
--bg: hsl(226, 23%, 11%);
--fg: #bcbdd0;
--sidebar-bg: #282d3f;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #505274;
--sidebar-active: #2b79a2;
--sidebar-spacer: #2d334f;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #b7b9cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #161923;
--theme-popup-border: #737480;
--theme-hover: #282e40;
--quote-bg: hsl(226, 15%, 17%);
--quote-border: hsl(226, 15%, 22%);
--warning-border: #ff8e00;
--table-border-color: hsl(226, 23%, 16%);
--table-header-bg: hsl(226, 23%, 31%);
--table-alternate-bg: hsl(226, 23%, 14%);
--searchbar-border-color: #aaa;
--searchbar-bg: #aeaec6;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #5f5f71;
--searchresults-border-color: #5c5c68;
--searchresults-li-bg: #242430;
--search-mark-bg: #a2cff5;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%);
--footnote-highlight: #4079ae;
--overlay-bg: rgba(33, 40, 48, 0.4);
}
.rust {
--bg: hsl(60, 9%, 87%);
--fg: #262625;
--sidebar-bg: #3b2e2a;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #505254;
--sidebar-active: #e69f67;
--sidebar-spacer: #45373a;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #262625;
--links: #2b79a2;
--inline-code-color: #6e6b5e;
--theme-popup-bg: #e1e1db;
--theme-popup-border: #b38f6b;
--theme-hover: #99908a;
--quote-bg: hsl(60, 5%, 75%);
--quote-border: hsl(60, 5%, 70%);
--warning-border: #ff8e00;
--table-border-color: hsl(60, 9%, 82%);
--table-header-bg: #b3a497;
--table-alternate-bg: hsl(60, 9%, 84%);
--searchbar-border-color: #aaa;
--searchbar-bg: #fafafa;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #dec2a2;
--search-mark-bg: #e69f67;
/* Same as `--icons` */
--copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%);
--footnote-highlight: #d3a17a;
--overlay-bg: rgba(150, 150, 150, 0.25);
}
@media (prefers-color-scheme: dark) {
html:not(.js) {
--bg: hsl(200, 7%, 8%);
--fg: #98a3ad;
--sidebar-bg: #292c2f;
--sidebar-fg: #a1adb8;
--sidebar-non-existant: #505254;
--sidebar-active: #3473ad;
--sidebar-spacer: #393939;
--scrollbar: var(--sidebar-fg);
--icons: #43484d;
--icons-hover: #b3c0cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #141617;
--theme-popup-border: #43484d;
--theme-hover: #1f2124;
--quote-bg: hsl(234, 21%, 18%);
--quote-border: hsl(234, 21%, 23%);
--warning-border: #ff8e00;
--table-border-color: hsl(200, 7%, 13%);
--table-header-bg: hsl(200, 7%, 28%);
--table-alternate-bg: hsl(200, 7%, 11%);
--searchbar-border-color: #aaa;
--searchbar-bg: #b7b7b7;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
}
}

View File

@@ -0,0 +1,231 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-01-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-2025年6月1日"><a class="header" href="#ai洞察日报-2025年6月1日">AI洞察日报 2025年6月1日</a></h1>
<ol>
<li>近日,<strong>通义实验室</strong>自然语言智能团队<strong>发布并开源</strong><strong>VRAG-RL</strong>——一款<strong>视觉感知多模态RAG推理框架</strong>,旨在解决<strong>AI</strong>从图像、表格等<strong>视觉语言</strong>中检索关键信息并进行<strong>精细化推理</strong>的难题,其强化学习和创新的视觉感知机制显著提升了对视觉信息的理解和检索效率。该框架在多个基准数据集上<strong>表现出色</strong>,未来有望提升模型在不同视觉任务中的<strong>泛化能力</strong>,请查阅<a href="https://github.com/Alibaba-NLP/VRAG">跳转链接</a>了解更多。</li>
<li>亚利桑那州立大学研究小组<strong>发布论文</strong>指出,<strong>大语言模型</strong>并非进行<strong>真正推理</strong>,而仅仅是在<strong>寻找数据间的相关性</strong>,这可能导致公众对其工作机制产生<strong>误解</strong>。该研究强调,在日益依赖<strong>AI</strong>的时代,我们需更<strong>谨慎看待</strong>技术能力,未来<strong>AI研究</strong>有望朝着更具<strong>解释性</strong>的方向发展。</li>
<li><strong>Perplexity AI</strong>正式<strong>推出Perplexity Labs</strong>为Pro订阅用户带来<strong>多工具协同</strong>的全新<strong>AI生产力工具</strong>,能将复杂项目开发流程简化至数分钟,旨在提供从创意到成果的<strong>全链条支持</strong>。这一功能通过深度网络浏览、代码执行等<strong>核心能力</strong>标志着Perplexity从答案引擎向<strong>综合性AI生产平台转型</strong></li>
<li><strong>夸克</strong>近日<strong>上线“深度研究”功能</strong>,该功能依托<strong>通义千问大模型</strong>,能围绕学术课题、行业分析等复杂议题,自动完成从资料搜集到<strong>报告生成</strong>的全流程研究。此举标志着<strong>AI</strong>正从<strong>信息检索工具</strong><strong>内容创作伙伴</strong>进一步跃迁,为科研调研、市场洞察等场景提供<strong>高效支持</strong></li>
<li><strong>阿里云</strong>正式<strong>发布通义灵码 AI IDE</strong>,这是一款原生的人工智能开发环境,凭借强大的<strong>编程智能体模式</strong><strong>长期记忆</strong><strong>行间建议预测</strong>功能,显著提升开发者<strong>编程效率</strong>。该产品已<strong>免费开放下载</strong>并且其插件累计生成超30亿行代码成为广受欢迎的编程辅助工具为企业开发工作提供<strong>强力支持</strong></li>
<li><strong>Memvid</strong>是一款<strong>创新AI记忆工具</strong>,通过将<strong>文本数据编码为MP4视频</strong>,实现了<strong>亚秒级快速语义搜索</strong>,大幅节省存储空间并支持离线使用。它内置<strong>聊天功能</strong>,支持<strong>PDF文档导入</strong>,为<strong>高效知识管理</strong><strong>学术研究</strong>等领域提供了革命性的<strong>全新可能</strong>,请查阅<a href="https://github.com/Olow304/memvid">跳转链接</a>了解更多。</li>
<li>Anthropic首席执行官达里奥・阿莫代伊<strong>警告</strong>称,<strong>AI</strong>可能在未来五年内<strong>取代一半入门级白领工作</strong>,导致<strong>失业率飙升</strong>至10%-20%,并加剧<strong>经济不平等</strong>。他呼吁提高公众对<strong>AI</strong>发展的<strong>认知</strong><strong>AI素养</strong>,以便人们适应未来职业环境,并强调政策制定者需思考超智能经济下的<strong>解决方案</strong></li>
<li>AI初创公司<strong>Manus</strong>重磅<strong>发布Manus Slides</strong>功能,用户仅需一个提示词即可<strong>一键生成专业幻灯片</strong>,涵盖商务会议、教育课程等多种场景,大幅<strong>提升演示文稿创作效率</strong>。该功能凭借<strong>智能生成</strong><strong>灵活编辑</strong>能力支持导出PowerPoint或PDF标志着<strong>AI代理</strong>正从任务自动化向<strong>生产力工具</strong>进一步演进。</li>
<li>在GitHub上拥有<strong>7086颗星</strong><strong>prompt-eng-interactive-tutorial</strong>是Anthropic公司<strong>交互式提示工程教程</strong>的开源项目,旨在帮助用户<strong>有趣且有效地学习提示工程</strong>,具体请访问<a href="https://github.com/anthropics/prompt-eng-interactive-tutorial">跳转链接</a></li>
<li>获得<strong>10143颗星</strong><strong>onlook</strong>项目,是一个<strong>开源可视化氛围编码编辑器</strong>,它利用<strong>AI</strong>帮助设计师或开发者<strong>可视化构建</strong><strong>美化和编辑React应用</strong>。这款工具就像是设计师的<strong>光标</strong>,让<strong>React开发</strong>变得更<strong>直观高效</strong>,具体请访问<a href="https://github.com/onlook-dev/onlook">跳转链接</a></li>
<li>拥有<strong>12755颗星</strong><strong>anthropic-cookbook</strong>项目是Anthropic公司<strong>展示如何有趣且有效地使用Claude</strong><strong>笔记本/秘籍集合</strong>。它为用户提供了多样化的<strong>Claude使用方法</strong>,是<strong>学习和应用Claude</strong>的便捷<a href="https://github.com/anthropics/anthropic-cookbook">跳转链接</a></li>
<li><strong>MMSI-Bench</strong>是一个针对<strong>多图像空间智能</strong><strong>VQA基准测试</strong>研究发现尽管多模态大语言模型MLLMs已取得进展但在<strong>多图像空间推理</strong>方面其准确率30-40%与人类97%)之间存在<strong>巨大差距</strong>。该研究诊断了模型四种主要的<strong>失败模式</strong>,为未来提升<strong>多图像空间智能</strong>提供了<strong>宝贵见解</strong>,论文详情请见<a href="https://arxiv.org/abs/2505.23764">跳转链接</a></li>
<li><strong>ZeroGUI</strong>是一个创新的<strong>在线学习框架</strong>,它以<strong>零人力成本自动化GUI智能体训练</strong>通过基于VLM的自动任务生成和奖励评估克服了传统GUI学习对人工标注的<strong>重度依赖</strong>。实验证明,该框架显著提升了<strong>GUI智能体</strong>在不同环境下的<strong>性能</strong>,为<strong>自动化GUI操作</strong>带来了<strong>高效解决方案</strong>,论文详情请见<a href="https://arxiv.org/abs/2505.23762">跳转链接</a></li>
<li><strong>ATLAS</strong>是一个针对<strong>Transformer</strong>架构设计的高容量<strong>长期记忆模块</strong>,它通过优化<strong>记忆上下文</strong>来克服现有模型在<strong>长序列理解</strong>上的局限,从而在测试时学习最优的记忆策略。实验结果表明,<strong>ATLAS</strong>在语言建模和长上下文理解等任务中表现优于Transformer和线性循环模型显著<strong>提升了性能</strong>,论文详情请见<a href="https://arxiv.org/abs/2505.23735">跳转链接</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-02.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-02.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,250 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-02-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-2025年6月2日"><a class="header" href="#ai洞察日报-2025年6月2日">AI洞察日报 2025年6月2日</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li>Runway公司最新推出的<strong>Gen-4References</strong>功能已支持移动设备,使用户能通过手机照片结合自然语言提示,快速生成风格一致的艺术作品。这项功能将<strong>AI生成技术</strong>与移动便捷性完美结合,大幅降低了<strong>AI创作</strong>门槛,为内容创作者和普通用户带来了无限可能。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0530/6388420978332595536873671.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0530/6388420978332595536873671.png" alt="图片" title="img" /></a> <br/></li>
<li>Anthropic近期宣布其旗舰模型<strong>Claude</strong>已新增功能支持开发者构建能与Claude直接对话的<strong>AI应用程序</strong>,这与<strong>AI Studio</strong>的开发理念高度契合。此举不仅降低了<strong>AI应用开发</strong>门槛为开发者提供了更广阔的创新空间也预示着AI应用普及与落地将进一步加速。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202403050858462025_0.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202403050858462025_0.jpg" alt="图片" title="img" /></a> <br/></li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li>华为近期通过其"昇腾 + Pangu Ultra MoE”系统展示了一项惊人突破一个近万亿参数的MoE大模型在不使用GPU的情况下仅需2秒便能解答一道高等数学题。这不仅彰显了华为在自主可控国产算力与模型训练方面的强大实力也为未来大规模AI模型的训练与应用开辟了新可能。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0530/6388421664760221719225455.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0530/6388421664760221719225455.png" alt="图片" title="img" /></a> <br/></li>
<li>这篇论文通过构建一个英语回文谜题基准测试,揭示了当前<strong>视觉-语言模型</strong><strong>VLM</strong>在理解和解决这类谜题时遇到的显著困难。尽管VLM在解码简单视觉线索方面表现出一定能力但对于需要<strong>抽象推理</strong><strong>横向思维</strong>及理解<strong>视觉隐喻</strong>的任务,它们仍旧力不从心,表明多模态抽象是其面临的独特挑战。详情请见:<a href="https://arxiv.org/abs/2505.23759">Link</a></li>
<li><strong>LoRAShop</strong>是一个创新的<strong>多概念图像编辑框架</strong>,它利用<strong>修正流Transformer</strong>的特性实现了在不重新训练模型的情况下将多个主题或风格无缝融入原始场景。这项技术通过智能融合LoRA权重不仅保留了图像的整体背景和细节还在身份保持上超越了现有基线为个性化<strong>图像生成</strong><strong>编辑</strong>带来了革命性的"Photoshop式”体验。详情请见<a href="https://arxiv.org/abs/2505.23758">Link</a></li>
<li><strong>DeepTheorem</strong>是一个利用<strong>自然语言</strong><strong>强化学习</strong><strong>RL-Zero</strong>)来增强<strong>大型语言模型</strong><strong>LLM</strong>)数学推理能力的非正式<strong>定理证明框架</strong>。该框架通过一个大规模高质量数据集和创新策略显著提升了LLM在IMO级别非正式定理证明中的表现展现了其在数学探索和自动化证明领域的巨大潜力。详情请见<a href="https://arxiv.org/abs/2505.23754">Link</a></li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>根据阿姆斯特丹自由大学环境研究所博士生Alex de Vries-Gao的分析人工智能的电力消耗预计将在2025年底前接近全球数据中心总电力消耗的一半这意味着其能耗将很快超越比特币挖矿。尽管技术效率有所提升但AI的电力需求仍在快速增长凸显了在能耗与可持续发展之间寻找平衡的重要性。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202005281122057197_51.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202005281122057197_51.jpg" alt="图片" title="img" /></a> <br/></li>
<li>近期,黑客通过伪装成<strong>阿里云AI SDK</strong>的恶意软件包,成功实施了供应链攻击,利用隐藏在<strong>Pickle</strong>格式ML模型中的<strong>恶意代码</strong>窃取用户敏感信息。这揭示了<strong>AI安全供应链</strong>面临的新挑战传统安全工具在检测恶意ML模型方面的不足以及开发者面临的潜在风险。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202306161513254632_1.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202306161513254632_1.jpg" alt="图片" title="img" /></a> <br/></li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li><strong>courses</strong>是一个由Anthropic提供的<strong>教育课程</strong>项目旨在帮助用户学习相关知识。该项目在GitHub上拥有<strong>13483</strong>颗星可访问其GitHub页面<a href="https://github.com/anthropics/courses">Link</a></li>
<li><strong>agent-zero</strong>是一个提供<strong>AI框架</strong>功能的项目旨在帮助开发者构建AI应用。该项目在GitHub上获得了<strong>7360</strong>颗星,详情可前往:<a href="https://github.com/frdel/agent-zero">Link</a></li>
<li><strong>cobalt</strong>是一个致力于"<strong>保存你所喜爱事物的最佳方式</strong>”的项目为用户提供高效的收藏管理功能。该项目在GitHub上备受欢迎拥有<strong>32941</strong>颗星,可通过<a href="https://github.com/imputnet/cobalt">Link</a>查看详情。</li>
<li><strong>the-book-of-secret-knowledge</strong>是一个内容丰富的<strong>知识集合</strong>项目汇集了鼓舞人心的列表、手册、备忘单及各类工具。该项目在GitHub上拥有高达<strong>171992</strong>颗星,是寻求实用信息和技巧的宝库,访问地址为:<a href="https://github.com/trimstray/the-book-of-secret-knowledge">Link</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-03.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-01.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-03.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-01.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,243 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-03-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-2025年6月3日"><a class="header" href="#ai洞察日报-2025年6月3日">AI洞察日报 2025年6月3日</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li>谷歌近日在美国地区推出了 <strong>Gemini Live</strong> 功能,正式登陆 <strong>iOS</strong><strong>iPadOS</strong> 平台,用户可通过 <strong>Gemini App</strong> 免费体验 <strong>AI</strong> 识别场景和屏幕内容的便捷。这项创新不仅提升了用户互动体验,也预示着 <strong>AI</strong> 技术正进一步融入日常生活,成为人们的智能助手。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0603/6388453725280965957304782.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0603/6388453725280965957304782.png" alt="图片" title="img" /></a> <br/></li>
<li>微软最新推出了免费的 <strong>Bing Video Creator</strong> 工具,基于 <strong>OpenAI Sora</strong> 技术,让用户通过简单的文字提示即可轻松创作短视频。这款工具已在全球范围内的必应移动应用中上线,极大降低了视频创作的门槛,有望丰富用户的创作体验。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0603/6388453719041406883771175.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0603/6388453719041406883771175.png" alt="图片" title="img" /></a> <br/></li>
<li>新加坡国立大学NUS团队近日发布了 <strong>OmniConsistency</strong> 项目,它以极低成本复现了 <strong>GPT-4o</strong> 在图像风格化上的一致性,解决了开源社区的风格化难题。该项目通过独特的学习框架和模块化架构,有望成为图像生成领域的重要工具,推动 <strong>AI</strong> 艺术创作。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0603/6388453880310640421505355.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0603/6388453880310640421505355.png" alt="图片" title="img" /></a> <br/></li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li><strong>WebChoreArena</strong> (<a href="https://arxiv.org/abs/2506.01952">Link</a>) 提出了一个包含 532 项精心策划任务的全新基准,旨在评估 <strong>LLM</strong> 驱动的网页浏览代理处理繁琐复杂网页任务的能力。研究发现,尽管 <strong>GPT-4o</strong> 等先进大模型在此基准上表现出显著进步,但相较于通用网页任务,仍有巨大的提升空间,凸显了处理复杂**"网络杂务”**的挑战性。</li>
<li><strong>RoboMaster</strong> (<a href="https://arxiv.org/abs/2506.01943">Link</a>) 提出了一种创新的机器人操作视频生成框架,它通过协作轨迹建模和阶段性分解交互过程,有效解决了多目标交互中视觉保真度下降的问题。这项技术成功地实现了<strong>机器人操作</strong>中视频生成质量的新突破,为复杂场景下的<strong>轨迹控制</strong>提供了更精准的解决方案。</li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>近日,美国犹他州律师理查德・贝德纳因在法庭文件中引用 <strong>ChatGPT</strong> 生成的虚假案例,被法院处以罚款,再次引发了对 <strong>AI</strong> 在法律领域应用的广泛争议。此事件深刻提醒法律从业者,在使用新兴技术时,务必保持严谨的<strong>审核责任</strong>,确保法律文件的准确性。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202304121052180076_0.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202304121052180076_0.jpg" alt="图片" title="img" /></a> <br/></li>
<li><strong>OpenAI</strong> 计划在2025年上半年将 <strong>ChatGPT</strong> 打造为具备 <strong>T 型技能</strong> 的"<strong>超级助手</strong>”,旨在挑战苹果 <strong>Siri</strong> 的市场地位。这份战略文件透露,<strong>OpenAI</strong> 不仅希望 <strong>ChatGPT</strong> 成为能处理日常琐事和复杂任务的智能伙伴,更呼吁用户能在所有平台上自由选择默认 <strong>AI</strong> 助手,推动 <strong>AI</strong> 市场更加开放。</li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li><strong>nautilus_trader</strong> (<a href="https://github.com/nautechsystems/nautilus_trader">Link</a>) 是一个拥有 6728 <strong>Star</strong><strong>高性能算法交易平台</strong><strong>事件驱动回测器</strong>,为开发者提供强大的交易策略验证能力。</li>
<li><strong>data-engineer-handbook</strong> (<a href="https://github.com/DataExpert-io/data-engineer-handbook">Link</a>) 拥有 28669 <strong>Star</strong>,是一个旨在帮助用户学习<strong>数据工程</strong>的综合性资源仓库,汇集了所有相关学习链接。</li>
<li><strong>postiz-app</strong> (<a href="https://github.com/gitroomhq/postiz-app">Link</a>) 是一个坐拥 20460 <strong>Star</strong><strong>终极社交媒体日程安排工具</strong>,集成了大量 <strong>AI</strong> 功能,旨在简化社交媒体管理。</li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-04.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-02.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-04.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-02.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,256 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-04-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-2025年6月4日"><a class="header" href="#ai洞察日报-2025年6月4日">AI洞察日报 2025年6月4日</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li>Komiko平台近日推出<strong>视频到视频</strong>功能利用AI技术将用户上传的视频一键转换为<strong>动漫</strong>、漫画等多样化艺术风格的动态内容极大降低了动画创作的门槛。该功能通过深度整合先进AI模型并提供AI线稿上色、动画补帧等工具旨在加速创意产业的数字化转型成为专业人士和爱好者的<strong>首选</strong>创作工具。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0604/6388464889049235843422625.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0604/6388464889049235843422625.png" alt="图片" title="img" /></a> <br/></li>
<li>蚂蚁集团的**"AI健康管家”<strong>成功通过信通院医疗健康行业大模型</strong>可信评估**成为首批获认可的产品之一进一步提升了其在医疗AI领域的<strong>可靠性</strong>。该产品已服务超<strong>4000万用户</strong>,提供预约医生、健康评估、报告解读等<strong>智能健康服务</strong>并吸引了60多位知名医生AI智能体入驻未来将持续扩展功能。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202309121506505395_0.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202309121506505395_0.jpg" alt="图片" title="img" /></a> <br/></li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li>AI"教父”<strong>约书亚・本吉奥</strong>成立非营利组织<strong>LawZero</strong>投入3000万美元启动资金旨在开发**"科学家 AI”<strong>系统以防范未来AI智能体对人类进行欺骗。该系统将作为AI安全监控的</strong>护栏**确保自身智能程度与所监管AI智能体相当通过提高AI的<strong>透明性和可信性</strong>,推动行业向更负责任的方向发展。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202412271635326771_0.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202412271635326771_0.jpg" alt="图片" title="img" /></a> <br/></li>
<li>Play AI开源发布了<strong>PlayDiffusion</strong>,一款基于扩散模型的语音**"局部修改”<strong>工具,能够实现对音频片段的替换、删除或调整而</strong>不留痕迹**极大提升了音频编辑效率和自然度。该技术能以高达50倍的速度提升<strong>TTS推理效率</strong>并保持全局一致性对播客制作、AI配音和内容纠错等场景具有<strong>重要意义</strong>,有望成为内容创作的必备利器。
GitHub: <a href="https://github.com/playht/PlayDiffusion">PlayDiffusion</a> 模型下载: <a href="https://huggingface.co/PlayHT/PlayDiffusion">PlayDiffusion</a></li>
<li>LumosFlow是一个用于<strong>长视频生成</strong>的新框架,它通过引入<strong>运动引导</strong>来解决现有方法中时间连贯性不足和过渡不自然的问题。该研究通过分层生成关键帧并分解中间帧插值,实现了高达<strong>15倍的插值</strong>,确保了生成视频的<strong>运动和外观一致性</strong>
论文URL: <a href="https://arxiv.org/abs/2506.02497">LumosFlow</a></li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>OpenAI以30亿美元收购<strong>Windsurf</strong>后,用户对其<strong>Claude模型访问权限</strong>大幅受限引发开发者普遍不满严重影响了开发效率与用户体验。此举导致Windsurf用户面临<strong>成本增加</strong>和操作复杂性且未能获得Claude4系列直接访问这可能威胁Windsurf在激烈市场竞争中的<strong>未来增长</strong>
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202502061719371797_2.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202502061719371797_2.jpg" alt="图片" title="img" /></a> <br/></li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li><strong>RedditVideoMakerBot</strong> (⭐7672) 是一个开源项目,旨在通过<strong>一条命令</strong>简化Reddit视频的创建过程极大地降低了用户制作视频的门槛。
项目URL: <a href="https://github.com/elebumm/RedditVideoMakerBot">RedditVideoMakerBot</a></li>
<li><strong>cursor-free-vip</strong> (⭐28687) 是一款专为<strong>Cursor AI</strong>设计的工具能够自动重置机器ID从而<strong>免费升级</strong>并绕过其Pro功能中的<strong>高代币限制</strong>和试用请求限制。该项目有效解决了用户在Cursor AI使用过程中遇到的<strong>免费试用账户限制</strong>问题。
项目URL: <a href="https://github.com/yeongpin/cursor-free-vip">cursor-free-vip</a></li>
</ol>
<p><strong>科技博主观点</strong></p>
<ol>
<li>科技博主<strong>大帅老猿</strong>指出,通过<strong>重新讲述</strong>学到的知识并录制视频来卖课是常见操作,但<strong>标榜原创</strong>的行为只可能欺骗新手。他强调检验原创的<strong>唯一真理</strong><strong>举报</strong>、投诉、打官司,只有能让侵权内容下架或获得赔偿,才有资格自称原创。
<a href="https://x.com/ezshine/status/1930068772146295153">Tweet Link</a></li>
<li>博主<strong>ginobefun</strong>推荐了一篇关于<strong>复杂RAG架构演进</strong>的InfoQ文章该文章深入探讨了<strong>跨模态知识联邦</strong><strong>统一语义推理</strong>的实践。文章提出通过<strong>融合知识库</strong><strong>统一知识图谱</strong>解决传统RAG在处理异构、多模态知识时的挑战并通过医疗和金融案例展示了其<strong>应用价值</strong>
<br/> <a href="https://pbs.twimg.com/media/Gsj5vqPa0AAPVEa?format=jpg&amp;name=orig"><img src="https://pbs.twimg.com/media/Gsj5vqPa0AAPVEa?format=jpg&amp;name=orig" alt="图片" title="img" /></a> <br/> <br/> <a href="https://pbs.twimg.com/media/Gsj52bAasAIfgTI?format=jpg&amp;name=orig"><img src="https://pbs.twimg.com/media/Gsj52bAasAIfgTI?format=jpg&amp;name=orig" alt="图片" title="img" /></a> <br/> <br/> <a href="https://pbs.twimg.com/media/Gsj54ksasAADTeL?format=jpg&amp;name=orig"><img src="https://pbs.twimg.com/media/Gsj54ksasAADTeL?format=jpg&amp;name=orig" alt="图片" title="img" /></a> <br/> 文章链接:<a href="https://bestblogs.dev/article/2ba211">文章</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-05.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-03.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-05.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-03.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,248 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-05-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-202565"><a class="header" href="#ai洞察日报-202565">AI洞察日报 2025/6/5</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li>Suno 近日升级了其<strong>AI音乐编辑工具</strong>,允许用户上传和混音未完成的作品,并能修改歌词和延长曲目时长至八分钟,同时引入了创意滑块等功能。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202406061628284261_1.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202406061628284261_1.jpg" alt="图片" title="img" /></a> <br/> 此次升级正值其面临主要唱片公司的版权诉讼,唱片公司希望引入类似于 <strong>YouTube Content ID</strong> 的技术来追踪 <strong>AI</strong> 平台上的音乐使用情况。</li>
<li>OpenAI 近日宣布 <strong>ChatGPT</strong> 升级新功能,现可连接 <strong>Outlook</strong><strong>Teams</strong><strong>Gmail</strong> 等多个外部服务,旨在提升企业用户的协作和信息获取效率。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202412271704353969_1.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202412271704353969_1.jpg" alt="图片" title="img" /></a> <br/> 此外,<strong>macOS</strong><strong>ChatGPT Team</strong> 用户还新增了"<strong>录制模式</strong>”,能自动生成会议记录和待办事项。</li>
<li>AI驱动的代码编辑器 <strong>Cursor</strong> 于近日正式发布1.0版本,引入了核心功能 <strong>BugBot</strong>,能自动化审查 <strong>GitHub</strong> 上的 <strong>Pull Request</strong> 并一键修复代码。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388471022950404092684122.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388471022950404092684122.png" alt="图片" title="img" /></a> <br/> 该版本还全面开放了后台代理功能,并增加了 <strong>Jupyter</strong> 支持和"Memories”项目管理功能旨在显著提升开发者的生产力。</li>
<li>腾讯公益近日推出了创新性的"<strong>问 AI</strong>”功能,首次将<strong>大型人工智能模型</strong>应用于公益领域,旨在提升公众与公益项目及机构之间的互动和透明度。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/201811151633427149_4.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/201811151633427149_4.jpg" alt="图片" title="img" /></a> <br/> 这一便捷的沟通方式有助于公众更深入地理解并参与公益事业,并有望推动公益事业的进一步发展。</li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li>这项研究提出 <strong>SuperWriter-Agent</strong> 框架,通过引入结构化的思考、规划和完善阶段,显著提升了<strong>大型语言模型</strong>在生成长文本时的连贯性和质量。 <br/> 基于此框架训练的 <strong>SuperWriter-LM</strong> 在多项基准测试中表现出领先水平,证明了这种反思驱动方法能够让模型像专业作家一样,生成更高质量和一致性的长篇内容:<a href="https://arxiv.org/abs/2506.04180">Link</a></li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>OpenAI 首席执行官 <strong>山姆・奥尔特曼</strong> 指出,<strong>AI</strong> 正逐渐被企业视为基层员工导致科技公司初级职位招聘量在2023至2024年间下降了25%。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202305291455510902_2.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202305291455510902_2.jpg" alt="图片" title="img" /></a> <br/> 专家预测到2030年 <strong>AI</strong> 可能取代多达3.75亿个工作岗位甚至未来1到5年内可能淘汰一半的初级白领岗位引发高达20%的失业率。</li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li><strong>HowToCook</strong> 是一个专为程序员设计的居家烹饪方法指南,旨在解决程序员做饭难的问题。该项目目前已获得 <strong>87530</strong><strong>Star</strong>,内容仅限简体中文,提供详细的烹饪指导:<a href="https://github.com/Anduin2017/HowToCook">Link</a></li>
<li><strong>system-design-primer</strong> 是一项旨在帮助学习如何设计大规模系统并准备系统设计面试的开源项目,已获得 <strong>304096</strong><strong>Star</strong>。它提供了全面的学习资源,并包含 <strong>Anki</strong> 抽认卡辅助学习:<a href="https://github.com/donnemartin/system-design-primer">Link</a></li>
<li><strong>ChinaTextbook</strong> 项目致力于收集中国所有小学、初中、高中及大学的 <strong>PDF教材</strong>,为学生和教师提供免费的教育资源。这个实用的资料库已获得 <strong>35875</strong><strong>Star</strong><a href="https://github.com/TapXWorld/ChinaTextbook">Link</a></li>
<li>Firecrawl 近日发布了突破性的 <strong>/search API</strong>允许开发者通过一次API调用实现网页搜索与内容抓取并以 <strong>AI友好</strong> 的多种格式输出数据。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388471694605610854897111.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388471694605610854897111.png" alt="图片" title="img" /></a> <br/> 这一功能极大简化了 <strong>AI</strong> 应用的数据获取流程,无需第三方依赖,提升了数据处理效率,并在 <strong>GitHub</strong> 上已获得超过10K的 <strong>Star</strong></li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li><strong>Gorden Sun</strong> 分享了一套能生成"超级赞”图文效果的 <strong>AI</strong> 提示词,并推荐使用 <strong>GPT4o</strong><strong>Claude-3.7</strong><strong>DeepSeek-V3</strong> 等工具。 <br/> <a href="https://pbs.twimg.com/media/Gse1INSb0AQCh0S?format=jpg&amp;name=orig"><img src="https://pbs.twimg.com/media/Gse1INSb0AQCh0S?format=jpg&amp;name=orig" alt="Image" title="img" /></a> <br/> 他指出,这些提示词虽然易于使用,但原作者在整理上花费了心思:<a href="https://x.com/Gorden_Sun/status/1930466986544308552">Link</a></li>
<li>推主 <strong>wwwyesterday</strong> 将现代学术论文比作 <strong>npm</strong> 包管理系统,认为两者都存在论文/包数量庞大、引用/依赖层层叠叠的现象,且大部分价值不高,少数经典广为引用。 <br/> 他指出,现在很少有人能完全从零开始原创,就像写东西离不开 <code>package.json</code>,但他仍会刷 <strong>arxiv</strong> 寻找新观点:<a href="https://x.com/wwwgoubuli/status/1930310020312510934">Link</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-06.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-04.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-06.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-04.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,254 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-06-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-202566"><a class="header" href="#ai洞察日报-202566">AI洞察日报 2025/6/6</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li><strong>Pollo AI</strong> 推出了一站式<strong>AI图像与视频生成平台</strong>整合全球前沿模型如Google Veo 3、Kling等提供文字转视频、图像风格化、角色一致性等多种功能并支持API接入相比同类平台更具成本和模型优势且获得Google Cloud的Veo 3模型授权。
<br/> <a href="https://assets-v2.circle.so/5fit6knlg31jzz4ds9stmn0z1wda"><img src="https://assets-v2.circle.so/5fit6knlg31jzz4ds9stmn0z1wda" alt="图片" title="img" /></a> <br/></li>
<li><strong>Luma Labs</strong> 发布了全新的<strong>AI视频编辑工具</strong> Modify Video基于其Dream Machine平台和<strong>Ray2模型</strong>用户能通过文本提示对视频进行风格重塑、场景替换和角色调整大幅降低了传统视频制作的复杂性和成本。该工具凭借Ray2模型的强大能力在动作流畅性和时间一致性方面表现出色并降低了创意门槛。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388474336287139806268530.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388474336287139806268530.png" alt="图片" title="img" /></a> <br/></li>
<li>谷歌更新了<strong>Gemini 2.5版本</strong>,显著提升了<strong>AI音频对话与生成技术</strong>使其成为一个能够原生理解和生成文本、图像、音频、视频和代码的多模态AI系统。新功能使得人机交流更加自然流畅支持实时音频对话、风格控制和多语言并通过可控的文本转语音技术允许用户精确调整语音输出的语调和情感。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388474192800462061689108.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388474192800462061689108.png" alt="图片" title="img" /></a> <br/></li>
<li>热门手游《<strong>逆水寒</strong>》与<strong>可灵AI</strong>合作,在游戏内推出了全新的"<strong>图生动图</strong>”玩法,让玩家能够通过简单操作将静态图片转化为个性化动态画面。该功能支持用户截图或上传图片,通过输入描述词来生成动图,并可进行双人互动创作,提升了玩家的游戏体验。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388473368297009187838113.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388473368297009187838113.png" alt="图片" title="img" /></a> <br/></li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li><strong>NVIDIA</strong> 发布了<strong>Llama-3.1-Nemotron-Nano-VL-8B-V1</strong>这是一款基于Llama-3.1架构的<strong>8B参数视觉语言模型</strong>支持图像、视频和文本输入并能输出高质量文本及具备强大的图像推理能力。该模型在OCR和文档智能方面表现卓越通过AWQ4bit量化技术可在单张RTX GPU上高效部署并已在Hugging Face平台开源为开发者提供了轻量高效的多模态AI解决方案。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388473110722451938945298.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0605/6388473110722451938945298.jpg" alt="图片" title="img" /></a> <br/></li>
<li>Voyager 是一种新颖的<strong>视频扩散框架</strong>,它能从单张图片和用户定义的摄像机路径,生成<strong>世界一致的3D点云序列</strong>特别适用于游戏和虚拟现实中可探索的3D场景。这项技术通过联合生成对齐的RGB和深度视频序列实现了帧间固有的<strong>3D一致性</strong>,显著提升了视觉质量和几何精度。论文地址:<a href="https://arxiv.org/abs/2506.04225">https://arxiv.org/abs/2506.04225</a></li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>硅谷投资人<strong>Mary Meeker</strong>的最新<strong>AI报告</strong>指出全球AI竞争格局正经历深刻重塑中国AI力量与<strong>开源浪潮</strong>正全面崛起挑战OpenAI等头部公司的主导地位。报告强调中国AI模型性能已逼近国际一线并在制造业中展现出强大的产业融合能力同时开源模型凭借低成本和高灵活性市场份额迅速增长预示着AI行业进入多极对抗新时代。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202304171408567483_0.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202304171408567483_0.jpg" alt="图片" title="img" /></a> <br/></li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li><strong>netbird</strong> 是一个拥有 <strong>14029</strong> 颗星的<strong>开源项目</strong>,它基于 <strong>WireGuard®</strong> 帮助用户将设备连接到安全的覆盖网络,并支持<strong>SSO</strong><strong>MFA</strong>和精细的访问控制,提供安全高效的网络连接。项目地址:<a href="https://github.com/netbirdio/netbird">https://github.com/netbirdio/netbird</a></li>
<li><strong>quarkdown</strong> 是一个拥有 <strong>3952</strong> 颗星的<strong>开源项目</strong>,旨在为 <strong>Markdown</strong> 文本赋予"超能力”,将想法轻松转化为演示文稿、文章和书籍等多种形式。项目地址:<a href="https://github.com/iamgio/quarkdown">https://github.com/iamgio/quarkdown</a></li>
<li><strong>cognee</strong> 是一个拥有 <strong>2658</strong> 颗星的<strong>开源项目</strong>,其核心功能是仅用 <strong>5 行代码</strong>即可实现 <strong>AI 智能体的记忆</strong>,极大简化了智能体开发中的复杂性。项目地址:<a href="https://github.com/topoteretes/cognee">https://github.com/topoteretes/cognee</a></li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li>@wwwyesterday 分享了一个关于与 <strong>AI 对话</strong>的"生活小妙招”即在开始时让AI每次回复都称呼"哥哥”一旦AI停止这样称呼就意味着可以新开对话窗口了。这个小技巧巧妙地利用了AI的"记忆”机制,为用户提供了判断对话是否需要重新开始的依据。</li>
<li><strong>Gorden Sun</strong> 宣布 <strong>Fish Audio</strong> 已开源其 <strong>S1-mini语音模型</strong>作为表现良好的S1模型的精简版0.5B参数。S1-mini可供个人免费部署使用但不可商用。在线体验及模型链接<a href="https://huggingface.co/spaces/fishaudio/openaudio-s1-mini">https://huggingface.co/spaces/fishaudio/openaudio-s1-mini</a> <a href="https://huggingface.co/fishaudio/openaudio-s1-mini">https://huggingface.co/fishaudio/openaudio-s1-mini</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-07.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-05.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-07.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-05.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,249 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-07-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-202567"><a class="header" href="#ai洞察日报-202567">AI洞察日报 2025/6/7</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li>近日,德国科技巨头<strong>博世</strong><strong>阿里云</strong>合作,将<strong>通义大模型</strong>应用于<strong>智能座舱</strong>,通过云计算与端侧混合计算实现与<strong>3D 数字人</strong>的交互,提升座舱智能感知和多模态控制能力。该方案支持知识问答和同声传译,使智能座舱成为理解并满足用户需求的智能助手,标志着汽车行业正迈向个性化、智能化的移动空间。</li>
<li><strong>Perplexity AI</strong>近日推出<strong>SEC</strong>文件访问功能,旨在帮助各类投资者在<strong>Perplexity 平台</strong>轻松查询和理解复杂的<strong>财务文档</strong>,所有答案均附有引用。此外,<strong>Perplexity</strong>还推出了"<strong>实验室</strong>”功能,该功能能够将用户的提示转化为报告、仪表板等完整项目,显著提升了工作流效率。</li>
<li><strong>Trae 平台</strong>近日更新,正式集成<strong>Google</strong><strong>Gemini 2.5 Pro Preview</strong>模型,该模型在<strong>WebDev Arena</strong><strong>LMArena 编码排行榜</strong>中均位列第一,显著提升了前端开发与<strong>UI 设计</strong>能力。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388481749990229697161576.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388481749990229697161576.png" alt="图片" title="img" /></a> <br/> 此次升级优化了代码转换、编辑及复杂代理工作流,并已免费向用户开放,有望推动<strong>AI</strong><strong>区块链</strong><strong>去中心化应用</strong>领域的创新。</li>
<li>海外知名的<strong>AI 视频生成平台 PixVerse</strong>正式推出其国内版"<strong>拍我AI</strong>”,同步上线移动端 App 和网页版,旨在为国内内容创作者和企业提供高效便捷的<strong>AI 视频生成工具</strong><br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388481574736715558459901.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388481574736715558459901.png" alt="图片" title="img" /></a> <br/> "<strong>拍我AI</strong>”支持通过文本或图像一键生成高质量、多风格视频,依托 PixVerse V4.5 算法并进行了本地化优化,有望推动中国市场<strong>AI 视频技术</strong>的普及和应用。</li>
<li><strong>ElevenLabs</strong>于2025年6月5日发布了被誉为"地表最强”的<strong>文本转语音TTS模型</strong><strong>Eleven v3 (Alpha 版)</strong>,该模型不仅能将文本转化为自然流畅的语音,还能通过<strong>音频标签</strong>精确控制情感、语速甚至加入音效,实现"演技合成”。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388479747817228256386757.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388479747817228256386757.png" alt="图片" title="img" /></a> <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388479739813195471789762.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388479739813195471789762.png" alt="图片" title="img" /></a> <br/> 它支持<strong>70多种语言</strong><strong>多角色自然对话</strong>,并通过自动标签功能简化创作,有望在<strong>影视配音</strong><strong>虚拟助手</strong>等领域广泛应用,重新定义<strong>AI 语音</strong>的未来。</li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li>这篇研究论文介绍了一种名为<strong>动态内存稀疏化DMS<strong>的新方法,它通过压缩</strong>Transformer LLM</strong><strong>KV 缓存</strong>,在推理时实现<strong>超扩展</strong>,从而在相同计算资源下生成更多 Token 并提高模型准确性。该方法仅需少量训练步骤即可实现高压缩率,并显著提升了如<strong>Qwen-R1 32B</strong>等多种<strong>LLM</strong><strong>AIME 24</strong><strong>GPQA</strong><strong>LiveCodeBench</strong>等基准测试上的准确性。论文地址:<a href="https://arxiv.org/abs/2506.05345">https://arxiv.org/abs/2506.05345</a></li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li><strong>宇树科技 CEO 王兴兴</strong>在第七届<strong>北京智源大会</strong>上表示,公司始终坚持的终极目标是让<strong>机器人</strong>实现家庭和工业场景的<strong>实用化工作</strong>,而跳舞和格斗等具身智能展示仅是训练和技术验证的手段。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202304171730201359_10.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202304171730201359_10.jpg" alt="图片" title="img" /></a> <br/> 他透露,今年上半年<strong>人形机器人</strong>在商业租赁市场已初具规模并带来可观价值,未来将加速机器人实用化落地。</li>
<li>知名科技博主<strong>王自如</strong><strong>B站</strong>宣布复更,并正式更名为"<strong>王自如AI</strong>”,表示将以<strong>AI 测评 UP 主</strong>的身份开启二次创业,专注于<strong>AI 内容创业</strong><strong>AI 应用</strong>,助力传统产业数字化转型。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388480568808508227034081.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388480568808508227034081.png" alt="图片" title="img" /></a> <br/> 他在视频中感谢了<strong>董明珠</strong><strong>雷军</strong>的鼓励和帮助,并提及此前入职格力是为重塑销售体系。</li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li><strong>note-gen</strong>是一款<strong>AI 赋能</strong>的跨平台<strong>Markdown 笔记应用</strong>Stars: 3161致力于利用<strong>AI</strong>将碎片化知识整理成可读笔记,连接记录与写作。项目地址:<a href="https://github.com/codexu/note-gen">https://github.com/codexu/note-gen</a></li>
<li><strong>notebooks</strong>项目Stars: 1174提供了通过<strong>Google Colab</strong><strong>Kaggle</strong>等平台引导式<strong>Notebook</strong>免费微调<strong>大型语言模型</strong>的功能。项目地址:<a href="https://github.com/unslothai/notebooks">https://github.com/unslothai/notebooks</a></li>
<li><strong>ragbits</strong>Stars: 749提供了一系列构建模块旨在帮助开发者快速开发<strong>生成式 AI 应用程序</strong>。项目地址:<a href="https://github.com/deepsense-ai/ragbits">https://github.com/deepsense-ai/ragbits</a></li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li>知名博主<strong>歸藏</strong>推荐<strong>即梦AI</strong>图片3.0的<strong>智能参考</strong>功能,该功能支持用户基于上传图像生成任何内容,并能修改照片背景、添加配饰、更改姿势,甚至精确添加或修改复杂<strong>文字效果</strong><br/> <a href="https://cdnv2.ruguoapp.com/FvtrC2kjbbXAClT4WeaTRXbuwUnlv3.jpeg"><img src="https://cdnv2.ruguoapp.com/FvtrC2kjbbXAClT4WeaTRXbuwUnlv3.jpeg" alt="Image" title="img" /></a> <br/> 这一突破性能力极大地提升了日常照片分享的表现力,并能高效生成电商产品图、小红书和视频封面等<strong>营销物料</strong>。文章链接:<a href="https://mp.weixin.qq.com/s/_kt9OLylR95sG7U37wseSw">https://mp.weixin.qq.com/s/_kt9OLylR95sG7U37wseSw</a>,社交媒体链接:<a href="https://m.okjike.com/originalPosts/6842cd91a26304532600fa4d">https://m.okjike.com/originalPosts/6842cd91a26304532600fa4d</a></li>
<li><strong>Yangyi</strong>分享了<strong>AI 时代</strong>的产品价值公式,指出产品价值取决于"<strong>新体验</strong>”(获得有效结果与美观度)和"<strong>迁移成本</strong>”(旧平台数据沉没成本与上手门槛)之间的差异。因此,构建高价值<strong>AI 产品</strong>需要提供超预期的有效结果、足够美观的界面,并致力于降低用户数据迁移的难度和产品的使用门槛。社交媒体链接:<a href="https://x.com/Yangyixxxx/status/1930912029809979654">https://x.com/Yangyixxxx/status/1930912029809979654</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-08.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-06.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-08.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-06.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,241 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-08-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-202568"><a class="header" href="#ai洞察日报-202568">AI洞察日报 2025/6/8</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li>阿里巴巴于6月6日正式开源了全新的<strong>千问3向量模型</strong>系列<strong>Qwen3-Embedding</strong>其在文本检索、聚类和分类等任务上的性能提升超40%并超越谷歌和OpenAI的顶尖模型获得了同类模型的<strong>最佳性能</strong>SOTA同时具备强大的多语言支持能力。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202504151007236218_3.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202504151007236218_3.jpg" alt="图片" title="img" /></a> <br/> 该系列共9款模型已在魔搭社区、Hugging Face和GitHub等平台开源并可通过阿里云百炼使用API服务为全球开发者提供了更高效的AI应用空间。</li>
<li><strong>AI</strong>驱动的本地视频编辑工具<strong>Diffusion Studio Pro</strong>正式亮相,该产品被誉为"CapCut + Cursor”结合以本地优先、浏览器为基础的非线性编辑体验集成了超过16种生成式<strong>AI模型</strong>旨在降低创作门槛并大幅提升专业视频创作者的工作效率。其提供免费无限层级有望成为AI驱动视频编辑的行业标杆为创作者带来更高效、直观的创作体验。</li>
<li>谷歌于6月5日发布了名为<strong>Portraits</strong>的创新<strong>AI产品</strong>,用户可通过与虚拟专家进行实时对话,获得个性化的沟通技巧与领导力学习体验,首批虚拟专家基于知名畅销书作者打造。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388480752743547666381573.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0606/6388480752743547666381573.png" alt="图片" title="img" /></a> <br/> 该产品依托谷歌先进的<strong>生成式AI技术</strong>强调交互性和实践性目前仅对美国IP用户开放测试预示着<strong>AI教育</strong>将迈向更互动、更个性化的新阶段。</li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li>在第七届"北京智源大会”上,智源研究院重磅推出了一系列名为"悟界”的<strong>大模型</strong>,其中包括原生多模态世界模型<strong>Emu3</strong>、脑科学多模态通用基础模型见微<strong>Brainμ</strong>,以及具身智能的协作框架<strong>RoboOS2.0</strong><strong>RoboBrain2.0</strong>等。 <br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202307211343352678_2.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202307211343352678_2.jpg" alt="图片" title="img" /></a> <br/> 这些模型旨在推动人工智能在医疗、教育、环境监测等多个重要领域的应用落地,展现了智源研究院在<strong>多模态智能技术</strong>方面的雄心和实力。</li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li><strong>react-bits</strong>是一个拥有<strong>12729</strong>星的开源<strong>React组件集合</strong>,它提供动画、交互式且完全可定制的组件,旨在帮助开发者构建出令人惊叹且难以忘怀的用户界面。项目地址:<a href="https://github.com/DavidHDev/react-bits">Link</a></li>
<li><strong>art-design-pro</strong>是一个拥有<strong>1729</strong>星的Vue 3管理后台模板它采用Vite + TypeScript + Element Plus构建专注于优化用户体验和视觉设计。项目地址<a href="https://github.com/Daymychen/art-design-pro">Link</a></li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li>刘勿锋分享了用<strong>Claude</strong>画图时的一个实用小技巧通过简单的提示词可以指导Claude调用如<strong>iconfont</strong><strong>Lucied React图标库</strong>等第三方图标库而非使用系统默认的emoji从而大幅提升前端网页的视觉美观度和风格统一性。 <br/> <a href="https://cdnv2.ruguoapp.com/Fmks9yCJBJ1rO-T5g9BPepCxci-v3.png"><img src="https://cdnv2.ruguoapp.com/Fmks9yCJBJ1rO-T5g9BP9epCxci-v3.png" alt="图片" title="img" /></a> <br/> <br/> <a href="https://cdnv2.ruguoapp.com/FqkHGytOOk8dLy3WejWlcbSLAIBqv3.png"><img src="https://cdnv2.ruguoapp.com/FqkHGytOOk8dLy3WejWlcbSLAIBqv3.png" alt="图片" title="img" /></a> <br/> 更多详情请访问:<a href="https://m.okjike.com/originalPosts/68444463dfa0f1ef3adbbf9b">Link</a></li>
<li>wwwgoubuli预估接下来社交媒体上将出现两种热门内容一部分是深入分析<strong>作文题目</strong>的讨论,另一部分则是围绕<strong>AI写作文</strong>展开的创作比拼展现了对当前AI应用趋势的敏锐观察。更多信息<a href="https://x.com/wwwgoubuli/status/1931206161044484395">Link</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-09.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-07.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-09.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-07.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,247 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-09-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-202569"><a class="header" href="#ai洞察日报-202569">AI洞察日报 2025/6/9</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li><strong>OpenAI</strong> 宣布 <strong>ChatGPT</strong> 高级语音功能升级,显著提升了语音交互的自然性和流畅度,使其<strong>语调更自然、节奏更真实、情绪表达更丰富</strong>,并加入了<strong>双向自动翻译</strong>功能,能持续进行多轮对话翻译,无需重复指令,特别适用于国际出行、远程办公和语言学习等场景。</li>
<li>面壁智能于6月6日发布了 <strong>MiniCPM 4.0系列</strong> 模型包括8B稀疏版和0.5B轻巧版,在端侧性能上实现了<strong>极限情况下220倍、常规5倍的速度提升</strong>,通过<strong>系统级稀疏创新</strong>和高效双频换挡技术大幅减少了端侧存储需求并已成功适配Intel、高通等主流芯片。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0608/6388497352726253514384248.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0608/6388497352726253514384248.png" alt="图片" title="img" /></a> <br/></li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li><strong>tensorzero</strong> (<a href="https://github.com/tensorzero/tensorzero">Link</a>) 是一款拥有4869个Star的项目它为LLM应用创建了一个<strong>反馈循环</strong>,旨在将生产数据转化为更智能、更快、更经济的模型。</li>
<li><strong>HumanSystemOptimization</strong> (<a href="https://github.com/zijie0/HumanSystemOptimization">Link</a>) 是一个拥有15170个Star的项目提供了一份名为"<strong>健康学习到150岁</strong>”的<strong>人体系统调优指南</strong></li>
<li><strong>omni-tools</strong> (<a href="https://github.com/iib0011/omni-tools">Link</a>) 拥有2940个Star它提供了一套<strong>自托管的网页工具集</strong>,用于日常任务,强调<strong>无广告、无跟踪</strong>,且可在浏览器中快速便捷使用。</li>
<li><strong>BlackFriday-GPTs-Prompts</strong> (<a href="https://github.com/friuns2/BlackFriday-GPTs-Prompts">Link</a>) 是一个拥有7018个Star的项目提供了<strong>无需Plus订阅即可使用的免费GPTs列表</strong></li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li>ginobefun分享了关于 <strong>RAG技巧与底层代码剖析</strong> 的文章(<a href="https://x.com/hongming731/status/1931695593300295887">Link</a>)强调通过手写代码理解RAG核心逻辑并详细介绍了<strong>语义分块</strong><strong>上下文增强检索</strong>如何提升大模型问答质量。</li>
<li>黄赟认为 <strong>AI数字人</strong> 将成为电商平台的标配(<a href="https://x.com/huangyun_122/status/1931651642912575799">Link</a>),并提到近期<strong>AI主播被"开发者模式”玩坏</strong>的现象,导致技术服务商需紧急修复漏洞。</li>
<li>歸藏展示了 <strong>FLUX kontext</strong> 在修改汽车宣传图方面的强大能力(<a href="https://m.okjike.com/originalPosts/684554a3f2a4a64de9113b05">Link</a>),能将汽车背景更换为黄昏沙滩或赛道,并智能地为行驶中的车轮<strong>添加运动模糊效果</strong>
<br/> <a href="https://cdnv2.ruguoapp.com/FgYlujbzq6TyHy_7vk80onRQz2s0v3.png"><img src="https://cdnv2.ruguoapp.com/FgYlujbzq6TyHy_7vk80onRQz2s0v3.png" alt="图片" title="img" /></a> <br/>
<br/> <a href="https://cdnv2.ruguoapp.com/Frl3Mso4Vw3AJ0TMEhauKTMf1KJSv3.png"><img src="https://cdnv2.ruguoapp.com/Frl3Mso4Vw3AJ0TMEhauKTMf1KJSv3.png" alt="图片" title="img" /></a> <br/></li>
<li>izx-copy分享了Google的建议(<a href="https://m.okjike.com/originalPosts/684547c3380c5253de2afdb8">Link</a>),鼓励开发者直接使用其高质量的<strong>深度研究代码库</strong>,而非自行开发,认为其比"vibe coding”版本更优。
<br/> <a href="https://cdnv2.ruguoapp.com/Fq5xvk7MirT9ygZ10T5hIx3lWRlvv3.jpg"><img src="https://cdnv2.ruguoapp.com/Fq5xvk7MirT9ygZ10T5hIx3lWRlvv3.jpg" alt="图片" title="img" /></a> <br/></li>
<li>Yangyi呼吁开发 <strong>"睿智的AI”</strong> (<a href="https://x.com/Yangyixxxx/status/1931568827126743513">Link</a>),即能够<strong>快速识别幻觉和虚假信息</strong>的AI并提出了<strong>AI幻觉专家网络</strong>的概念认为这能帮助AI自主辨别信息真伪提升输出可靠性。</li>
<li>pimgeek转发了一篇关于公司<strong>用ChatGPT替代客服导致翻车</strong>的文章(<a href="https://mp.weixin.qq.com/s/68NngKn8nhZEziLkRvBcTg">Link</a>)文章指出用户更倾向于与真人客服沟通数据显示多数用户不希望产品引入AI客服甚至会因此考虑更换竞争对手。
<br/> <a href="https://mmbiz.qpic.cn/mmbiz_jpg/kKoeb9t5fNrx85xJ2bibZStRvd1w55tu3rasGH4r7WyxZ3ECSxozia6DZvicBZcXVKhsUSCSKw47gnesic2RfDztsQ/0?wx_fmt=jpeg"><img src="https://mmbiz.qpic.cn/mmbiz_jpg/kKoeb9t5fNrx85xJ2bibZStRvd1w55tu3rasGH4r7WyxZ3ECSxozia6DZvicBZcXVKhsUSCSKw47gnesic2RfDztsQ/0?wx_fmt=jpeg" alt="图片" title="img" /></a> <br/></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-10.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-08.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-10.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-08.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,286 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-10-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-2025610"><a class="header" href="#ai洞察日报-2025610">AI洞察日报 2025/6/10</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li>
<p>Google 近日调整 <strong>AI 模型</strong>使用政策自5月起<strong>Google AI Studio</strong> 已停止向免费用户提供 <strong>Gemini 2.5 Pro</strong> 系列模型调用权限,未来开发者需自行提供 <strong>API 密钥</strong>接入服务。此举引发了开发者社区的广泛关注,分析认为这是 Google 推动 <strong>Gemini</strong> 商业化进程、将高性能模型纳入付费体系的信号。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202312070835429226_0.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202312070835429226_0.jpg" alt="图片" title="img" /></a> <br/></p>
</li>
<li>
<p>据官方数据显示,阿里旗下<strong>通义千问3</strong>大模型开源仅一个月,其全球累计下载量已突破<strong>1250万次</strong>,并在 Hugging Face 等主流 <strong>AI</strong> 开源平台上,衍生模型数量超过<strong>13万个</strong>,跃居全球第一。这一爆发式增长不仅代表着国产大模型的开源实力正与国际水平接轨,也进一步巩固了阿里在全球 <strong>AI 基础模型生态</strong>中的影响力。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202504151007248027_6.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202504151007248027_6.jpg" alt="图片" title="img" /></a> <br/></p>
</li>
<li>
<p>轻量级文档解析模型 <strong>MonkeyOCR</strong> 近日震撼登场,它以仅<strong>3B参数</strong>的轻量级架构,在英文文档解析任务中展现出惊艳性能,超越了 <strong>Gemini 2.5 Pro</strong> 等重量级模型,并大幅提升了处理速度。其核心创新在于采用"<strong>结构-识别-关系</strong>”三元组范式,这不仅提升了解析准确率,还显著降低了计算资源需求,为中小型企业部署 <strong>AI</strong> 文档解析解决方案提供了可能。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0609/6388506551370676562538551.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0609/6388506551370676562538551.png" alt="图片" title="img" /></a> <br/>
论文链接:<a href="https://arxiv.org/abs/2506.05218">https://arxiv.org/abs/2506.05218</a></p>
</li>
<li>
<p>在近期一场采用2025年高考新课标卷客观题的数学挑战中<strong>字节</strong><strong>豆包</strong><strong>腾讯</strong><strong>元宝</strong>表现出色以68分的成绩并列第一充分展现了其在复杂推理场景下的潜力。此次比赛不仅揭示了各大 <strong>AI 模型</strong>在高考数学上的能力与不足,也反映出它们在细节处理、公式应用和逻辑推理方面的显著进步,为未来 <strong>AI 数学能力</strong>的发展奠定了基础。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0609/6388506262201100345390287.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0609/6388506262201100345390287.png" alt="图片" title="img" /></a> <br/>
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0609/6388506263798259217980699.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0609/6388506263798259217980699.png" alt="图片" title="img" /></a> <br/></p>
</li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>
<p>架构师<strong>罗伯特・卡鲁索</strong>近日进行了一项跨时代实验结果显示1977年推出的<strong>Atari 2600</strong>游戏机国际象棋引擎轻松击败了 <strong>OpenAI</strong><strong>ChatGPT</strong><strong>ChatGPT</strong> 在比赛中频繁犯错、混淆棋子,这引发了公众对<strong>复古科技</strong><strong>现代 AI</strong> 棋艺水平的讨论和反思。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202307141649254569_3.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202307141649254569_3.jpg" alt="图片" title="img" /></a> <br/></p>
</li>
<li>
<p>博主 <strong>wwwgoubuli</strong> 认为 <strong>AI 编程代理</strong>正进入平台期,尽管当前模型如 <strong>Gemini 2.5 Pro</strong><strong>Claude</strong> 表现强劲,但模型层面的"飞升”空间有限。他预计未来将有更多产品井喷式发展,而重点在于<strong>载体</strong><strong>媒介</strong><strong>IDE/plugin</strong> 等方面的完善,而非核心模型能力的突破。
<a href="https://x.com/wwwgoubuli/status/1931898011904598439">Link</a></p>
</li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li>
<p><strong>vosk-api</strong> 是一个拥有<strong>10342</strong>颗星的开源项目,它提供适用于 <strong>Android</strong><strong>iOS</strong><strong>树莓派</strong>和服务器的<strong>离线语音识别 API</strong>,并支持 <strong>Python</strong><strong>Java</strong><strong>C#</strong><strong>Node</strong> 等多语言开发。
<a href="https://github.com/alphacep/vosk-api">Link</a></p>
</li>
<li>
<p><strong>RAG_Techniques</strong> 是一个拥有<strong>17002</strong>颗星的开源项目,该仓库展示了<strong>检索增强生成RAG系统</strong>的各种先进技术。它结合了<strong>信息检索</strong><strong>生成模型</strong>,旨在为用户提供更加准确且上下文丰富的 <strong>AI</strong> 回复。
<a href="https://github.com/NirDiamant/RAG_Techniques">Link</a></p>
</li>
<li>
<p><strong>Seelen-UI</strong> 是一个拥有<strong>7257</strong>颗星的开源项目,它提供了一个<strong>完全可定制</strong><strong>桌面环境</strong>,专为 <strong>Windows 10/11</strong> 用户设计,让用户能够打造个性化的操作界面。
<a href="https://github.com/eythaann/Seelen-UI">Link</a></p>
</li>
<li>
<p><strong>Meng Shao</strong> 分享了5个精选的<strong>开源项目</strong>,旨在帮助 <strong>AI 工程师</strong>提升技能并获得"超能力”,尤其是在 <strong>LLMs</strong> 和生成式 <strong>AI Agent</strong> 领域。这些项目涵盖了从 <strong>LLM</strong> 基础知识、<strong>AI Agent</strong> 构建、生产级机器学习应用部署到<strong>提示工程</strong>等关键学习资源。
<br/> <a href="https://pbs.twimg.com/media/Gs-Kw91bEAAfXUe?format=jpg&amp;name=orig"><img src="https://pbs.twimg.com/media/Gs-Kw91bEAAfXUe?format=jpg&amp;name=orig" alt="图片" title="img" /></a> <br/>
<a href="https://x.com/shao__meng/status/1931915369754870114">Link</a></p>
</li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li>
<p>博主<strong>归藏</strong>详细介绍了如何在 <strong>Liblib</strong> 平台在线使用 <strong>FLUX Kontext</strong> 工具进行图片修改,无需本地运行 <strong>Comfyui</strong>,并分享了涵盖单图、双图、三图融合及图片放大功能的<strong>工作流</strong><strong>Liblib</strong> 上线的 <strong>Kontext</strong> 提供了便捷的在线处理能力,旨在帮助用户轻松掌握图片创作的各种高级技巧。
<br/> <a href="https://cdnv2.ruguoapp.com/FgPX1CCXdu_RYpd92XdLLAZ2RFbBv3.png"><img src="https://cdnv2.ruguoapp.com/FgPX1CCXdu_RYpd92XdLLAZ2RFbBv3.png" alt="图片" title="img" /></a> <br/>
<a href="https://m.okjike.com/originalPosts/68468cf4747af0f12129117c">Link</a></p>
</li>
<li>
<p><strong>Tw93</strong> 推荐了 <strong>PayQrcode</strong> 方案,该方案通过<strong>物理图片合并技术</strong>,成功将<strong>微信</strong><strong>支付宝</strong>收款码融合为单张图片,实现了线下离线场景下的<strong>双码兼容识别</strong>。这项创新解决了传统双码不便的问题,并经本地测试证明识别效果良好,极大地提升了支付便利性。
<br/> <a href="https://pbs.twimg.com/media/Gs7XEppbgAA10Zw?format=jpg&amp;name=orig"><img src="https://pbs.twimg.com/media/Gs7XEppbgAA10Zw?format=jpg&amp;name=orig" alt="图片" title="img" /></a> <br/>
<a href="https://x.com/HiTw93/status/1931860291278823822">Link</a></p>
</li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../daily/2025-06-11.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-09.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../daily/2025-06-11.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-09.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,272 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>06-11-日刊 - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="../highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="../tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-2025611"><a class="header" href="#ai洞察日报-2025611">AI洞察日报 2025/6/11</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li><strong>豆包大模型家族</strong>将在2025 FORCE原动力大会上重磅发布全新的<strong>豆包·视频生成模型</strong>。这款模型可谓"创意魔法棒”,它凭借高效结构和多任务统一建模等黑科技,不仅支持<strong>无缝多镜头叙事</strong>,还能<strong>精准响应多动作</strong>,甚至能像专业摄影师一样<strong>随心运镜</strong>,轻松生成写实、动漫等多种风格的<strong>高品质视频</strong>,简直是视频创作者的福音!
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388517021358447365987976.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388517021358447365987976.png" alt="图片" title="img" /></a> <br/></li>
<li>xAI开发的<strong>Grok</strong>人工智能正大刀阔斧地接管X平台的<strong>推荐算法</strong>,同时优化了评论排序机制。这意味着,平台将优先推荐<strong>高质量内容</strong>,而非仅仅看粉丝量,这无疑给那些粉丝较少但有真材实料的"小号”和新人带来了前所未有的曝光机会,旨在打造一个更公平、更开放的内容生态,让好内容不再"蒙尘”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514989498792027745193.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514989498792027745193.png" alt="图片" title="img" /></a> <br/></li>
<li><strong>豆包App</strong>近期也对"一句话P图”功能进行了全面升级它基于强大的SeedEdit 3.0模型,新增了一键添加/替换文字、质感风格迁移和局部图像编辑增强等一系列酷炫修图玩法。这波升级简直是把专业修图师请进了手机,让普通用户也能无需专业技能,轻松搞定个性化照片创作,让"修图小白”也能变身"修图大师”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514703219058043604298.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514703219058043604298.png" alt="图片" title="img" /></a> <br/></li>
<li>苹果在WWDC 2025大会上带来了iOS 26系统的"杀手级”功能——<strong>视觉智能</strong>。有了它,你可以在屏幕上的任何图片或信息上进行提问、搜索,甚至自动识别事件详情,简直是手机的"智能眼”。这项升级通过AI技术实现了屏幕内容的"一眼识别”,大大提升了交互体验的便捷性与智能化程度,还能自动提取事件信息加入日历,让你的数字生活更加省心。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514197880401555868249.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514197880401555868249.png" alt="图片" title="img" /></a> <br/></li>
<li>好消息!<strong>沉浸式翻译</strong>迎来重大更新,现在已能对<strong>推特X视频</strong>进行<strong>实时翻译</strong>。即便视频没有原生字幕,它也能帮你"神同步”地显示<strong>中英双语字幕</strong>。这下刷X平台视频再也不用担心语言不通了简直是跨文化交流的"神助攻”,彻底消除了语言障碍,让世界更近。
<a href="https://x.com/imxiaohu/status/1932299897388277804">Link</a></li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li>香港大学和华为诺亚方舟实验室强强联手,推出了颠覆性的<strong>FUDOKI</strong>模型。这款模型采用<strong>非掩码离散流匹配架构</strong>,成功突破了传统自回归模型的束缚,实现了更加灵活高效的<strong>多模态生成与理解</strong>能力。它通过独特的<strong>并行去噪机制</strong>,显著提升了复杂推理和生成任务的表现,尤其在<strong>图像生成</strong>方面表现惊艳,为未来<strong>通用人工智能</strong>的发展铺平了道路。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202405161743136484_4.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202405161743136484_4.jpg" alt="图片" title="img" /></a> <br/></li>
<li>香港科技大学和快手科技的研究团队联合发布了<strong>EvoSearch进化搜索技术</strong>这简直是AI作画领域的一股清流它彻底颠覆了以往"大模型、大算力”的固有思维巧妙地将达尔文的进化论思想融入AI生成过程让那些"小个子”模型也能生成超越甚至媲美"大块头”的<strong>高质量图像和视频</strong>。这项突破性技术有望开启AI创作的**"智能进化”时代**让AI模型在推理阶段释放更深层次的潜力。相关项目主页、代码和论文链接已发布<a href="https://tinnerhrhe.github.io/evosearch/">https://tinnerhrhe.github.io/evosearch/</a><a href="https://github.com/tinnerhrhe/EvoSearch-codes">https://github.com/tinnerhrhe/EvoSearch-codes</a><a href="https://arxiv.org/abs/2505.17618">https://arxiv.org/abs/2505.17618</a>
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516498517715873339996.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516498517715873339996.png" alt="图片" /></a> <br/>
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516503306155376085044.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516503306155376085044.png" alt="图片" /></a> <br/></li>
<li>一篇名为"<strong>玩中泛化:通过游戏学习推理</strong>”的学术论文揭示了令人兴奋的发现:<strong>多模态大型语言模型MLLMs<strong>通过玩简单的</strong>街机游戏</strong>,竟然能<strong>显著提升其跨领域的多模态推理能力</strong>,甚至超越了在特定数据上训练的<strong>专业模型</strong>!这无疑为未来<strong>通用AI能力的培养</strong>指明了一条充满趣味的新方向让AI在"玩乐”中变得更聪明。
<a href="https://arxiv.org/abs/2506.08011">此链接</a></li>
<li>新论文《梦境之地》(<strong>Dreamland</strong>)提出了一种结合物理模拟器与大型生成模型的混合框架。它的目标是创造出高度可控且逼真的动态虚拟世界,不仅显著提升了图像质量与可控性,更重要的是,有望为<strong>具身AI智能体</strong>的训练提供一个理想的"游乐场”和"实验室”助力AI在现实世界中更好地学习和行动。
<a href="https://arxiv.org/abs/2506.08006">Link</a></li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>理想汽车近期进行了组织架构的"大变身”,正式成立了**"空间机器人”<strong></strong>"穿戴机器人”<strong>两个全新的二级部门。这不仅仅是部门调整,更预示着理想汽车正从传统的汽车制造商转型为</strong>智能出行生态构建者**。他们旨在通过机器人技术,构建一个涵盖车内"第三空间”和车外智能穿戴设备的完整智能生活服务体系,这无疑将为理想汽车在竞争激烈的市场中带来新的差异化优势,让"第三空间”战略不再只是一个概念。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202105061137083176_6.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202105061137083176_6.jpg" alt="理想汽车" /></a> <br/></li>
<li>俄亥俄州立大学宣布从今年起,将强制所有学生接受<strong>人工智能AI培训</strong>,这简直是为未来职场"量身定制”的技能包!学校推出了**"AI流利度”计划**将AI教育全面融入本科生课程旨在培养学生将专业知识与AI技术有效结合的能力。当然学校也强调学生不得利用生成性AI来"蒙混过关”,同时加强教师培训以维护<strong>学术诚信</strong>。此举旨在确保每位毕业生都能在其专业领域有效应用AI并积极响应俄亥俄州AI教育联盟在K-12教育中推动AI教育的努力让AI真正成为每个人的"超级助手”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202306251749094253_12.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202306251749094253_12.jpg" alt="学习 考试 高考 教育 (1)" /></a> <br/></li>
<li>知名思考者李继刚一针见血地指出当AI技术变得越发<strong>高效强大</strong>时,人类的<strong>判断力</strong><strong>品味</strong>和对事物<strong>目的的理解</strong>反而会变得更为<strong>硬核</strong>。因为AI虽然能生成万千方案并完美执行却无法替代人类进行<strong>选择</strong>、定义<strong></strong>,更无法洞悉复杂且深邃的<strong>人性</strong>。这提醒我们在AI时代真正有价值的或许正是那些AI无法企及的"人类专属技能”。
<a href="https://m.okjike.com/originalPosts/68480c352b31fa0880f554c5">Link</a></li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li>小红书的 hi lab 团队近日献出了一份"大礼”——首个开源文本大模型<strong>dots.llm1</strong>这款拥有1420亿参数的<strong>混合专家MoE语言模型</strong>在海量真实数据训练后其性能竟然能媲美阿里巴巴的Qwen2.5-72B这简直是模型界的"黑马”此次开源不仅彰显了小红书在人工智能领域的技术雄心更旨在提供更智能化的服务并激励开发者们一起加入AI研究的"大合唱”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/201811151633429180_32.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/201811151633429180_32.jpg" alt="图片" title="img" /></a> <br/></li>
<li>近期GitHub上两个<strong>AI相关</strong>的项目人气爆棚。其中拥有10785星的"<strong>newsnow</strong>”项目,它旨在为用户提供<strong>优雅的实时热点新闻阅读体验</strong>,让信息获取既便捷又高效,简直是"新闻控”的福音,地址在这里:<a href="https://github.com/ourongxing/newsnow">此链接</a>。另一个是"<strong>GenAI_Agents</strong>”项目以12884星的高热度为开发者提供了<strong>从基础到高级的生成式AI智能体技术教程与实现</strong>,旨在赋能构建更智能的<strong>交互式AI系统</strong>,详情可访问:<a href="https://github.com/NirDiamant/GenAI_Agents">此链接</a></li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li>Gorden Sun在社交媒体上分享了<strong>Mirage</strong>虚拟人模型产品,这款产品简直是"数字分身”的魔法师!它能通过音频驱动,生成生动、嘴型同步且表情丰富的<strong>虚拟人视频</strong>栩栩如生。Gorden Sun还特别强调该产品的详细技术报告对研究人员具有极高的参考价值看来又将引发一场虚拟人技术的"军备竞赛”。
<a href="https://x.com/Gorden_Sun/status/1932446920884334635">Link</a></li>
<li>Sam Altman在X平台发文宣布<strong>o3产品</strong>价格已大幅下调80%,这简直是"福利大放送”!他表达了对用户创新使用的期待,并预告了<strong>o3-pro版本</strong>也将提供令人满意的定价。看来Sora之父又在鼓励大家放开手脚用更低的成本去探索AI的无限可能了。
<a href="https://x.com/sama/status/1932434606558462459">Link</a></li>
<li>Ryan ᵐᶠᵉʳ 🦄d/acc抛出了一个关于<strong>下一代创业者</strong>的深刻观点:他们不应被束缚于模仿乔布斯等前代成功模式,也不应受限于<strong>有限的低质量输入</strong>,而应<strong>忠于自我</strong>,以<strong>独特</strong>的"vibe”和<strong>玩乐精神</strong><strong>自由探索</strong>。这就像在说,别做别人的影子,去创造属于你自己的"游戏规则”!
<a href="https://x.com/RyanMfer/status/1932387601341984815">Link</a></li>
<li>用户wwwgoubuli分享了AI在实际工作中的一个有趣转变。他提到远程团队成员初时因担心被视为偷懒而<strong>不敢充分使用AI</strong>但在他多次分享AI"正确用法”后,团队逐渐"放开手脚”,结果代码的<strong>注释、规范和质量</strong>均显著提升,同事们也展现出更高的<strong>自信</strong>。这简直是AI赋能团队效率提升的"教科书式”案例,打破了心中的"AI焦虑”。
<a href="https://x.com/wwwgoubuli/status/1932358909865480333">Link</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../2025-06-11.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-10.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../2025-06-11.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../daily/2025-06-10.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

10
today/book/elasticlunr.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
today/book/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

22
today/book/favicon.svg Normal file
View File

@@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 199.7 184.2">
<style>
@media (prefers-color-scheme: dark) {
svg { fill: white; }
}
</style>
<path d="M189.5,36.8c0.2,2.8,0,5.1-0.6,6.8L153,162c-0.6,2.1-2,3.7-4.2,5c-2.2,1.2-4.4,1.9-6.7,1.9H31.4c-9.6,0-15.3-2.8-17.3-8.4
c-0.8-2.2-0.8-3.9,0.1-5.2c0.9-1.2,2.4-1.8,4.6-1.8H123c7.4,0,12.6-1.4,15.4-4.1s5.7-8.9,8.6-18.4l32.9-108.6
c1.8-5.9,1-11.1-2.2-15.6S169.9,0,164,0H72.7c-1,0-3.1,0.4-6.1,1.1l0.1-0.4C64.5,0.2,62.6,0,61,0.1s-3,0.5-4.3,1.4
c-1.3,0.9-2.4,1.8-3.2,2.8S52,6.5,51.2,8.1c-0.8,1.6-1.4,3-1.9,4.3s-1.1,2.7-1.8,4.2c-0.7,1.5-1.3,2.7-2,3.7c-0.5,0.6-1.2,1.5-2,2.5
s-1.6,2-2.2,2.8s-0.9,1.5-1.1,2.2c-0.2,0.7-0.1,1.8,0.2,3.2c0.3,1.4,0.4,2.4,0.4,3.1c-0.3,3-1.4,6.9-3.3,11.6
c-1.9,4.7-3.6,8.1-5.1,10.1c-0.3,0.4-1.2,1.3-2.6,2.7c-1.4,1.4-2.3,2.6-2.6,3.7c-0.3,0.4-0.3,1.5-0.1,3.4c0.3,1.8,0.4,3.1,0.3,3.8
c-0.3,2.7-1.3,6.3-3,10.8c-1.7,4.5-3.4,8.2-5,11c-0.2,0.5-0.9,1.4-2,2.8c-1.1,1.4-1.8,2.5-2,3.4c-0.2,0.6-0.1,1.8,0.1,3.4
c0.2,1.6,0.2,2.8-0.1,3.6c-0.6,3-1.8,6.7-3.6,11c-1.8,4.3-3.6,7.9-5.4,11c-0.5,0.8-1.1,1.7-2,2.8c-0.8,1.1-1.5,2-2,2.8
s-0.8,1.6-1,2.5c-0.1,0.5,0,1.3,0.4,2.3c0.3,1.1,0.4,1.9,0.4,2.6c-0.1,1.1-0.2,2.6-0.5,4.4c-0.2,1.8-0.4,2.9-0.4,3.2
c-1.8,4.8-1.7,9.9,0.2,15.2c2.2,6.2,6.2,11.5,11.9,15.8c5.7,4.3,11.7,6.4,17.8,6.4h110.7c5.2,0,10.1-1.7,14.7-5.2s7.7-7.8,9.2-12.9
l33-108.6c1.8-5.8,1-10.9-2.2-15.5C194.9,39.7,192.6,38,189.5,36.8z M59.6,122.8L73.8,80c0,0,7,0,10.8,0s28.8-1.7,25.4,17.5
c-3.4,19.2-18.8,25.2-36.8,25.4S59.6,122.8,59.6,122.8z M78.6,116.8c4.7-0.1,18.9-2.9,22.1-17.1S89.2,86.3,89.2,86.3l-8.9,0
l-10.2,30.5C70.2,116.9,74,116.9,78.6,116.8z M75.3,68.7L89,26.2h9.8l0.8,34l23.6-34h9.9l-13.6,42.5h-7.1l12.5-35.4l-24.5,35.4h-6.8
l-0.8-35L82,68.7H75.3z"/>
</svg>
<!-- Original image Copyright Dave Gandy — CC BY 4.0 License -->

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -0,0 +1,93 @@
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

100
today/book/fonts/fonts.css Normal file
View File

@@ -0,0 +1,100 @@
/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */
/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */
/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 300;
src: local('Open Sans Light'), local('OpenSans-Light'),
url('../fonts/open-sans-v17-all-charsets-300.woff2') format('woff2');
}
/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 300;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'),
url('../fonts/open-sans-v17-all-charsets-300italic.woff2') format('woff2');
}
/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'),
url('../fonts/open-sans-v17-all-charsets-regular.woff2') format('woff2');
}
/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 400;
src: local('Open Sans Italic'), local('OpenSans-Italic'),
url('../fonts/open-sans-v17-all-charsets-italic.woff2') format('woff2');
}
/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 600;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'),
url('../fonts/open-sans-v17-all-charsets-600.woff2') format('woff2');
}
/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 600;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'),
url('../fonts/open-sans-v17-all-charsets-600italic.woff2') format('woff2');
}
/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 700;
src: local('Open Sans Bold'), local('OpenSans-Bold'),
url('../fonts/open-sans-v17-all-charsets-700.woff2') format('woff2');
}
/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 700;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),
url('../fonts/open-sans-v17-all-charsets-700italic.woff2') format('woff2');
}
/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 800;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'),
url('../fonts/open-sans-v17-all-charsets-800.woff2') format('woff2');
}
/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 800;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'),
url('../fonts/open-sans-v17-all-charsets-800italic.woff2') format('woff2');
}
/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Source Code Pro';
font-style: normal;
font-weight: 500;
src: url('../fonts/source-code-pro-v11-all-charsets-500.woff2') format('woff2');
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

83
today/book/highlight.css Normal file
View File

@@ -0,0 +1,83 @@
/*
* An increased contrast highlighting scheme loosely based on the
* "Base16 Atelier Dune Light" theme by Bram de Haan
* (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)
* Original Base16 color scheme by Chris Kempson
* (https://github.com/chriskempson/base16)
*/
/* Comment */
.hljs-comment,
.hljs-quote {
color: #575757;
}
/* Red */
.hljs-variable,
.hljs-template-variable,
.hljs-attribute,
.hljs-attr,
.hljs-tag,
.hljs-name,
.hljs-regexp,
.hljs-link,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class {
color: #d70025;
}
/* Orange */
.hljs-number,
.hljs-meta,
.hljs-built_in,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params {
color: #b21e00;
}
/* Green */
.hljs-string,
.hljs-symbol,
.hljs-bullet {
color: #008200;
}
/* Blue */
.hljs-title,
.hljs-section {
color: #0030f2;
}
/* Purple */
.hljs-keyword,
.hljs-selector-tag {
color: #9d00ec;
}
.hljs {
display: block;
overflow-x: auto;
background: #f6f7f6;
color: #000;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-addition {
color: #22863a;
background-color: #f0fff4;
}
.hljs-deletion {
color: #b31d28;
background-color: #ffeef0;
}

54
today/book/highlight.js Normal file

File diff suppressed because one or more lines are too long

266
today/book/index.html Normal file
View File

@@ -0,0 +1,266 @@
<!DOCTYPE HTML>
<html lang="zh" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Today - By 何夕2077</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">By 何夕2077</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="ai洞察日报-2025611"><a class="header" href="#ai洞察日报-2025611">AI洞察日报 2025/6/11</a></h1>
<p><strong>AI产品与功能更新</strong></p>
<ol>
<li><strong>豆包大模型家族</strong>将在2025 FORCE原动力大会上重磅发布全新的<strong>豆包·视频生成模型</strong>。这款模型可谓"创意魔法棒”,它凭借高效结构和多任务统一建模等黑科技,不仅支持<strong>无缝多镜头叙事</strong>,还能<strong>精准响应多动作</strong>,甚至能像专业摄影师一样<strong>随心运镜</strong>,轻松生成写实、动漫等多种风格的<strong>高品质视频</strong>,简直是视频创作者的福音!
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388517021358447365987976.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388517021358447365987976.png" alt="图片" title="img" /></a> <br/></li>
<li>xAI开发的<strong>Grok</strong>人工智能正大刀阔斧地接管X平台的<strong>推荐算法</strong>,同时优化了评论排序机制。这意味着,平台将优先推荐<strong>高质量内容</strong>,而非仅仅看粉丝量,这无疑给那些粉丝较少但有真材实料的"小号”和新人带来了前所未有的曝光机会,旨在打造一个更公平、更开放的内容生态,让好内容不再"蒙尘”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514989498792027745193.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514989498792027745193.png" alt="图片" title="img" /></a> <br/></li>
<li><strong>豆包App</strong>近期也对"一句话P图”功能进行了全面升级它基于强大的SeedEdit 3.0模型,新增了一键添加/替换文字、质感风格迁移和局部图像编辑增强等一系列酷炫修图玩法。这波升级简直是把专业修图师请进了手机,让普通用户也能无需专业技能,轻松搞定个性化照片创作,让"修图小白”也能变身"修图大师”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514703219058043604298.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514703219058043604298.png" alt="图片" title="img" /></a> <br/></li>
<li>苹果在WWDC 2025大会上带来了iOS 26系统的"杀手级”功能——<strong>视觉智能</strong>。有了它,你可以在屏幕上的任何图片或信息上进行提问、搜索,甚至自动识别事件详情,简直是手机的"智能眼”。这项升级通过AI技术实现了屏幕内容的"一眼识别”,大大提升了交互体验的便捷性与智能化程度,还能自动提取事件信息加入日历,让你的数字生活更加省心。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514197880401555868249.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388514197880401555868249.png" alt="图片" title="img" /></a> <br/></li>
<li>好消息!<strong>沉浸式翻译</strong>迎来重大更新,现在已能对<strong>推特X视频</strong>进行<strong>实时翻译</strong>。即便视频没有原生字幕,它也能帮你"神同步”地显示<strong>中英双语字幕</strong>。这下刷X平台视频再也不用担心语言不通了简直是跨文化交流的"神助攻”,彻底消除了语言障碍,让世界更近。
<a href="https://x.com/imxiaohu/status/1932299897388277804">Link</a></li>
</ol>
<p><strong>AI前沿研究</strong></p>
<ol>
<li>香港大学和华为诺亚方舟实验室强强联手,推出了颠覆性的<strong>FUDOKI</strong>模型。这款模型采用<strong>非掩码离散流匹配架构</strong>,成功突破了传统自回归模型的束缚,实现了更加灵活高效的<strong>多模态生成与理解</strong>能力。它通过独特的<strong>并行去噪机制</strong>,显著提升了复杂推理和生成任务的表现,尤其在<strong>图像生成</strong>方面表现惊艳,为未来<strong>通用人工智能</strong>的发展铺平了道路。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202405161743136484_4.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202405161743136484_4.jpg" alt="图片" title="img" /></a> <br/></li>
<li>香港科技大学和快手科技的研究团队联合发布了<strong>EvoSearch进化搜索技术</strong>这简直是AI作画领域的一股清流它彻底颠覆了以往"大模型、大算力”的固有思维巧妙地将达尔文的进化论思想融入AI生成过程让那些"小个子”模型也能生成超越甚至媲美"大块头”的<strong>高质量图像和视频</strong>。这项突破性技术有望开启AI创作的**"智能进化”时代**让AI模型在推理阶段释放更深层次的潜力。相关项目主页、代码和论文链接已发布<a href="https://tinnerhrhe.github.io/evosearch/">https://tinnerhrhe.github.io/evosearch/</a><a href="https://github.com/tinnerhrhe/EvoSearch-codes">https://github.com/tinnerhrhe/EvoSearch-codes</a><a href="https://arxiv.org/abs/2505.17618">https://arxiv.org/abs/2505.17618</a>
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516498517715873339996.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516498517715873339996.png" alt="图片" /></a> <br/>
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516503306155376085044.png"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/2025/0610/6388516503306155376085044.png" alt="图片" /></a> <br/></li>
<li>一篇名为"<strong>玩中泛化:通过游戏学习推理</strong>”的学术论文揭示了令人兴奋的发现:<strong>多模态大型语言模型MLLMs<strong>通过玩简单的</strong>街机游戏</strong>,竟然能<strong>显著提升其跨领域的多模态推理能力</strong>,甚至超越了在特定数据上训练的<strong>专业模型</strong>!这无疑为未来<strong>通用AI能力的培养</strong>指明了一条充满趣味的新方向让AI在"玩乐”中变得更聪明。
<a href="https://arxiv.org/abs/2506.08011">此链接</a></li>
<li>新论文《梦境之地》(<strong>Dreamland</strong>)提出了一种结合物理模拟器与大型生成模型的混合框架。它的目标是创造出高度可控且逼真的动态虚拟世界,不仅显著提升了图像质量与可控性,更重要的是,有望为<strong>具身AI智能体</strong>的训练提供一个理想的"游乐场”和"实验室”助力AI在现实世界中更好地学习和行动。
<a href="https://arxiv.org/abs/2506.08006">Link</a></li>
</ol>
<p><strong>AI行业展望与社会影响</strong></p>
<ol>
<li>理想汽车近期进行了组织架构的"大变身”,正式成立了**"空间机器人”<strong></strong>"穿戴机器人”<strong>两个全新的二级部门。这不仅仅是部门调整,更预示着理想汽车正从传统的汽车制造商转型为</strong>智能出行生态构建者**。他们旨在通过机器人技术,构建一个涵盖车内"第三空间”和车外智能穿戴设备的完整智能生活服务体系,这无疑将为理想汽车在竞争激烈的市场中带来新的差异化优势,让"第三空间”战略不再只是一个概念。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202105061137083176_6.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202105061137083176_6.jpg" alt="理想汽车" /></a> <br/></li>
<li>俄亥俄州立大学宣布从今年起,将强制所有学生接受<strong>人工智能AI培训</strong>,这简直是为未来职场"量身定制”的技能包!学校推出了**"AI流利度”计划**将AI教育全面融入本科生课程旨在培养学生将专业知识与AI技术有效结合的能力。当然学校也强调学生不得利用生成性AI来"蒙混过关”,同时加强教师培训以维护<strong>学术诚信</strong>。此举旨在确保每位毕业生都能在其专业领域有效应用AI并积极响应俄亥俄州AI教育联盟在K-12教育中推动AI教育的努力让AI真正成为每个人的"超级助手”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202306251749094253_12.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/202306251749094253_12.jpg" alt="学习 考试 高考 教育 (1)" /></a> <br/></li>
<li>知名思考者李继刚一针见血地指出当AI技术变得越发<strong>高效强大</strong>时,人类的<strong>判断力</strong><strong>品味</strong>和对事物<strong>目的的理解</strong>反而会变得更为<strong>硬核</strong>。因为AI虽然能生成万千方案并完美执行却无法替代人类进行<strong>选择</strong>、定义<strong></strong>,更无法洞悉复杂且深邃的<strong>人性</strong>。这提醒我们在AI时代真正有价值的或许正是那些AI无法企及的"人类专属技能”。
<a href="https://m.okjike.com/originalPosts/68480c352b31fa0880f554c5">Link</a></li>
</ol>
<p><strong>开源TOP项目</strong></p>
<ol>
<li>小红书的 hi lab 团队近日献出了一份"大礼”——首个开源文本大模型<strong>dots.llm1</strong>这款拥有1420亿参数的<strong>混合专家MoE语言模型</strong>在海量真实数据训练后其性能竟然能媲美阿里巴巴的Qwen2.5-72B这简直是模型界的"黑马”此次开源不仅彰显了小红书在人工智能领域的技术雄心更旨在提供更智能化的服务并激励开发者们一起加入AI研究的"大合唱”。
<br/> <a href="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/201811151633429180_32.jpg"><img src="https://autoproxy.justlikemaki.vip/?pp=https://pic.chinaz.com/picmap/201811151633429180_32.jpg" alt="图片" title="img" /></a> <br/></li>
<li>近期GitHub上两个<strong>AI相关</strong>的项目人气爆棚。其中拥有10785星的"<strong>newsnow</strong>”项目,它旨在为用户提供<strong>优雅的实时热点新闻阅读体验</strong>,让信息获取既便捷又高效,简直是"新闻控”的福音,地址在这里:<a href="https://github.com/ourongxing/newsnow">此链接</a>。另一个是"<strong>GenAI_Agents</strong>”项目以12884星的高热度为开发者提供了<strong>从基础到高级的生成式AI智能体技术教程与实现</strong>,旨在赋能构建更智能的<strong>交互式AI系统</strong>,详情可访问:<a href="https://github.com/NirDiamant/GenAI_Agents">此链接</a></li>
</ol>
<p><strong>社媒分享</strong></p>
<ol>
<li>Gorden Sun在社交媒体上分享了<strong>Mirage</strong>虚拟人模型产品,这款产品简直是"数字分身”的魔法师!它能通过音频驱动,生成生动、嘴型同步且表情丰富的<strong>虚拟人视频</strong>栩栩如生。Gorden Sun还特别强调该产品的详细技术报告对研究人员具有极高的参考价值看来又将引发一场虚拟人技术的"军备竞赛”。
<a href="https://x.com/Gorden_Sun/status/1932446920884334635">Link</a></li>
<li>Sam Altman在X平台发文宣布<strong>o3产品</strong>价格已大幅下调80%,这简直是"福利大放送”!他表达了对用户创新使用的期待,并预告了<strong>o3-pro版本</strong>也将提供令人满意的定价。看来Sora之父又在鼓励大家放开手脚用更低的成本去探索AI的无限可能了。
<a href="https://x.com/sama/status/1932434606558462459">Link</a></li>
<li>Ryan ᵐᶠᵉʳ 🦄d/acc抛出了一个关于<strong>下一代创业者</strong>的深刻观点:他们不应被束缚于模仿乔布斯等前代成功模式,也不应受限于<strong>有限的低质量输入</strong>,而应<strong>忠于自我</strong>,以<strong>独特</strong>的"vibe”和<strong>玩乐精神</strong><strong>自由探索</strong>。这就像在说,别做别人的影子,去创造属于你自己的"游戏规则”!
<a href="https://x.com/RyanMfer/status/1932387601341984815">Link</a></li>
<li>用户wwwgoubuli分享了AI在实际工作中的一个有趣转变。他提到远程团队成员初时因担心被视为偷懒而<strong>不敢充分使用AI</strong>但在他多次分享AI"正确用法”后,团队逐渐"放开手脚”,结果代码的<strong>注释、规范和质量</strong>均显著提升,同事们也展现出更高的<strong>自信</strong>。这简直是AI赋能团队效率提升的"教科书式”案例,打破了心中的"AI焦虑”。
<a href="https://x.com/wwwgoubuli/status/1932358909865480333">Link</a></li>
</ol>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="next prefetch" href="daily/2025-06-11.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="next prefetch" href="daily/2025-06-11.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More