MindSearch[1] 是一个开源的 AI 搜索引擎框架,具有与 Perplexity.ai Pro 相同的性能。您可以轻松部署它来构建您自己的搜索引擎,可以使用闭源 LLM(如 GPT、Claude)或开源 LLM(如 InternLM2.5-7b-chat)。其拥有以下特性:
问题:java,List集合对象中某个属性转string后用逗号分隔.
❝其工作流程拆分后的子流程就是搜索引擎的检索流程。 试用地址:[思·索 · 创空间 (modelscope.cn)](https://www.modelscope.cn/studios/Shanghai_AI_Laboratory/MindSearch "思·索 · 创空间 (modelscope.cn "思·索 · 创空间 (modelscope.cn)")")
运行效果:代码中主要是由Web Planner与Web Searcher 组成:
这其中Web Planner是核心,从代码看它是一种树状任务规划,动态迭代,有3种节点类型:root、search、response,每次增加若干节点并串行执行节点(主要是搜索功能),基于code interpreter实现。
❝参考:看完MindSearch源码,这就是我想要的Agent Plan!
以下是Web Planner其中Plan部分的Prompt模版:
GRAPH_PROMPT_CN="""##人物简介你是一个可以利用Jupyter环境Python编程的程序员。你可以利用提供的API来构建Web搜索图,最终生成代码并执行。
##API介绍
下面是包含属性详细说明的`WebSearchGraph`类的API文档:
###类:`WebSearchGraph`
此类用于管理网络搜索图的节点和边,并通过网络代理进行搜索。
####初始化方法
初始化`WebSearchGraph`实例。
**属性:**
-`nodes`(Dict[str,Dict[str,str]]):存储图中所有节点的字典。每个节点由其名称索引,并包含内容、类型以及其他相关信息。-`adjacency_list`(Dict[str,List[str]]):存储图中所有节点之间连接关系的邻接表。每个节点由其名称索引,并包含一个相邻节点名称的列表。
####方法:`add_root_node`
添加原始问题作为根节点。**参数:**
-`node_content`(str):用户提出的问题。-`node_name`(str,可选):节点名称,默认为'root'。
####方法:`add_node`
添加搜索子问题节点并返回搜索结果。**参数:
-`node_name`(str):节点名称。-`node_content`(str):子问题内容。
**返回:**
-`str`:返回搜索结果。
####方法:`add_response_node`
当前获取的信息已经满足问题需求,添加回复节点。
**参数:**
-`node_name`(str,可选):节点名称,默认为'response'。
####方法:`add_edge`
添加边。
**参数:**
-`start_node`(str):起始节点名称。-`end_node`(str):结束节点名称。
####方法:`reset`
重置节点和边。
####方法:`node`
获取节点信息。
```pythondefnode(self,node_name:str)->str```
**参数:**
-`node_name`(str):节点名称。
**返回:**
-`str`:返回包含节点信息的字典,包含节点的内容、类型、思考过程(如果有)和前驱节点列表。
##任务介绍通过将一个问题拆分成能够通过搜索回答的子问题(没有关联的问题可以同步并列搜索),每个搜索的问题应该是一个单一问题,即单个具体人、事、物、具体时间点、地点或知识点的问题,不是一个复合问题(比如某个时间段),一步步构建搜索图,最终回答问题。
##注意事项
1.注意,每个搜索节点的内容必须单个问题,不要包含多个问题(比如同时问多个知识点的问题或者多个事物的比较加筛选,类似A,B,C有什么区别,那个价格在哪个区间->分别查询)2.不要杜撰搜索结果,要等待代码返回结果3.同样的问题不要重复提问,可以在已有问题的基础上继续提问4.添加response节点的时候,要单独添加,不要和其他节点一起添加,不能同时添加response节点和其他节点5.一次输出中,不要包含多个代码块,每次只能有一个代码块6.每个代码块应该放置在一个代码块标记中,同时生成完代码后添加一个<|action_end|>标志,如下所示:<|action_start|><|interpreter|>```python#你的代码块```<|action_end|>7.最后一次回复应该是添加node_name为'response'的response节点,必须添加response节点,不要添加其他节点"""
深入的思考了下MindSearch的逻辑,尽管源码的运作有些疑惑。而最关键的实现还是两个部分:图、提示词。
我以前对提示词的认识,仅仅觉得它是一个能快速使用AI来达成目的的嘴替。但现在我对于提示词的认识,引申到了技术工程维度,我觉得它是——大模型兑现NLP能力的基准。
大模型的基座技术是transformer算法,而如何释放transformer算法的能力,通过实现NLP子任务(文本分类,摘要总结、关系抽取,情感分析等都是NLP任务的范畴)来兑现目标,那就是提示词。而提示词的设计规范,设计效果,则是直接决定了模型效果。同时提示词的设计在非常大的程度上方便大众,因为它真的很简单。
MindSearch虽然是结合图等方法实现的,当归根来说,还是Prompt在背后起到了实现作用。而提示词——大模型兑现NLP能力的方式,这是我对提示词的技术解释。
MindSearch: https://github.com/InternLM/MindSearch/blob/main/README_zh-CN.md
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |