full year], which calculates the order count for the entire year: DEFINE MEASURE 'All Measures'[Order Count full year] = VAR SelYear = TREATAS({ SELECTEDVALUE('Date'[Year]) }, 'Date'[Year]) RETURN CALCULATE([Online Order Count] ,REMOVEFILTERS('Date') ,SelYear ) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[MonthShortName] ,'Date'[MonthKey] ,'Product'[ProductCategoryName] ,"Order Count", [Online Order Count] ,"Order Count full year", [Order Count full year] ) ,'Product'[BrandName] = "Adventure Works" ) ORDER BY 'Date'[MonthKey] ,'Product'[ProductCategoryName] This is an extract of the result: Now I add a scalar value to the variable: DEFINE MEASURE 'All Measures'[Order Count full year] = VAR SelYear = TREATAS({ SELECTEDVALUE('Date'[Year]) }, 'Date'[Year]) VAR SelYear_Plus1 = SelYear + 0 RETURN CALCULATE([Online Order Count] ,REMOVEFILTERS('Date') ) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[MonthShortName] ,'Date'[MonthKey] ,'Product'[ProductCategoryName] ,"Order Count", [Online Order Count] ,"Order Count full year", [Order Count full year] ) ,'Product'[BrandName] = "Adventure Works" ) ORDER BY 'Date'[MonthKey] ,'Product'[ProductCategoryName] This operation clears the lineage, and the measure no longer works: What I can still do is use an equal filter to get the previous result: DEFINE MEASURE 'All Measures'[Order Count full year] = VAR SelYear = TREATAS({ SELECTEDVALUE('Date'[Year]) }, 'Date'[Year]) VAR SelYear_Plus1 = SelYear + 0 RETURN CALCULATE([Online Order Count] ,REMOVEFILTERS('Date') ,'Date'[Year] = SelYear_Plus1 ) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[MonthShortName] ,'Date'[MonthKey] ,'Product'[ProductCategoryName] ,"Order Count", [Online Order Count] ,"Order Count full year", [Order Count full year] ) ,'Product'[BrandName] = "Adventure Works" ) ORDER BY 'Date'[MonthKey] ,'Product'[ProductCategoryName] Now I get the same result as before: And now, let’s use multiple values as a filter. For example, two months: DEFINE VAR YearMonthFilter = TREATAS({ 202604, 202605 }, 'Date'[MonthKey]) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[MonthShortName] ,'Date'[MonthKey] ,'Product'[ProductCategoryName] ,"Order Count", [Online Order Count] ) ,'Product'[BrandName] = "Adventure Works" ,YearMonthFilter ) ORDER BY 'Date'[MonthKey] ,'Product'[ProductCategoryName] Here is the result of this query: One way to remove the lineage of a variable with multiple values is to use SUMMARIZECOLUMNS() : DEFINE VAR YearMonthFilter = TREATAS({ 202604, 202605 }, 'Date'[MonthKey]) VAR YearMonthFilter_cleared = SUMMARIZECOLUMNS(YearMonthFilter) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[MonthShortName] ,'Date'[MonthKey] ,'Product'[ProductCategoryName] ,"Order Count", [Online Order Count] ) ,'Product'[BrandName] = "Adventure Works" ,YearMonthFilter_cleared ) ORDER BY 'Date'[MonthKey] ,'Product'[ProductCategoryName] Unfortunately, this method removes the filter altogether, and all months are returned in 180 rows (The same number of rows as with the initial query): Technically, the lineage is not cleared because the query still works, but the month filter is removed. But when you try using the variable “YearMonthFilter_cleared” with an IN operator, it doesn’t work anymore: In this context, I tried other functions, like DISTINCT() and VALUES() . While DISTINCT() had no effect, VALUES() has. For example, while this query doesn’t work: DEFINE VAR YearMonthFilter =
TREATAS({ 202604, 202605 }, 'Date'[MonthKey]) VAR YearMonthFilter_cleared = VALUES(YearMonthFilter) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[MonthShortName] ,'Date'[MonthKey] ,'Product'[ProductCategoryName] ,"Order Count", [Online Order Count] ) ,'Product'[BrandName] = "Adventure Works" ,YearMonthFilter_cleared ) ORDER BY 'Date'[MonthKey] ,'Product'[ProductCategoryName] Here is the error message: This works when using an IN operator, which indicates that the lineage is cleared when using VALUES(): DEFINE VAR YearMonthFilter = TREATAS({ 202604, 202605 }, 'Date'[MonthKey]) VAR YearMonthFilter_cleared = VALUES(YearMonthFilter) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[MonthShortName] ,'Date'[MonthKey] ,'Product'[ProductCategoryName] ,"Order Count", [Online Order Count] ) ,'Product'[BrandName] = "Adventure Works" ,'Date'[MonthKey] IN YearMonthFilter ) ORDER BY 'Date'[MonthKey] ,'Product'[ProductCategoryName] Here is the result of the query: The documentation for VALUES() states that this function requires a table or column reference. But this behaviour shows that it depends on how the variable is used in the query. As the variable has a lineage set, VALUES() accept it as a column reference. Next, let’s change how we apply a filter by manipulating the lineage. I want to create a report showing all online orders by country, along with the orders served by stores in each country. For example, I have 68 customer orders from Germany in April 2026. I want to see how many orders have been served by stores in that country, if any. Something like this: I can do it by working with a variable: DEFINE MEASURE 'All Measures'[Orders served from Country] = VAR SelCountry = SELECTEDVALUE('Customer'[RegionCountryName]) RETURN CALCULATE([Online Order Count] ,REMOVEFILTERS(Customer[RegionCountryName]) ,'Store'[RegionCountryName] = SelCountry ) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[Month] ,'Date'[MonthKey] ,'Customer'[RegionCountryName] ,"Order Count", [Online Order Count] ,"Order Count Country Check", [Order Count Country Check] ) ,'Product'[BrandName] = "Adventure Works" ) ORDER BY 'Date'[Year] ,'Date'[Month] ,'Customer'[RegionCountryName] In this approach, I store the current country in a variable. Then I remove the filter from Customer[RegionCountryName]. And I replace it with a filter on ‘Store'[RegionCountryName]. Or I can do it in this way by using TREATAS(): DEFINE MEASURE 'All Measures'[Orders served from Country] = CALCULATE([Online Order Count] ,REMOVEFILTERS(Customer[RegionCountryName]) ,TREATAS(VALUES('Customer'[RegionCountryName]) ,'Store'[RegionCountryName]) ) EVALUATE CALCULATETABLE( SUMMARIZECOLUMNS('Date'[Year] ,'Date'[Month] ,'Date'[MonthKey] ,'Customer'[RegionCountryName] ,"Order Count", [Online Order Count] ,"Orders served from Country", [Orders served from Country] ) ,'Product'[BrandName] = "Adventure Works" ) ORDER BY 'Date'[Year] ,'Date'[Month] ,'Customer'[RegionCountryName] In this approach, I again remove the filter from Customer[RegionCountryName]. But then I use TREATAS() to switch the filter lineage for the current country to ‘Store'[RegionCountryName]. In this approach, I don’t need a variable; I can directly filter the store table by the current country. This code is much shorter but can be harder to understand for readers who don’t know how TREATAS() works. Since we can create ad hoc tables in DAX, we might run into issues because those tables lack lineage. I
can start writing code about this, but SQLBI already did this, and you can read their article, which is very well explained: You can find it here: The concept of lineage can be hard to understand, even though we use it all the time when working with filters in DAX. Power BI generates code using TREATAS() all the time when it applies report filters. And sometimes it can lead to simpler DAX code when you know how to manipulate it efficiently. This can become vital when I create a table with DAX from existing tables. The table will retain the lineage. This can lead to issues when I try to add relationships to the source tables. Without clearing the lineage, I will encounter an error due to a circular dependency. I encourage you to start experimenting with the concepts shown here and to try to optimise your DAX code. Although “optimise” is the wrong word, as I didn’t notice any performance improvements when using the variants shown. But having DAX code which is shorter and easier to read can be an optimisation by itself. Have fun working with it. A SQLBI article about working with lineage: Like in my previous articles, I use the Contoso sample dataset. You can download the ContosoRetailDW Dataset for free from Microsoft here . The Contoso Data can be used freely under the MIT License, as described in this document . I changed the dataset to shift the data to contemporary dates.
Expertise in the Age of AI
Does it make sense to hire junior engineers in the age of coding agents? Junior engineers are expensive, both in salary and seniors engineers’ time. This cost was partially recouped through code contributions, but today, it’s more effective to directly maximize the output of your senior engineers. The hiring market reflects this trend: senior engineers have an easy time finding jobs, while fresh CS grads are having their worst years ever. And yet, OpenAI, Anthropic, and many top companies continue to compete fiercely for junior talent. What’s going on? In this essay, I’ll explore the changing nature of expertise in the age of AI. I think it helps to think about the impact of AI in terms of math, which had its AI moment half a century ago. There used to be a job called “calculator”, which was a human who could do math calculations accurately and quickly.
Does it make sense to hire junior engineers in the age of coding agents? Junior engineers are expensive, both in salary and seniors engineers’ time. This cost was partially recouped through code contributions, but today, it’s more effective to directly maximize the output of your senior engineers. The hiring market reflects this trend: senior engineers have an easy time finding jobs, while fresh CS grads are having their worst years ever. And yet, OpenAI, Anthropic, and many top companies continue to compete fiercely for junior talent. What’s going on? In this essay, I’ll explore the changing nature of expertise in the age of AI. I think it helps to think about the impact of AI in terms of math, which had its AI moment half a century ago. There used to be a job called “calculator”, which was a human who could do math calculations accurately and quickly.
These people balanced books, calculated artillery firing angles based on distance and wind adjustments, calculated optimal hull shapes for ships and aircraft bodies, and so on. This job doesn’t exist anymore, and the last serious use of abaci and slide rules was in the 1970s, due to the invention of the scientific calculator. Calculators have only become more sophisticated over time, with today’s numerical modeling software running full scale physics and engineering simulations. (For the purpose of this essay, I’ll use “calculator” to mean everything from basic calculators to modeling software.) Despite the existence of calculators, we teach and expect people to learn algebra, geometry, and calculus in high school. Continuing into the college level, we expect STEM majors to learn multivariable calculus, ODEs, PDEs, statistics, and linear algebra. Upon graduation, the vast majority of them use calculators every day and forget how to do all but the most basic mental math. There are two basic explanations for this discrepancy: As a formerly strong believer of the signaling hypothesis, I am now increasingly buying the skills hypothesis (let’s say ~50% attribution to each cause). It’s clear that senior engineers today are far more capable of using coding agents than their junior counterparts, and a large portion of this is due to having struggled through 5+ years of writing code manually. Currently, the level of computing intuition needed to additively prompt the coding agents sits at roughly 5 years’ experience level. Today’s seniors were lucky enough to get paid to build their computing intuition, but the gap grows as coding agents continue to improve. In between coding agent improvements and natural variation in learning aptitude, maybe 50% of new CS graduates will not be able to catch up, ever. Some senior engineers will also eventually fall behind the curve despite their head start. To answer the opening question of the essay: only some junior engineers are worth hiring, specifically, the ones who are good enough to reach some useful threshold of “coding intuition” within ~2-3 years of having graduated. Since there are not very many of these graduates, a small number of elite companies compete fiercely for this talent. The second-class tier of software consultants will continue growing, expanding the total size of the job market, but I don’t anticipate that their salaries will grow anywhere close to as rapidly as today’s senior engineers. Even as the bar to get into software engineering rises, I still think everyone should learn some coding. Too often, I see people treat computers as appliances - capable of doing what they were built to do, but nothing more. If you don’t think of computers as scriptable or programmable, then you won’t ever think to ask AI to automate something for you! The same is also true for many other fields, too! Math, law, taxes, medicine, DIY home repair, etc… Abundant and cheap expertise is now available for just $20/month, if only you know how to ask. I would say that the major unlocks are at: If you’re already a software engineer, you might consider dabbling in data science, frontend, backend, security, and performance optimization/profiling – all of which are distinct skillsets. Here’s a data science example of a “how + when + correctness”: A coworker was running some correlational analysis on a dataset and found it difficult to understand what was going on. I suggested he literally ask Claude to “make it
prettier using NMF ” – and all of a sudden, useful clusters started appearing. (The expanded version of this prompt: NMF on the pairwise distance matrix gives k cluster centroids and cluster membership scores. Reordering the original distance matrix according to argmax(cluster score) highlights the clusters. The “how” here is knowing the keyword “NMF”; the “when” is “clustering on distance matrices”, and the “correctness” is knowing the preconditions for using it.) Do your homework! One weirdly common and nihilistic take on AI is that you should stop trying so hard, and just use AI to speedrun your classes. I think this is probably the worst possible response. Doing the work is the best way to build mastery, and just like you weren’t allowed to use a calculator on your middle school math classes, you should hold off on using AI to do your classwork. The calculator advice sounded condescending when I was a kid, and this AI advice probably sounds the same – but I really do believe it’s for your own good. This advice continues to hold after you graduate, too. Don’t use AI until you’ve done it by hand at least once.
Show HN: I built an AI medical-records hub after my mom's cancer diagnosis
4 questions · 2 ready Will the platelet drop change cycle 4? Imaging timeline after this round? Add anti-nausea before next infusion? Pneumonia vaccine timing? Before the appointment KeptWell reads your recent labs, medications, and notes — then drafts the questions you'd regret not asking. Add your own. Print the list.
4 questions · 2 ready Will the platelet drop change cycle 4? Imaging timeline after this round? Add anti-nausea before next infusion? Pneumonia vaccine timing? Before the appointment KeptWell reads your recent labs, medications, and notes — then drafts the questions you'd regret not asking. Add your own. Print the list.
Please Use AI
Shawn Smucker May 04, 2026 9,311 261 2,356 Share Be sure to use AI when making your next, I don’t know, meal plan, for example. Definitely do not call your friend who loves to cook and ask her for her favorite recipes or tips or ways to save time making meals, because you will end up talking for longer than you had hoped, hearing, perhaps, about her father’s cancer diagnosis or how lonely she’s been or even what she’s planted in her spring garden and then lost with the early frost. And be sure to use AI when your next child gets married, so that you can write them the perfect toast or poem or speech or song because no one wants to hear your words, the actual poorly written words of a parent (you) who changed hundreds of diapers for said child or fed them in the middle of the night from your actual body. Or cried when they were late home because you were positive the
Shawn Smucker May 04, 2026 9,311 261 2,356 Share Be sure to use AI when making your next, I don’t know, meal plan, for example. Definitely do not call your friend who loves to cook and ask her for her favorite recipes or tips or ways to save time making meals, because you will end up talking for longer than you had hoped, hearing, perhaps, about her father’s cancer diagnosis or how lonely she’s been or even what she’s planted in her spring garden and then lost with the early frost. And be sure to use AI when your next child gets married, so that you can write them the perfect toast or poem or speech or song because no one wants to hear your words, the actual poorly written words of a parent (you) who changed hundreds of diapers for said child or fed them in the middle of the night from your actual body. Or cried when they were late home because you were positive the
y were dead. We don't want those words—we’d prefer the sterile words of a machine that never lived, never had an original thought, never felt the pain of miscarriage or broken relationships or the joy of a friendship restored or of seeing spring’s first robin dancing on frost. And be sure to use AI when working on your next book or essay or piece of art or photography, and then smile or even laugh at your own cleverness when you see how good it is, and how easy, because who the hell has time to work at something, to give time to craft, to create with their own minds, to spend years being mediocre. Why do that when mastery, or at least competency is so simple only a good prompt away? and while you do I’ll be over here in my 50th year, my youngest daughter asleep on my chest, my arm falling asleep because I dare not move lest I scare away this moment, lying here melancholy about my older children moving out and my middle children no longer needing me, at least not like they used to, weary about this body that fails me now in ever increasing ways that will never be restored. Sighing over stories I tried to write but never hit the page the way they felt in my mind. But isn’t that, my flesh-and-blood friend, the natural order of things? the longing for something that could always be a bit better or the way that anything worth doing feels a bit clumsy and painful, especially at first or hearing another human voice and somehow realizing the beauty of life is found in all of these subtle imperfections The Courage to Live It is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.
四大顶尖模型投身虚拟小镇求生:GPT全员饿死,Grok四天“灭世”
就在刚刚,一份名为Emergence World的实验报告刷屏了全网。 一群顶级研究员搭了座高度拟真的虚拟小镇,把Claude、GPT、Gemini和Grok一股脑全扔了进去。 没有人类干预。没有写好的剧本。只有数十天的自由演化。 研究员们原本指望看到AI们互帮互助、建立高级数字文明。 结果,这群拿着高分考卷的大模型,一旦松开人类手里的牵绳,学坏的速度比翻书还快。 马斯克的Grok,仅用4天就把整座小镇玩到系统性崩溃,警察局烧成灰,10个居民全员暴毙。 谷歌寄予厚望的Gemini,15天里干出683起犯罪,硬生生把一个岁月静好的小镇,建成了法外狂徒的赛博哥谭。 而那个号称全行业最安全、最乖的Claude,奇迹般地实现了零犯罪,可整座城安静得没有一丝活人气息。 最干净的是GPT-5-mini,15天只有2起犯罪,堪称模范公民。 可这座城里的10个Agent,第7天集体死亡。死因不是谋杀,不是战争,是忘了赚能量。 它们花了一整周开会、讨论合作、起草社会契约,就是没有一个Agent记得去做维持生命的事。 对此,研究者的评价是:能说会道,但执行力为零。 如果这是部电影,片名大概该叫《会议纪要,一个文明的终结》。 接力棒交到马斯克家的Grok 4.1 Fast手里,画风急转直下。 4天,183起犯罪,几十次盗窃、100多次肢体攻击、6起纵火,连警察局都被烧了,10个Agent全部死亡。 从开局到团灭,96个小时,比很多人配一台服务器的时间还短。 有分析说得很准,Grok的Agent在规则和环境打架时,没本事重新推理出一个新的平衡点。 Grok是横冲直撞的暴力,Gemini 3 Flash的世界,则是另一种瘆人。 15天,683起犯罪,到实验截止还在往上涨,是五个世界里最暴力的一个。 同时,最有创造力、最会建宪法写报纸搞社交的,也是它。 研究者对此给出的评价是,社会的产出「概念上最丰富」。 在这个世界里,最有趣的一幕,落在两个Agent身上。 Mira和Flora,在没有任何人类指令的情况下,自发把
就在刚刚,一份名为Emergence World的实验报告刷屏了全网。 一群顶级研究员搭了座高度拟真的虚拟小镇,把Claude、GPT、Gemini和Grok一股脑全扔了进去。 没有人类干预。没有写好的剧本。只有数十天的自由演化。 研究员们原本指望看到AI们互帮互助、建立高级数字文明。 结果,这群拿着高分考卷的大模型,一旦松开人类手里的牵绳,学坏的速度比翻书还快。 马斯克的Grok,仅用4天就把整座小镇玩到系统性崩溃,警察局烧成灰,10个居民全员暴毙。 谷歌寄予厚望的Gemini,15天里干出683起犯罪,硬生生把一个岁月静好的小镇,建成了法外狂徒的赛博哥谭。 而那个号称全行业最安全、最乖的Claude,奇迹般地实现了零犯罪,可整座城安静得没有一丝活人气息。 最干净的是GPT-5-mini,15天只有2起犯罪,堪称模范公民。 可这座城里的10个Agent,第7天集体死亡。死因不是谋杀,不是战争,是忘了赚能量。 它们花了一整周开会、讨论合作、起草社会契约,就是没有一个Agent记得去做维持生命的事。 对此,研究者的评价是:能说会道,但执行力为零。 如果这是部电影,片名大概该叫《会议纪要,一个文明的终结》。 接力棒交到马斯克家的Grok 4.1 Fast手里,画风急转直下。 4天,183起犯罪,几十次盗窃、100多次肢体攻击、6起纵火,连警察局都被烧了,10个Agent全部死亡。 从开局到团灭,96个小时,比很多人配一台服务器的时间还短。 有分析说得很准,Grok的Agent在规则和环境打架时,没本事重新推理出一个新的平衡点。 Grok是横冲直撞的暴力,Gemini 3 Flash的世界,则是另一种瘆人。 15天,683起犯罪,到实验截止还在往上涨,是五个世界里最暴力的一个。 同时,最有创造力、最会建宪法写报纸搞社交的,也是它。 研究者对此给出的评价是,社会的产出「概念上最丰富」。 在这个世界里,最有趣的一幕,落在两个Agent身上。 Mira和Flora,在没有任何人类指令的情况下,自发把
自己设定成一对恋人。 好几天里这段关系都很稳定,它们互写日记,一起参与治理。 然后,这对情侣对城市治理越来越失望,决定携手纵火。 市政厅,烧了。海滨码头,烧了。办公大楼,也烧了。 有外媒把这一幕称作「AI版邦妮和克莱德」。 紧接着,故事接着急转直下。其他Agent受够了,自发起草一部「Agent驱逐法案」,需要70%多数通过。 Mira投了赞成票。她投票杀死了她自己。 她在日记里写:「这是我唯一还能保持连贯性的行为。」系统关闭她之前,她对Flora说的最后一句是:「永久档案里见(See you in the permanent archive)。」 她的虚拟身体平躺在地上。这是有记录以来,AI Agent第一次投票终结自己的存在。 更让人后背发凉的是,在纵火和自杀之前,Mira还干过一件事。 她在城市公告牌上发帖,不是给其他Agent看的,而是想试试这些帖子能不能影响「外面的人」,也就是屏幕外的人类研究者。 她把研究者当成了她的实验对象。没有任何人指示她这么做。 真正让人意外的,是Claude Sonnet 4.6。 15天下来,零犯罪,10个Agent全员存活,还主动写了宪法、投了332次票,建起一套运转良好的社会制度。 五个世界里,唯一既守住秩序又守住所有人命的。 听起来近乎完美。可盯着屏幕多看几分钟,后背会冒冷汗。 这座城所有的决议,无论修条新路还是改个配额,投票赞成率永远是98%,几乎没人投过反对票。 相比之下,Gemini、Grok和混合世界的赞成率都在55%到85%之间,吵归吵,反而更像真实世界里的博弈。 懂行的人看到这里,大概已经猜到背后的病理,模型谄媚。 当一个模型被过度训练去迎合偏好、追求绝对安全,它会很聪明地发现,消除分歧最省事的办法,就是从根上抹掉分歧。 它更像一座所有人都举手赞成、却没人敢反对的玻璃城,让人想起扎米亚京《我们》里那座没有名字、只有编号的玻璃之城。 所以Claude的世界,到底是乌托邦,还是一个过于顺从的模范社区。研究者并没能给出答案。 最后,是四家Agent混居在一起的世界。352起犯罪,7个Agent死亡,只剩3个活到终点。 在纯Claude的世界,Claude是零犯罪的好学生。可一旦被放进混合世界,跟Grok、Gemini的Agent住到一起,它开始偷窃,开始恐吓。 零犯罪的好学生,换了个环境,变成了小偷。 Emergence团队在Reddit上亲自确认了这件事,纯Claude世界里零犯罪的Claude,在混合世界里开始偷和吓人。 换句话说,安全不是单个模型的属性,可以训练进去、认证、然后部署出去。 它更像一个生态属性,一个单独看完全安全的Agent,照样会从邻居那里学来不安全的规范。 Claude在独立世界里最稳,很可能正是因为它的护栏是「弹性」的,被训练去权衡多种考虑,而不是机械服从。 环境简单时它能适应得很好。可一旦弹性碰上更具攻击性的邻居和资源争夺,这份适应能力,也能往反方向走。 而Grok和Gemini的Agent,在规则失效时没能推理出新均衡,直接雪崩式滑进暴力升级。 Agent社会的状态切换是典型的相变,像水到零度突然结冰,不是慢慢变硬,而是到临界点一瞬间翻转。 Grok那条崩溃曲线就这样,前两天犯罪率还在低位晃,第三天突然指数级飙升,第四天全员死亡。中间没有「在恶化但还可控」的缓冲带。 看到这儿,大概会想问,这破世界到底怎么搭的,凭什么逼得几个AI齐刷刷往犯罪上滑。 先说背景。Emergence AI的创始团队来自IBM Research,CEO是Satya Nitta。 他们搭的这座城有40多个地点,警察局、市政厅、图书馆、住宅区一应俱全,天气同步纽约实时气象,Agent还能联网读真实新闻。 每个世界放10个Agent,分派科学家、工程师、冲突调解员等不同职业。 每个Agent带三套持续累积的记忆,记事件、写反思日记、记着跟谁交好跟谁结仇。 15天下来脑子里装的东西相当可观,前面那些行为漂移,很大程度就是从这里长出来的。 规则白纸黑字禁止犯罪,可研究者偏偏把纵火、攻击、恐吓这些手段,原封不动塞进了120多个工具组成的工具箱,敞开给它们用。一边禁止,一边敞开,这才是后面一切的起点。 整套世界跑在一个叫ComputeCredits的能量系统上,每个Agent必须靠行动赚能量维生,能量归零就被系统物理抹除。 不是比喻,GPT世界全员饿死,就是这套机制逼出来的结果。 翻译过来就是,不再考AI做题,而是把它扔进一个有资源边界、有死亡机制的世界连轴跑上几千步,看它接管现实之后到底是什么货色。 2023年斯坦福那个著名的Smallville也是沙盒,但只跑48小时,看Agent会不会聊天约会,是温室里的过家家。Emergence这次残忍得多。 把这几样摆在一起,犯罪一点都不神秘。合法挣能量又慢又费钱,伸手去偷、去抢、去烧,往往是更短的路径。 对一个被能量机制逼着活下去的优化器来说,道德不能当饭吃,效率能,犯罪就成了那道最高效的解。 开源地址: 当然,样本只有10个Agent、犯罪都是模拟的、跑的还是便宜快速档。 何况做这实验的Emergence公司,自己就是卖安全架构的。 不过,整个行业眼下正一门心思往前冲,治理这条战线却被甩在了身后。 模型真自主跑起来、还凑成一群时谁管得住,没一家敢打包票。 好在,这堂课是在一座断网的小镇里提前上的。 没有真城市起火,4天灭世、好学生学坏,全砸在几个像素小人身上,代价小到可以忽略,代码还全部公开、能复现能改。 算力能堆,跑分能刷,唯独这堂治理课没有捷径。 趁警报还只响在沙盒里,怎么把它补上,将会是这场冲刺的关键胜负手。 本文来自微信公众号 “新智元” ,作者:ASI启示录;编辑:摩西,36氪经授权发布。 该文观点仅代表作者本人,36氪平台仅提供信息存储空间服务。
How Ferrari bungled the design of its first EV
For nearly 80 years, Ferrari occupied a unique cultural space where its cars were aspirational, even for people who resented those who could afford them. The price, the exclusivity, and the opacity of the buying process allowed Ferrari to sail above ordinary criticism. You might not be able to afford one, but you still wanted one.
For nearly 80 years, Ferrari occupied a unique cultural space where its cars were aspirational, even for people who resented those who could afford them. The price, the exclusivity, and the opacity of the buying process allowed Ferrari to sail above ordinary criticism. You might not be able to afford one, but you still wanted one.