1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/NanGePlus-RagLangChainTest

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 24 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 08:52 ab4c27f

0. Связанные видео

(1) [Основы разработки приложений с использованием больших моделей] Интеграция среды разработки Anaconda + PyCharm https://www.bilibili.com/video/BV1q9HxeEEtT/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/myVgyitFzrA

(2) [Практический процесс] RAG + LangChain + FastAPI + OpenAI + Qwen создание частной базы знаний, полный процесс создания и поиска, разделяем исходный код, один код для интеграции нескольких типов больших моделей https://www.bilibili.com/video/BV1ryHxesEHs/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/xAEi5CWEIl0

(3) [Анализ исходного кода] RAG + LangChain + FastAPI + OpenAI + Qwen создание частной базы знаний, полный процесс создания и поиска, разделяем исходный код, один код для интеграции нескольких типов больших моделей https://www.bilibili.com/video/BV1JUHxeQEc7/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/ptrCo8b-wM0

(4) [Улучшенный поиск с использованием Re-ranker] RAG + LangChain + FastAPI + OpenAI + Qwen создание частной базы знаний, полный процесс создания и поиска, разделяем исходный код https://www.bilibili.com/video/BV19tsteREYx/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/M_e-XT3x5OA

(5) [Улучшенное предварительное обработки PDF-таблиц] RAG + LangChain + FastAPI + OpenAI + Qwen создание частной базы знаний, полный процесс создания и поиска, разделяем исходный код https://www.bilibili.com/video/BV1c7sueSEZe/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/Nhal2EswD9o(6) [Улучшенная загрузка истории диалогов (1)] RAG + LangChain + FastAPI + OpenAI + Qwen создание частной базы знаний, полный процесс создания и поиска, разделяем исходный код https://www.bilibili.com/video/BV1GdnfeAEEe/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/wWx986JVXpI(7) [Улучшенная загрузка истории диалогов (2) - интеграция в исходный проект] RAG + LangChain + FastAPI + OpenAI + Qwen создание частной базы знаний, полный процесс создания и поиска, разделяем исходный код https://www.bilibili.com/video/BV1bQHPegE3o/?vd_source=30acb5331e4f5739ebbad50f7cc6b949https://youtu.be/PPpfONOj5jI# 1. Основные концепции

1.1 Определение RAG и архитектура технического решения

(1) Определение RAG

RAG: Retrieval Augmented Generation (Инкрементное генерирование с использованием поиска): метод, который улучшает способности генерирующей модели с помощью поиска. Основная идея: человек ищет знания, изучает информацию; LLM ищет знания, используя поиск векторных баз данных. Основные цели: устранение врожденных ограничений LLM, знания LLM не являются актуальными, LLM может не знать специфических знаний в частном секторе. Аналогия сценария: процесс RAG можно представить как экзамен с открытыми книгами. LLM сначала просматривает информацию, а затем отвечает на вопросы.

(2) Архитектура технического решения

Оффлайн этапы: загрузка документов -> разделение документов -> векторизация -> загрузка векторов в базу данных. Онлайн этапы: получение вопроса пользователя -> векторизация вопроса пользователя -> поиск в базе данных векторов -> заполнение результата поиска и вопроса пользователя в шаблон prompt -> вызов LLM с помощью окончательного prompt -> генерация ответа LLM.

(3) Несколько ключевых концепций:Значение векторной базы данных заключается в быстром поиске. Векторная база данных сама по себе не генерирует векторы; векторы создаются с помощью модели Embedding. Векторная база данных дополняет традиционные реляционные базы данных, а не заменяет их. В реальных приложениях они часто используются одновременно в зависимости от потребностей.## 1.2 LangChain

(1) Определение LangChain

LangChain — это фреймворк для разработки приложений, управляемых большими языковыми моделями (LLM), официальный сайт: https://python.langchain.com/v0.2/docs/introduction/

(2) Определение LCEL

LCEL (LangChain Expression Language), ранее называвшийся chain, это декларативный язык, который легко объединяет различные последовательности вызовов в цепочки.
Основные характеристики включают поддержку потоков, асинхронность, оптимизированное параллельное выполнение, повторные попытки и откаты, доступ к промежуточным результатам, режимы ввода и вывода, интеграцию без швов с LangSmith для отслеживания, интеграцию без швов с LangServe для развертывания.

(3) LangSmith

