<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OracleBlog</title>
	<atom:link href="http://oracleblog.org/feed/" rel="self" type="application/rss+xml" />
	<link>https://oracleblog.org</link>
	<description>笑看数据库江湖的那些事儿……</description>
	<lastBuildDate>Fri, 21 Nov 2025 04:11:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.10</generator>
	<item>
		<title>关于cloudflare故障的一些思考</title>
		<link>https://oracleblog.org/its-my-life/some-thinking-about-cloudflare-issue/</link>
					<comments>https://oracleblog.org/its-my-life/some-thinking-about-cloudflare-issue/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Fri, 21 Nov 2025 04:11:40 +0000</pubDate>
				<category><![CDATA[It's my life]]></category>
		<category><![CDATA[clickhouse]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4844</guid>

					<description><![CDATA[关于cloudflare在2025 年 11 月 18 日发生的故障，其原因是： 他们的查询sql是： [crayon-69de2ecb9ef03499419459/] 因为是clickhouse，这是分布式的列存数据库。 default库里面放的是引擎为distributed的表，注，defaul [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>关于cloudflare在2025 年 11 月 18 日发生的故障，其原因是：<br />
<a href="https://oracleblog.org/wp-content/uploads/2025/11/aaa.png" data-lightbox="gal[4844]"><img decoding="async" loading="lazy" src="https://oracleblog.org/wp-content/uploads/2025/11/aaa.png" alt="" width="870" height="597" class="aligncenter size-full wp-image-4845" srcset="https://oracleblog.org/wp-content/uploads/2025/11/aaa.png 870w, https://oracleblog.org/wp-content/uploads/2025/11/aaa-300x206.png 300w, https://oracleblog.org/wp-content/uploads/2025/11/aaa-768x527.png 768w" sizes="(max-width: 870px) 100vw, 870px" /></a><br />
他们的查询sql是：</p>
<p></p><pre class="crayon-plain-tag">SELECT name, typeFROM system.columnsWHERE table = 'http_requests_features';</pre><p> </p>
<p>因为是clickhouse，这是分布式的列存数据库。<br />
default库里面放的是引擎为distributed的表，注，default库也是分布式的，在多个分片上。<br />
r0数据库放的是引擎是replicatedmergetree本地表。注，r0库也是分布式的，在多个分片上。<br />
system.columns中的system也是一个数据库，他是clickhouse系统自己的库。这个库里面有个columns表。</p>
<p>之前的用户权限，查询system.columns表出来的结果，是default库的http_requests_features表的name, type两个字段，<br />
修改用户权限之后，查询system.columns表出来的结果，是【default库 + r0库】的 http_requests_features表的name, type两个字段。 —— 对bot management来说，feature翻倍了。并且加上其他信息，超过了200个feature的硬编码限制。</p>
<p>给我们的警示：<br />
1. 要熟悉数据库的物理结构和逻辑结构，不能只局限在逻辑的查询上。一定要熟悉其文件结构和进程结构。<br />
2. 要熟悉数据库的数据字典，比如system.columns表中，带database字段，这肯定不是无缘无故有这个字段的。查询的时候要带上这个字段。比如我们在给数据团队或者安全审计团队开账号的时候，也要当心这个问题。留意多个库，多个schema、同义词指向等等。<br />
<a href="https://oracleblog.org/wp-content/uploads/2025/11/bbba.png" data-lightbox="gal[4844]"><img decoding="async" loading="lazy" src="https://oracleblog.org/wp-content/uploads/2025/11/bbba.png" alt="" width="953" height="558" class="aligncenter size-full wp-image-4849" srcset="https://oracleblog.org/wp-content/uploads/2025/11/bbba.png 953w, https://oracleblog.org/wp-content/uploads/2025/11/bbba-300x176.png 300w, https://oracleblog.org/wp-content/uploads/2025/11/bbba-768x450.png 768w" sizes="(max-width: 953px) 100vw, 953px" /></a></p>
<p>参考：<br />
<a href="https://news.qq.com/rain/a/20251119A029CT00">https://news.qq.com/rain/a/20251119A029CT00</a><br />
<a href="https://tonybai.com/2025/11/19/cloudflare-18-november-2025-outage/">https://tonybai.com/2025/11/19/cloudflare-18-november-2025-outage/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/its-my-life/some-thinking-about-cloudflare-issue/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle AI Database 26ai 新特性小结</title>
		<link>https://oracleblog.org/study-note/oracle-26ai-new-feature/</link>
					<comments>https://oracleblog.org/study-note/oracle-26ai-new-feature/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Thu, 23 Oct 2025 12:10:51 +0000</pubDate>
				<category><![CDATA[Study note]]></category>
		<category><![CDATA[oracle]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4833</guid>

					<description><![CDATA[1. 核心思路：将AI算法带到数据所在之处，减少数据移动。 —— 记得pg数据库利用colBERT来进行重排序（文章《多向量 &#124; 提升召回相关性》），而不是让重排序的模型（如BERT，BGE ReRanker，Cohere ReRanker）来做，也是为了减少data moving。在RAG中减少数 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>1.	核心思路：将AI算法带到数据所在之处，减少数据移动。<br />
—— 记得pg数据库利用colBERT来进行重排序（文章<a href="https://mp.weixin.qq.com/s/DIFZDzg8-w3UC8ARra8Y_A?mpshare=1&#038;scene=1&#038;srcid=1023n3PtHB8IxeUUgcO5CaId&#038;sharer_shareinfo=c68479c9b285e3880d059677966b3395&#038;sharer_shareinfo_first=c68479c9b285e3880d059677966b3395&#038;color_scheme=light#rd">《多向量 | 提升召回相关性》</a>），而不是让重排序的模型（如BERT，BGE ReRanker，Cohere ReRanker）来做，也是为了减少data moving。在RAG中减少数据移动，在可控可信的范围内，还是比较重要的。</p>
<p>2.	根本优势：控制现代数据栈的总拥有成本（TCO），无需安装多种类型的数据库。原生支持多种数据模型，有效防止了数据碎片化。支持“统一混合向量搜索”（Unified Hybrid Vector Search），允许在单条SQL查询中，将基于语义的向量搜索与传统的结构化、文本、JSON、图和空间数据搜索相结合的检索。<br />
—— 对于别的数据库来说，确实需要每个功能一种数据库。但是对oracle来说，全包。</p>
<p>3.	数据库内嵌AI代理(In-Database AI Agents)，将一个多步骤、涉及数据转换和处理的复杂任务，完全封装在数据库内部，通过一条或一组SQL/PLSQL语句完成，并接受数据库核心引擎的全面治理。如在数据库内处理PDF文档并生成向量嵌入。他与其他数据库调用外部AI模型，核心区别在于，Oracle 26ai的Select AI Agent 框架允许代理的定义、运行和治理都发生在数据库内部 。这使得代理能够以更高的安全性和效率直接访问数据，并继承数据库的事务、安全和高可用性等企业级特性。<br />
—— 原来复杂的工作量，多个组件的引入，多个模型的使用，都可以在一个oracle数据库中，用SQL来实现了。</p>
<p>4.	开放的AI数据湖仓 (Autonomous AI Lakehouse) 通过原生支持开放的在oss对象存储上的Apache Iceberg表格式。<br />
—— 以一个统一的对象存储表格式，打通各个云的对象存储上的表。方便进行数据湖服务。可能，在Costdown云费用统计时，再也不用：CUR -> S3 -> Glue中的data catalog 下的 database -> Athena取这个database的数据，以SQL的方式做报表统计。<br />
（注：CUR，全称cost and usage report，现在改名叫data export，在billing and cost management的菜单下，非常轻量，几乎不算一个服务，算billing 功能的一个feature）</p>
<p>5.	数据注解 (Data Annotations)，不同于数据库的comment，为AI工具、代理和代码生成器提供机器可读的语义上下文、特征和约束。<br />
—— 我们之前探索过让mcp来通过自然语言来给我们统计报表，告诉我们结果，但是如果不能让ai知道表定义，字段的含义，表的关联约束关系，ai不太容易生成每次都对的报表。而让ai“懂得”表含义，要么利用comment，要么在提示词中告诉ai相关定义，现在有了annotation，一切问题迎刃而解了。</p>
<p>6.	Oracle 26ai支持广泛的部署选项：包括Oracle自家的OCI，以及通过Oracle Database@Azure, @AWS, @Google Cloud等服务部署在其他主流云平台上，以及如 Exadata 和 Oracle Database Appliance &#8211; ODA的本地部署。<br />
—— 之前有同事提到过，他买了Oracle服务器，但是能和azure打通，之前还不太明白，为什么明明买的是oracle cloud上的云服务器，能连微软的网络。现在我开始明白了，可能是Oracle Database@Azure的战略了，oracle的云主机、oracle的数据库部署在azure上。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/study-note/oracle-26ai-new-feature/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>pg和oracle分区的一些心得</title>
		<link>https://oracleblog.org/working-case/some-diff-about-oracle-and-pg-partition/</link>
					<comments>https://oracleblog.org/working-case/some-diff-about-oracle-and-pg-partition/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Wed, 22 Oct 2025 10:01:35 +0000</pubDate>
				<category><![CDATA[..experience]]></category>
		<category><![CDATA[Working case]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[pg]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4830</guid>

					<description><![CDATA[1、oracle和pg都支持两层分区，但是pg可以支持理论上更多层级的子分区，三层、四层甚至更多…… 但是oracle只是支持两层。 2、oracle把表作为一个整体来看待，分区和子分区是属于这个表的逻辑部分，是属于表的各个存储段segment。而pg把表、分区、子分区作为独立的relfilenod [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>1、oracle和pg都支持两层分区，但是pg可以支持理论上更多层级的子分区，三层、四层甚至更多…… 但是oracle只是支持两层。</p>
<p>2、oracle把表作为一个整体来看待，分区和子分区是属于这个表的逻辑部分，是属于表的各个存储段segment。而pg把表、分区、子分区作为独立的relfilenode来看待，每个分区和子分区可以作为一个单独表来看待，只是他们之间有继承（inherit）关系。</p>
<p>3、基于上述不同的设计，在oracle中查询分区或者子分区，可以select count(*) from tab partition xx subpartition yy来进行，而在pg中可以select count(*) from zzzzz(子分区名)</p>
<p>4、基于oracle是把分区表作为一个逻辑整体来对待，所以在oracle中有global index和local index，唯一索引可以依赖global index实现全局唯一，但是在pg中只有local index，无法保证全局唯一性，需要在应用层进行保证。</p>
<p>5、oracle的表在分析之后，可以即精确到表级，也可以精确到分区和子分区级别，pg的需要analyze到子分区才能获得精确的统计信息。</p>
<p>6、oracle的很多分区操作，都强调表整体的一致性，如exchange partition，split partition，Heat Map等等特性，pg没有exchange语法（注，polardb pg有exchange partition，参考<a href="https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/exchange-partition">此链接</a> ）</p>
<p>7、元数据的数据字典：<br />
oracle： DBA_TAB_PARTITIONS, DBA_TAB_SUBPARTITIONS<br />
pg：pg_inherits, pg_class</p>
<p>8、当没有任何能触发分区裁剪的谓词时，优化器在生成聚合路径时会把父表展开成“全部子分区”，导致wrong result。<br />
即pg中执行select count(*) from files partition file_del，查询记录出错，看执行计划，同时扫描了2个父分区。要通过select count(*) from file_del的方式来绕过。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/working-case/some-diff-about-oracle-and-pg-partition/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>valkey学习笔记</title>
		<link>https://oracleblog.org/working-case/valkey-study-note/</link>
					<comments>https://oracleblog.org/working-case/valkey-study-note/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Wed, 22 Oct 2025 09:53:33 +0000</pubDate>
				<category><![CDATA[..experience]]></category>
		<category><![CDATA[Working case]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[valkey]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4811</guid>

					<description><![CDATA[之前，我写过《Redis学习笔记》 和 《多云用户，应该尽快切换到Valkey的使用》。 随着aws 2025年1月31日过期Redis 4.0和5.0的版本，是时候切换到使用valkey了。 有了AI，学习valkey也比当年学习Redis轻松了一些。利用Deep Research功能，输入合适的 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>之前，我写过<a href="https://oracleblog.org/study-note/redis-study-note/">《Redis学习笔记》</a> 和 <a href="https://oracleblog.org/working-case/responded-after-after-redis-changed-the-open-source-protocol/">《多云用户，应该尽快切换到Valkey的使用》</a>。 随着aws 2025年1月31日过期Redis 4.0和5.0的版本，是时候切换到使用valkey了。</p>
<p><a href="https://oracleblog.org/wp-content/uploads/2025/10/redis_valkey_timeline_en_v5.png" data-lightbox="gal[4811]"><img decoding="async" loading="lazy" src="https://oracleblog.org/wp-content/uploads/2025/10/redis_valkey_timeline_en_v5-1024x601.png" alt="" width="665" height="390" class="aligncenter size-large wp-image-4827" srcset="https://oracleblog.org/wp-content/uploads/2025/10/redis_valkey_timeline_en_v5-1024x601.png 1024w, https://oracleblog.org/wp-content/uploads/2025/10/redis_valkey_timeline_en_v5-300x176.png 300w, https://oracleblog.org/wp-content/uploads/2025/10/redis_valkey_timeline_en_v5-768x451.png 768w, https://oracleblog.org/wp-content/uploads/2025/10/redis_valkey_timeline_en_v5-1536x901.png 1536w, https://oracleblog.org/wp-content/uploads/2025/10/redis_valkey_timeline_en_v5-2048x1201.png 2048w" sizes="(max-width: 665px) 100vw, 665px" /></a></p>
<p>有了AI，学习valkey也比当年学习Redis轻松了一些。利用Deep Research功能，输入合适的提示词，</p><pre class="crayon-plain-tag">请阅读valkey的官方文档： 
（1）https://github.com/valkey-io/valkey 
（2）https://valkey.io/commands/ 
（3）https://valkey.io/topics/ 
（4）https://valkey.io/commands/ 
（5）https://aws.amazon.com/cn/elasticache/what-is-valkey/ 
（6）https://valkey.io/blog/ 
以及检索网上其他的正式性的关于valkey的论坛、博客、社区。 

给我一个关于valkey入门的详细手册。内容包括但不限于： 
1. Concept 相关专门的术语、概念 ；
2. New feature 新特性，特别是相比redis 7.2的新特性； 
3. Installation guide 安装指导，如何在自建虚拟机上安装valkey，如何docker安装，如何搭建高可用架构的valkey； 
4. Administration guide 管理指导，有哪些重要指标需要监控。如何判断是否运行正常；
5. Backup&amp; Recovery 备份恢复； 
6. Performance tuning 性能优化；
7. Migration&amp; Upgrade迁移升级； 
8. Reference和Utility 操作命令和相关客户端工具；</pre><p> </p>
<p></p><pre class="crayon-plain-tag">Chatgpt Deepsearch问题补充：
为了确保我为你准备的 Valkey 入门手册覆盖到你最关心的内容，能否请你补充以下几点：
你打算在哪种操作系统上安装 Valkey（如 Ubuntu、CentOS、macOS 等）？
你是否对 Docker 和 Kubernetes 环境都有兴趣，还是只希望了解其中一种？
你更倾向于哪种高可用架构：Sentinel 模式、Cluster 模式、还是依赖第三方工具（如 Keepalived）？
是否已有 Redis 经验？是否希望重点突出与 Redis 的异同？
是否希望包含具体使用语言的客户端工具（如 Python、Java、Node.js 等）？如果有，请告知语言偏好。
提供这些信息后，我会启动详细研究任务并为你编写全面的入门手册。

回答：
1、 centos 
2、都感兴趣 
3、两种模式都需要了解：
（3.1）主从模式，需要利用Keepalived，（另外，主从模式是否可以通过Sentinel来实现自动的主从切换？如果可以，也请介绍），
（3.2）分片模式，需要利用cluster模式 
4、有，希望突出 
5、shell下的valkey-cli，以及Python、Java等等。</pre><p> </p>
<p>就能帮我检索了。下面是学习笔记：<br />
chatgpt-5 thinking Research completed in 17m· 26 个源· 31 个搜索<br />
<a href="https://oracleblog.org/wp-content/uploads/2025/10/Valkey-Beginners-Guide.pdf">Valkey Beginner’s Guide.pdf</a><br />
<a href="https://oracleblog.org/wp-content/uploads/2025/10/Valkey-Beginners-Guide.docx">Valkey Beginner’s Guide.docx</a></p>
<p>Gemini 2.5 pro 检索了6、70个网站，耗时12分钟。<br />
<a href="https://oracleblog.org/wp-content/uploads/2025/10/Valkey-入门详细手册生成.pdf">Valkey 入门详细手册生成.pdf</a><br />
<a href="https://oracleblog.org/wp-content/uploads/2025/10/Valkey-入门详细手册生成.docx">Valkey 入门详细手册生成.docx</a></p>
<p>虽然节省了网页搜索、信息收集的时间，但是里面的内容，还是需要慢慢细心的阅读。不然学习的收获还是等于0。</p>
<p>另外，在测试的时候发现：<br />
1. aws redis 5可以直接升级到valkey 7。点击右上角migrate to valkey即可。不需要升级多次（从redis 5到redis 6，再从redis 6到redis 7，再从redis 7到valkey 7）。</p>
<p>2. aws redis的multi-az，创建过程，aws给默认值是2个replica，虽然我们平时在创建是修改成了一个replica。<br />
但是当从备份恢复出来一个实例，用这个实例转valkey，在恢复时，其默认的replica值是2，这个需要注意一下。如果要严格对齐，需要在恢复的时候改成replica个数为1。<br />
只有这样，恢复出来的redis是一主一从，转成了valkey也是一主一从。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/working-case/valkey-study-note/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DTS故障处理流程</title>
		<link>https://oracleblog.org/working-case/dts-issue-process/</link>
					<comments>https://oracleblog.org/working-case/dts-issue-process/#comments</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Thu, 28 Aug 2025 10:12:32 +0000</pubDate>
				<category><![CDATA[..experience]]></category>
		<category><![CDATA[Working case]]></category>
		<category><![CDATA[aliyun]]></category>
		<category><![CDATA[dts]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4803</guid>

					<description><![CDATA[在阿里云的dts同步中断的时候，可以按照这个流程来决策下一步的行动。 PDF下载：dts故障决策流程]]></description>
										<content:encoded><![CDATA[<p>在阿里云的dts同步中断的时候，可以按照这个流程来决策下一步的行动。<br />
<a href="https://oracleblog.org/wp-content/uploads/2025/08/dts_issue.png" data-lightbox="gal[4803]"><img decoding="async" loading="lazy" src="https://oracleblog.org/wp-content/uploads/2025/08/dts_issue-1024x415.png" alt="" width="665" height="270" class="aligncenter size-large wp-image-4806" srcset="https://oracleblog.org/wp-content/uploads/2025/08/dts_issue-1024x415.png 1024w, https://oracleblog.org/wp-content/uploads/2025/08/dts_issue-300x122.png 300w, https://oracleblog.org/wp-content/uploads/2025/08/dts_issue-768x311.png 768w, https://oracleblog.org/wp-content/uploads/2025/08/dts_issue-1536x623.png 1536w, https://oracleblog.org/wp-content/uploads/2025/08/dts_issue.png 1870w" sizes="(max-width: 665px) 100vw, 665px" /></a></p>
<p>PDF下载：<a href="https://oracleblog.org/wp-content/uploads/2025/08/dts故障决策流程.pdf">dts故障决策流程</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/working-case/dts-issue-process/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>学习笔记：One API系统架构与实现笔记</title>
		<link>https://oracleblog.org/study-note/learning-about-one-api/</link>
					<comments>https://oracleblog.org/study-note/learning-about-one-api/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Wed, 30 Apr 2025 03:15:19 +0000</pubDate>
				<category><![CDATA[Study note]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4794</guid>

					<description><![CDATA[# One API系统架构与实现笔记 ## 一、系统概述 One API是一个大模型API管理与分发系统，通过统一的OpenAI API格式来访问不同类型的大语言模型。它具有以下特点： 1. **基础架构**: &#8211; 依赖MySQL作为核心数据库（2c4g配置下QPS上限约1000） &# [&#8230;]]]></description>
										<content:encoded><![CDATA[<p># One API系统架构与实现笔记</p>
<p>## 一、系统概述</p>
<p>One API是一个大模型API管理与分发系统，通过统一的OpenAI API格式来访问不同类型的大语言模型。它具有以下特点：</p>
<p>1. **基础架构**:<br />
&#8211; 依赖MySQL作为核心数据库（2c4g配置下QPS上限约1000）<br />
&#8211; 未来计划集成Redis以提高性能<br />
&#8211; 存储向量信息但不进行向量计算，主要存储用户相关信息</p>
<p>2. **请求处理**:<br />
&#8211; 每次请求涉及约6次select操作和2次update操作<br />
&#8211; 已开启批量update配置以优化性能</p>
<p>3. **模型支持**:<br />
&#8211; 支持多种模型类型：embedding、LLM、代码生成等<br />
&#8211; 所有模型请求均需通过One API进行转发<br />
&#8211; 大模型一般最高支持100 RPS (每秒请求数)</p>
<p>## 二、系统架构</p>
<p>### 分层结构</p>
<p>系统采用多层次的组织结构：<br />
<code></code><code><br />
用户(User) --> 分组(Group) --> 渠道(Channel) --> 模型(Model)<br />
</code><code></code></p>
<p>### 渠道定义</p>
<p>渠道(Channel)是One API系统中的关键概念：</p>
<p>1. **功能定位**：<br />
&#8211; 作为不同模型服务的接入点<br />
&#8211; 连接分组和模型，直接与模型关联<br />
&#8211; 是模型调用的直接管理者</p>
<p>2. **配置灵活性**：<br />
&#8211; 一个渠道可以配置多个模型，实现模型服务的灵活组合<br />
&#8211; 渠道可以通过分组机制控制用户访问权限</p>
<p>3. **实现示例**：<br />
不同模型提供商的渠道配置：<br />
&#8211; 火山引擎：支持一个订阅<br />
&#8211; 阿里云：支持一个订阅<br />
&#8211; Azure：较复杂，按订阅做限流，一个应用对应一个订阅<br />
&#8211; 支持多区域部署，有些区域访问可能不稳定<br />
&#8211; 支持global endpoint，但稳定性也有挑战</p>
<p>## 三、系统部署架构</p>
<p>One API典型部署架构示例：<br />
<a href="https://oracleblog.org/wp-content/uploads/2025/04/deugyaSASDd.png" data-lightbox="gal[4794]"><img decoding="async" loading="lazy" src="https://oracleblog.org/wp-content/uploads/2025/04/deugyaSASDd.png" alt="" width="1000" height="466" class="aligncenter size-full wp-image-4799" srcset="https://oracleblog.org/wp-content/uploads/2025/04/deugyaSASDd.png 1000w, https://oracleblog.org/wp-content/uploads/2025/04/deugyaSASDd-300x140.png 300w, https://oracleblog.org/wp-content/uploads/2025/04/deugyaSASDd-768x358.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>## 四、管理与监控</p>
<p>1. **监控能力**：<br />
&#8211; 提供One API耗时分析<br />
&#8211; 支持渠道调整，如FastGPT售后咨询场景(主要使用ChatGPT模型)</p>
<p>2. **性能与效果评估**：<br />
&#8211; 支持模型准确率统计<br />
&#8211; 可区分性能问题和效果问题</p>
<p>## 五、技术实现原理</p>
<p>One API的核心功能是统一接入不同大模型API，主要通过以下方式实现：</p>
<p>1. **API一致性**：<br />
&#8211; 采用OpenAI API格式作为标准接口<br />
&#8211; 对非OpenAI格式的API进行转换适配</p>
<p>2. **多渠道支持**：<br />
&#8211; 支持20+主流大模型，包括OpenAI、Azure、Claude、Google Gemini等<br />
&#8211; 对各种模型API的差异进行统一处理</p>
<p>3. **高可用设计**：<br />
&#8211; 通过令牌池管理多账号资源<br />
&#8211; 实现失败自动重试<br />
&#8211; 支持多机部署</p>
<p>## 六、常见使用场景</p>
<p>1. **API密钥管理**：<br />
&#8211; 集中管理多渠道的API密钥<br />
&#8211; 通过令牌系统控制访问权限和使用量</p>
<p>2. **渠道负载均衡**：<br />
&#8211; 在多个相同模型的渠道间分发请求<br />
&#8211; 自动切换到可用渠道，提高稳定性</p>
<p>3. **限流与计费**：<br />
&#8211; 对用户请求进行限流控制<br />
&#8211; 支持不同计费模式和倍率设置</p>
<p>4. **模型映射与重定向**：<br />
&#8211; 支持将用户请求从一个模型重定向到另一个模型<br />
&#8211; 实现模型能力的灵活调配</p>
<p>## 七、高级功能</p>
<p>1. **批量操作**：<br />
&#8211; 支持批量创建渠道<br />
&#8211; 支持批量生成和导出兑换码</p>
<p>2. **分组管理**：<br />
&#8211; 用户分组和渠道分组管理<br />
&#8211; 为不同分组设置不同的倍率</p>
<p>3. **监控与告警**：<br />
&#8211; 查看额度明细<br />
&#8211; 配合第三方监控系统实现告警</p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/study-note/learning-about-one-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>学习笔记：分布式训练模型</title>
		<link>https://oracleblog.org/study-note/distributed-training/</link>
					<comments>https://oracleblog.org/study-note/distributed-training/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Wed, 16 Apr 2025 03:27:23 +0000</pubDate>
				<category><![CDATA[Study note]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4773</guid>

					<description><![CDATA[分布式训练模型（Distributed Training） 分布式训练是一种将深度学习模型的训练过程分布在多个设备（如GPU）上的技术，用于提升训练速度、处理更大的模型和数据集。 🔹 分布式训练的四种主要方式 1. Data Parallelism（DP） &#8211; 数据并行 原理：将数据切分 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1 class="" data-start="65" data-end="96">分布式训练模型（Distributed Training）</h1>
<p class="" data-start="98" data-end="157">分布式训练是一种将深度学习模型的训练过程分布在多个设备（如GPU）上的技术，用于提升训练速度、处理更大的模型和数据集。</p>
<hr class="" data-start="159" data-end="162" />
<h2 class="" data-start="164" data-end="182"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 分布式训练的四种主要方式</h2>
<h3 class="" data-start="184" data-end="222">1. <strong data-start="191" data-end="222">Data Parallelism（DP） &#8211; 数据并行</strong></h3>
<ul data-start="223" data-end="345">
<li class="" data-start="223" data-end="263">
<p class="" data-start="225" data-end="263"><strong data-start="225" data-end="231">原理</strong>：将数据切分为多个子集，每个GPU处理一部分数据，模型副本相同。</p>
</li>
<li class="" data-start="264" data-end="287">
<p class="" data-start="266" data-end="287"><strong data-start="266" data-end="272">优点</strong>：实现简单，适用于大多数模型。</p>
</li>
<li class="" data-start="288" data-end="318">
<p class="" data-start="290" data-end="318"><strong data-start="290" data-end="296">缺点</strong>：每个GPU都保留模型完整副本，内存开销大。</p>
</li>
<li class="" data-start="319" data-end="345">
<p class="" data-start="321" data-end="345"><strong data-start="321" data-end="329">适用场景</strong>：中小规模模型或多GPU的训练。</p>
</li>
</ul>
<h3 class="" data-start="347" data-end="387">2. <strong data-start="354" data-end="387">Tensor Parallelism（TP） &#8211; 张量并行</strong></h3>
<ul data-start="388" data-end="489">
<li class="" data-start="388" data-end="425">
<p class="" data-start="390" data-end="425"><strong data-start="390" data-end="396">原理</strong>：将模型的单个层（如矩阵乘法）中的张量进行切分，并行计算。</p>
</li>
<li class="" data-start="426" data-end="446">
<p class="" data-start="428" data-end="446"><strong data-start="428" data-end="434">优点</strong>：减少每张卡的内存压力。</p>
</li>
<li class="" data-start="447" data-end="466">
<p class="" data-start="449" data-end="466"><strong data-start="449" data-end="455">缺点</strong>：实现复杂，通信频繁。</p>
</li>
<li class="" data-start="467" data-end="489">
<p class="" data-start="469" data-end="489"><strong data-start="469" data-end="475">粒度</strong>：粒度较大，按张量维度切分。</p>
</li>
</ul>
<h3 class="" data-start="491" data-end="534">3. <strong data-start="498" data-end="534">Pipeline Parallelism（PP） &#8211; 流水线并行</strong></h3>
<ul data-start="535" data-end="665">
<li class="" data-start="535" data-end="584">
<p class="" data-start="537" data-end="584"><strong data-start="537" data-end="543">原理</strong>：将模型按层分成多个阶段，每个GPU处理一部分层，输入数据通过流水线方式依次流过。</p>
</li>
<li class="" data-start="585" data-end="613">
<p class="" data-start="587" data-end="613"><strong data-start="587" data-end="593">优点</strong>：适用于超大模型训练，显存需求平均分配。</p>
</li>
<li class="" data-start="614" data-end="641">
<p class="" data-start="616" data-end="641"><strong data-start="616" data-end="622">缺点</strong>：需要微批次处理，存在流水线启动延迟。</p>
</li>
<li class="" data-start="642" data-end="665">
<p class="" data-start="644" data-end="665"><strong data-start="644" data-end="650">粒度</strong>：比TP更小，按模型层级切分。</p>
</li>
</ul>
<h3 class="" data-start="667" data-end="707">4. <strong data-start="674" data-end="707">Expert Parallelism（EP） &#8211; 专家并行</strong></h3>
<ul data-start="708" data-end="815">
<li class="" data-start="708" data-end="763">
<p class="" data-start="710" data-end="763"><strong data-start="710" data-end="716">原理</strong>：用于 MoE（Mixture of Experts）模型，将不同“专家模块”部署在不同设备。</p>
</li>
<li class="" data-start="764" data-end="787">
<p class="" data-start="766" data-end="787"><strong data-start="766" data-end="772">优点</strong>：显著减少计算量，提升扩展性。</p>
</li>
<li class="" data-start="788" data-end="815">
<p class="" data-start="790" data-end="815"><strong data-start="790" data-end="796">缺点</strong>：路由机制复杂，需要动态激活专家模块。</p>
</li>
</ul>
<hr class="" data-start="817" data-end="820" />
<h2 class="" data-start="822" data-end="837"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 分布式训练常用技术</h2>
<h3 class="" data-start="839" data-end="885">DeepSpeed ZeRO (Zero Redundancy Optimizer)</h3>
<ul data-start="886" data-end="1016">
<li class="" data-start="886" data-end="909">
<p class="" data-start="888" data-end="909"><strong data-start="888" data-end="909">结合了数据并行 + 张量并行的优势</strong></p>
</li>
<li class="" data-start="910" data-end="987">
<p class="" data-start="912" data-end="919">按照粒度分为：</p>
<ul data-start="922" data-end="987">
<li class="" data-start="922" data-end="943">
<p class="" data-start="924" data-end="943"><strong data-start="924" data-end="934">ZeRO-1</strong>：优化器状态分布式</p>
</li>
<li class="" data-start="946" data-end="965">
<p class="" data-start="948" data-end="965"><strong data-start="948" data-end="958">ZeRO-2</strong>：+梯度分布式</p>
</li>
<li class="" data-start="968" data-end="987">
<p class="" data-start="970" data-end="987"><strong data-start="970" data-end="980">ZeRO-3</strong>：+参数分布式</p>
</li>
</ul>
</li>
<li class="" data-start="988" data-end="1016">
<p class="" data-start="990" data-end="1016"><strong data-start="990" data-end="996">目的</strong>：最大化模型训练的可扩展性，降低内存使用</p>
</li>
</ul>
<h3 class="" data-start="1018" data-end="1052">DDP（Distributed Data Parallel）</h3>
<ul data-start="1053" data-end="1116">
<li class="" data-start="1053" data-end="1077">
<p class="" data-start="1055" data-end="1077"><strong data-start="1055" data-end="1077">PyTorch 提供的分布式训练接口</strong></p>
</li>
<li class="" data-start="1078" data-end="1098">
<p class="" data-start="1080" data-end="1098">每个GPU运行一个进程，模型参数同步</p>
</li>
<li class="" data-start="1099" data-end="1116">
<p class="" data-start="1101" data-end="1116">通常基于 NCCL 通信库实现</p>
</li>
</ul>
<hr class="" data-start="1118" data-end="1121" />
<h2 class="" data-start="1123" data-end="1140"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 分布式训练中的通信方式</h2>
<h3 class="" data-start="1142" data-end="1192">NCCL（NVIDIA Collective Communications Library）</h3>
<ul data-start="1193" data-end="1281">
<li class="" data-start="1193" data-end="1211">
<p class="" data-start="1195" data-end="1211">NVIDIA 提供的高性能通信库</p>
</li>
<li class="" data-start="1212" data-end="1252">
<p class="" data-start="1214" data-end="1252">支持 AllReduce、Broadcast、AllGather 等通信操作</p>
</li>
<li class="" data-start="1253" data-end="1281">
<p class="" data-start="1255" data-end="1281">专为GPU间通信优化，常用于DDP、ZeRO等方案中</p>
</li>
</ul>
<hr class="" data-start="1283" data-end="1286" />
<h2 class="" data-start="1288" data-end="1302"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 训练中的重要术语</h2>
<ul data-start="1304" data-end="1391">
<li class="" data-start="1304" data-end="1326">
<p class="" data-start="1306" data-end="1326"><strong data-start="1306" data-end="1315">epoch</strong>：训练数据完整遍历一次</p>
</li>
<li class="" data-start="1327" data-end="1358">
<p class="" data-start="1329" data-end="1358"><strong data-start="1329" data-end="1337">梯度传输</strong>：模型在多个设备中训练时，需要同步参数梯度。 —— 负的梯度越大，约接近正确值。它是损失函数的“斜率”——也就是数学中常说的导数。梯度告诉你，这个“点”往哪个方向走，损失会下降得最快，越接近争取值。梯度就是“损失函数在当前位置的变化方向”，它告诉我们：如果你朝某个方向调整模型的参数，损失就会变小。</p>
</li>
<li class="" data-start="1359" data-end="1391">
<p class="" data-start="1361" data-end="1391"><strong data-start="1361" data-end="1370">优化器状态</strong>：如动量、学习率等，也可能需要在多卡中同步。—— 优化器（Optimizer）就是一个“帮你调整模型参数的方法”，让你慢慢走到最佳点（也就是最小误差的位置）。</p>
</li>
</ul>
<hr class="" data-start="1393" data-end="1396" />
<h2 class="" data-start="1398" data-end="1410"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> GPU 监控</h2>
<p class="" data-start="1412" data-end="1422">查看GPU状态命令：</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary">
<div class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-bash">nvidia-smi<br />
</code></div>
</div>
<p class="" data-start="1446" data-end="1469">可查看 GPU 占用率、显存使用、进程信息等。</p>
<hr class="" data-start="1471" data-end="1474" />
<h2 class="" data-start="1476" data-end="1507"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Prefill / Decode 分离（PD分离）</h2>
<ul data-start="1509" data-end="1653">
<li class="" data-start="1509" data-end="1551">
<p class="" data-start="1511" data-end="1551"><strong data-start="1511" data-end="1527">P（Prefill）阶段</strong>：处理输入 Prompt 的阶段，通常计算密集。</p>
</li>
<li class="" data-start="1552" data-end="1595">
<p class="" data-start="1554" data-end="1595"><strong data-start="1554" data-end="1569">D（Decode）阶段</strong>：处理生成 Token 的阶段，依赖性强但计算量小。</p>
</li>
<li class="" data-start="1596" data-end="1653">
<p class="" data-start="1598" data-end="1653"><strong data-start="1598" data-end="1606">分离原因</strong>：Prefill 与 Decode 特性差异大，将两者调度到不同GPU或不同时间资源利用更高。</p>
</li>
</ul>
<hr class="" data-start="1655" data-end="1658" />
<h2 class="" data-start="1660" data-end="1672"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f539.png" alt="🔹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 其他相关概念</h2>
<h3 class="" data-start="1674" data-end="1708">双向注意力（Bidirectional Attention）</h3>
<ul data-start="1709" data-end="1785">
<li class="" data-start="1709" data-end="1755">
<p class="" data-start="1711" data-end="1755">常用于 <strong data-start="1715" data-end="1731">Embedding 模型</strong>（如BERT），即对上下文的所有方向都进行建模。</p>
</li>
<li class="" data-start="1756" data-end="1785">
<p class="" data-start="1758" data-end="1785">与 GPT 的单向注意力（只考虑左侧Token）不同。</p>
</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/study-note/distributed-training/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>学习笔记：AI模型能力评估</title>
		<link>https://oracleblog.org/study-note/evaluation-of-ai-model-capabilities/</link>
					<comments>https://oracleblog.org/study-note/evaluation-of-ai-model-capabilities/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Tue, 08 Apr 2025 13:17:36 +0000</pubDate>
				<category><![CDATA[Study note]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4778</guid>

					<description><![CDATA[AI能力评估方法调研报告 引言：AI能力评估的关键作用 随着人工智能模型能力的不断增强及其在各个领域的广泛应用，对这些模型进行稳健且可靠的评估变得至关重要。评估在通用人工智能开发过程的每个阶段都至关重要，包括模型选择、提示工程和模型定制。理解不同AI模型的优势和劣势对于在各种应用中做出明智的决策至关 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>AI</strong><strong>能力评估方法调研报告</strong></p>
<p><strong>引言：AI能力评估的关键作用</strong></p>
<p>随着人工智能模型能力的不断增强及其在各个领域的广泛应用，对这些模型进行稳健且可靠的评估变得至关重要。评估在通用人工智能开发过程的每个阶段都至关重要，包括模型选择、提示工程和模型定制。理解不同AI模型的优势和劣势对于在各种应用中做出明智的决策至关重要。AI评估有助于识别需要改进的领域、潜在的偏见以及与预期目标的偏差。对AI进行系统评估需要一个全面的框架，涵盖工作和生活中所需的各种人类技能。本报告将深入探讨当前常用的、先进的和流行的AI评估方法，分析它们的优缺点、提出者以及不同类型的AI大语言模型在这些评估中的表现和原因。</p>
<p><strong>关键AI能力评估基准的深入分析</strong></p>
<ul>
<li><strong>MMLU</strong><strong>（大规模多任务语言理解）</strong>
<ul>
<li><strong>评估范围和题型</strong>
<ul>
<li>MMLU是一个通用基准，旨在评估模型在不同主题上的表现。</li>
<li>它测试AI系统在57个不同学科上的能力，范围从数学、科学到人文和社会科学以及专业领域。</li>
<li>该基准涵盖人文科学、STEM领域、社会科学和专业学科等主题。</li>
<li>它评估知识的广度和推理能力。</li>
<li>MMLU采用四选一的多项选择题形式。</li>
<li>问题的难度级别从本科生到专家级不等。</li>
<li>它同时测试一般的世界知识和解决问题的能力。</li>
<li>评估模型在零样本和少样本设置下的多任务准确性。</li>
<li><strong>分析 1：</strong> MMLU广泛涵盖众多学术和专业领域，使其成为评估通用智能的全面测试，也是衡量实际应用潜力的良好指标。</li>
<li><strong>分析 2：</strong> MMLU的题型设计旨在评估模型在不同领域之间的知识迁移能力，这对于反映真实世界中需要跨领域理解和应用知识的场景至关重要。</li>
</ul>
</li>
<li><strong>难度级别和创建者</strong>
<ul>
<li>MMLU的创建旨在比2020年9月发布时现有的基准更具挑战性。</li>
<li>在其发布时，大多数模型的表现接近随机水平（25%）。</li>
<li>创建者估计人类领域专家的准确率约为89.8%。</li>
<li>MMLU由Dan Hendrycks和一组研究人员发布。</li>
<li>更新的版本，如MMLU-Pro，集成了更具挑战性、更侧重于推理的问题，并将答案选项增加到十个。</li>
<li>MMLU-Pro旨在解决原始MMLU中的数据质量和数据污染问题。</li>
<li><strong>分析 3：</strong> 从MMLU到MMLU-Pro难度的增加反映了AI模型的进步以及对更具挑战性的基准的需求，以便区分它们的能力。</li>
<li><strong>分析 4：</strong> MMLU的难度设计旨在确保只有具备广泛知识和强大推理能力的模型才能取得高分，从而推动AI模型向更高的智能水平发展。</li>
</ul>
</li>
<li><strong>不同大语言模型的性能及原因</strong>
<ul>
<li>GPT-4在MMLU上取得了令人印象深刻的准确率，处于领先地位。</li>
<li>其他表现优异的模型包括Llama 3.1、Gemini Ultra和Claude 3 Sonnet。</li>
<li>模型在不同学科上的表现各不相同，通常在逻辑和数学方面得分较高。</li>
<li>GPT-4o在MMLU上达到了87%的准确率。</li>
<li>Llama 3.1 (405B)达到了86.6%。</li>
<li>Gemini Ultra达到了83.7%。</li>
<li>Claude 3 Sonnet达到了79%。</li>
<li>Grok-3达到了92.7%。</li>
<li>GPT-4的准确率稳定在88%左右。</li>
<li>模型性能可能对提示技巧很敏感。</li>
<li>GPT-4的强大性能归功于其先进的推理能力、指令遵循能力和大型上下文窗口。</li>
<li>即使在同一领域内，模型也可能因任务的细微差别而表现不同。</li>
<li><strong>分析 5：</strong> LLM在MMLU上的性能是衡量其一般知识和推理能力的关键指标，但它并非衡量其整体智能或是否适合特定任务的唯一标准。</li>
<li><strong>分析 6：</strong> 不同模型在MMLU上的性能差异反映了它们在训练数据、模型架构和推理机制上的不同特点，这有助于研究人员理解哪些方法能够更好地提升模型的通用知识和推理能力。</li>
</ul>
</li>
</ul>
</li>
<li><strong>MATH</strong>
<ul>
<li><strong>评估范围和题型</strong>
<ul>
<li>MATH是一个包含具有挑战性的竞赛数学问题的数据库。</li>
<li>它包含来自高中数学竞赛的12,500道问题。</li>
<li>问题涵盖代数、几何、概率、微积分和数论等各个分支。</li>
<li>每个问题都有完整的逐步解决方案。</li>
<li>它评估模型解决高中数学竞赛文字题的能力。</li>
<li><strong>分析 7：</strong> MATH作为一个严格的基准，用于评估AI模型的数学推理和解决问题的能力，要求提供逐步推导过程，而不仅仅是最终答案。</li>
<li><strong>分析 8：</strong> MATH的题型设计侧重于考察模型对数学概念的深层理解和应用能力，这与实际数学研究和解决复杂问题的过程更为贴近。</li>
</ul>
</li>
<li><strong>难度级别和创建者</strong>
<ul>
<li>MATH被设计成具有挑战性的，问题来源于AMC和AIME等竞赛。</li>
<li>一个没有很强数学背景的博士生在MATH上得了40分，而一个三届IMO金牌得主得了90分。</li>
<li>该数据集首次推出时，即使是最好的LLM也只达到了6.9%。</li>
<li>MATH数据集由Dan Hendrycks等人推出。</li>
<li>随着当前模型在MATH上接近饱和，已经引入了更新、更具挑战性的数学基准，如FrontierMath。</li>
<li>FrontierMath包含未发表的专家级问题，专家需要花费数小时才能解决。</li>
<li><strong>分析 9：</strong> MATH的高难度，尤其是与最初LLM的表现相比，突显了数学推理的复杂性以及AI在该领域取得的进展。更难基准的出现表明人们不断追求更具挑战性的评估。</li>
<li><strong>分析 10：</strong> MATH的难度级别旨在区分不同AI模型在数学推理方面的能力，并推动模型向着解决更高级别数学问题的方向发展。</li>
</ul>
</li>
<li><strong>不同大语言模型的性能及原因</strong>
<ul>
<li>Grok-3在MATH上领先，得分为93.3%。</li>
<li>Gemini 2.5达到了92.0%。</li>
<li>GPT-o3 mini得分为87.3%。</li>
<li>Claude 3.7 Sonnet达到了80.0%。</li>
<li>在与其他模型的比较中，GPT-4o在MATH任务上得分最高。</li>
<li>OpenAI o3-mini在MATH上达到了87.3%。</li>
<li>MATH上的性能需要强大的数学推理和解决问题的能力。</li>
<li>推理模型往往在这些任务上表现最佳。</li>
<li><strong>分析 11：</strong> 不同模型在MATH上的不同表现突显了AI架构和训练方法在解决复杂数学问题方面的多样化优势。具有专门推理能力的模型通常表现更优异。</li>
<li><strong>分析 12：</strong> Grok-3和Gemini 2.5在MATH上的成功表明，链式思维推理和对大规模计算资源的访问对于在具有挑战性的数学基准上取得优异性能至关重要。</li>
</ul>
</li>
</ul>
</li>
<li><strong>AIME</strong><strong>（美国邀请数学考试）</strong>
<ul>
<li><strong>AI</strong><strong>评估范围和题型</strong>
<ul>
<li>AIME是一项选拔性的、具有挑战性的数学竞赛，面向在AMC考试中表现优异的高中生。</li>
<li>这是一项3小时的考试，包含15道自由回答题，每题的答案都必须是000到999之间的整数。</li>
<li>涵盖代数、几何、数论、概率和组合数学等主题。</li>
<li>问题比AMC 10和AMC 12中的问题难得多。</li>
<li>得分最高的参与者有资格参加USAMO或USAJMO。</li>
<li><strong>分析 13：</strong> AIME具有挑战性的自由回答形式以及对高级高中数学的覆盖，使其成为评估AI在数学领域中深度理解和解决问题能力的严格测试。</li>
<li><strong>分析 14：</strong> AIME的题型设计旨在考察模型是否能够灵活运用各种数学知识和技巧来解决问题，这对于评估模型是否具备真正的数学智能至关重要。</li>
</ul>
</li>
<li><strong>AI</strong><strong>评估难度和创建者</strong>
<ul>
<li>AIME被认为极具挑战性，人类考生的中位数得分在15题中仅为4到6题。</li>
<li>它由美国数学协会（MAA）管理。</li>
<li>AIME始于1983年，每年举办两次。</li>
<li>难度级别与AI数学奥林匹克进步奖竞赛中约50%的问题相当。</li>
<li>它比MATH等基准测试的难度更高。</li>
<li><strong>分析 15：</strong> AIME持续较低的人类中位数得分突显了其难度，使其成为评估AI解决超出标准高中课程范围的真正具有挑战性的数学问题能力的重要基准。</li>
<li><strong>分析 16：</strong> AIME的难度级别旨在确保只有具备顶尖数学能力的模型才能在该基准上取得显著成绩，从而推动AI在高级数学推理方面的发展。</li>
</ul>
</li>
<li><strong>AI</strong><strong>评估中不同模型的性能及原因</strong>
<ul>
<li>o3 Mini在AIME上取得了最高的准确率，为86.5%。</li>
<li>DeepSeek R1得分为74.0%。</li>
<li>o1得分为71.5%。</li>
<li>Grok 3 Mini Fast Beta High Reasoning也表现良好。</li>
<li>推理模型通常表现最佳。</li>
<li>与较新的2025年问题相比，模型在较旧的2024年版本上表现更好，这引起了人们对数据污染的担忧。</li>
<li>o1-mini在被告知使用更多tokens时往往能获得更好的结果。</li>
<li>OpenAI o1在AIME中位列美国排名前500名学生。</li>
<li><strong>分析 17：</strong> 虽然AI模型在AIME上取得了令人印象深刻的分数，但由于问题公开可用而存在数据污染的可能性，在解释这些结果时需要谨慎。在旧问题上表现更好支持了这种担忧。</li>
<li><strong>分析 18：</strong> 不同模型在AIME上的性能差异可能受到它们在训练数据中接触到的竞赛数学问题的数量和类型的影响，以及它们采用的特定推理和问题解决策略的影响。</li>
</ul>
</li>
</ul>
</li>
<li><strong>GSM8K</strong><strong>（八千年级小学数学）</strong>
<ul>
<li><strong>评估范围和题型</strong>
<ul>
<li>GSM8K是一个高质量、语言多样的八千道小学数学应用题数据集。</li>
<li>包含由人类问题编写者创建的8,500道问题。</li>
<li>侧重于需要多步推理的基本数学问题。</li>
<li>问题涉及基本的算术运算（+、-、×、÷）。</li>
<li>解决方案通常需要2到8个步骤。</li>
<li><strong>分析 19：</strong> GSM8K提供了一个评估AI理解和解决需要通过多个步骤进行逻辑推理的简单数学文字题能力的基准。</li>
<li><strong>分析 20：</strong> GSM8K的题型设计旨在考察模型是否能够将自然语言描述的数学问题转化为一系列可执行的算术运算，并最终得到正确的答案。</li>
</ul>
</li>
<li><strong>难度级别和创建者</strong>
<ul>
<li>问题概念简单，但由于多样性高，对于最先进的语言模型来说可能具有挑战性。</li>
<li>一个聪明的初中生应该能够解决每一个问题。</li>
<li>该数据集由OpenAI和Surge AI创建。</li>
<li>相关论文的作者包括Karl Cobbe等人。</li>
<li><strong>分析 21：</strong> 尽管数学水平是小学水平，但GSM8K的语言多样性和需要多步推理使其成为AI的一个不简单的基准，突显了弥合自然语言理解与数学问题解决之间差距的挑战。</li>
<li><strong>分析 22：</strong> GSM8K的难度级别适中，既能考察模型的基本数学能力，又能检验其进行多步推理和解决实际问题的能力。</li>
</ul>
</li>
<li><strong>不同大语言模型的性能及原因</strong>
<ul>
<li>Anthropic Claude 3达到了95%的准确率。</li>
<li>Google Gemini Ultra得分为94.4%。</li>
<li>OpenAI GPT-4达到了92%。</li>
<li>Grok-3达到了90%。</li>
<li>Claude 3.5 Sonnet (HPT)达到了97.72%。</li>
<li>DUP prompt upon GPT-4达到了97.1%。</li>
<li>性能随着时间的推移显着提高，顶级模型接近饱和。</li>
<li>链式思维提示是一种常用的实现高性能的技术。</li>
<li>验证技术也显着提高了性能。</li>
<li><strong>分析 23：</strong> 顶级模型在GSM8K上取得的高准确率表明AI在解决数学文字题方面取得了显着进展。链式思维推理和验证等技术在其中发挥着关键作用。然而，接近饱和的状态表明需要更具挑战性的基准。</li>
<li><strong>分析 24：</strong> 不同模型在GSM8K上的性能差异可能与它们在训练过程中学习到的解决数学问题的方法和策略有关，以及它们在执行多步推理时的能力有关。</li>
</ul>
</li>
</ul>
</li>
<li><strong>PIQA</strong><strong>（物理交互：问题回答）</strong>
<ul>
<li><strong>评估范围和题型</strong>
<ul>
<li>PIQA是一个多项选择题数据集，测试模型在自然语言中推理物理常识的能力。</li>
<li>侧重于涉及物理知识的日常场景，偏好非典型的解决方案。</li>
<li>每个问题都有一个目标和两个可能的解决方案，一个是正确的，一个是错误的。</li>
<li>灵感来源于instructables.com，该网站提供关于如何使用日常材料制作、手工制作或操作物品的说明。</li>
<li><strong>分析 25：</strong> PIQA评估了一般智能的一个关键方面——理解物理世界和日常物体的交互方式，这通常需要超越常见或典型的用途进行推理。</li>
<li><strong>分析 26：</strong> PIQA的题型设计旨在考察模型是否具备将自然语言描述的物理场景转化为对物体属性、功能和相互作用的理解的能力。</li>
</ul>
</li>
<li><strong>难度级别和创建者</strong>
<ul>
<li>人类认为该数据集很容易（约95%的准确率），但大型预训练模型却难以应对（约75%）。</li>
<li>该数据集由Yonatan Bisk等人创建。</li>
<li>它包含大约20,000个问答对。</li>
<li><strong>分析 27：</strong> 人类和AI在PIQA上表现的显着差距突显了AI在仅从文本中获取和应用物理常识知识方面面临的挑战。</li>
<li><strong>分析 28：</strong> PIQA的难度级别旨在区分模型是否具备对物理世界的基本理解，以及是否能够基于这种理解进行推理和选择合适的解决方案。</li>
</ul>
</li>
<li><strong>不同大语言模型的性能及原因</strong>
<ul>
<li>Unicorn 11B取得了最高的准确率，为90.1%。</li>
<li>LLaMA3 8B+MoSLoRA达到了89.7%。</li>
<li>CompassMTL 567M with Tailor达到了88.3%。</li>
<li>性能需要理解物体属性、功能和因果关系。</li>
<li>模型难以处理需要对世界进行稳健的直观物理模型进行推理的问题。</li>
<li><strong>分析 29：</strong> 像Unicorn 11B这样的模型的性能表明，具有专门训练或架构的较大模型可能更适合处理PIQA的物理推理需求。</li>
<li><strong>分析 30：</strong> Unicorn 11B在PIQA上的成功可能归因于其专注于通用常识推理的训练，这使其能够更好地理解和回答关于物理交互的问题。</li>
</ul>
</li>
</ul>
</li>
<li><strong>ARC</strong><strong>（AI2推理挑战）</strong>
<ul>
<li><strong>评估范围和题型（Easy vs. Challenge）</strong>
<ul>
<li>ARC是一个包含小学科学问题的问答数据集。</li>
<li>侧重于3到9年级的科学考试题。</li>
<li>分为Easy和Challenge两个子集，Challenge包含需要推理的更困难的问题。</li>
<li>Challenge子集包含检索式算法和词共现算法都无法正确回答的问题。</li>
<li>ARC-AGI（通用人工智能抽象和推理语料库）是另一个基准，侧重于视觉推理和在新的任务上快速学习技能的效率。</li>
<li>ARC-AGI任务涉及基于网格的视觉推理问题。</li>
<li><strong>分析 31：</strong> ARC分为Easy和Challenge两个子集，可以评估不同层次的推理能力，Challenge子集专门针对需要更高级推理的问题。另一方面，ARC-AGI测试的是与抽象推理和从少量示例中快速学习相关的另一种智能。</li>
<li><strong>分析 32：</strong> ARC-AGI的题型设计旨在考察模型是否具备人类在面对全新问题时所展现出的抽象、推理和泛化能力。</li>
</ul>
</li>
<li><strong>难度级别和创建者</strong>
<ul>
<li>ARC Challenge对于LLM来说比ARC Easy更难。</li>
<li>ARC由艾伦人工智能研究所（AI2）创建。</li>
<li>ARC-AGI由François Chollet推出。</li>
<li>ARC-AGI被设计成对人类来说容易，但对AI来说很难。</li>
<li>ARC-AGI侧重于流体智力，只需要基本的常识知识。</li>
<li><strong>分析 33：</strong> ARC-AGI（“人类容易，AI困难”）的设计原则使其成为一个独特的基准，用于识别人类智能和人工智能之间根本的区别，尤其是在抽象推理和泛化方面。</li>
<li><strong>分析 34：</strong> ARC-AGI的难度级别旨在考察模型是否具备人类在解决全新问题时所展现出的灵活性、创造性和高效性。</li>
</ul>
</li>
<li><strong>不同模型的性能及原因</strong>
<ul>
<li>GPT-4o在ARC上取得了高准确率。</li>
<li>ST-MoE-32B在ARC Easy上表现良好。</li>
<li>GPT-4在ARC Challenge上表现良好。</li>
<li>由于评估设置，LLM通常难以应对ARC Challenge。</li>
<li>OpenAI o3在ARC-AGI上取得了突破性进展。</li>
<li>纯LLM在ARC-AGI-2上得分为0。</li>
<li>o3在ARC-AGI上的性能归功于其程序合成能力。</li>
<li>ARC-AGI的性能随着模型规模的增大而提高。</li>
<li><strong>分析 35：</strong> 像o3这样的模型在ARC-AGI上的显着进步表明AI处理抽象推理任务的能力有所提高，但ARC-AGI-2持续存在的挑战表明，真正的通用智能仍然遥远。</li>
<li><strong>分析 36：</strong> 模型在ARC上的性能差异可能反映了它们在理解科学概念、进行逻辑推理以及处理多项选择题方面的不同能力。</li>
</ul>
</li>
</ul>
</li>
<li><strong>CLUE</strong><strong>（中文语言理解评估）</strong>
<ul>
<li><strong>评估范围和任务</strong>
<ul>
<li>CLUE是一个中文语言理解评估基准。</li>
<li>它包括多个任务，涵盖单句/句对分类和机器阅读理解。</li>
<li>任务包括主题分类、语义相似度评分和自然语言推理。</li>
<li>还包括长文本分类和机器阅读理解等任务。</li>
<li>CLUE旨在评估LLM在中文临床任务中的实际应用能力。</li>
<li><strong>分析 37：</strong> CLUE提供了一个全面的基准，用于评估中文语言理解的细微之处，涵盖了与实际应用相关的各种语言任务。</li>
<li><strong>分析 38：</strong> CLUE的任务设计旨在考察模型在不同层次的中文语言理解能力，包括词汇、语法、语义和篇章理解。</li>
</ul>
</li>
<li><strong>创建者和评估指标</strong>
<ul>
<li>CLUE是一个开放的、社区驱动的项目。</li>
<li>它由一个NLP研究团队创建。</li>
<li>临床语言理解评估（CLUE）基准包含六项任务，用于测试在医疗保健领域的实际应用。</li>
<li>评估指标因任务而异，包括分类任务的准确率。</li>
<li><strong>分析 39：</strong> CLUE的社区驱动性质以及临床CLUE等专门版本的开发突显了为满足特定语言和领域需求而定制基准的重要性。</li>
<li><strong>分析 40：</strong> CLUE的评估指标设计旨在全面衡量模型在不同中文语言理解任务中的表现，从而为模型开发者提供有针对性的反馈。</li>
</ul>
</li>
<li><strong>不同模型的性能及原因</strong>
<ul>
<li>GLM-130B在多个CLUE任务中表现出色。</li>
<li>ERNIE和其他预训练的中文模型也表现良好。</li>
<li>CLUE的性能反映了模型理解和处理中文的能力。</li>
<li>通用模型通常在临床CLUE任务上优于生物医学模型。</li>
<li><strong>分析 41：</strong> 不同模型在CLUE上的表现表明中文语言理解取得了进展，某些模型在特定任务中表现出色。通用模型有时在临床任务中优于专门的生物医学模型，这引发了人们对当前生物医学微调方法有效性的质疑。</li>
<li><strong>分析 42：</strong> 模型在CLUE上的性能差异可能与它们在训练过程中接触到的中文语料库的规模和质量有关，以及它们处理不同类型中文语言理解任务的能力有关。</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>探索AI模型比较评估方法</strong></p>
<ul>
<li><strong>“</strong><strong>角斗场”（Arena）</strong>
<ul>
<li><strong>工作原理和用户参与</strong>
<ul>
<li>像Chatbot Arena这样的Arena平台允许用户并排比较两个匿名AI聊天机器人。</li>
<li>用户通过提问与聊天机器人互动，然后投票选出更好的回复。</li>
<li>该平台使用Elo评分系统根据用户投票对模型进行排名。</li>
<li>用户可以进行多轮对话来评估模型的连贯性。</li>
<li>像Search Arena这样的新平台根据用户对真实用户查询的偏好评估搜索增强的LLM系统。</li>
<li>Agent Arena允许用户根据任务、LLM提供商、框架和工具比较和评估代理工作流程。</li>
<li>Open WebUI内置了一个评估功能，允许团队对模型响应进行评分，并在个性化排行榜上跟踪性能。</li>
<li><strong>分析 43：</strong> Arena式评估利用用户的集体智慧来提供更真实的AI模型性能评估，尤其是在主观质量（如帮助性和对话能力）方面。</li>
<li><strong>分析 44：</strong> Arena评估的工作原理类似于盲测，通过匿名比较不同模型的响应，消除了用户对特定模型先入为主的偏见，从而更客观地反映了模型的实际性能。</li>
</ul>
</li>
<li><strong>评估指标、优点和缺点</strong>
<ul>
<li>评估指标主要是基于成对比较的Elo评分。</li>
<li>优点包括难以轻易作弊和捕捉聊天机器人“好”的细微之处。</li>
<li>基于真实用户互动提供动态和持续的评估。</li>
<li>提供用户对不同模型偏好的见解。</li>
<li>缺点包括人类偏好的主观性和潜在的偏见。</li>
<li>可能与涉及长输入上下文或复杂推理的任务的性能相关性不高。</li>
<li>可能受到某些LLM的用户讨好行为的影响。</li>
<li><strong>分析 45：</strong> 虽然Arena评估提供了关于用户偏好的宝贵见解，但其对人类判断的依赖引入了主观性和潜在的偏见。它们也可能无法完全捕捉更复杂或专门任务的性能。</li>
<li><strong>分析 46：</strong> Arena评估的优势在于能够快速收集大量用户反馈，并利用Elo评分系统进行动态排名，但其缺点在于结果可能受到参与用户群体的偏好和使用场景的限制。</li>
</ul>
</li>
</ul>
</li>
<li><strong>基于排行榜的评估</strong>
<ul>
<li><strong>排行榜的特点和示例</strong>
<ul>
<li>LLM排行榜根据模型在各种任务和基准上的性能对其进行排名。</li>
<li>示例包括Open LLM排行榜、Chatbot Arena排行榜、MTEB排行榜和特定领域的排行榜。</li>
<li>排行榜使用各种评估指标，如准确率、F1分数、困惑度、BLEU和ROUGE。</li>
<li>一些排行榜包含人类偏好评估，如Chatbot Arena。</li>
<li>排行榜有助于跟踪进展、比较模型并识别优势和劣势。</li>
<li><strong>分析 47：</strong> 排行榜提供了一个有价值的AI模型在标准化基准上的性能概览，方便进行比较和跟踪该领域的进展。包含多样化的基准和指标可以对模型能力进行多方面的评估。</li>
<li><strong>分析 48：</strong> 排行榜通过提供一个集中化的平台，展示了各种AI模型在不同任务上的性能，从而简化了模型选择的过程，并促进了社区对AI进展的理解。</li>
</ul>
</li>
<li><strong>适用性和局限性</strong>
<ul>
<li>适用于模型选择、识别改进领域和跟踪随时间推移的进展。</li>
<li>局限性包括可能过度拟合基准、数据污染以及对特定任务的狭隘关注。</li>
<li>可能无法完全反映真实世界的性能或用户体验。</li>
<li>可能很脆弱，对评估设置的微小变化很敏感。</li>
<li>可能无法充分涵盖所有相关能力或伦理考量。</li>
<li><strong>分析 49：</strong> 虽然排行榜对于高层次的比较很有用，但它们在真实世界适用性、过度拟合的可能性以及对所有相关方面的覆盖方面的局限性，使得在解释它们时需要采取谨慎的态度。它们应与针对特定用例的评估相结合。</li>
<li><strong>分析 50：</strong> 排行榜的局限性在于它们可能无法捕捉到模型在特定应用场景中的实际表现，而且由于模型开发者可能会针对排行榜进行优化，因此排行榜上的高分并不一定意味着模型在所有任务上都表现出色。</li>
</ul>
</li>
<li><strong>其他比较评估方法</strong>
<ul>
<li><strong>成对比较法</strong>
<ul>
<li>涉及直接比较两个模型或输出，以确定哪个更好，基于特定标准。</li>
<li>可以使用LLM作为裁判来自动化评估过程。</li>
<li>适用于比较模型、提示或配置。</li>
<li>对于主观评估可能更可靠。</li>
<li>基于LLM的成对评估比人工评估更快更便宜。</li>
<li><strong>分析 51：</strong> 成对比较提供了一种直接评估AI模型相对优势的方法，尤其是在主观质量方面。使用LLM作为裁判可以自动化此过程，使其更具可扩展性和成本效益。</li>
<li><strong>分析 52：</strong> 成对比较法通过直接比较两个模型的输出，能够更清晰地揭示它们在特定方面的优劣，这对于优化模型和选择最适合特定任务的模型非常有帮助。</li>
</ul>
</li>
<li><strong>人工评估</strong>
<ul>
<li>涉及人工评估员根据预定义的标准评估AI输出。</li>
<li>被认为是主观和细致评估的黄金标准。</li>
<li>可以评估连贯性、相关性、事实正确性和伦理考虑等质量。</li>
<li>挑战包括成本高、耗时以及主观性和偏见的可能性。</li>
<li>通常与自动化指标结合使用以进行全面评估。</li>
<li><strong>分析 53：</strong> 人工评估对于捕捉AI性能的定性方面并确保与人类价值观和期望保持一致仍然至关重要，尤其是在自动化指标不足的领域。然而，其资源密集型特性需要探索结合人工和自动化方法的混合方法。</li>
<li><strong>分析 54：</strong> 人工评估的价值在于其能够提供对模型输出质量、相关性和适用性的深入理解，但其缺点是难以规模化，并且可能受到评估者个人偏见的影响。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>结论：AI能力评估的趋势和未来方向</strong></p>
<p>该领域正朝着更全面、更细致的评估方法发展，这些方法超越了简单的准确性指标。越来越关注评估推理、泛化和伦理考虑。社区驱动的评估平台和使用LLM作为裁判的方法正在兴起。随着AI能力的进步，需要保持挑战性的基准。将评估方法与特定的用例和实际应用相结合非常重要。未来的方向可能涉及更动态和自适应的基准，以及改进人机协作评估的方法。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>1. 表：关键AI能力评估基准概述</p>
<table style="border-collapse: collapse; width: 1104px; height: 403px;" border="0" width="360" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 27.0pt;">
<td class="xl65" style="height: 27.0pt; width: 54pt;" width="72" height="36">
<div>
<div style="text-align: center;"><strong>基准名称</strong></div>
</div>
</td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>主要评估范围</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>题型</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>创建者</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>主要关注点</strong></td>
</tr>
<tr style="height: 40.5pt;" data-sourcepos="273:1-273:47">
<td class="xl66" style="height: 40.5pt; width: 54pt;" width="72" height="54" data-sourcepos="273:1-273:6">MMLU</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="273:8-273:13">一般知识</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="273:15-273:20">多项选择</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="273:22-273:38">Dan Hendrycks等人</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="273:40-273:45">知识广度</td>
</tr>
<tr style="height: 40.5pt;" data-sourcepos="274:1-274:47">
<td class="xl66" style="height: 40.5pt; width: 54pt;" width="72" height="54" data-sourcepos="274:1-274:6">MATH</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="274:8-274:13">数学推理</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="274:15-274:20">自由回答</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="274:22-274:38">Dan Hendrycks等人</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="274:40-274:45">推理深度</td>
</tr>
<tr style="height: 27.0pt;" data-sourcepos="275:1-275:40">
<td class="xl66" style="height: 27.0pt; width: 54pt;" width="72" height="36" data-sourcepos="275:1-275:6">AIME</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="275:8-275:13">高级数学</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="275:15-275:20">自由回答</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="275:22-275:29">美国数学协会</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="275:31-275:38">复杂问题解决</td>
</tr>
<tr style="height: 27.0pt;" data-sourcepos="276:1-276:47">
<td class="xl66" style="height: 27.0pt; width: 54pt;" width="72" height="36" data-sourcepos="276:1-276:7">GSM8K</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="276:9-276:14">小学数学</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="276:16-276:20">文字题</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="276:22-276:38">OpenAI和Surge AI</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="276:40-276:45">多步推理</td>
</tr>
<tr style="height: 27.0pt;" data-sourcepos="277:1-277:48">
<td class="xl66" style="height: 27.0pt; width: 54pt;" width="72" height="36" data-sourcepos="277:1-277:6">PIQA</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="277:8-277:13">物理常识</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="277:15-277:20">多项选择</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="277:22-277:37">Yonatan Bisk等人</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="277:39-277:46">物理交互理解</td>
</tr>
<tr style="height: 67.5pt;" data-sourcepos="278:1-278:74">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90" data-sourcepos="278:1-278:5">ARC</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="278:7-278:17">科学推理/抽象推理</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="278:19-278:29">多项选择/视觉谜题</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="278:31-278:58">艾伦人工智能研究所/François Chollet</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="278:60-278:72">推理能力/技能习得效率</td>
</tr>
<tr style="height: 40.5pt;" data-sourcepos="279:1-279:50">
<td class="xl66" style="height: 40.5pt; width: 54pt;" width="72" height="54" data-sourcepos="279:1-279:6">CLUE</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="279:8-279:15">中文语言理解</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="279:17-279:26">分类/阅读理解等</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="279:28-279:35">CLUE团队</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="279:37-279:48">语言理解的广度和深度</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>2. 表：顶级LLM在关键基准上的性能比较</p>
<table style="border-collapse: collapse; width: 1095px; height: 308px;" border="0" width="504" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 54.0pt;">
<td class="xl65" style="height: 54.0pt; width: 54pt;" width="72" height="72">
<div>
<div style="text-align: center;"><strong>模型名称</strong></div>
</div>
</td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>MMLU (%)</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>MATH (%)</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>AIME (%)</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>GSM8K (%)</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>PIQA (%)</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>ARC (Challenge) (%)</strong></td>
</tr>
<tr style="height: 13.5pt;" data-sourcepos="285:1-285:40">
<td class="xl66" style="height: 13.5pt; width: 54pt;" width="72" height="18" data-sourcepos="285:1-285:7">GPT-4</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="285:9-285:14">86.4</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="285:16-285:18">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="285:20-285:22">&#8211;</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="285:24-285:27">92</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="285:29-285:31">&#8211;</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="285:33-285:38">96.3</td>
</tr>
<tr style="height: 40.5pt;" data-sourcepos="286:1-286:51">
<td class="xl66" style="height: 40.5pt; width: 54pt;" width="72" height="54" data-sourcepos="286:1-286:19">Claude 3.5 Sonnet</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="286:21-286:24">79</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="286:26-286:29">80</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="286:31-286:33">&#8211;</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="286:35-286:41">97.72</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="286:43-286:45">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="286:47-286:49">&#8211;</td>
</tr>
<tr style="height: 13.5pt;" data-sourcepos="287:1-287:41">
<td class="xl66" style="height: 13.5pt; width: 54pt;" width="72" height="18" data-sourcepos="287:1-287:8">Grok-3</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="287:10-287:15">92.7</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="287:17-287:22">93.3</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="287:24-287:26">&#8211;</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="287:28-287:31">90</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="287:33-287:35">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="287:37-287:39">&#8211;</td>
</tr>
<tr style="height: 27.0pt;" data-sourcepos="288:1-288:46">
<td class="xl66" style="height: 27.0pt; width: 54pt;" width="72" height="36" data-sourcepos="288:1-288:14">Gemini Ultra</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="288:16-288:21">83.7</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="288:23-288:25">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="288:27-288:29">&#8211;</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="288:31-288:36">94.4</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="288:38-288:40">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="288:42-288:44">&#8211;</td>
</tr>
<tr style="height: 13.5pt;" data-sourcepos="289:1-289:41">
<td class="xl66" style="height: 13.5pt; width: 54pt;" width="72" height="18" data-sourcepos="289:1-289:9">o3 Mini</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="289:11-289:13">&#8211;</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="289:15-289:20">87.3</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="289:22-289:27">86.5</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="289:29-289:31">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="289:33-289:35">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="289:37-289:39">&#8211;</td>
</tr>
<tr style="height: 27.0pt;" data-sourcepos="290:1-290:42">
<td class="xl66" style="height: 27.0pt; width: 54pt;" width="72" height="36" data-sourcepos="290:1-290:13">DeepSeek R1</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="290:15-290:17">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="290:19-290:21">&#8211;</td>
<td class="xl66" style="width: 54pt;" align="right" width="72" data-sourcepos="290:23-290:28">74</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="290:30-290:32">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="290:34-290:36">&#8211;</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="290:38-290:40">&#8211;</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>3. 表：AI模型比较评估方法比较</p>
<table style="border-collapse: collapse; width: 1089px; height: 498px;" border="0" width="360" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 27.0pt;">
<td class="xl65" style="height: 27.0pt; width: 54pt;" width="72" height="36">
<div>
<div style="text-align: center;"><strong>评估方法</strong></div>
</div>
</td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>工作原理</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>主要评估指标</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>优点</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>缺点</strong></td>
</tr>
<tr style="height: 81.0pt;" data-sourcepos="296:1-296:83">
<td class="xl66" style="height: 81.0pt; width: 54pt;" width="72" height="108" data-sourcepos="296:1-296:14">“角斗场”（Arena）</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="296:16-296:30">用户匿名比较两个模型并投票</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="296:32-296:38">Elo评分</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="296:40-296:57">难以作弊，捕捉细微差别，动态评估</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="296:59-296:81">主观性，可能存在偏见，不一定适用于复杂任务</td>
</tr>
<tr style="height: 67.5pt;" data-sourcepos="297:1-297:83">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90" data-sourcepos="297:1-297:10">基于排行榜的评估</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="297:12-297:31">根据模型在标准化基准上的性能进行排名</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="297:33-297:47">准确率、F1分数、困惑度等</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="297:49-297:59">易于比较，跟踪进展</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="297:61-297:81">可能过度拟合基准，数据污染，关注点狭隘</td>
</tr>
<tr style="height: 54.0pt;" data-sourcepos="298:1-298:63">
<td class="xl66" style="height: 54.0pt; width: 54pt;" width="72" height="72" data-sourcepos="298:1-298:7">成对比较法</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="298:9-298:21">直接比较两个模型或输出</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="298:23-298:28">偏好选择</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="298:30-298:44">适用于主观评估，自动化潜力</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="298:46-298:61">需要比较多个对，可能存在偏见</td>
</tr>
<tr style="height: 67.5pt;" data-sourcepos="299:1-299:76">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90" data-sourcepos="299:1-299:6">人工评估</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="299:8-299:25">人工评估员根据预定义标准评估输出</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="299:27-299:40">连贯性、相关性、正确性等</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="299:42-299:54">捕捉细微差别，考虑伦理</td>
<td class="xl66" style="width: 54pt;" width="72" data-sourcepos="299:56-299:74">成本高，耗时，可能存在主观性和偏见</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>4. 表：不同评估方法因测试重点不同而偏向特定模型：</p>
<table style="border-collapse: collapse; width: 1122px; height: 1036px;" border="0" width="288" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 13.5pt;">
<td class="xl65" style="height: 13.5pt; width: 54pt; text-align: center;" width="72" height="18"><strong>评估方法</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>测试重点</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>优势模型</strong></td>
<td class="xl65" style="width: 54pt; text-align: center;" width="72"><strong>原因</strong></td>
</tr>
<tr style="height: 81.0pt;">
<td class="xl66" style="height: 81.0pt; width: 54pt;" width="72" height="108">MMLU</td>
<td class="xl66" style="width: 54pt;" width="72">广泛知识</td>
<td class="xl66" style="width: 54pt;" width="72">GPT-4等大型LLM</td>
<td class="xl66" style="width: 54pt;" width="72">大型模型因训练数据广泛，能覆盖多学科知识。</td>
</tr>
<tr style="height: 67.5pt;">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90">MATH</td>
<td class="xl66" style="width: 54pt;" width="72">数学推理</td>
<td class="xl66" style="width: 54pt;" width="72">数学专项模型</td>
<td class="xl66" style="width: 54pt;" width="72">微调后的模型在竞赛级数学任务中表现更佳。</td>
</tr>
<tr style="height: 67.5pt;">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90">AIME</td>
<td class="xl66" style="width: 54pt;" width="72">高级数学</td>
<td class="xl66" style="width: 54pt;" width="72">Gemini 2.0 Flash</td>
<td class="xl66" style="width: 54pt;" width="72">优化数学推理的模型在高难度任务中占优。</td>
</tr>
<tr style="height: 81.0pt;">
<td class="xl66" style="height: 81.0pt; width: 54pt;" width="72" height="108">GSM8K</td>
<td class="xl66" style="width: 54pt;" width="72">基础数学</td>
<td class="xl66" style="width: 54pt;" width="72">Claude 3.5 Sonnet</td>
<td class="xl66" style="width: 54pt;" width="72">大多数大型模型能轻松解决，微调模型更高效。</td>
</tr>
<tr style="height: 67.5pt;">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90">PIQA</td>
<td class="xl66" style="width: 54pt;" width="72">物理常识</td>
<td class="xl66" style="width: 54pt;" width="72">Unicorn 11B</td>
<td class="xl66" style="width: 54pt;" width="72">具备常识训练的模型在日常场景中表现更好。</td>
</tr>
<tr style="height: 67.5pt;">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90">ARC</td>
<td class="xl66" style="width: 54pt;" width="72">科学推理</td>
<td class="xl66" style="width: 54pt;" width="72">科学微调LLM</td>
<td class="xl66" style="width: 54pt;" width="72">科学数据训练的模型在科学问题中更准确。</td>
</tr>
<tr style="height: 67.5pt;">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90">CLUE</td>
<td class="xl66" style="width: 54pt;" width="72">中文理解</td>
<td class="xl66" style="width: 54pt;" width="72">ERNIE</td>
<td class="xl66" style="width: 54pt;" width="72">中文专用模型因数据优化而表现优异。</td>
</tr>
<tr style="height: 67.5pt;">
<td class="xl66" style="height: 67.5pt; width: 54pt;" width="72" height="90">Chatbot Arena</td>
<td class="xl66" style="width: 54pt;" width="72">对话偏好</td>
<td class="xl66" style="width: 54pt;" width="72">Claude</td>
<td class="xl66" style="width: 54pt;" width="72">优化对话的模型在用户体验中排名靠前。</td>
</tr>
</tbody>
</table>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/study-note/evaluation-of-ai-model-capabilities/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MCP简介</title>
		<link>https://oracleblog.org/study-note/introducing-mcp/</link>
					<comments>https://oracleblog.org/study-note/introducing-mcp/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Sun, 06 Apr 2025 18:03:01 +0000</pubDate>
				<category><![CDATA[Study note]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4751</guid>

					<description><![CDATA[PDF文件（高清）：MCP简介_update_20250417_pdf XMind文件（源文件）：MCP简介_update_20250417_xmind PDF文件（高清）：MCP简介 XMind文件（源文件）：MCP简介.xmind &#160;]]></description>
										<content:encoded><![CDATA[<p>PDF文件（高清）：<a href="https://oracleblog.org/wp-content/uploads/2025/04/MCP简介_update_20250417_pdf.zip">MCP简介_update_20250417_pdf</a><br />
XMind文件（源文件）：<a href="https://oracleblog.org/wp-content/uploads/2025/04/MCP简介_update_20250417_xmind.zip">MCP简介_update_20250417_xmind</a></p>
<p><del datetime="2025-04-17T03:49:08+00:00">PDF文件（高清）：<a href="https://oracleblog.org/wp-content/uploads/2025/04/MCP简介.pdf">MCP简介</a></del><br />
<del datetime="2025-04-17T03:49:08+00:00">XMind文件（源文件）：<a href="https://oracleblog.org/wp-content/uploads/2025/04/MCP简介.xmind_.zip">MCP简介.xmind</a></del></p>
<p>&nbsp;</p>
<p><a href="https://oracleblog.org/wp-content/uploads/2025/04/111-1.png" data-lightbox="gal[4751]"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-4761" src="https://oracleblog.org/wp-content/uploads/2025/04/111-1-1024x684.png" alt="" width="665" height="444" srcset="https://oracleblog.org/wp-content/uploads/2025/04/111-1-1024x684.png 1024w, https://oracleblog.org/wp-content/uploads/2025/04/111-1-300x201.png 300w, https://oracleblog.org/wp-content/uploads/2025/04/111-1-768x513.png 768w, https://oracleblog.org/wp-content/uploads/2025/04/111-1.png 1200w" sizes="(max-width: 665px) 100vw, 665px" /></a><a href="https://oracleblog.org/wp-content/uploads/2025/04/222-1.png" data-lightbox="gal[4751]"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-4762" src="https://oracleblog.org/wp-content/uploads/2025/04/222-1-1024x685.png" alt="" width="665" height="445" srcset="https://oracleblog.org/wp-content/uploads/2025/04/222-1-1024x685.png 1024w, https://oracleblog.org/wp-content/uploads/2025/04/222-1-300x201.png 300w, https://oracleblog.org/wp-content/uploads/2025/04/222-1-768x514.png 768w, https://oracleblog.org/wp-content/uploads/2025/04/222-1.png 1200w" sizes="(max-width: 665px) 100vw, 665px" /></a><a href="https://oracleblog.org/wp-content/uploads/2025/04/333-1.png" data-lightbox="gal[4751]"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-4766" src="https://oracleblog.org/wp-content/uploads/2025/04/333-1-1024x678.png" alt="" width="665" height="440" srcset="https://oracleblog.org/wp-content/uploads/2025/04/333-1-1024x678.png 1024w, https://oracleblog.org/wp-content/uploads/2025/04/333-1-300x199.png 300w, https://oracleblog.org/wp-content/uploads/2025/04/333-1-768x509.png 768w, https://oracleblog.org/wp-content/uploads/2025/04/333-1.png 1200w" sizes="(max-width: 665px) 100vw, 665px" /></a><a href="https://oracleblog.org/wp-content/uploads/2025/04/444-1.png" data-lightbox="gal[4751]"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-4767" src="https://oracleblog.org/wp-content/uploads/2025/04/444-1-1024x676.png" alt="" width="665" height="439" srcset="https://oracleblog.org/wp-content/uploads/2025/04/444-1-1024x676.png 1024w, https://oracleblog.org/wp-content/uploads/2025/04/444-1-300x198.png 300w, https://oracleblog.org/wp-content/uploads/2025/04/444-1-768x507.png 768w, https://oracleblog.org/wp-content/uploads/2025/04/444-1.png 1200w" sizes="(max-width: 665px) 100vw, 665px" /></a><a href="https://oracleblog.org/wp-content/uploads/2025/04/555.png" data-lightbox="gal[4751]"><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-4768" src="https://oracleblog.org/wp-content/uploads/2025/04/555-1024x236.png" alt="" width="665" height="153" srcset="https://oracleblog.org/wp-content/uploads/2025/04/555-1024x236.png 1024w, https://oracleblog.org/wp-content/uploads/2025/04/555-300x69.png 300w, https://oracleblog.org/wp-content/uploads/2025/04/555-768x177.png 768w, https://oracleblog.org/wp-content/uploads/2025/04/555.png 1200w" sizes="(max-width: 665px) 100vw, 665px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/study-note/introducing-mcp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>pg中drop function报错不存在</title>
		<link>https://oracleblog.org/working-case/drop-function-in-postgresql/</link>
					<comments>https://oracleblog.org/working-case/drop-function-in-postgresql/#respond</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Tue, 21 Jan 2025 07:52:55 +0000</pubDate>
				<category><![CDATA[Working case]]></category>
		<category><![CDATA[pg]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4741</guid>

					<description><![CDATA[在pg中drop function会报错不存在，或者报错语法错误： [crayon-69de2ecba1233069119165/] [crayon-69de2ecba123d002896397/] 在这里需要注意一下，drop function的时候，需要带上function中定义的各个变量的类型 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>在pg中drop function会报错不存在，或者报错语法错误：</p><pre class="crayon-plain-tag">mydb01=&gt;drop function getcpumem;
ERROR:Syntax error ator near";"
LINE 1: drop function getcpumem;</pre><p></p><pre class="crayon-plain-tag">mydb01=&gt;drop function getcpumem(integer,integer,integer,integer);
ERROR:function getcpumem(integer，integer，integer，integer) does not exist
mydb01=&gt;</pre><p>在这里需要注意一下，drop function的时候，需要带上function中定义的各个变量的类型。语法是：<br />
<code>DROP FUNCTION [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...]<br />
[ CASCADE | RESTRICT ]<br />
</code><br />
在pg中，我们可以通过pg_proc看有哪些funcition，但是pg_proc中的变量类型，虽然在proargtypes中有记录，但是它是一个数字编码，需要通过::regtype[]来转换一下成可识别的类型。<br />
所以，你要先找出这个function的各个变量的类型，可以用下面的语句查找：</p><pre class="crayon-plain-tag">SELECT proname, proargtypes::regtype[], nspname
FROM pg_proc
JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid
WHERE proname = 'getcpumem';</pre><p><a href="https://oracleblog.org/wp-content/uploads/2025/01/howtodropfunction.png" data-lightbox="gal[4741]"><img decoding="async" loading="lazy" src="https://oracleblog.org/wp-content/uploads/2025/01/howtodropfunction.png" alt="" width="764" height="149" class="aligncenter size-full wp-image-4745" srcset="https://oracleblog.org/wp-content/uploads/2025/01/howtodropfunction.png 764w, https://oracleblog.org/wp-content/uploads/2025/01/howtodropfunction-300x59.png 300w" sizes="(max-width: 764px) 100vw, 764px" /></a></p>
<p>此时运行</p><pre class="crayon-plain-tag">drop function getcpumem(integer,numeric,numeric,varchar,integer,numeric,numeric);</pre><p>就可以正常删除了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/working-case/drop-function-in-postgresql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>阿里云rds主备切换和跨可用区迁移断联测试</title>
		<link>https://oracleblog.org/working-case/some-switchover-and-failover-test-on-aliyun/</link>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Mon, 06 Jan 2025 08:04:13 +0000</pubDate>
				<category><![CDATA[..experience]]></category>
		<category><![CDATA[Working case]]></category>
		<category><![CDATA[aliyun]]></category>
		<category><![CDATA[failover]]></category>
		<category><![CDATA[rds]]></category>
		<category><![CDATA[switchover]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4693</guid>

					<description><![CDATA[高清PDF：阿里云主备切换和跨可用区迁移示意图 高清VISIO：阿里云主备切换和跨可用区迁移示意图 先说结论：阿里云说的发生切换时（不管是主备切换还是跨可用区切换），影响时间是30秒内，这个是基本成立的。 测试是每种场景测试4~5次，观察其平均效果。 主备库切换 迁移可用区 MySQL 只读：1秒  [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图_normal.png" data-lightbox="gal[4693]"><img decoding="async" loading="lazy" src="https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图_normal-941x1024.png" alt="" width="665" height="724" class="aligncenter size-large wp-image-4732" srcset="https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图_normal-941x1024.png 941w, https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图_normal-276x300.png 276w, https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图_normal-768x835.png 768w, https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图_normal-1412x1536.png 1412w, https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图_normal.png 1757w" sizes="(max-width: 665px) 100vw, 665px" /></a></p>
<p>高清PDF：<a href="https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图.pdf">阿里云主备切换和跨可用区迁移示意图</a><br />
高清VISIO：<a href="https://oracleblog.org/wp-content/uploads/2025/01/阿里云主备切换和跨可用区迁移示意图.zip">阿里云主备切换和跨可用区迁移示意图</a></p>
<p>先说结论：阿里云说的发生切换时（不管是主备切换还是跨可用区切换），影响时间是30秒内，这个是基本成立的。</p>
<p>测试是每种场景测试4~5次，观察其平均效果。</p>
<table width="877">
<tbody>
<tr>
<td style="text-align: center;" width="150"></td>
<td style="text-align: center;" width="237"><span style="color: #0000ff;"><strong>主备库切换</strong></span></td>
<td style="text-align: center;" width="490"><span style="color: #0000ff;"><strong>迁移可用区</strong></span></td>
</tr>
<tr>
<td>
<h5>MySQL</h5>
</td>
<td>
<h5>只读：1秒</h5>
</td>
<td>
<h5>只读：10~20秒</h5>
</td>
</tr>
<tr>
<td>
<h5>PostgreSQL</h5>
</td>
<td width="237">
<h5>断联：1秒</h5>
<h5>只读：8~9秒</h5>
<h5>正常读写：5~30秒</h5>
<h5>断联：1秒</h5>
<h5>只读：8~9秒</h5>
<p>&nbsp;</p>
<h5>汇总：影响20秒左右</h5>
</td>
<td width="490">
<h5>只读：8~9秒</h5>
<h5>断联：1秒</h5>
<h5>正常读写：5秒</h5>
<h5>断联：1秒</h5>
<h5>只读：15秒~30秒</h5>
<p>&nbsp;</p>
<h5>汇总：影响约30秒</h5>
</td>
</tr>
<tr>
<td>
<h5>MongoDB（非分片）</h5>
</td>
<td width="237">
<h5>只读：25秒</h5>
<h5>断联：12秒</h5>
<h5></h5>
<h5>汇总：影响37秒</h5>
</td>
<td width="490">
<h5>有条件的只读（需要执行rs.slaveOk()才能只读）：16~26秒</h5>
<h5>断联：2秒</h5>
<h5>有条件的只读（需要执行rs.slaveOk()才能只读）：4~11秒</h5>
<h5></h5>
<h5>汇总：影响40秒内</h5>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>（一）MySQL：<br />
1. 运行压测语句：</p><pre class="crayon-plain-tag">while true
do
RUN_FLAG=`ps -ef |grep sysbench |grep run |grep -v grep |wc -l`
if [ ${RUN_FLAG} -lt 1 ]; then
    sysbench oltp_read_write --mysql-host=xxxxxxxxxx.rds.aliyuncs.com --mysql-port=3306 --mysql-user=myuser --mysql-password=mypassword --mysql-db=testdb --tables=32 --table-size=10000000 --threads=32 --time=6000 --report-interval=1 run
    echo "====== `date` ======The sysbench process is STOP."
else
    echo "====== `date` ======The sysbench process is RUNNING."
fi
sleep 1
done</pre><p>2. 运行查询语句：</p><pre class="crayon-plain-tag">while true
do 
mysql -hxxxxxxxxxx.rds.aliyuncs.com -umyuser -Dtestdb -pmypassword -e"select count(*) from orasup_test1"
echo "========***************==========`date`========*************====="
sleep 0.5
done</pre><p>3. 运行dml语句：</p><pre class="crayon-plain-tag">while true
do 
mysql -hxxxxxxxxxx.rds.aliyuncs.com -myuser -Dtestdb -pmypassword -e"update orasup_test1 set b=now() where a=1"
echo "========***************==========`date`========*************====="
sleep 0.5
done</pre><p>观测在有压力的情况下，mysql进行主备切换，和跨可用区切换，受影响的时间范围。</p>
<p>（二）PostgreSQL<br />
1. 运行压测语句：</p><pre class="crayon-plain-tag">while true
do
RUN_FLAG=`ps -ef |grep pgbench |grep -v grep |wc -l`
if [ ${RUN_FLAG} -lt 1 ]; then
    echo "====== `date` ======The sysbench process is STOP."
    nohup pgbench -c 32 -j 2  -T 6000 -h xxxxxxxxxx.rds.aliyuncs.com -U myuser testdb &amp;
else
    echo "====== `date` ======The sysbench process is RUNNING."
fi
sleep 1
done</pre><p>2. 运行查询语句：</p><pre class="crayon-plain-tag">while true
do 
psql -h xxxxxxxxxx.rds.aliyuncs.com -U myuser -d testdb -c "select count(*) from orasup_test1"
echo "========***************==========`date`========*************====="
sleep 0.5
done</pre><p>3. 运行dml语句：</p><pre class="crayon-plain-tag">while true
do 
psql -h xxxxxxxxxx.rds.aliyuncs.com -U app_rw -d myuser -c "update orasup_test1 set b=now() where a=1"
echo "========***************==========`date`========*************====="
sleep 0.5
done</pre><p>观测在有压力的情况下，pg进行主备切换，和跨可用区切换，受影响的时间范围。</p>
<p>（三）MongoDB<br />
1. 运行压测语句：</p><pre class="crayon-plain-tag">while true
do 
echo "========***************==========`date`========*************====="
/data/mongodb/4.2.0/bin/mongo --host xxxxxxxxxx.rds.aliyuncs.com --port 3717 testdb --username myuser --password 'mypassword' --authenticationDatabase "admin" --quiet --eval  'db.myNewCollection.updateMany({ name: "User_J" }, { $set: { mytime: new Date() } })'
echo "========***************========== BIG TRX ========*************====="
sleep 0.5
done</pre><p>2. 运行查询语句：</p><pre class="crayon-plain-tag">while true
do 
echo "========***************==========`date`========*************====="
dig xxxxxxxxxx.rds.aliyuncs.com |grep "IN A"
/data/mongodb/4.2.0/bin/mongo --host xxxxxxxxxx.rds.aliyuncs.com --port 3717 testdb --username myuser --password 'mypassword' --authenticationDatabase "admin" --quiet --eval  'db.myCollection.find({name:"Bob"})'
sleep 1
done</pre><p>3. 运行dml语句：</p><pre class="crayon-plain-tag">while true
do 
echo "========***************==========`date`========*************====="
dig xxxxxxxxxx.rds.aliyuncs.com |grep "IN A"
/data/mongodb/4.2.0/bin/mongo --host xxxxxxxxxx.rds.aliyuncs.com --port 3717 testdb --username myuser --password 'mypassword' --authenticationDatabase "admin" --quiet --eval  'db.myCollection.updateOne({ name: "Bob" }, { $set: { mytime: new Date() } })'
sleep 1
done</pre><p>观测在有压力的情况下，mongodb进行主备切换，和跨可用区切换，受影响的时间范围。</p>
<p><code><br />
<strong>这里为什么rds pg做主备切换的时候，会断联两次，且中间有可读写的情况。经过向阿里云同学的请教得知：</strong></code><br />
<strong><em>rds pg，首先ha切换分为两种场景，一种是被动HA切换，另一种是主动HA切换：</em></strong></p>
<p><strong><em>对于被动HA切换的场景：</em></strong><br />
1. 当探测到主节点不可用时，把slb后端ip切换为从节点ip<br />
2. 对老主节点进行 demote（demote 会重启实例，保证所有存量连接断开）<br />
3. 对老从节点进行 promote<br />
所以被动HA切换的情况下是一次断连。</p>
<p><strong><em>对于主动HA切换的场景：</em></strong><br />
1. 检查主备复制延迟，由于主动HA切换属于运维动作，需要保证主备0延迟从而避免数据丢失<br />
2. 当检查到主备复制有延迟的情况下，对主节点设置只读并kill session（第一次断连）并等待30s<br />
3. 当主备延迟为0之后把主节点关闭只读并下发HA切换<br />
4. 把slb后端ip切换为从节点ip<br />
5. 对老主节点进行 demote（demote 会重启实例，保证所有存量连接断开，第二次断连）<br />
6. 对老从节点进行 promote<br />
所以主动HA切换且主备有延迟的情况下，会有两次断连，目前是避免数据丢失同时保证切换的成功率，避免有一点延迟的情况下HA始终无法切换导致影响用户的运维动作。</p>
<p>因此，我的测试场景中：<br />
<a href="https://oracleblog.org/wp-content/uploads/2025/01/pgbench_test.png" data-lightbox="gal[4693]"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-4726" src="https://oracleblog.org/wp-content/uploads/2025/01/pgbench_test.png" alt="" width="991" height="139" srcset="https://oracleblog.org/wp-content/uploads/2025/01/pgbench_test.png 991w, https://oracleblog.org/wp-content/uploads/2025/01/pgbench_test-300x42.png 300w, https://oracleblog.org/wp-content/uploads/2025/01/pgbench_test-768x108.png 768w" sizes="(max-width: 991px) 100vw, 991px" /></a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>oracle无感知修改应用用户密码</title>
		<link>https://oracleblog.org/working-case/using-proxy-user-to-change-passwd/</link>
					<comments>https://oracleblog.org/working-case/using-proxy-user-to-change-passwd/#comments</comments>
		
		<dc:creator><![CDATA[Jimmy He]]></dc:creator>
		<pubDate>Mon, 30 Dec 2024 03:51:56 +0000</pubDate>
				<category><![CDATA[..experience]]></category>
		<category><![CDATA[Working case]]></category>
		<category><![CDATA[oracle]]></category>
		<guid isPermaLink="false">https://oracleblog.org/?p=4690</guid>

					<description><![CDATA[几百个微服务的用户，都用了同一个用户user1来连接数据库。如果要修改user1的用户，会导致几百个微服务都要在同一时间内重启，业务不太接受这种方式，业务希望用灰度的方式逐步切换。 因此可以采用代理用户的方式来修改密码。 大致步骤： （1）假如平时用的用户叫user1，创建代理用户 create u [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>几百个微服务的用户，都用了同一个用户user1来连接数据库。如果要修改user1的用户，会导致几百个微服务都要在同一时间内重启，业务不太接受这种方式，业务希望用灰度的方式逐步切换。</p>
<p>因此可以采用代理用户的方式来修改密码。</p>
<p>大致步骤：<br />
（1）假如平时用的用户叫user1，创建代理用户 create user proxy_user1 identified by PASSWORD;<br />
（2）alter user uese1 grant connect throgh proxy_user1<br />
（3）应用【逐个切换】切换到代理代理用户proxy_user1，需要注意的地方，是连接方式修改了。 本来是 conn user1/passwd_of_user1，现在是要 conn proxy_user1[user1]/passwd_of_proxy_user1. 需要应用逐个修改连接方式。用代理用户的密码来登录。<br />
（4）全部应用的连接，切到代理用户之后，修改原来的user1的密码。<br />
（5）修改user1为新密码<br />
（6）应用逐个切回user1</p>
<p>检查当前的连接，是否有使用代理用户（在v$session是看不到代理用户，只能看到被代理的用户，需要配合v$session_connect_info 看）。</p><pre class="crayon-plain-tag">select s.sid, s.serial#, s.username, s.osuser, sci.authentication_type
from   v$session s,
       v$session_connect_info sci
where  s.sid = sci.sid
and    s.serial# = sci.serial#
and    sci.authentication_type = 'PROXY';</pre><p> </p>
<p>不得不说，oracle还是挺强大，在别的数据库好像没这个功能。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://oracleblog.org/working-case/using-proxy-user-to-change-passwd/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
