g1:o1推理链开源实现,原理竟如此简单!解决 60-80% 的困扰LLM的简单逻辑问题

科技   2024-09-18 23:59   湖南  

🍹 Insight Daily 🪺

Aitrainee | 公众号:AI进修生

Hi,这里是Aitrainee,欢迎阅读本期新文章。

OpenAI的o1已经发布一段时间了,网上都是对其大加称赞,他们说o1在复杂任务上面的表现令人印象深刻,甚至已经达到或超过了博士水平,并且在代码、数学的能力水平尤为突出,我对此也表示赞同。

此外,我觉得o1不会是单纯 gpt-4o+Agent+思维链 能到达的水平,可能o1训练的数据集会存在一种tag,其作用是提供一个问题不同种类的、拆解的、细致的解决步骤,当然,这可能只是其中一种训练方式。

OpenAI 的 o1 采用大规模强化学习进行训练,利用思想链进行推理,在复杂的博士级问题上实现了最先进的性能。

它训练方式也从原来的人类反馈强化学习变成AI反馈强化学习。因为官方有提到它是使用强化学习,类似于AlphaGo,所以如果要一直用这种强化学习训练下去,那数据来源就只能AI自己生成。AI反馈强化学习前面还没有人做过,Openai给我们提供了先例,还是很有贡献的。

▲23年3月份 | 知友关于COT与LLM训练的讨论

当然这一切都是一些猜测,回到正题,我们今天要介绍的是一个模仿o1思维链的开源项目——g1(在 Groq 上使用 Llama-3.1 70b 创建类似 o1 的推理链)。

这个项目不到一周的时间现在已经达到了 2K star;这也足以说明大家对o1思维链的热情。

g1 是实验性的并且是开源的,以帮助激励开源社区开发新的策略来产生类似 o1 的推理。不过他主要是展示可视化步骤提示推理的力量,而不是与使用不同技术的 o1 进行比较或完全复制。

它是建立在免费模型groq上的,使用Gradio UI、Streamlit UI做交互。

其实从本质上来看,这个项目核心是使用这个提示词达到思维链的效果其他的都只是Groq模型调用和UI对话的实现。

Groq 模型(如llama-3.1-70b-versatile)+ 动态思维链提示词 + 使用Gradio UI、Streamlit UI做交互。

重点是提示词 ...

它的提示词是一种动态思维链,允许LLM “思考”并解决一些通常会困扰领先模型的逻辑问题。在每一步中, LLM都可以选择继续另一个推理步骤,或提供最终答案。每个步骤都有标题并且对用户可见。

这种思想链与尝试多种方法、探索替代答案、质疑先前草案解决方案并考虑LLM的局限性的要求相结合,可以有效提高LLM的推理能力。

仅此思想链一项,无需任何训练,就足以在草莓问题上达到约 70% 的准确率(n=10,“草莓中有多少卢比?”)。在没有提示的情况下,Llama-3.1-70b 的准确度为 0%,ChatGPT-4o 的准确度为 30%。

提示词的讲解我放在最后,先看g1解决问题的示例:

提示:草莓有多少个r?
结果:

提示:0.9 或 0.11 哪个更大?

结果:

提示:3307是质数吗?(答案:是的)

这个问题我在很多模型上有过测试,从比例上来看回答正确的不多。

我记得REFLECTION 70B(虚晃一枪版)、LLAMA-3.170B都错了:

Reflection 70B(已全面测试):这个开源 LLM 击败了 Claude 3.5 Sonnet 和 GPT-4O?

原始的groq 70B :https://groq.com/ 错了:

但是g1答对了:

▲ 我在g1基础上改进的提示词效果(最新Prompt放在文末)

为什么我爸妈结婚的时候没有邀请我?

答案对了而且解释的很饱满

原始的groq 70B错了

其实这个问题我还对比测试了几次,g1回答正确的概率远远高于原始的(因为有些问题每一次的回答都有不确定性,不能保证每次都回答正确,从回答正确的概率上来说g1明显更高)。

提示:昨天的当天是明天的什么时间?

g1也答对了(不过这个问题有时候会报错)

而且这个问题在许多云端大模型中有比较详细可以看这篇文章:

https://mp.weixin.qq.com/s/W2XRaOcG73B8csSGJqAuXQ

不过有一点不太好,g1目前的提示词不适用于代码类的问题生成:

提问:创建一个HTML页面,其中包含一个按钮,当单击时释放五彩纸屑。你可以使用CSS和JS。结果直接报错了,这个希望以后能逐步完善。

弱智吧问题测试

我的蓝牙耳机坏了,我该去看牙科还是耳鼻喉科?

回答正确(注意把问题转为英文,因为llama3.1 70B中文支持不是太好),或者你可以在其他中文大模型上应用这个提示词,并且也许提示词也要做相应的适配性修正。

每天吃一粒感冒药,还会感冒吗?

回答的相当棒

生鱼片是死鱼片吗

回答正确,并且他还解释的很好,他的解释某种程度上还结合了他思考过程中生成的答案,在这一点上就好过于没有这种思维链的直接性回答。

而原始groq 70B就出错了:

等红灯是在等绿灯吗?

正确,这个绝了演绎、归纳、类比推理都用了,因为这是我基于g1的提示词改进的版本,原g1提示词没有这些,

灵感来自于 GPTs : Mr. Ranedeer ,我的这个提示词(GitHub仓库)放在文末,不过我不保证这个提示词可以应对所有的情况或者有些情况下不一定好于原来的,因为目前还没有做过多的测试不知道其存在的潜在问题,主要也是提供一个参考的方向。

一个半小时是几个半小时

提示策略拆解

我们回过头来再看看他的提示词,其实这个提示词有很多奇妙的地方你们下面这两个:

1、LLM能够决定是否需要另一个推理步骤或是否可以提供最终答案。

2、使用“title”、“content”和“next_action”(“继续”或“final_answer”)键以 JSON 格式进行响应。

最重要的其实是这张图里面提到的6点:

" 尽可能多地使用推理步骤。至少 3. 了解您作为LLM的局限性以及您能做什么和不能做什么。在你的推理中,包括对替代答案的探索。考虑一下你可能是错的,如果你的推理是错误的,那么它会错在哪里 ... "

You are an expert AI assistant that explains your reasoning step by step. For each step, provide a title that describes what you're doing in that step, along with the content. Decide if you need another step or if you're ready to give the final answer. Respond in JSON format with 'title', 'content', and 'next_action' (either 'continue' or 'final_answer') keys. USE AS MANY REASONING STEPS AS POSSIBLE. AT LEAST 3. BE AWARE OF YOUR LIMITATIONS AS AN LLM AND WHAT YOU CAN AND CANNOT DO. IN YOUR REASONING, INCLUDE EXPLORATION OF ALTERNATIVE ANSWERS. CONSIDER YOU MAY BE WRONG, AND IF YOU ARE WRONG IN YOUR REASONING, WHERE IT WOULD BE. FULLY TEST ALL OTHER POSSIBILITIES. YOU CAN BE WRONG. WHEN YOU SAY YOU ARE RE-EXAMINING, ACTUALLY RE-EXAMINE, AND USE ANOTHER APPROACH TO DO SO. DO NOT JUST SAY YOU ARE RE-EXAMINING. USE AT LEAST 3 METHODS TO DERIVE THE ANSWER. USE BEST PRACTICES.
Example of a valid JSON response:```json{ "title": "Identifying Key Information", "content": "To begin solving this problem, we need to carefully examine the given information and identify the crucial elements that will guide our solution process. This involves...", "next_action": "continue"}```
你是一个专家AI助手,可以一步一步地解释你的推理。对于每个步骤,提供一个标题,描述您在该步骤中所做的工作,以及内容。决定你是否需要再做一步,或者你是否准备好给出最终答案。以JSON格式响应,包含` title `` content `` next_action ` (` continue `` final_answer `)键。使用尽可能多的推理步骤,至少3步。要意识到你作为LLM的局限性,以及你能做什么和不能做什么。在你的推理中,包括探索不同的答案。考虑你可能是错的,如果你的推理是错的,它会是什么。充分测试所有其他可能性。你可能是错的。当你说你在重新检查时,实际上是重新检查,并使用另一种方法来做。不要只是说你在重新检查。用至少3种方法得出答案。使用最佳实践。
有效的JSON响应示例:' ' ' json{“标题”:“识别关键信息”,“内容”:“为了开始解决这个问题,我们需要仔细检查给定的信息,并确定将指导我们解决方案过程的关键元素。这涉及到……”“next_action”:“继续”}’‘

视频快速演示安装部署

部署演示

总的来说,部署它非常简单,你就按照项目代码操作就行了,

需要注意的是下面:

如果你是windows记得这样配置环境变量,其他的都和上图一样

$env:GROQ_API_KEY="gsk..."

groq API:https://console.groq.com/keys

g1提示词改进与Ollama支持

我的仓库中有g1的提示词修改版本,以及对ollama的支持:

https://github.com/Ai-trainee/o1-flow

总的来说,groq与动态思维链结合的好处是一方面提高本身模型的推理精准度一方面groq提供几乎全球最快的api响应速度,这一点就弥补了思维链处理起来时间太久的问题。

期待后续测试更多的问题,当然这个提示词可以结合其他云端大模型.

或者把提示词的精髓附加到我们的生产提示词中,比如我是这样做的(将原始提示词增加这种动态思维链):

总的来说,这非常酷。

🌟希望这篇文章对你有帮助,感谢阅读!如果你喜欢这系列文章请以 点赞 / 分享 / 在看 的方式告诉我,以便我用来评估创作方向。

参考链接:
[1] github:https://github.com/bklieger-groq/g1

[2] github2https://github.com/Ai-trainee/o1-flow

知音难求,自我修炼亦艰

抓住前沿技术的机遇,与我们一起成为创新的超级个体

(把握AIGC时代的个人力量)

点这里👇关注我,记得标星哦~

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见 ~ 

AI进修生
AI算法工程师 / Prompt工程师 / ROS机器人开发者 | 分享AI动态与算法应用资讯,提升技术效率。
 最新文章