AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Prompt兑现大模型NLP能力——从MindSearch来看提示词工程
发布日期:2024-08-13 13:48:30 浏览次数: 1897 来源:阿郎小哥的随笔驿站


概述

MindSearch[1] 是一个开源的 AI 搜索引擎框架,具有与 Perplexity.ai Pro 相同的性能。您可以轻松部署它来构建您自己的搜索引擎,可以使用闭源 LLM(如 GPT、Claude)或开源 LLM(如 InternLM2.5-7b-chat)。其拥有以下特性:

  • ? 任何想知道的问题:MindSearch 通过搜索解决你在生活中遇到的各种问题
  • ? 深度知识探索:MindSearch 通过数百网页的浏览,提供更广泛、深层次的答案
  • ? 透明的解决方案路径:MindSearch 提供了思考路径、搜索关键词等完整的内容,提高回复的可信度和可用性。
  • ? 多种用户界面:为用户提供各种接口,包括 React、Gradio、Streamlit 和本地调试。根据需要选择任意类型。
  • ? 动态图构建过程:MindSearch 将用户查询分解为图中的子问题节点,并根据 WebSearcher 的搜索结果逐步扩展图。

运行效果

问题:java,List集合对象中某个属性转string后用逗号分隔.

其工作流程拆分后的子流程就是搜索引擎的检索流程。 试用地址:[思·索 · 创空间 (modelscope.cn)](https://www.modelscope.cn/studios/Shanghai_AI_Laboratory/MindSearch "思·索 · 创空间 (modelscope.cn "思·索 · 创空间 (modelscope.cn)")")

运行效果:代码中主要是由Web Planner与Web Searcher 组成:

  • 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`
获取节点信息。
```pythondef node(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能力的方式,这是我对提示词的技术解释。

Reference
[1]

MindSearch: https://github.com/InternLM/MindSearch/blob/main/README_zh-CN.md



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询