LangSmith — это платформа для создания производственных приложений на основе LLM. С его помощью вы можете тщательно контролировать и оценивать свои приложения, официальный сайт: https://docs.smith.langchain.com/## 1. 3 Chroma Векторная база данных, специально разработанная для векторного поиска.

2. Предварительная подготовка

2. 1 Установка Anaconda и PyCharm

Anaconda: предоставляет Python-виртуальные среды, с официального сайта можно скачать установочный пакет для соответствующей операционной системы. PyCharm: предоставляет интегрированную среду разработки, с официального сайта можно скачать установочный пакет для коммьюнити-версии. Для установки можно воспользоваться следующим видео: [Основы применения больших моделей] Установка Anaconda + PyCharm https://www.bilibili.com/video/BV1q9HxeEEtT/?vd_source=30acb5331e4f5739ebbad50f7cc6b949

2. 2 Установка, развертывание, создание каналов и токенов OneAPI

(1) Что такое OneAPI

Официальное описание: это система управления и распространения API OpenAI Поддерживает Azure, Anthropic Claude, Google PaLM 2 & Gemini, ChatGLM, Baidu Wenxin Yiyan, Xunfei Xinghuo Cognitive, Alibaba Qianwen, 360 Zhitou, Tencent Huan Yuan

(2) Установка и развертывание

Используйте официально предоставляемый пакет для установки и развертывания, подробности см. в следующей ссылке для ручного развертывания: https://github.com/songquanpeng/one-api Скачайте исполняемый файл OneAPI one-api и загрузите его на сервер, затем выполните следующую команду для запуска в фоновом режиме:

nohup ./one-api --port 3000 --log-dir ./logs > output.log 2>&1 &

После успешного запуска, откройте следующий URL в браузере для доступа к странице one-api, по умолчанию имя пользователя и пароль: root 123456

http://IP:3000/

(3) Создание каналов и токеновСоздание канала: тип крупной модели (Qwen), APIKey (действительный APIKey для Qwen)

Создание токена: создание APIKey для OneAPI, который будет использоваться в последующем коде## 2.3 Схема использования OpenAI В Китае прямой доступ невозможен, можно использовать прокси-сервер, выберите конкретную схему прокси-сервера самостоятельно. Можно посмотреть это видео: 【GraphRAG версия 0.3.0 сравнение и практическое тестирование】используя gpt-4o-mini и qwen-plus для создания индекса текстовых знаний около 20 000 слов + локальное/глобальное поисковое сравнение https://www.bilibili.com/video/BV1maHxeYEB1/?vd_source=30acb5331e4f5739ebbad50f7cc6b949 https://youtu.be/iXfsJrXCEwA

2.4 Настройка LangSmith

Просто запросите APIKey на странице настроек на сайте LangSmith (вы можете использовать его или нет). https://smith.langchain.com/o/93f0b841-d320-5df9-a9a0-25be027a4c09/settings

3. Инициализация проекта

3.1 Скачивание исходного кода

Скачайте файлы проекта с GitHub на локальную машину, ссылка на скачивание: https://github.com/NanGePlus/RagLangchainTest https://gitee.com/NanGePlus/RagLangchainTest

3.2 Сборка проекта

Используйте PyCharm для создания проекта и настройки виртуальной среды Python. Название проекта: RagLangchainTest.

3.3 Копирование связанного кода в проект

Просто скопируйте файлы из загруженной папки в новый проект.

3.4 Установка зависимостей проекта

pip install -r requirements.txt

Для каждого пакета указано фиксированное версионное число, используемое в этом видео-тесте.# 4. Проектный тест

4.1 Подготовка тестовых документов

В качестве примера используются PDF-файлы. В папке input подготовлены два файла:

  • Здоровье.pdf: для тестирования обработки китайских PDF-документов
  • llama2.pdf: для тестирования обработки английских PDF-документов

4.2 Текстовая предварительная обработка перед загрузкой в базу данных

