Daily Tech Briefing
AI 科技速览
每天 5 分钟内学习 AI。获取最新的人工智能新闻,理解其重要性,并学习如何将其应用于您的工作。
Simon Willison · 2026/7/31 20:18:05
Slack Emoji Maker
AI 中文解读
核心亮点:一位开发者为了给Slack做个性表情包,让AI工具“Fable”帮他写了款专用小编辑器,轻松解决了图片尺寸和背景的格式要求。
通俗解读:Slack这个工作聊天软件要求表情包图片必须是128×128像素、背景透明,手工调整很麻烦。这位开发者干脆用AI自动生成一个简单的图片编辑工具,专门按这个标准来裁剪和导出,省去了自己写代码的功夫。现在类似这样的AI智能体已经能根据一句需求,直接“搭”出可用的软件界面和功能,就像让AI帮你做个Excel模板那么简单。
实际影响:对普通人来说,这意味着以后不用求程序员朋友,自己也能用日常语言让AI定制小工具,比如改图、批量处理文件或做个打卡小应用。开发者的效率大大提升,更多个性化需求能被快速满足,科技产品会变得更“懂人话”、更贴近实际使用场景。不过,目前AI生成的工具还比较简单,复杂功能仍需专业人士完善。
Simon Willison’s Weblog
Subscribe
Sponsored by: AWS — Move from SaaS to Agentic SaaS with resources for ISVs at every layer of the stack. Explore how AI for ISVs turns vision into results
31st July 2026
Tool
Slack Emoji Maker
I wanted to create a new Slack emoji, and their tool recommends a square that's 128x128 and has a transparent background... so I had Fable build me this simple image editor against those requirements.
Posted 31st July 2026 at 8:18 pm
Recent articles
Stateless MCP has recaptured my interest (and inspired mcp-explorer and datasette-mcp) - 31st July 2026
OpenAI’s accidental cyberattack against Hugging Face is science fiction that happened - 22nd July 2026
A Fireside Chat with Cat and Thariq from the Claude Code team - 21st July 2026
This is a beat by Simon Willison, posted on 31st July 2026.
tools
73
slack
12
Monthly briefing
Sponsor me for $10/month and get a curated email digest of the month's most important LLM developments.
Pay me to send you less!
Sponsor & subscribe
Disclosures
Colophon
©
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
image-gallery:not(:defined) img {max-height: 150px;} captioned-image-gallery:not(:defined) > figure {max-height: 240px; overflow: hidden;}
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('h2[id],h3[id],h4[id],h5[id],h6[id]').forEach(el => {
const id = el.getAttribute('id');
const permalinkContext = el.closest('[data-permalink-context]');
if (permalinkContext) {
const url = permalinkContext.getAttribute('data-permalink-context');
const hashLink = document.createElement('a');
hashLink.style.borderBottom = 'none';
hashLink.style.color = '#666';
hashLink.style.fontSize = '1em';
hashLink.style.opacity = 0.8;
hashLink.setAttribute('href', url + '#' + id);
hashLink.innerText = '#';
el.appendChild(document.createTextNode('\u00A0'));
el.appendChild(hashLink);
}
});
});
const config = [
{"tag": "lite-youtube", "js": "/static/lite-yt-embed.js", "css": "/static/lite-yt-embed.css"},
{"tag": "image-gallery", "js": "/static/image-gallery.js", "css": null},
{"tag": "captioned-image-gallery", "js": "/static/captioned-image-gallery.js", "css": null},
{"tag": "click-to-play", "js": "/static/click-to-play.js", "css": "/static/click-to-play.css"},
{"tag": "github-code", "js": "/static/github-code.js", "css": null}
];
for (const {tag, js, css} of config) {
if (document.querySelector(tag)) {
if (css) {
document.head.appendChild(
Object.assign(document.createElement('link'), {
rel: 'stylesheet',
href: css
})
);
}
if (js) {
await import(js);
}
}
}
document.addEventListener('DOMContentLoaded', () => {
if (window.localStorage.getItem('ADMIN')) {
document.querySelectorAll('.edit-page-link').forEach(el => {
const url = el.getAttribute('data-admin-url');
if (url) {
const a = document.createElement('a');
a.href = url;
a.className = 'edit-link';
a.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></pat
分享
阅读原文 ↗