MPB 作为生产力来说 16G 内存真不行,只要开虚拟机必黄
其实其他也没有什么应用,就是开个 wps ,若干个网页(三个浏览器大概开了 20 个页面吧),QQ ,没有别的应用了 ,就黄成这样
https://i.mij.rip/2025/04/17/1d00defd59a91dcfe2636abe57724025.png
但是我觉得,macOS 上开个虚拟机很正常吧,毕竟 app 还是有不少只有 Windows 版本。
其实其他也没有什么应用,就是开个 wps ,若干个网页(三个浏览器大概开了 20 个页面吧),QQ ,没有别的应用了 ,就黄成这样
https://i.mij.rip/2025/04/17/1d00defd59a91dcfe2636abe57724025.png
但是我觉得,macOS 上开个虚拟机很正常吧,毕竟 app 还是有不少只有 Windows 版本。
业余时间写了一个 Beancount VSCode 插件( Language Server & Client )。欢迎尝试使用~
写这个的主要的动力是平时有跨设备编辑的需求,主要用 github.dev 。所以这个插件支持 Web Extension 可以跑在浏览器里。
同时也支持一般 Language Server 该有的能力。 例如:
etc...
Marketplace: https://marketplace.visualstudio.com/items?itemName=fengkx.beancount-lsp-client
Source Code: https://github.com/fengkx/beancount-lsp
家人老家有几张三十多年前的老照片,部分细节有损坏,上次回老家用用手机拍了下来,打算用 AI 修复一下。
不知道有什么 AI 比较擅长修复这种老照片?
流量被爬虫刷了 虽然禁用了爬虫 但是想知道有没有办法可以拿到 ip 的用量,限制一下
我需求是限制 ip 每天的用量不能超过某个大小 比如 50G 这样
今天刚把 IntelliJ IDEA 更新到了 2025.1 版本,主要是想看看这次 AI Assistant 有什么新东西。之前看到消息说功能有更新,而且似乎可以免费试用,就动手试了试,顺便把过程和一些发现记录下来,给可能需要的朋友一个参考。
一、启用 AI Assistant 试用
之前的版本 AI Assistant 对国内用户不太友好,这次更新后,我发现通过调整区域设置,可以重新弹出 AI Assistant 的登录和试用选项。
具体步骤是这样的:
确认 IDEA 版本: 确保是 2025.1 或更新版本。
修改地区设置:
重启 IDEA: 必须完全关闭 IDEA 再重新打开,让配置生效。
检查 AI Assistant 插件:
Settings/Preferences
-> Plugins
-> Installed
确认 AI Assistant
, Junie
插件是启用状态。如果没有,去 Marketplace
搜索安装一下。登录并开始试用:
注意: 这个方法本质上是开启了 JetBrains 提供的试用期。试用期有多长、结束后政策如何,目前还不确定。这更像是一个基于区域的试用策略,不保证长期有效。
二、新东西:Agent AI
这次更新除了常规的 AI 功能(代码补全、解释、生成 Commit Message 等),比较有意思的是推出了一个叫 "Agent AI" 的东西。
看介绍和初步试用,它似乎不只是建议,而是可以直接参与到跨文件、更复杂的代码修改任务中。比如你可以让它分析某个方法的调用链,或者尝试进行一些重构。
这个功能看起来潜力挺大,可以直接在 IDE 里处理一些稍微繁琐的任务。具体效果怎么样,还需要在实际项目中多用用看。
三、连接本地模型(可选)
对于注重隐私或者想用特定模型的开发者,AI Assistant 现在也支持连接本地运行的大语言模型了。
本地运行模型: 如果你本地用 Ollama 或其他兼容 OpenAI API 格式的服务跑了模型(比如 Llama 3, Qwen, Gemma 等),确保服务在运行。
配置 IDEA:
Settings/Preferences
-> Tools
-> AI Assistant
-> LLM Service
。Custom
或 Local
(具体选项名称可能微调),然后填入你本地服务的地址,比如 Ollama 默认的 http://localhost:11434
。本地跑不动模型怎么办?
我看有人整理了一些提供免费在线 Ollama 服务的列表(比如这个:https://idea.wangwangit.com/zh
),你可以找一个试试看,配置方法和本地一样,填入对应的服务地址就行。不过用第三方服务,数据隐私方面就需要自己衡量了。
ollama 模型太辣鸡?
那就让我抛出重磅级武器吧,直接接入第三方 API, 修改API_URL,API_KEY为自己的配置,在ENABLED_MODELS中添加合适的模型,然后在本地或者服务器启动这份代码! 就可以集成各种在线 AI 模型使用啦!
from flask import Flask, request, jsonify
import requests
import time
import uuid
import logging
import json
from typing import Dict, Any
from datetime import datetime, UTC
# 配置日志(更改为中文)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s',
handlers=[logging.StreamHandler()]
)
logger = logging.getLogger(__name__)
app = Flask(__name__)
# 启用模型配置:直接定义启用的模型名称
# 用户可添加/删除模型名称,动态生成元数据
ENABLED_MODELS = {
"gemini-2.0-flash",
"grok-3-beta",
"DeepSeek-V3"
}
# API 配置
API_URL = "https://xxxx/v1/chat/completions"
# 请替换为你的 API 密钥(请勿公开分享)
API_KEY = "xxxxx"
# 模拟 Ollama 聊天响应数据库
OLLAMA_MOCK_RESPONSES = {
"What is the capital of France?": "The capital of France is Paris.",
"Tell me about AI.": "AI is the simulation of human intelligence in machines, enabling tasks like reasoning and learning.",
"Hello": "Hi! How can I assist you today?"
}
@app.route("/", methods=["GET"])
def root_endpoint():
"""模拟 Ollama 根路径,返回 'Ollama is running'"""
logger.info("收到根路径请求")
return "Ollama is running", 200
@app.route("/api/tags", methods=["GET"])
def tags_endpoint():
"""模拟 Ollama 的 /api/tags 端点,动态生成启用模型列表"""
logger.info("收到 /api/tags 请求")
models = []
for model_name in ENABLED_MODELS:
# 推导 family:从模型名称提取前缀(如 "gpt-4o" -> "gpt")
family = model_name.split('-')[0].lower() if '-' in model_name else model_name.lower()
# 特殊处理已知模型
if 'llama' in model_name:
family = 'llama'
format = 'gguf'
size = 1234567890
parameter_size = '405B' if '405b' in model_name else 'unknown'
quantization_level = 'Q4_0'
elif 'mistral' in model_name:
family = 'mistral'
format = 'gguf'
size = 1234567890
parameter_size = 'unknown'
quantization_level = 'unknown'
else:
format = 'unknown'
size = 9876543210
parameter_size = 'unknown'
quantization_level = 'unknown'
models.append({
"name": model_name,
"model": model_name,
"modified_at": datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%S.%fZ"),
"size": size,
"digest": str(uuid.uuid4()),
"details": {
"parent_model": "",
"format": format,
"family": family,
"families": [family],
"parameter_size": parameter_size,
"quantization_level": quantization_level
}
})
logger.info(f"返回 {len(models)} 个模型: {[m['name'] for m in models]}")
return jsonify({"models": models}), 200
def generate_ollama_mock_response(prompt: str, model: str) -> Dict[str, Any]:
"""生成模拟的 Ollama 聊天响应,符合 /api/chat 格式"""
response_content = OLLAMA_MOCK_RESPONSES.get(
prompt, f"Echo: {prompt} (这是来自模拟 Ollama 服务器的响应。)"
)
return {
"model": model,
"created_at": datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%SZ"),
"message": {
"role": "assistant",
"content": response_content
},
"done": True,
"total_duration": 123456789,
"load_duration": 1234567,
"prompt_eval_count": 10,
"prompt_eval_duration": 2345678,
"eval_count": 20,
"eval_duration": 3456789
}
def convert_api_to_ollama_response(api_response: Dict[str, Any], model: str) -> Dict[str, Any]:
"""将 API 的 OpenAI 格式响应转换为 Ollama 格式"""
try:
content = api_response["choices"][0]["message"]["content"]
total_duration = api_response.get("usage", {}).get("total_tokens", 30) * 1000000
prompt_tokens = api_response.get("usage", {}).get("prompt_tokens", 10)
completion_tokens = api_response.get("usage", {}).get("completion_tokens", 20)
return {
"model": model,
"created_at": datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%SZ"),
"message": {
"role": "assistant",
"content": content
},
"done": True,
"total_duration": total_duration,
"load_duration": 1234567,
"prompt_eval_count": prompt_tokens,
"prompt_eval_duration": prompt_tokens * 100000,
"eval_count": completion_tokens,
"eval_duration": completion_tokens * 100000
}
except KeyError as e:
logger.error(f"转换 API 响应失败: 缺少键 {str(e)}")
return {"error": f"无效的 API 响应格式: 缺少键 {str(e)}"}
def print_request_params(data: Dict[str, Any], endpoint: str) -> None:
"""打印请求参数"""
model = data.get("model", "未指定")
temperature = data.get("temperature", "未指定")
stream = data.get("stream", False)
messages_info = []
for msg in data.get("messages", []):
role = msg.get("role", "未知")
content = msg.get("content", "")
content_preview = content[:50] + "..." if len(content) > 50 else content
messages_info.append(f"[{role}] {content_preview}")
params_str = {
"端点": endpoint,
"模型": model,
"温度": temperature,
"流式输出": stream,
"消息数量": len(data.get("messages", [])),
"消息预览": messages_info
}
logger.info(f"请求参数: {json.dumps(params_str, ensure_ascii=False, indent=2)}")
@app.route("/api/chat", methods=["POST"])
def ollama_chat_endpoint():
"""模拟 Ollama 的 /api/chat 端点,所有模型都能使用"""
try:
data = request.get_json()
if not data or "messages" not in data:
logger.error("无效请求: 缺少 'messages' 字段")
return jsonify({"error": "无效请求: 缺少 'messages' 字段"}), 400
messages = data.get("messages", [])
if not messages or not isinstance(messages, list):
logger.error("无效请求: 'messages' 必须是非空列表")
return jsonify({"error": "无效请求: 'messages' 必须是非空列表"}), 400
model = data.get("model", "llama3.2")
user_message = next(
(msg["content"] for msg in reversed(messages) if msg.get("role") == "user"),
""
)
if not user_message:
logger.error("未找到用户消息")
return jsonify({"error": "未找到用户消息"}), 400
# 打印请求参数
print_request_params(data, "/api/chat")
logger.info(f"处理 /api/chat 请求, 模型: {model}")
# 移除模型限制,所有模型都使用 API
api_request = {
"model": model,
"messages": messages,
"stream": False,
"temperature": data.get("temperature", 0.7)
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
try:
logger.info(f"转发请求到 API: {API_URL}")
response = requests.post(API_URL, json=api_request, headers=headers, timeout=30)
response.raise_for_status()
api_response = response.json()
ollama_response = convert_api_to_ollama_response(api_response, model)
logger.info(f"收到来自 API 的响应,模型: {model}")
return jsonify(ollama_response), 200
except requests.RequestException as e:
logger.error(f"API 请求失败: {str(e)}")
# 如果 API 请求失败,使用模拟响应作为备用
logger.info(f"使用模拟响应作为备用方案,模型: {model}")
response = generate_ollama_mock_response(user_message, model)
return jsonify(response), 200
except Exception as e:
logger.error(f"/api/chat 服务器错误: {str(e)}")
return jsonify({"error": f"服务器错误: {str(e)}"}), 500
@app.route("/v1/chat/completions", methods=["POST"])
def api_chat_endpoint():
"""转发到 API 的 /v1/chat/completions 端点,并转换为 Ollama 格式"""
try:
data = request.get_json()
if not data or "messages" not in data:
logger.error("无效请求: 缺少 'messages' 字段")
return jsonify({"error": "无效请求: 缺少 'messages' 字段"}), 400
messages = data.get("messages", [])
if not messages or not isinstance(messages, list):
logger.error("无效请求: 'messages' 必须是非空列表")
return jsonify({"error": "无效请求: 'messages' 必须是非空列表"}), 400
model = data.get("model", "grok-3")
user_message = next(
(msg["content"] for msg in reversed(messages) if msg.get("role") == "user"),
""
)
if not user_message:
logger.error("未找到用户消息")
return jsonify({"error": "未找到用户消息"}), 400
# 打印请求参数
print_request_params(data, "/v1/chat/completions")
logger.info(f"处理 /v1/chat/completions 请求, 模型: {model}")
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
try:
logger.info(f"转发请求到 API: {API_URL}")
response = requests.post(API_URL, json=data, headers=headers, timeout=30)
response.raise_for_status()
api_response = response.json()
ollama_response = convert_api_to_ollama_response(api_response, model)
logger.info(f"收到来自 API 的响应,模型: {model}")
return jsonify(ollama_response), 200
except requests.RequestException as e:
logger.error(f"API 请求失败: {str(e)}")
return jsonify({"error": f"API 请求失败: {str(e)}"}), 500
except Exception as e:
logger.error(f"/v1/chat/completions 服务器错误: {str(e)}")
return jsonify({"error": f"服务器错误: {str(e)}"}), 500
def main():
"""启动模拟服务器"""
logger.info("正在启动模拟 Ollama 和 API 代理服务器,地址: http://localhost:11434")
app.run(host="0.0.0.0", port=11434, debug=False)
if __name__ == "__main__":
main()
总结
总的来说,IDEA 2025.1 的 AI 功能值得尝试一下,尤其是通过改区域设置就能方便地开启试用。Agent AI 是个新方向,看看后续发展如何。连接本地模型也给了大家更多选择。
我就先用到这儿,算是个快速上手记录。如果你也更新了,欢迎交流使用体验,特别是 Agent AI 的实战效果。
Super is a team of experienced engineers and product designers united by the goal of creating social products used every day by hundreds of millions of people all over the world.We are seeking passionate and experienced engineers to join our team.
The opportunity to work among individuals who are both driven and talented is few and far between.We are a small team of ~20 people who are serious about succeeding.
职位描述:
职位要求:
加分项:
职位要求:
加分项:
职位描述:
职位要求:
加分项:
职位要求
加分项:
公司氛围
联系方式:
简历投递: superjobs2025@gmail.com
微信联系:BB0030819
去年大概是夏天, 阳台的盆里莫名长出了一小株桑树, 盆里的土是前年楼底绿化角落挖的, 也就是说这是蛰伏了至少一年的桑树种子发芽长出来的
仅此一株, 到冬天叶子落尽的时候已经长了 60cm 左右了, 光秃秃的一根持续了整个冬天, 还以为是死了
进入春季天气回暖, 顶部冒出了小芽点, 进入 4 月更是疯涨, 每天都有变化. 意识到为啥说前不栽桑, 除了谐音"丧"之外, 主要应该是这玩意儿生长速度太快了, 即使土壤贫瘠
在这个阳台小盆里还有一开始就播种的一株月光花, 一小株香水柠檬, 意外熬过去年冬天的小白牵牛苗, 以及刚发芽的小番茄苗, 毫无变化的红心火龙果小苗, 其余就是杂草了(劈里啪啦的黄花醋酱草, 早熟禾, 婆婆纳, 疯狂播种发芽的铁苋菜). 唯独这株小桑树生长速度飞快, 几天就突破一米, 叶片也有巴掌大, 很难想象这是长在一个小盆里
资源有限, 这颗意外的植株无疑抢夺了其他专门播种的植株的营养, 在被其生长势头惊讶到之余, 感受到了威胁, 下午就剪了
盆一下子空出来了一块, 剪的时候还感觉没什么, 但到了晚上人开始 emo 起来, 莫名悲伤. 对于这小桑树来说一切是如此突然, 正好在最适宜的季节猛猛生长的时候就被截断了, 一切的努力艰辛, 对未来的期望都戛然而止, 所有的设想与意义化为虚无
世界上有数不尽的桑树, 新生死亡平平无奇, 只因这颗小桑树在自己的脑内存在过, 期间的变化历历在目, 多少激发了一些情感, 使其和别的任何植物都不同, 是唯一的存在
就是小王子的玫瑰, 任何普通的事物只是在脑海中占据了太多的权重就会变得特别
相遇和离别是伴生的, 期间有多少权重和离别就有多少痛苦, 就像分配多少内存就要释放多少空间一样, 何尝不是一种诅咒
更离谱的是所谓时间会抹平一切, 无非是新事物增加了, 降低了旧事物的权重, 使得痛苦得以"减轻", 显得悲伤本身都是那么虚伪无意义
现在个人和企业有大量存量的 API ,不可能一个一个去包成 MCP Server ,那投入太多了,市面上目前陆续有一些人开始做这个方向,包括近期因为支持了这个功能的 Higress 也是又二春了一下,但是强绑 k8s ,晦涩难懂,文档大量缺失,envoy 那套也不一定是中小企业的选择。但是不可否认背靠大厂大规模可能有一点保障~
言归正传,目前我们在业务里也需要应用这块,但是市面上没有比较合适的,因此自己 build 了一个轻量的服务,开源出来,希望有需要的人后续可以直接享用成果。分享给各位,轻点骂~
刚刚看到你们在 Planet 聚合器里的提交了。
Planet 聚合器针对的是 Planet 特定的数据格式,所以其他类型的网站格式在里面不会被抓取。
其他网站格式可以在 VXNA 里进行提交和聚合。
如果你们想尝试 Planet 聚合器的效果,可以单独用 Planet 创建一个新网站,然后 Copy IPNS 之后提交那个 IPNS 地址。
访问地址: https://mp.honwhy.wang
公众号文章 Markdown 编辑器浏览器插件安装量达 1000+了,🎈 这对于后端转型前端全栈化选手来说,值得纪念一下。
感谢这个非常优秀的开源项目。md
虽然从 web 项目打包编译成浏览器插件非常不容易,但是所有难点都被我攻克,真的是学到了很多知识。
如题,微信 4.0 都推出大半个月为啥 Mac App Store 上的版本还是 3.8
👉 立即体验:https://aitranspdf.com/zh-CN
做这个站点起于最开始看国外的 PDF 技术文档没有好的翻译渠道,于是最开始比较冒失的想是否自己可以做一个文档翻译的站点。
之所以说比较冒失是因为在研究后发现,文档翻译尤其是 PDF 翻译在内容提取、格式保持方面的难度超乎想象。
本着"来都来了"的心态,中途也换过技术路线差一点放弃,但好在最终经过近 8 个月的潜心打磨,现在终于可以比较自豪的向大家推荐自己的产品。
也希望可以获得路过的各位大佬的建议和意见,同时欢迎大家试用并提出宝贵意见! 后面有机会我也会单独开贴记录文档格式处理方向相关的一些踩坑和经验;
🎁 福利时间:
为 v 站的朋友提供一组价值 5 美元的积分礼包吗码:
68010ee6bd05dd32d1ffebd1
68010ee6bd05dd32d1fb0050
68010ee6bd05dd32d18d0bd7
68010ee6bd05dd32d1bd7fb1
68010ee6bd05dd32d180b099
68010ee6bd05dd32d10d8a5e
68010ee6bd05dd32d1f8702e
68010ee6bd05dd32d164e03e
68010ee6bd05dd32d1249c20
68010ee6bd05dd32d1b1e4f7
211 本科,92 年的,目前在一家高新企业,前端开发,工作强度还行,965 ,周二周四会加班,年薪 45w 左右的样子。3 年合同到期了,想问下还有必要跳么,公司涨薪概率很低。。 但是出去找 50w ,加班强度像现在的工作好像也挺难找的。
另外问下 10 年前端,这个薪资水平算啥水平???还有上升空间么
农业银行企业网银真垃圾, 除了 IE 浏览器都读取不了证书.
看新闻说 Win11 删除了 IE 浏览器, 其实没删除.
使用方法:
建个.vbs 文件, 把下面代码复制进去, 然后双击, IE 就出来了.
CreateObject("InternetExplorer.Application").Visible=true
如题,结合东哥最近突然入局外卖平台以及关税战。天朝有没可能整治这个方向?
请问 local llm client 你在用什么?为什么?
lm studio/cherry studio?
Chathub/page assistant?