Skip to content

Commit

Permalink
[Retrieval Docs] Update retrieval docs (#250)
Browse files Browse the repository at this point in the history
* Update retrieval docs

* reformat retrieval docs

* Add EB_AGENT_ACCESS_TOKEN

* reformat

* Update baizhong_search.py

* reformat doc

* Update access token

* reformat

* Update retrieval.md

* fix mypy error

* reformat

* Update format
  • Loading branch information
w5688414 authored Jan 10, 2024
1 parent 568328b commit 2b565a7
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 4 deletions.
37 changes: 35 additions & 2 deletions docs/modules/retrieval.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,45 @@
# Retrieval 模块介绍

## 1. Retrieval 简介

Retrieval组件是在给定非结构化查询的情况下返回文档的接口。Retrieval组件不需要存储文档,只需要返回(或检索)文档,并支持对上游向量数据库数据的增删查改操作。是目前最流行的RAG技术最重要的组件之一。
检索(Retrieval)就是从海量的信息中查找与查询相关的内容。现在检索按照技术分类可以分为关键字检索和语义检索,关键字检索很常见,比如现在的搜索引擎,学术文献搜索大多都基于关键字的全文检索及其一些优化技术;而义检索,是指检索系统不再拘泥于用户查询(Query)字面本身,而是能精准捕捉到用户查询后面的真正意图并以此来搜索,从而更准确地向用户返回最符合的结果。通过使用最先进的语义索引模型找到文本的向量表示,在高维向量空间中对它们进行索引,并度量查询向量与索引文档的相似程度,从而解决了关键词索引带来的缺陷。

例如下面两组文本 Pair,如果基于关键词去计算相似度,两组的相似度是相同的。而从实际语义上看,第一组相似度高于第二组。

```
车头如何放置车牌 前牌照怎么装
车头如何放置车牌 后牌照怎么装
```

retrieval也是Agents应用的一个重要基础组件,提供了一个检索接口,用户可以挂载自己的私有文档,作为工具为agent提供外部知识。retrieval支持自研的文心百中搜索外,还兼容[LangChain](https://python.langchain.com/docs/modules/data_connection/)[LlamaIndex](https://docs.llamaindex.ai/en/stable/getting_started/starter_example.html)的retrieval组件,以及众多检索增强的策略。
Retrieval组件是一种接口,它能够在接收到非结构化查询时返回相关文档。无论是通过关键词检索还是语义检索,该组件都能有效地满足查询需求。值得注意的是,Retrieval组件无需存储文档,其主要功能在于返回或检索文档,并且能够灵活地对上游数据库进行数据的增加、删除、查找和修改操作。因此,它被广泛认为是当前最流行的RAG技术中不可或缺的重要组成部分。

另外,Retrieval组件也是Agents应用的一个重要基础组件,提供了一个检索接口,用户可以挂载自己的私有文档,作为工具为agent提供外部知识。retrieval支持自研的文心百中搜索外,还兼容[LangChain](https://python.langchain.com/docs/modules/data_connection/)[LlamaIndex](https://docs.llamaindex.ai/en/stable/getting_started/starter_example.html)的retrieval组件,以及众多检索增强的策略。

## 2.Retrieval 组件

| retrieval 组件名称 | 功能描述 | 代码链接
| :--: | :--: | :--: |
| BaizhongSearch| 支持百度自研的文心百中搜索| [baizhong_search.py](../package/erniebot_agent/retrieval.md#erniebot_agent.retrieval.BaizhongSearch) |


## 3.用法

1.设置环境变量

```
export EB_AGENT_ACCESS_TOKEN=<aistudio-access-token>
export AISTUDIO_BASE_URL=<aistudio-base-url>
```

2. 连接AIStudio知识库

```
knowledge_base_id =<your aistudio knowledge base id>
baizhong_db = BaizhongSearch(knowledge_base_id=knowledge_base_id)
```

3. 搜索

```
baizhong_db.search('百度今天的股价是多少?')
```
14 changes: 12 additions & 2 deletions erniebot-agent/src/erniebot_agent/retrieval/baizhong_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import requests

from erniebot_agent.utils import config_from_environ as C
from erniebot_agent.utils.exceptions import BaizhongError

_logger = logging.getLogger(__name__)
Expand All @@ -25,7 +26,7 @@ class BaizhongSearch:

def __init__(
self,
access_token: str,
access_token: Optional[str] = None,
knowledge_base_name: Optional[str] = None,
knowledge_base_id: Optional[int] = None,
) -> None:
Expand All @@ -42,7 +43,16 @@ def __init__(
"""
self._base_url = os.getenv("AISTUDIO_BASE_URL", self._AISTUDIO_BASE_URL)
self.access_token = access_token
self.access_token: Optional[str] = None
if access_token is not None:
self.access_token = access_token
elif C.get_global_access_token() is not None:
self.access_token = C.get_global_access_token()
else:
raise BaizhongError(
"Please ensure that either an access_token is provided or "
"the EB_AGENT_ACCESS_TOKEN is set up as an environment variable."
)
if knowledge_base_id is not None:
_logger.info(f"Loading existing project with `knowledge_base_id={knowledge_base_id}`")
self.knowledge_base_id = knowledge_base_id
Expand Down

0 comments on commit 2b565a7

Please sign in to comment.