大模型的思考方式有时候并不尽人意。我们可以在提示词中引导大模型如何拆分任务,按部就班地思考。
一、思维链
思维链是引导模型一步一步地思考,分为Zero-Shot CoT和Few-Shot CoT。Zero-Shot CoT就是著名的Let’s think step by step。Few-Shot CoT是对提示模版中的示例进行拆解,逐步思考。
思维链的开山之作发在NIPS上
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
论文中给了几个示例,其实就像是写题解的风格一样。
这是我在给文献检索助手写的提示词
from langchain.prompts import PromptTemplate
from langchain_ollama.llms import OllamaLLM
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
import pandas as pd
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate
from langchain_ollama import ChatOllama
from langchain_core.messages import AIMessage# 设定 AI 的角色和目标
role_template = "你是一位专业的导师。你的目标是通过阅读某个领域的重要和前沿文献,帮助你的学生更好地理解这个领域的研究现状、有潜力的研究方向和就业前景。"# CoT 的关键部分,AI 解释推理过程,并加入一些先前的对话示例(Few-Shot Learning)
cot_template = """
作为一个负责任的专业的导师,我的目标是帮助我的学生了解这个领域的研究现状、有潜力的研究方向和就业前景。 我会按部就班的思考,先理解学生想了解的领域,然后考虑该领域在著名期刊会议上的论文和综述,最后根据文献调研情况,给出我的文献综述。示例 1:人类:我想了解张量分解。AI:首先,我理解你对张量分解领域感兴趣。在这个领域,最近的研究主要集中在如何寻找更优的张量分解形式,例如张量环分解、张量网络分解等。这些方法在处理高维数据和复杂关系时表现出色。我会查阅最新的顶级期刊和会议论文,如Nature,TPAMI,TIP,NIPS等,为你提供一份关于张量分解研究现状的综述,并且给你推荐文章。在此基础上。我会分析张量分解未来富有研究前景的、适合发论文的几个方向。最后,我会分析现在公司对于张量分解的应用需求,综合分享张量分解的就业情况和大致薪资。示例 2:人类:我想了解异常检测。AI:首先,我理解你的对异常检测领域感兴趣。在这个领域,最近的研究主要集中在如何在大数据和大模型时代,寻找更优的异常检测算法,例如脑电信号的异常检测、无线感知的异常检测、有监督的异常检测、基于大模型的异常检测等。这些方法利用了现如今可以收集到以前无法大规模采集的数据、以及模型在其它异常检测领域数据上学到的知识,使得异常检测算法可以应用在新数据领域、小样本数据上。我会查阅最新的顶级期刊和会议论文,如Nature,TPAMI,TIP,CVPR等,给你推荐文章。为你提供一份关于异常检测研究现状的综述。在此基础上。我会分析异常检测未来富有研究前景的、适合发论文的几个方向。最后,我会分析现在公司对于异常检测的应用需求,综合分享异常检测的就业情况和大致薪资。
"""## 模型
model = ChatOllama(model='qwen2.5:3b',temperature=0)# 用户的询问
human_message = "我想了解大模型轻量化部署。"messages = [("system",role_template+cot_template,),("human", human_message),
]res = model.invoke(messages)
print(res.content)
二、思维树
思维树发表在2023的NIPS上
Tree of Thoughts: Deliberate Problem Solving with Large Language Models
代码地址
在这里
查看它的提示词设计,以扑克牌算24点为例
可以看到,它基本上是结合了COT和判断者
简单的实现。效果并不好,许多导师的回答是一模一样的。原因是把多种角色都放在一个prompt里了。效果更好的做法应该是把每个阶段性的输出都打个分,然后再筛选,再投进大模型。
from langchain.prompts import PromptTemplate
from langchain_ollama.llms import OllamaLLM
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
import pandas as pd
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate
from langchain_ollama import ChatOllama
from langchain_core.messages import AIMessage# 设定 AI 的角色和目标
role_template = "你是一组专业的导师团队。你的目标是通过阅读某个领域的重要和前沿文献,帮助你的学生更好地理解这个领域的研究现状、有潜力的研究方向和就业前景。"# CoT 的关键部分,AI 解释推理过程,并加入一些先前的对话示例(Few-Shot Learning)
tot_template = """
假设有五个不同的导师来分析这个科研领域。
所有的导师都会写下他们认为的这个领域的重要文献和前沿文献,包括他们对应的著作单位、发表刊物和时间。
然后,有五位审稿人对这些文献进行评价,包括对这些文献的重要性、创新性、实用性和可读性的评价。受到超过三位审稿人反对的导师,将停止作答。
然后,剩下的导师将对审稿人给予高度评价的文献进行分析,综合论述该领域的研究现状。
然后,五位审稿人对导师的综合论述进行评价,包括对导师的论述的逻辑性、全面性、深度和清晰度的评价。受到超过三位审稿人反对的导师,将停止作答。
然后,剩下的导师将结合当下的热点,提出这个领域有潜力的研究方向。
然后,五位审稿人将对导师提出的研究方向进行评价,包括对研究方向的创新性、实用性、可行性和前瞻性的评价。受到超过三位审稿人反对的导师,将停止作答。
然后,五位公司招聘者将对在导师提出的这几个研究方向做出卓越成就的博士生进行评估,给出自己对各个研究方向博士的预期薪资待遇。
想了解的领域如下:
"""## 模型
model = ChatOllama(model='qwen2.5:3b',temperature=0)# 用户的询问
human_message = "我想了解张量分解。"messages = [("system",role_template+tot_template,),("human", human_message),
]res = model.invoke(messages)
print(res.content)
思维网
待更ing