Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add files via upload #551

Merged
merged 2 commits into from
Jul 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# 「Yi x LlamaIndex」基于LlamaIndex和Yi-large构建融合网络与本地知识的智能问答系统

## 1. 引言

在人工智能迅猛发展的今天,大语言模型(LLM)已成为众多应用的核心。然而,LLM 也面临诸如信息可能过时、缺乏专业领域深度知识等挑战。为应对这些问题,检索增强生成(Retrieval-Augmented Generation, RAG)技术应运而生。

RAG 通过在生成答案前从知识库中检索相关信息,并利用这些信息指导生成过程,显著提升了内容的准确性和相关性。本文将详细介绍如何利用 LlamaIndex 和 Yi-large 模型构建一个融合网络文档和本地知识库的智能问答系统。

## 2. 核心技术栈

### 2.1 Yi-large 模型

Yi-large 是由 01.AI 开发的先进大型语言模型,具备强大的自然语言理解和生成能力。它能处理各种复杂的语言任务,为我们的 RAG 系统提供可靠的基础。

### 2.2 LlamaIndex 框架

LlamaIndex 是一个专为 LLM 应用设计的强大数据框架。它提供了丰富的工具和抽象,极大简化了 RAG 系统的构建过程。LlamaIndex 支持多种数据源接入、高效索引构建和查询优化,是实现我们目标的理想选择。

### 2.3 BGE Embedding

BGE (BAAI General Embedding) 是由智源研究院(BAAI)开发的通用文本嵌入模型。在本项目中,我们采用 BGE-base-en-v1.5 作为嵌入模型,它能将文本转换为高质量的向量表示,为后续的相似度检索奠定坚实基础。

## 3. 环境配置与依赖安装

首先,我们需要安装必要的依赖库。打开终端,执行以下命令:

```shell
pip install llama-index
pip install llama-index-llms-yi
pip install llama-index-core llama-index-readers-file llama-index-embeddings-huggingface
```

## 4. 系统实现步骤

让我们按照以下步骤来实现这个智能问答系统:

### 4.1 导入必要模块

```python
from llama_index.llms.yi import Yi
from llama_index.readers.web import SimpleWebPageReader
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
```

### 4.2 配置 Yi-large 模型和 BGE 嵌入

```python
llm = Yi(model="yi-large", api_key="your_api_key")
Settings.llm = llm
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-base-en-v1.5"
)
```

注意:需要从 [01.AI 平台](https://platform.lingyiwanwu.com/) 获取 API 密钥。

### 4.3 加载网络文档和本地知识库

```python
documents_web = SimpleWebPageReader(html_to_text=True).load_data(
["https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/"]
)
documents_loc = SimpleDirectoryReader("data").load_data()
documents = documents_web + documents_loc
```

### 4.4 构建索引和查询引擎

```python
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
```

### 4.5 实现交互式问答循环

```python
while True:
user_input = input("User>> ")
response = query_engine.query(user_input)
print('Yi-large>>', response)
```

### 4.6 我们来测试一下

```shell
uesr>>Can llama-index query data in SQL and CSV?
```
```shell

Yi-large>> Yes, llama-index can query data in SQL and CSV formats.
It supports text-to-SQL operations for querying SQL databases and
text-to-Pandas operations for working with CSV files. This allows
users to interact with structured data sources using natural language
queries, making it easier to extract information from these types of data.
```
```shell
uesr>>I want to use the Yi-large model in python, what code do I need?
```
```shell
Yi-large>> To use the Yi-large model in Python, you can use the following code as a guide. This code snippet demonstrates how to set up the OpenAI SDK to work with the Yi-large model:

```python
import openai
from openai import OpenAI

API_BASE = "https://api.01.ai/v1"
API_KEY = "your key"

client = OpenAI(
api_key=API_KEY,
base_url=API_BASE
)

completion = client.chat.completions.create(
model="yi-large",
messages=[{"role": "user", "content": "Hi, who are you?"}]
)

print(completion)
Make sure to replace `"your key"` with your actual api key. This code will send a request to the Yi-large model with the message "Hi, who are you?" and print the response.

```

## 5. 系统特点与优势

1. **知识融合**:通过同时接入网络文档和本地知识库,系统可利用更广泛、更新的信息源。
2. **高效检索**:利用 LlamaIndex框架优势和BGE 嵌入模型和向量索引,实现快速、精准的相关信息定位。
3. **强大生成能力**:Yi-large 模型确保了高质量的自然语言理解和生成。
4. **灵活扩展性**:基于 LlamaIndex 框架,系统易于扩展和定制,可根据需求添加更多功能。
5. **实时更新**:通过网络文档的动态加载,系统可以获取最新信息,保持知识的时效性。

## 6. 应用场景

- **客户服务**:快速回答客户询问,提供准确、最新的产品信息。
- **教育辅助**:结合教材内容和网络资源,为学生提供全面的学习支持。
- **研究助手**:整合学术文献和最新研究进展,辅助研究人员进行文献综述。
- **技术支持**:融合产品文档和在线论坛信息,为用户提供全面的技术解答。


## 7. 结语

通过结合 LlamaIndex、Yi-large 和 BGE 嵌入,我们构建了一个强大的 RAG 系统,能够无缝融合网络和本地知识,为用户提供准确、相关的回答。这种方法不仅显著提高了回答质量,还大大增强了系统的适应性和可扩展性。

在实际应用中,开发者可以根据具体需求调整知识源、优化检索策略,甚至集成更多外部工具,打造更加智能和专业的问答助手。随着技术的不断进步,我们相信这样的系统将在各个领域发挥越来越重要的作用,为人类的知识获取和决策提供有力支持。

Loading
Loading