В папке tools предоставлены скрипты pdfSplitTest_Ch.py для обработки китайских документов и pdfSplitTest_En.py для обработки английских документов. Скрипт vectorSaveTest.py выполняет вызов инструментов из папки tools для предварительной обработки текста, вычисления векторов и загрузки в базу данных. Перед запуском скрипта с помощью команды python vectorSaveTest.py необходимо настроить следующие параметры в зависимости от ваших потребностей: Настройка 1: Выбор модели для использования: API_TYPE = "oneapi" # openai: вызов модели gpt; oneapi: вызов модели, поддерживаемой oneapi (например, Qwen) Настройка 2: Настройка параметров модели openai: OPENAI_API_BASE = "укажите URL для вызова API" OPENAI_EMBEDDING_API_KEY = "укажите API ключ для модели Embedding" OPENAI_EMBEDDING_MODEL = "text-embedding-3-small" Настройка 3: Настройка параметров модели oneapi (например, Qwen): ONEAPI_API_BASE = "укажите URL для вызова oneapi" ONEAPI_EMBEDDING_API_KEY = "укажите API ключ для модели Embedding" ONEAPI_EMBEDDING_MODEL = "text-embedding-v1" Настройка 4: Выбор языка текста: TEXT_LANGUAGE = 'Chinese' # Chinese или English Настройка 5: Укажите путь к PDF файлу: INPUT_PDF = "input/健康档案.pdf"Настройка 6: Укажите диапазон страниц для обработки, если все страницы, то None: PAGE_NUMBERS=None PAGE_NUMBERS=[2, 3] # Укажите номера страниц Настройка 7: Настройка параметров базы данных ChromaDB: CHROMADB_DIRECTORY = "chromaDB" # Путь к хранению базы данных ChromaDB CHROMADB_COLLECTION_NAME = "demo001" # Имя коллекции базы данных ChromaDB для поиска

4. 3 Тестирование текстового поиска

(1) Запуск основного скрипта main

Перед запуском скрипта с помощью команды python main.py необходимо скорректировать следующие параметры в коде в соответствии с вашими условиями: Изменение 1: Установка переменных окружения langsmith:

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "здесь введите полученный API_KEY"

Изменение 2: Установка параметров для доступа к векторному базе данных ChromaDB:

CHROMADB_DIRECTORY = "chromaDB"  # Путь к постоянному хранению базы данных ChromaDB
CHROMADB_COLLECTION_NAME = "demo001"  # Имя коллекции ChromaDB для поиска

Изменение 3: Установка параметров шаблонов запросов:

PROMPT_TEMPLATE_TXT = "prompt_template.txt"  # Путь к файлу шаблона

Изменение 4: Установка флагов для выбора модели:

API_TYPE = "oneapi"  # openai: вызов модели gpt; oneapi: вызов модели, поддерживаемой oneapi (например, Qwen)

Изменение 5: Настройка параметров для модели openai в соответствии с вашими условиями:

OPENAI_API_BASE = "здесь введите URL для вызова API"
OPENAI_CHAT_API_KEY = "здесь введите API_KEY для модели LLM"
OPENAI_CHAT_MODEL = "gpt-4o-mini"
OPENAI_EMBEDDING_API_KEY = "здесь введите API_KEY для модели Embedding"
``````markdown
OPENAI_EMBEDDING_MODEL = "text-embedding-3-small"

Изменение 6: Настройка параметров для модели oneapi (например, Qwen) в соответствии с вашими условиями:

ONEAPI_API_BASE = "здесь введите URL для вызова API"
ONEAPI_CHAT_API_KEY = "здесь введите API_KEY для модели LLM"
ONEAPI_CHAT_MODEL = "qwen-plus"
ONEAPI_EMBEDDING_API_KEY = "здесь введите API_KEY для модели Embedding"
ONEAPI_EMBEDDING_MODEL = "text-embedding-v1"

Изменение 7: Настройка параметров для API-сервиса в соответствии с вашими условиями:

PORT = 8012  # Порт для доступа к сервису

Внимание: При тестировании вызова API oneapi могут возникнуть ошибки вида:

openai.BadRequestError: Error code: bk_0001 - {'error': {'message': 'input should not be none.  : payload. input. contents (request id: 2024082015351785023974771558878)', 'type': 'upstream_error', 'param': '400', 'code': 'bad_response_status_code'}}

После анализа выяснилось, что проблема связана с пакетом langchain_openai/embeddings, в частности с файлом base. В исходном коде файла /opt/anaconda3/envs/RagLangchainTest/lib/python3.11/site-packages/langchain_openai/embeddings/base.py по умолчанию переменная check_embedding_ctx_length имеет значение True. Необходимо изменить её значение на False.

