AI 资讯
AI人工智能最新资讯、模型发布、研究进展
共 13178 篇 · 第 127/659 页
Show HN: Goku – WASM (wllama)-powered LLM inference and model manager
Talk: The Art of Braiding Algorithms
Verse
Build and hire autonomous AI employees from a single prompt Discussion | Link
Show HN: Running server scripts from smartphone via SSH
I've added Remote Runbooks to RebootX, a mobile app for managing cloud and on-prem infrastructure, available on iOS and Android (freemium). The idea is simple: when PagerDuty wakes you up, many incidents boil down to executing the same sequence of SSH commands or operational steps. Instead of opening a laptop, you can execute a predefined runbook directly from your phone. Very usefyl when you're on the go. The scripts are retrieved from the server at `/usr/local/sbin/rebootx/runbooks`, also via
The Three-Second Theft: Why AI Voice Fraud Outruns Every Defence
NeuroVidz
See how a brain reacts to your clip Discussion | Link
Anthropic, Blackstone bet the next trillion-dollar AI business is implementation, not just models
Anthropic-backed Ode launches as AI labs bet that embedding forward-deployed engineers inside enterprises is the key to accelerating enterprise AI adoption.
If you want Claude to speak nicely to you, try Hindi or Arabic
The tiniest MMO
At its peak, around 12 million people subscribed to World of Warcraft so that they could explore the realm of Azeroth together. The audience for PointlessQuest is quite a bit smaller. On launch day, the game hit a peak of 15 concurrent players… and no, that sentence isn't missing a word. Then again, basically everything […]
Reelful’s AI turns your camera roll into short-form videos for social media
The app is designed for people who want to create social content, but find traditional video editing tools too complex or time-consuming.
Presentation: Postgres for Production Agents: Your Relational Foundation for Enterprise AI
Gwen Shapira shares how teams are scaling AI features using PostgreSQL for mission-critical apps. She explains how to leverage Postgres's multi-modal capabilities - including JSONB parsing and high-recall HNSW vector indexing - to deliver deterministic and semantic context to LLMs. She also discusses vector quantization to speed up queries by 4x and strategies for managing agentic memory. By Gwen Shapira
From A10 to M60: An Architect's Journey into Azure GPU VM Sizing for Kubernetes Inference Workloads
How an unexpected regional constraint forced us to deeply understand Azure GPU VM families, naming conventions, and workload fit. Introduction As architects, we often assume that infrastructure decisions are straightforward: "The workload is already running successfully in Region A. Let's deploy the same Kubernetes workload in Region B." That's exactly what we thought. Our workload consisted of a Visual Element Detection (VED) service hosted on Kubernetes. The application uses a PyTorch model to analyze images and detect various visual elements in an image file. The service was already running successfully on a node pool backed by Azure's NVads_A10_v5 GPU VMs. Then we hit an unexpected challenge. The target region did not offer NVads_A10_v5 instances. What looked like a simple deployment exercise became a deep dive into Azure GPU virtual machine families, GPU architectures, VM naming conventions, and workload characteristics. This article shares what I learned in the hope that it helps others who find themselves evaluating Azure GPU SKUs for AI inference workloads. I am relatively new to the world of MLOps, Model deployments, GPU Workloads etc and equally interested and excited to learn more on this front. The Workload Before discussing VM selection, let's understand the workload characteristics: Model Type : PyTorch Model Size : less than 200 MB (.pth) Image Resolution : ~2000 x 2000 Expected Throughput : 5-7 requests/sec Platform : AKS (Kubernetes) Workload Type : Inference only This is important because GPU sizing should always start from the workload and not from the VM catalog. Step 1: Understanding Azure GPU VM Families Many engineers first encounter Azure GPU machines through names like: NV12s_v3 NV6ads_A10_v5 NC4as_T4_v3 ND96isr_H100_v5 The naming can be intimidating. The first breakthrough was understanding that Azure organizes GPU VMs into three primary families: N-Series ├── NV ├── NC └── ND NV Series – Visualization and Graphics NV-series VMs are designe
I Almost Hand-Wrote a FHIR Schema. Then I Found Out I Didn't Have To.
A hospital-network client wanted our system to output patient data in actual FHIR format - the standard interoperability format healthcare systems use to talk to each other - instead of whatever shape we felt like inventing. Made total sense from their side, their EHR software only accepts FHIR resources, not our custom JSON. From my side, it meant I now had to get an LLM to produce a Patient resource that was FHIR R4 compliant, field for field. I opened the FHIR R4 spec page for Patient to see what I was dealing with. Closed the tab about four minutes later. It's not one flat object - names have their own nested structure with use / family / given arrays, telecom is a list of typed contact points, addresses have their own multi-field shape, and half the fields have specific allowed value sets straight out of a separate FHIR terminology spec. This was not going to be a quick z.object({...}) . Two days into hand-writing it, and I wasn't even done I started anyway, because what else was I going to do: const PatientSchema = z . object ({ resourceType : z . literal ( " Patient " ), identifier : z . array ( z . object ({ system : z . string (), value : z . string (), }) ), name : z . array ( z . object ({ use : z . enum ([ " official " , " usual " , " nickname " , " maiden " ]), family : z . string (), given : z . array ( z . string ()), }) ), telecom : z . array ( z . object ({ system : z . enum ([ " phone " , " email " , " fax " ]), value : z . string (), use : z . enum ([ " home " , " work " , " mobile " ]). optional (), }) ), gender : z . enum ([ " male " , " female " , " other " , " unknown " ]), birthDate : z . string (), address : z . array ( z . object ({ use : z . enum ([ " home " , " work " , " temp " ]). optional (), line : z . array ( z . string ()), city : z . string (), state : z . string (), postalCode : z . string (), country : z . string (), }) ), // ...and I still hadn't gotten to maritalStatus, communication, // contact, generalPractitioner, managingOr
Sabot in the age of AI: A list of offensive methods and strategic approaches ...
Bypassing AMM Slippage: How Typelex Uses On-Chain Atomic Swaps for MEV-Proof OTC Trading
If you’ve ever built or interacted with DeFi protocols, you know the mathematical limitations of Constant Product Market Makers ($x \times y = k$). While AMMs are great for retail liquidity, executing a large transaction (e.g., $100,000+) directly against a liquidity pool triggers two major issues: Severe Slippage: The marginal price of the asset degrades exponentially relative to the trade size. MEV Exploitation (Sandwich Attacks): Public mempool transactions are highly vulnerable. Front-running bots will buy the asset ahead of your execution block, push the price up to your maximum slippage limit, and dump it immediately after. To solve this without relying on centralized, custodial desks or risky off-chain escrow setups, we built Typelex —a decentralized, non-custodial P2P OTC protocol. Here is a look at how we bypassed the AMM bonding curve entirely using on-chain atomic swaps. The Architecture of an On-Chain Atomic Swap Instead of routing trades through active liquidity pools, Typelex utilizes isolated smart contracts to execute peer-to-peer trades. The entire swap happens atomically : either all conditions are met within a single block execution, or the entire transaction reverts. Conceptual Smart Contract Logic (Solidity-based) To understand how the trustless escrow works under the hood, here is a simplified mental model of the swap execution logic: struct Order { address maker; address taker; // address(0) if public address tokenA; uint256 amountA; address tokenB; uint256 amountB; bool active; } mapping(uint256 => Order) public orders; function takeOrder(uint256 orderId) external { Order storage order = orders[orderId]; require(order.active, "Order not active"); if (order.taker != address(0)) { require(msg.sender == order.taker, "Unauthorized taker"); } order.active = false; // Pull Token B from Taker to Maker IERC20(order.tokenB).transferFrom(msg.sender, order.maker, order.amountB); // Push Token A from Contract Escrow to Taker IERC20(order.tokenA).transfer
My MCP Server Only Talks to APIs I Trust. That Doesn't Mean the Data Coming Back Is Trustworthy.
I built a small MCP server a while back — developer-presence , seven tools wrapping the GitHub REST API and the DEV.to API so an agent can check my repo stats, list my articles, or draft a new post without me leaving the chat. It's mine, I wrote every line, there's no third-party package doing anything sketchy under the hood. By the usual "vet your MCP servers before installing them" checklist, it passes clean. I've written that checklist article before. What I hadn't thought carefully about until recently is that vetting the server doesn't vet the data. Two of its tools go straight to the point: @mcp.tool () def get_repo_stats ( repo : str ) -> dict : """ Get stars, forks, watchers, open issues for enjoykumawat/<repo>. """ r = _gh ( f " /repos/ { GITHUB_USERNAME } / { repo } " ) return { " name " : r [ " name " ], " stars " : r [ " stargazers_count " ], " forks " : r [ " forks_count " ], " watchers " : r [ " watchers_count " ], " open_issues " : r [ " open_issues_count " ], " language " : r . get ( " language " ), " description " : r . get ( " description " ), } description is free text. Any repo owner can put anything in it. If I ever point this tool at a repo I don't control — someone else's fork, a dependency, anything — that field lands in my agent's context exactly the same way a trusted instruction would: as text in a tool result, with no marker distinguishing "this came from GitHub's database, unfiltered" from "this is something I told the agent to do." The server is safe. The channel is safe. The payload was never vetted at all, because there was nothing to vet — it's just whatever a stranger typed into a form. I only really felt this because of a task I run on a schedule: check dev.to for trending posts in a few tags, score them, and use the highest scorers as source material for what to write about next. Step one of that job is a loop over tag pages: for tag in [ " ai " , " llm " , " mcp " , " claudecode " , " agents " , " productivity " ]: url = f " http
My Commit Message Generator Kept Signing Its Own Work. Telling It Not To Wasn't the Fix.
I have a script called git_commit.py in one of my repos. It shells out to claude -p with the staged diff, gets back a Conventional Commit message, and prints it. It's wired into a prepare-commit-msg git hook so every commit gets a pre-filled message for free. Small, dumb, useful. The first version had one instruction in the system prompt: "Output ONLY the commit message — no explanation, no markdown, no quotes." That's it. It worked fine for a while, and then one day a commit landed with a trailing Co-Authored-By: Claude <noreply@anthropic.com> line that I never asked for and definitely didn't want on a personal repo's history. I did the obvious thing first: I made the prompt more specific. SYSTEM = ( " You are a git commit message generator. " " Output ONLY the commit message — one line, no explanation, no markdown, no quotes, " " no co-author lines, no signatures, no AI references. " " Follow Conventional Commits: type(scope): subject. " " Types: feat, fix, docs, style, refactor, test, chore. " " Subject: imperative, lowercase, max 72 chars. " ) This is the same move I see everywhere: the CLAUDE.md file in that same repo has a line that says, in bold, "NEVER add Co-Authored-By: or any Claude/AI reference to commit messages." I've seen the same pattern in a dozen other people's prompt files — a growing list of "never do X" instructions bolted onto a system prompt, each one added reactively after X happened once. It helped. It did not solve it. A model call is a sample from a distribution, not a function with a guaranteed return type. Any single generation can still ignore an instruction — a longer diff, a different day, a subtly different phrasing of the request, and the same "never" line just doesn't fire. I don't actually know the mechanism on any given miss and I don't need to. The point is: a natural-language instruction is advisory. It shifts probability mass, it doesn't clamp it. I ran into an article on dev.to making a point that reframed this for me: the al
Briar Is in Maintenance Mode
🚀 15 JavaScript Tricks I Wish Someone Had Taught Me Earlier
JavaScript is full of small features that can make your code cleaner, shorter, and easier to maintain. Here are 15 JavaScript tricks I use almost every week while building web applications with Next.js and React. Hopefully, you'll find at least a few that make your coding life easier. 1. Remove Duplicate Values const numbers = [ 1 , 2 , 2 , 3 , 4 , 4 , 5 ]; const unique = [... new Set ( numbers )]; console . log ( unique ); // [1,2,3,4,5] 2. Optional Chaining Instead of writing: if ( user && user . address && user . address . city ) { console . log ( user . address . city ); } Use: console . log ( user ?. address ?. city ); Much cleaner and safer. 3. Nullish Coalescing Operator const username = null ; console . log ( username ?? " Guest " ); Output: Guest Unlike || , this only replaces null or undefined . 4. Object Destructuring Instead of: const name = user . name ; const age = user . age ; Write: const { name , age } = user ; 5. Swap Variables Old way: let a = 10 ; let b = 20 ; const temp = a ; a = b ; b = temp ; Modern JavaScript: [ a , b ] = [ b , a ]; 6. Copy Objects const newUser = { ... user , }; No loops required. 7. Merge Objects const user = { name : " John " , }; const details = { age : 25 , }; const result = { ... user , ... details , }; console . log ( result ); 8. Remove Falsy Values const arr = [ 0 , "" , false , " Hello " , undefined , 5 , null ]; const clean = arr . filter ( Boolean ); console . log ( clean ); Output: [ "Hello" , 5 ] 9. Flatten Arrays const arr = [[ 1 ], [ 2 ], [ 3 ]]; console . log ( arr . flat ()); Output: [ 1 , 2 , 3 ] 10. Dynamic Property Names const key = " email " ; const user = { [ key ]: " john@example.com " , }; console . log ( user ); 11. Convert Object into Array const user = { name : " John " , age : 25 , }; console . log ( Object . entries ( user )); Output: [ [ " name " , " John " ], [ " age " , 25 ], ]; 12. Promise.all() Instead of waiting one request after another: await getUsers (); await getPosts (); await getComme