大数跨境
0
0

教程|如何引导AI为你完成复杂问题的编程

教程|如何引导AI为你完成复杂问题的编程 Dr.X的基因空间
2025-09-03
2
导读:巧妙提问,利用AI的上下文对齐和链式思考完成复杂问题的编程

如何让AI更好地为你编程:学会拆解

写在前面的
前段时间和做湿实验的朋友交流关于AI是否能够帮助他们提升数据分析能力的话题。从他们的反馈中我得知,尽管AI现在的确可以根据他们的指令产生一大堆代码,但是很多时候AI反馈的代码似乎不能精准解决他们提出的问题。或者说,他们觉得AI在准确理解他们提出的问题中存在某些障碍。综合讨论结果,我觉得出现这种问题的根源可能在于提问者本身没有拆解好问题。

关于如何提出有效问题:理论部分

在提问中学习的AI

       在提问中学习这个描述似乎不太准确。对于大模型而言,真正意义的学习是更新模型内部的核心参数,即训练模型。目前的AI暂时无法做到像人类一样可以即时学习,也就是像人类一样在单次对话中更新已有知识并完成记忆保存。但是为何又说AI可以在提问中学习呢,其实这个“学习”不是指更新AI的模型参数,而是基于用户提出的问题根据上下文信息调整推理方式进而改善回答内容。所以根据上下文信息调整推理方式便是AI在提问中学习的精确解释。
       理想情况下,用户希望给AI一个问题,它能反馈最好的答案,例如问它一个数据怎么分析,它能反馈给你最好的代码,然后你复制粘贴到计算机。代码完美运行,快速得到准确结果。这种理想情况不是不能达到,而是在有条件的情况下可以实现。这个条件就是向AI提出它能理解的问题。划重点:提出AI能理解的问题,不是你自己理解的问题。如果一次给AI提出的问题过长,AI很难抓住你的长问题中的重点,因为目前的AI大模型以Transformer为主,这类模型的亮点是有注意力机制,传统的语言模型无法很好地快速解析长难句,往往其解析时间随着句子的长度成指数倍增加。在Transformer模型中提出的注意力机制可以让模型很好的建立语句内词语和词语的关系,也是因为注意力机制才使得目前的AI能做到像人一样和你实时长篇大论聊天。但是注意力机制只是降低了AI处理长难句的复杂度,并没有彻底解决长难句中重点词组的抓取。这也是目前注意力机制算法的局限性:可以捕捉长难句重点但是有限制。因此,在长难句解析中,词数越多,注意力矩阵维度越大、词组之间权重容易稀释,导致模型越难聚焦关键成份。下面简单做了一个图用于量化AI在处理不同长短词数的语句下注意分热图。因此,很多提问者可能一次问给AI太长的句子,但是AI只抓住了一部分内容,剩下仍然具有信息量的部分被忽视。从而难以给出理想回复。反过来,如果用户问的问题过于简单,AI也无法用户真实面对的问题。导致无法接收有效信息。从而根据问题开展合理回答。

如何提出有效问题:实操部分

结合上下文推理学会拆分你的问题

       前面在理论部分提到了长问题=高复杂度,所以学会将一个问题分步提问,也就是拆解问题,学会逐步增加条件,降低每一步推理的复杂度,并利用大模型的上下文对齐能力,让AI发挥链式思考模式的优势:先问把自己的复杂问题去掉各种复杂条件,只保留最简单的主干,然后提问AI,将AI给出的代码复制到自己的计算机上运行,运行成功后继续问同样的问题,但是在第二次问出的问题中增加一个条件,得到第二个回复,然后继续叠加条件提问。这样做的优势是,最先问出的简单问题对于AI而言具有最低的认知负荷(Cognitive load),如果AI对这个问题的回答不完美,用户只需要用最简单的语句指出AI在哪里犯错了,使得AI可以用最小的代价去迭代自己的推理过程,直到它回答的问题满意后,用户给予肯定答复。此时AI通过推理过程确定了一条可行的路线。紧接着在用户追问出增加了附加条件的问题中,由于AI的注意力机制+上下文对齐能力,AI能快速从第二个稍复杂的问题中锁定出这里面有一部分问题是刚才回答过的,它只需要沿用刚才的推理方向针对新增加的限定条件进行定向迭代。以此以最快的方式给出第二个更好的答复。在不断对问题附加条件后,AI继续以一个合理的推理方向,结合上下文对齐的方式开展了一系列链式思考,最后给出接近完美的答案。分步提问的优势在于最大程度降低了歧义,增强了可控性。

以实际问题进行实操

       恰好我近期有一个待处理的简单数据,我扫描了多个样本的全基因组不同区域的甲基化水平和结合蛋白与DNA结合能力的数据。每个样本产生了两个文件,第一个文件是全基因组蛋白结合DNA能力的扫描文件,文件中第一列是全基因组区间信息,第5列是标准化后的蛋白结合能力值,第二个文件是全基因组甲基化水平扫描文件,文件中第一列是全基因组区间信息,第9列是甲基化水平。我想把每个样本的大于等于高结合力与低于等于低结合力的区间的结合力数值信息追加到甲基化扫描文件的结果中并产生一个新文件,这个文件的前9列是甲基化扫描的全部信息,第十列是蛋白结合力信息,并且对于不满足条件的行不输出。由于两个文件用不同的算法扫描,同一样本的两个文件行数不一样,为了确保一一对应,我开始向AI提问。首先我采取了简化提问的方法,我将我的复杂需求最开始简单化为AI可以理解的问题

       运行第一个程序发现没有bug后,我开始增加我提问的限定条件。因为我的文件本身具有不一样的行数,所以我开始增加行数的限定条件

       第二个程序运行OK后,我继续增加限定条件,因为我想只筛选出高于我设定的蛋白高结合力或者低于我设定的蛋白低结合力的区间

       第三个程序运行OK后,我继续增加条件,因为我想把第一个文件的一列信息追加至第二个文件中。

       最后在AI的回答下,结合我的实际样本名和数据情况,我最终完善了整个代码

cat sample-list.txt | while read id tp bm;doawk -v OFS='\t' -v top=${tp} -v bottom=${bm} 'NR==FNR {if ($1 != "" && ($5 > top || $5 < bottom)) a[$1]=$5; next} $1 in a {print $0, a[$1]}' ${id}.scan.prot.txt ${id}.scan.methy.txt > ${id}.filter.prot.methy.txt;done

【声明】内容源于网络
0
0
Dr.X的基因空间
【中国科学院博士】10年生命科学数据挖掘研究经验,关注生物医药领域体外诊断(IVD)方向,如肿瘤早筛、传染病未知病原快速检测中的技术创新及其与人工智能(AI)的赋能应用
内容 176
粉丝 0
Dr.X的基因空间 【中国科学院博士】10年生命科学数据挖掘研究经验,关注生物医药领域体外诊断(IVD)方向,如肿瘤早筛、传染病未知病原快速检测中的技术创新及其与人工智能(AI)的赋能应用
总阅读0
粉丝0
内容176