check_embedding_ctx_length: bool = False
```### 2. Запуск скрипта apiTest для тестирования поиска
Перед запуском команды `python apiTest.py` для запуска скрипта необходимо скорректировать следующие параметры в коде в соответствии с вашими условиями. После успешного запуска можно будет проверить отслеживание Smith.
**Изменение 1: значение флага для непотокового вывода True или False**
```python
stream_flag = False
```
**Изменение 2: проверьте, совпадают ли IP и PORT в URL с теми, что указаны в основном скрипте**
```python
url = "http://localhost:8012/v1/chat/completions"
```

## 4.4 Тестирование поиска текста (продвинутое 1 re-ranker)
Re-ranker  это технология, используемая в системах поиска информации, которая направлена на дальнейшую сортировку первоначально найденных результатов для повышения релевантности и точности.
Во время информационного поиска система сначала выбирает из большого количества документов или данных набор кандидатов на основе запроса.
Затем модель re-ranker анализирует и сортирует эти кандидаты для обеспечения того, чтобы наиболее релевантные результаты были в верхней части списка.### (1) Запуск скрипта mainReranker после изменения конфигурации
Сначала скачайте папку с моделью по этому адресу, после завершения загрузки скопируйте папку model в папку other проекта.
Ссылка: https://pan.baidu.com/s/12oUh-vOVgSqH1fcmhy33wA?pwd=1234 Код: 1234
Получите последнюю версию кода проекта или скачайте отдельно скрипт mainReranker.py и поместите его в проект.
Перед запуском скрипта командой python mainReranker.py необходимо скорректировать следующие параметры в соответствии с вашими условиями:
**Изменение 1: установка зависимостей:**
```pip install sentence-transformers==3.0.1```
**Изменение 2: настройка модели re-ranker в соответствии с вашими условиями:**
```RERANK_MODEL = 'other/models/bge-reranker-large'```
**Изменение 3: другие изменения параметров, см. конфигурацию в разделе 4.3**### (2) Запуск скрипта apiTest для тестирования поиска
```python
python apiTest.py
```
После успешного запуска можно будет проверить отслеживание smith.
Изменения параметров, см. конфигурацию в разделе 4.3.

## 4.5 Тестирование текстового поиска (продвинутое 2: решения для обработки PDF-таблиц)

Сначала загрузите необходимые файлы модели и тестовый PDF-файл по данной ссылке.
После завершения загрузки скопируйте папку с моделью в папку other/models проекта, а два PDF-файла  в папку input.
Ссылка: https://pan.baidu.com/s/1QjBa51iWbj2BgPJXSU5--A?pwd=1234 Код: 1234

### (1) Первый подход к решению
Процесс: PDF-файл преобразуется в изображение -> изображение анализируется для выделения таблиц -> выделенные таблицы сохраняются в виде изображений -> вызов визуального LLM для создания краткого описания
Тестирование: запустите pdfTableSplitTest01.py в папке tools, используя тестовое изображение из папки input  "Здоровье (с таблицей 01).pdf".### (2) Второй подход к решению
Процесс: извлечение текста из PDF -> обнаружение и извлечение таблиц из PDF -> использование крупной модели для преобразования таблиц в естественный язык -> объединение текста и описания таблиц
Тестирование: запустите скрипт `pdfTableSplitTest02.py` в папке `tools`, используя тестовое изображение из папки `input`  "Здоровье (с таблицей 02).pdf".## 4.6 Тестирование текстового поиска (продвинутое 3 с добавлением исторических диалогов)
### (1) Сначала выполните небольшой тест для проверки
Используйте методы, предоставляемые в рамках фреймворка LangChain, для выполнения теста
Запустите скрипт `memoryTest.py` в папке `test`
### (2) Интеграция в проект
Процесс: запустите скрипт `vectorSaveTest.py` для заполнения базы данных -> запустите скрипт `mainMemry.py` для запуска службы -> запустите скрипт `apiMemoryTest.py` для тестирования
**Внимание 1:** Скрипты `mainMemry.py` и `apiMemoryTest.py` были улучшены на основе исходных версий
**Внимание 2:** В скрипте `mainMemry.py` используется шаблонный файл `prompt_template_memory.txt`

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/NanGePlus-RagLangChainTest.git
git@api.gitlife.ru:oschina-mirror/NanGePlus-RagLangChainTest.git
oschina-mirror
NanGePlus-RagLangChainTest
NanGePlus-RagLangChainTest
main