Compare commits
219 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0cfd9f60b5 | |||
| 5ab65eb95a | |||
| b13fb36de0 | |||
| d8fe65a273 | |||
| ba1cb996cf | |||
| 41f41d6543 | |||
| e25fc44db9 | |||
| 2ea91dc94b | |||
| b16419ad3e | |||
| 1e3c05c408 | |||
| a7eb59f472 | |||
| e99448481c | |||
| 83ab7622d9 | |||
| d4312d504b | |||
| 95742e7704 | |||
| a8845a33df | |||
| b3fd87f302 | |||
| 25ba970e09 | |||
| a67f9aaad7 | |||
| 210ce35867 | |||
| 36905f6442 | |||
| ed509db04a | |||
| 14413c0637 | |||
| 9682c95da8 | |||
| 7c6eba90e5 | |||
| c85bf225b9 | |||
| b51c2d66a5 | |||
| 935bc52239 | |||
| 57ff51823c | |||
| 06b20a1772 | |||
| 7a98255149 | |||
| 980038c711 | |||
| 09d4e36200 | |||
| 8fb523bcef | |||
| e48a621d61 | |||
| 1f87787b05 | |||
| fb6cef8a0b | |||
| 21368f6218 | |||
| 116685017d | |||
| 23082f2c5e | |||
| ff2b3ca727 | |||
| e55d41f5df | |||
| 91fb5101d6 | |||
| 9c5e22a656 | |||
| 18f23b298e | |||
| ddf39ebeaa | |||
| 320b515e7d | |||
| 04c50ee946 | |||
| 3d626d68aa | |||
| 9c0442bdb5 | |||
| 606ffa40d1 | |||
| e9f6de1238 | |||
| 8110ab98b6 | |||
| b8c4bd70ae | |||
| 2e49856621 | |||
| 2039509811 | |||
| 420f2ddeb7 | |||
| afc0516868 | |||
| 02a0f5e96c | |||
| 2f7b05006b | |||
| 314089b0a1 | |||
| 60e626d6d0 | |||
| 5c2050ebcf | |||
| 7fd2870d45 | |||
| 609e3339c0 | |||
| 0e01723aee | |||
| 25141b85f9 | |||
| 21510bd664 | |||
| 696d1de19f | |||
| 56020b4bc3 | |||
| 62e29d5a51 | |||
| 15c890a7b8 | |||
| 43b33c558f | |||
| be0661f156 | |||
| b9a5a0498a | |||
| 8c4261500c | |||
| 2254d98bcc | |||
| 21f9096846 | |||
| 9830dc2962 | |||
| c29a8cc63b | |||
| ef7872eb4f | |||
| 3282223511 | |||
| c99c5eb03f | |||
| 3b759c26c4 | |||
| 5038a1f351 | |||
| 0aa7552de6 | |||
| 7fae7d2cde | |||
| f35d8e5b64 | |||
| 63cc0a35d3 | |||
| d159bdd50c | |||
| 0f2c609621 | |||
| 4e14952b24 | |||
| b36d4b2723 | |||
| bf53cd3d3d | |||
| f2e3935c0b | |||
| 77f41f9356 | |||
| 042500dd55 | |||
| f0be93313a | |||
| bf9e26319c | |||
| 5054eb3b10 | |||
| 9bea88c7b8 | |||
| 786c25d342 | |||
| d00f18d567 | |||
| 0f363487e9 | |||
| b471da75d6 | |||
| e5937ff6f8 | |||
| 08379e61bf | |||
| 6c8a65b055 | |||
| d059db62c3 | |||
| e4dd4a9036 | |||
| c0fc9f6e55 | |||
| 72d919566c | |||
| 2aeb3415b1 | |||
| 680a12f87e | |||
| 7a83b34c16 | |||
| ecd16f9fb0 | |||
| 54ca85d482 | |||
| 65ef0be90c | |||
| 57106affdf | |||
| d613bbd358 | |||
| d0bf2104dc | |||
| e70413373f | |||
| 36f0af5a5d | |||
| 79d7076121 | |||
| 526b3e74bf | |||
| d03dc21e8a | |||
| c31dfa4957 | |||
| c7e510723d | |||
| 42093de872 | |||
| 886e58828e | |||
| c8eaf1c9ac | |||
| 2169dadccc | |||
| 4bc8a7b733 | |||
| 61eb955921 | |||
| aa48a5d764 | |||
| 1dedca45ac | |||
| 9d90335a12 | |||
| b577acb115 | |||
| 425e2bcccc | |||
| 3766251891 | |||
| 3552de1b45 | |||
| 2b94e36df6 | |||
| d1e1de4a8d | |||
| 23587e17ad | |||
| 213f452f0b | |||
| 27a488539d | |||
| 283da50d33 | |||
| a809085715 | |||
| 67321f1cba | |||
| 7683186470 | |||
| fded43b77e | |||
| 22ff7da4e0 | |||
| 844561b6cc | |||
| 1fe02a3067 | |||
| 362d8ecb31 | |||
| 5f5f6389f9 | |||
| 31cf3cde45 | |||
| 11f0c2cab1 | |||
| 52bc1d8387 | |||
| 8a3ac0c338 | |||
| bb125d7d4f | |||
| a405716847 | |||
| bad6e03095 | |||
| 2330fddfbb | |||
| 61dfd74134 | |||
| 029ff83979 | |||
| dbbc4cb2e1 | |||
| 1cce21cdc2 | |||
| 8b786a51b3 | |||
| ad7537dd84 | |||
| 3bab23172a | |||
| 18c132d494 | |||
| d072353e08 | |||
| c8bbc101cc | |||
| b93f748998 | |||
| ecb100448a | |||
| c749c856b5 | |||
| 0baf278972 | |||
| ae7780266a | |||
| 587960aebe | |||
| 4e1b6784f7 | |||
| 8b381f2640 | |||
| 0dc7fa6c34 | |||
| 2a2bf682bf | |||
| 87526129fb | |||
| 8ed1b7aa46 | |||
| 4084bd0ecc | |||
| d11eaceaf1 | |||
| 1e6986fbc5 | |||
| 11a19bdec7 | |||
| 51064f1b90 | |||
| 3385cd19e8 | |||
| 852f8517df | |||
| bb917f9818 | |||
| 10248fb29f | |||
| 446dc85bdd | |||
| 4aa2c226a9 | |||
| bf9ba8313a | |||
| 444b59c557 | |||
| b2e1df94db | |||
| b4963cabc8 | |||
| 2851024340 | |||
| 7f25a25729 | |||
| acfe23265a | |||
| 2c6fbbd7dd | |||
| f84507f513 | |||
| be6a9e4a48 | |||
| 69e7634619 | |||
| 3e8c923641 | |||
| df5cbe30a6 | |||
| 9e1a536778 | |||
| a1db8833ef | |||
| 95dd0e0158 | |||
| 19f3c857d5 | |||
| 7f3da73aa4 | |||
| c384c2b610 | |||
| dcf358f27d | |||
| 40afc8c0e2 | |||
| b22bc8a799 |
@@ -1,7 +1,6 @@
|
||||
name: Bugfix
|
||||
title: "Sweep: "
|
||||
description: Write something like "We notice ... behavior when ... happens instead of ...""
|
||||
labels: sweep
|
||||
title: ""
|
||||
description: Write something like "We notice ... behavior when ... happens instead of ..." If you would like to use sweep.dev prefix with "Sweep:"
|
||||
body:
|
||||
- type: textarea
|
||||
id: description
|
||||
@@ -1,11 +1,10 @@
|
||||
name: Feature Request
|
||||
title: "Sweep: "
|
||||
description: Write something like "Write an api endpoint that does "..." in the "..." file"
|
||||
labels: sweep
|
||||
title: ""
|
||||
description: Write something like "Write an api endpoint that does "..." in the "..." file". If you would like to use sweep.dev prefix with "Sweep:"
|
||||
body:
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Details
|
||||
description: More details for Sweep
|
||||
description: More details
|
||||
placeholder: The new endpoint should use the ... class from ... file because it contains ... logic
|
||||
@@ -1,11 +1,10 @@
|
||||
name: Refactor
|
||||
title: "Sweep: "
|
||||
description: Write something like "Modify the ... api endpoint to use ... version and ... framework"
|
||||
labels: sweep
|
||||
title: ""
|
||||
description: Write something like "Modify the ... api endpoint to use ... version and ... framework" If you would like to use sweep.dev prefix with "Sweep:"
|
||||
body:
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Details
|
||||
description: More details for Sweep
|
||||
description: More details
|
||||
placeholder: We are migrating this function to ... version because ...
|
||||
@@ -0,0 +1,47 @@
|
||||
name: E2E Tests
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
paths:
|
||||
- "packages/create-llama/**"
|
||||
- ".github/workflows/e2e.yml"
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
e2e:
|
||||
name: create-llama
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
node-version: [18, 20]
|
||||
os: [macos-latest, windows-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v2
|
||||
- name: Setup Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: "pnpm"
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
- name: Install Playwright Browsers
|
||||
run: pnpm exec playwright install --with-deps
|
||||
working-directory: ./packages/create-llama
|
||||
- name: Build create-llama
|
||||
run: pnpm run build
|
||||
working-directory: ./packages/create-llama
|
||||
- name: Run Playwright tests
|
||||
run: pnpm exec playwright test
|
||||
env:
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
working-directory: ./packages/create-llama
|
||||
- uses: actions/upload-artifact@v3
|
||||
if: always()
|
||||
with:
|
||||
name: playwright-report
|
||||
path: ./packages/create-llama/playwright-report/
|
||||
retention-days: 30
|
||||
@@ -12,14 +12,14 @@ jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm install -g pnpm
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: "pnpm"
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Run lint
|
||||
run: pnpm run lint
|
||||
|
||||
@@ -7,18 +7,14 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v2
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "18"
|
||||
|
||||
node-version-file: '.nvmrc'
|
||||
cache: "pnpm"
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
npm i -g pnpm
|
||||
pnpm install
|
||||
|
||||
run: pnpm install
|
||||
- name: Run tests
|
||||
run: pnpm run test
|
||||
|
||||
@@ -40,3 +40,12 @@ dist/
|
||||
|
||||
# vs code
|
||||
.vscode/launch.json
|
||||
|
||||
.cache
|
||||
test-results/
|
||||
playwright-report/
|
||||
blob-report/
|
||||
playwright/.cache/
|
||||
|
||||
# intellij
|
||||
**/.idea
|
||||
|
||||
@@ -4,5 +4,9 @@
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"[xml]": {
|
||||
"editor.defaultFormatter": "redhat.vscode-xml"
|
||||
},
|
||||
"jest.rootPath": "./packages/core",
|
||||
"[python]": {
|
||||
"editor.defaultFormatter": "ms-python.black-formatter"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ LlamaIndex.TS aims to be a lightweight, easy to use set of libraries to help you
|
||||
|
||||
## Getting started with an example:
|
||||
|
||||
LlamaIndex.TS requries Node v18 or higher. You can download it from https://nodejs.org or use https://nvm.sh (our preferred option).
|
||||
LlamaIndex.TS requires Node v18 or higher. You can download it from https://nodejs.org or use https://nvm.sh (our preferred option).
|
||||
|
||||
In a new folder:
|
||||
|
||||
@@ -86,7 +86,7 @@ Check out our NextJS playground at https://llama-playground.vercel.app/. The sou
|
||||
|
||||
## Note: NextJS:
|
||||
|
||||
If you're using NextJS App Router, you'll need to use the NodeJS runtime (default) and add the follow config to your next.config.js to have it use imports/exports in the same way Node does.
|
||||
If you're using NextJS App Router, you'll need to use the NodeJS runtime (default) and add the following config to your next.config.js to have it use imports/exports in the same way Node does.
|
||||
|
||||
```js
|
||||
export const runtime = "nodejs"; // default
|
||||
@@ -96,6 +96,15 @@ export const runtime = "nodejs"; // default
|
||||
// next.config.js
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
webpack: (config) => {
|
||||
config.resolve.alias = {
|
||||
...config.resolve.alias,
|
||||
sharp$: false,
|
||||
"onnxruntime-node$": false,
|
||||
mongodb$: false,
|
||||
};
|
||||
return config;
|
||||
},
|
||||
experimental: {
|
||||
serverComponentsExternalPackages: ["pdf-parse"], // Puts pdf-parse in actual NodeJS mode with NextJS App Router
|
||||
},
|
||||
@@ -109,6 +118,7 @@ module.exports = nextConfig;
|
||||
- OpenAI GPT-3.5-turbo and GPT-4
|
||||
- Anthropic Claude Instant and Claude 2
|
||||
- Llama2 Chat LLMs (70B, 13B, and 7B parameters)
|
||||
- MistralAI Chat LLMs
|
||||
|
||||
## Contributing:
|
||||
|
||||
|
||||
@@ -8,38 +8,42 @@ We include several end-to-end examples using LlamaIndex.TS in the repository
|
||||
|
||||
Check out the examples below or try them out and complete them in minutes with interactive Github Codespace tutorials provided by Dev-Docs [here](https://codespaces.new/team-dev-docs/lits-dev-docs-playground?devcontainer_path=.devcontainer%2Fjavascript_ltsquickstart%2Fdevcontainer.json):
|
||||
|
||||
## [Chat Engine](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/chatEngine.ts)
|
||||
## [Chat Engine](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/chatEngine.ts)
|
||||
|
||||
Read a file and chat about it with the LLM.
|
||||
|
||||
## [Vector Index](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/vectorIndex.ts)
|
||||
## [Vector Index](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndex.ts)
|
||||
|
||||
Create a vector index and query it. The vector index will use embeddings to fetch the top k most relevant nodes. By default, the top k is 2.
|
||||
|
||||
## [Summary Index](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/summaryIndex.ts)
|
||||
## [Summary Index](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/summaryIndex.ts)
|
||||
|
||||
Create a list index and query it. This example also use the `LLMRetriever`, which will use the LLM to select the best nodes to use when generating answer.
|
||||
|
||||
## [Save / Load an Index](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/storageContext.ts)
|
||||
## [Save / Load an Index](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/storageContext.ts)
|
||||
|
||||
Create and load a vector index. Persistance to disk in LlamaIndex.TS happens automatically once a storage context object is created.
|
||||
|
||||
## [Customized Vector Index](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/vectorIndexCustomize.ts)
|
||||
## [Customized Vector Index](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndexCustomize.ts)
|
||||
|
||||
Create a vector index and query it, while also configuring the the `LLM`, the `ServiceContext`, and the `similarity_top_k`.
|
||||
|
||||
## [OpenAI LLM](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/openai.ts)
|
||||
## [OpenAI LLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/openai.ts)
|
||||
|
||||
Create an OpenAI LLM and directly use it for chat.
|
||||
|
||||
## [Llama2 DeuceLLM](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/llamadeuce.ts)
|
||||
## [Llama2 DeuceLLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/llamadeuce.ts)
|
||||
|
||||
Create a Llama-2 LLM and directly use it for chat.
|
||||
|
||||
## [SubQuestionQueryEngine](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/subquestion.ts)
|
||||
## [SubQuestionQueryEngine](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts)
|
||||
|
||||
Uses the `SubQuestionQueryEngine`, which breaks complex queries into multiple questions, and then aggreates a response across the answers to all sub-questions.
|
||||
|
||||
## [Low Level Modules](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/lowlevel.ts)
|
||||
## [Low Level Modules](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/lowlevel.ts)
|
||||
|
||||
This example uses several low-level components, which removes the need for an actual query engine. These components can be used anywhere, in any application, or customized and sub-classed to meet your own needs.
|
||||
|
||||
## [JSON Entity Extraction](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/jsonExtract.ts)
|
||||
|
||||
Features OpenAI's chat API (using [`json_mode`](https://platform.openai.com/docs/guides/text-generation/json-mode)) to extract a JSON object from a sales call transcript.
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Installation and Setup
|
||||
|
||||
## Installation from NPM
|
||||
|
||||
Make sure you have NodeJS v18 or higher.
|
||||
|
||||
```bash npm2yarn
|
||||
npm install llamaindex
|
||||
```
|
||||
|
||||
## Environment variables
|
||||
|
||||
Our examples use OpenAI by default. You'll need to set up your Open AI key like so:
|
||||
|
||||
```bash
|
||||
export OPENAI_API_KEY="sk-......" # Replace with your key from https://platform.openai.com/account/api-keys
|
||||
```
|
||||
|
||||
If you want to have it automatically loaded every time, add it to your .zshrc/.bashrc.
|
||||
|
||||
WARNING: do not check in your OpenAI key into version control.
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Installation and Setup
|
||||
|
||||
Make sure you have NodeJS v18 or higher.
|
||||
|
||||
## Using create-llama
|
||||
|
||||
The easiest way to get started with LlamaIndex is by using `create-llama`. This CLI tool enables you to quickly start building a new LlamaIndex application, with everything set up for you.
|
||||
|
||||
Just run
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="1" label="npm" default>
|
||||
|
||||
```bash
|
||||
npx create-llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="2" label="Yarn">
|
||||
|
||||
```bash
|
||||
yarn create llama
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="3" label="pnpm">
|
||||
|
||||
```bash
|
||||
pnpm create llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
to get started. Once your app is generated, run
|
||||
|
||||
```bash npm2yarn
|
||||
npm run dev
|
||||
```
|
||||
|
||||
to start the development server. You can then visit [http://localhost:3000](http://localhost:3000) to see your app
|
||||
|
||||
## Installation from NPM
|
||||
|
||||
```bash npm2yarn
|
||||
npm install llamaindex
|
||||
```
|
||||
|
||||
### Environment variables
|
||||
|
||||
Our examples use OpenAI by default. You'll need to set up your Open AI key like so:
|
||||
|
||||
```bash
|
||||
export OPENAI_API_KEY="sk-......" # Replace with your key from https://platform.openai.com/account/api-keys
|
||||
```
|
||||
|
||||
If you want to have it automatically loaded every time, add it to your .zshrc/.bashrc.
|
||||
|
||||
WARNING: do not check in your OpenAI key into version control.
|
||||
@@ -5,7 +5,7 @@ slug: /
|
||||
|
||||
# What is LlamaIndex.TS?
|
||||
|
||||
LlamaIndex.TS is a data framework for LLM applications to ingest, structure, and access private or domain-specific data. While a python package is also available (see [here](https://gpt-index.readthedocs.io/en/latest/)), LlamaIndex.TS offers core features in a simple package, optimized for usage with TypeScript.
|
||||
LlamaIndex.TS is a data framework for LLM applications to ingest, structure, and access private or domain-specific data. While a python package is also available (see [here](https://docs.llamaindex.ai/en/stable/)), LlamaIndex.TS offers core features in a simple package, optimized for usage with TypeScript.
|
||||
|
||||
## 🚀 Why LlamaIndex.TS?
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ The basic concept of the Sub Question Query Engine is that it splits a single qu
|
||||
|
||||
### Getting Started
|
||||
|
||||
The easiest way to start trying the Sub Question Query Engine is running the subquestion.ts file in [apps/simple](https://github.com/run-llama/LlamaIndexTS/blob/main/apps/simple/subquestion.ts).
|
||||
The easiest way to start trying the Sub Question Query Engine is running the subquestion.ts file in [examples](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts).
|
||||
|
||||
```bash
|
||||
npx ts-node subquestion.ts
|
||||
|
||||
@@ -4,7 +4,7 @@ sidebar_position: 2
|
||||
|
||||
# Starter Tutorial
|
||||
|
||||
Once you have [installed LlamaIndex.TS using NPM](installation.md) and set up your OpenAI key, you're ready to start your first app:
|
||||
Once you have [installed LlamaIndex.TS using NPM](installation) and set up your OpenAI key, you're ready to start your first app:
|
||||
|
||||
In a new folder:
|
||||
|
||||
|
||||
@@ -29,7 +29,23 @@ const config = {
|
||||
// to replace "en" with "zh-Hans".
|
||||
i18n: {
|
||||
defaultLocale: "en",
|
||||
locales: ["en"],
|
||||
locales: [
|
||||
"en",
|
||||
"zh-Hans",
|
||||
"es",
|
||||
"fr",
|
||||
"de",
|
||||
"ja",
|
||||
"ko",
|
||||
"pt",
|
||||
"ar",
|
||||
"it",
|
||||
"tr",
|
||||
"pl",
|
||||
"nl",
|
||||
"vi",
|
||||
"th",
|
||||
], // "fa", "ru", "ro", "sv", "hu", "cs", "el", "da", "fi", "he", "no", "hi", "in", "sl", "se", "sk", "uk", "bg", "hr", "lt", "lv", "et", "cat"
|
||||
},
|
||||
|
||||
presets: [
|
||||
@@ -49,7 +65,11 @@ const config = {
|
||||
],
|
||||
},
|
||||
blog: false,
|
||||
}),
|
||||
gtag: {
|
||||
trackingID: 'G-NB9B8LW9W5',
|
||||
anonymizeIP: true,
|
||||
},
|
||||
}),
|
||||
],
|
||||
],
|
||||
|
||||
@@ -71,6 +91,10 @@ const config = {
|
||||
position: "left",
|
||||
label: "Docs",
|
||||
},
|
||||
{
|
||||
type: "localeDropdown",
|
||||
position: "left",
|
||||
},
|
||||
{
|
||||
href: "https://github.com/run-llama/LlamaIndexTS",
|
||||
label: "GitHub",
|
||||
|
||||
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1 @@
|
||||
../../../../docs/api
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# المفاهيم على المستوى العالي
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
يساعدك LlamaIndex.TS في بناء تطبيقات قائمة على LLM (مثل Q&A و chatbot) على بيانات مخصصة.
|
||||
|
||||
في هذا الدليل عن المفاهيم على المستوى العالي، ستتعلم:
|
||||
|
||||
- كيف يمكن لـ LLM الإجابة على الأسئلة باستخدام بياناتك الخاصة.
|
||||
- المفاهيم الرئيسية والوحدات في LlamaIndex.TS لبناء خط أنابيب الاستعلام الخاص بك.
|
||||
|
||||
## الإجابة على الأسئلة عبر بياناتك
|
||||
|
||||
يستخدم LlamaIndex طريقة مكونة من مرحلتين عند استخدام LLM مع بياناتك:
|
||||
|
||||
1. **مرحلة الفهرسة**: إعداد قاعدة المعرفة، و
|
||||
2. **مرحلة الاستعلام**: استرداد السياق ذي الصلة من المعرفة لمساعدة LLM في الاستجابة لسؤال
|
||||
|
||||

|
||||
|
||||
تُعرف هذه العملية أيضًا باسم "استرجاع معزز للتوليد" (RAG).
|
||||
|
||||
يوفر LlamaIndex.TS أدوات أساسية لجعل كلا المرحلتين سهلتين للغاية.
|
||||
|
||||
دعنا نستكشف كل مرحلة بالتفصيل.
|
||||
|
||||
### مرحلة الفهرسة
|
||||
|
||||
يساعدك LlamaIndex.TS في إعداد قاعدة المعرفة باستخدام مجموعة من موصلات البيانات والفهارس.
|
||||
|
||||

|
||||
|
||||
[**محمّلات البيانات**](./modules/high_level/data_loader.md):
|
||||
موصل البيانات (أي `Reader`) يقوم بتجميع البيانات من مصادر بيانات مختلفة وتنسيقات بيانات مختلفة في تمثيل بسيط للـ `Document` (نص وبيانات تعريفية بسيطة).
|
||||
|
||||
[**المستندات / العقد**](./modules/high_level/documents_and_nodes.md): المستند هو حاوية عامة حول أي مصدر بيانات - على سبيل المثال، ملف PDF، نتائج واجهة برمجة التطبيقات، أو بيانات استرداد من قاعدة بيانات. العقد هو الوحدة الذرية للبيانات في LlamaIndex ويمثل "قطعة" من المستند الأصلي. إنه تمثيل غني يتضمن بيانات تعريفية وعلاقات (مع عقد أخرى) لتمكين عمليات الاسترجاع الدقيقة والتعبيرية.
|
||||
|
||||
[**فهارس البيانات**](./modules/high_level/data_index.md):
|
||||
بمجرد أن تقوم بتجميع بياناتك، يساعدك LlamaIndex في فهرسة البيانات في تنسيق سهل الاسترداد.
|
||||
|
||||
تحت الغطاء، يقوم LlamaIndex بتحليل المستندات الخام إلى تمثيلات وسيطة، وحساب تضمينات الناقلات، وتخزين بياناتك في الذاكرة أو على القرص.
|
||||
|
||||
"
|
||||
|
||||
### مرحلة الاستعلام
|
||||
|
||||
في مرحلة الاستعلام، يقوم خط الأنابيب للاستعلام بجلب السياق الأكثر صلة بناءً على استعلام المستخدم،
|
||||
ويمرر ذلك إلى LLM (جنبًا إلى جنب مع الاستعلام) لتوليد استجابة.
|
||||
|
||||
يمنح ذلك LLM معرفة محدثة ليست موجودة في بيانات التدريب الأصلية لديه،
|
||||
(مما يقلل أيضًا من الهلوسة).
|
||||
|
||||
التحدي الرئيسي في مرحلة الاستعلام هو الاسترجاع والتنسيق والاستدلال عبر قواعد المعرفة (المحتملة).
|
||||
|
||||
يوفر LlamaIndex وحدات قابلة للتركيب تساعدك في بناء ودمج خطوط أنابيب RAG لـ Q&A (محرك الاستعلام)، chatbot (محرك الدردشة)، أو كجزء من وكيل.
|
||||
|
||||
يمكن تخصيص هذه الكتل البنائية لتعكس تفضيلات التصنيف، وكذلك تركيبها للاستدلال عبر عدة قواعد معرفة بطريقة منظمة.
|
||||
|
||||

|
||||
|
||||
#### الكتل الأساسية
|
||||
|
||||
[**مسترجعات**](./modules/low_level/retriever.md):
|
||||
يحدد المسترجع كيفية استرجاع السياق ذي الصلة بكفاءة من قاعدة المعرفة (أي الفهرس) عند إعطاء استعلام.
|
||||
تختلف منطق الاسترجاع المحددة حسب الفهارس المختلفة، والأكثر شيوعًا هو الاسترجاع الكثيف ضد فهرس الناقل.
|
||||
|
||||
[**مركبات الاستجابة**](./modules/low_level/response_synthesizer.md):
|
||||
تقوم مركبة الاستجابة بتوليد استجابة من LLM باستخدام استعلام المستخدم ومجموعة معينة من أجزاء النص المسترجعة.
|
||||
|
||||
"
|
||||
|
||||
#### خطوط الأنابيب
|
||||
|
||||
[**محركات الاستعلام**](./modules/high_level/query_engine.md):
|
||||
محرك الاستعلام هو خط أنابيب شامل يتيح لك طرح الأسئلة على بياناتك.
|
||||
يأخذ استعلامًا بلغة طبيعية ويعيد استجابة، جنبًا إلى جنب مع السياق المرجعي المسترجع والممرر إلى LLM.
|
||||
|
||||
[**محركات الدردشة**](./modules/high_level/chat_engine.md):
|
||||
محرك الدردشة هو خط أنابيب شامل لإجراء محادثة مع بياناتك
|
||||
(عدة تفاعلات بدلاً من سؤال وجواب واحد).
|
||||
|
||||
"
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# أمثلة من البداية إلى النهاية
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
نقدم العديد من الأمثلة من البداية إلى النهاية باستخدام LlamaIndex.TS في المستودع
|
||||
|
||||
تحقق من الأمثلة أدناه أو جربها وأكملها في دقائق مع دروس تفاعلية على Github Codespace المقدمة من Dev-Docs [هنا](https://codespaces.new/team-dev-docs/lits-dev-docs-playground?devcontainer_path=.devcontainer%2Fjavascript_ltsquickstart%2Fdevcontainer.json):
|
||||
|
||||
## [محرك الدردشة](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/chatEngine.ts)
|
||||
|
||||
اقرأ ملفًا وتحدث عنه مع LLM.
|
||||
|
||||
## [فهرس الفيكتور](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndex.ts)
|
||||
|
||||
إنشاء فهرس فيكتور واستعلامه. سيستخدم فهرس الفيكتور التضمينات لاسترداد أعلى k عقد ذات صلة. بشكل افتراضي ، يكون k الأعلى هو 2.
|
||||
|
||||
"
|
||||
|
||||
## [مؤشر الملخص](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/summaryIndex.ts)
|
||||
|
||||
إنشاء مؤشر قائمة واستعلامه. يستخدم هذا المثال أيضًا `LLMRetriever` ، الذي سيستخدم LLM لتحديد أفضل العقد لاستخدامها عند إنشاء الإجابة.
|
||||
|
||||
"
|
||||
|
||||
## [حفظ / تحميل فهرس](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/storageContext.ts)
|
||||
|
||||
إنشاء وتحميل فهرس ناقل. يحدث التخزين المؤقت على القرص تلقائيًا في LlamaIndex.TS بمجرد إنشاء كائن سياق التخزين.
|
||||
|
||||
"
|
||||
|
||||
## [فهرس الناقل المخصص](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndexCustomize.ts)
|
||||
|
||||
إنشاء فهرس ناقل واستعلامه، مع تكوين `LLM` و `ServiceContext` و `similarity_top_k`.
|
||||
|
||||
"
|
||||
|
||||
## [OpenAI LLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/openai.ts)
|
||||
|
||||
أنشئ OpenAI LLM واستخدمه مباشرة للدردشة.
|
||||
|
||||
"
|
||||
|
||||
## [Llama2 DeuceLLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/llamadeuce.ts)
|
||||
|
||||
إنشاء Llama-2 LLM واستخدامه مباشرة للدردشة.
|
||||
|
||||
"
|
||||
|
||||
## [محرك استعلام الأسئلة الفرعية](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts)
|
||||
|
||||
يستخدم `محرك استعلام الأسئلة الفرعية` الذي يقسم الاستعلامات المعقدة إلى أسئلة فرعية متعددة، ثم يجمع الاستجابة عبر الإجابات على جميع الأسئلة الفرعية.
|
||||
|
||||
"
|
||||
|
||||
## [وحدات منخفضة المستوى](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/lowlevel.ts)
|
||||
|
||||
يستخدم هذا المثال العديد من المكونات منخفضة المستوى، مما يزيل الحاجة إلى محرك استعلام فعلي. يمكن استخدام هذه المكونات في أي مكان، في أي تطبيق، أو تخصيصها وتصنيفها الفرعي لتلبية احتياجاتك الخاصة.
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# البيئات
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
يدعم LlamaIndex حاليًا رسميًا NodeJS 18 و NodeJS 20.
|
||||
|
||||
## NextJS App Router
|
||||
|
||||
إذا كنت تستخدم معالج الطرق / الوظائف الخادمة في NextJS App Router ، فستحتاج إلى استخدام وضع NodeJS:
|
||||
|
||||
```js
|
||||
export const runtime = "nodejs"; // الافتراضي
|
||||
```
|
||||
|
||||
وستحتاج أيضًا إلى إضافة استثناء لـ pdf-parse في next.config.js الخاص بك
|
||||
|
||||
```js
|
||||
// next.config.js
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
experimental: {
|
||||
serverComponentsExternalPackages: ["pdf-parse"], // يضع pdf-parse في وضع NodeJS الفعلي مع NextJS App Router
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = nextConfig;
|
||||
```
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
|
||||
# التثبيت والإعداد
|
||||
|
||||
```تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.```
|
||||
|
||||
|
||||
تأكد من أن لديك NodeJS v18 أو أحدث.
|
||||
|
||||
|
||||
## باستخدام create-llama
|
||||
|
||||
أسهل طريقة للبدء مع LlamaIndex هي باستخدام `create-llama`. هذه الأداة سطر الأوامر تمكنك من بدء بناء تطبيق LlamaIndex جديد بسرعة، مع كل شيء معد لك.
|
||||
|
||||
ما عليك سوى تشغيل
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="1" label="npm" default>
|
||||
|
||||
```bash
|
||||
npx create-llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="2" label="Yarn">
|
||||
|
||||
```bash
|
||||
yarn create llama
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="3" label="pnpm">
|
||||
|
||||
```bash
|
||||
pnpm create llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
للبدء. بمجرد إنشاء التطبيق الخاص بك، قم بتشغيل
|
||||
|
||||
```bash npm2yarn
|
||||
npm run dev
|
||||
```
|
||||
|
||||
لبدء خادم التطوير. يمكنك ثم زيارة [http://localhost:3000](http://localhost:3000) لرؤية تطبيقك.
|
||||
## التثبيت من NPM
|
||||
|
||||
```bash npm2yarn
|
||||
npm install llamaindex
|
||||
```
|
||||
|
||||
|
||||
### المتغيرات البيئية
|
||||
|
||||
تستخدم أمثلتنا OpenAI افتراضيًا. ستحتاج إلى إعداد مفتاح Open AI الخاص بك على النحو التالي:
|
||||
|
||||
```bash
|
||||
export OPENAI_API_KEY="sk-......" # استبدله بالمفتاح الخاص بك من https://platform.openai.com/account/api-keys
|
||||
```
|
||||
|
||||
إذا كنت ترغب في تحميله تلقائيًا في كل مرة، قم بإضافته إلى ملف .zshrc/.bashrc الخاص بك.
|
||||
|
||||
تحذير: لا تقم بإضافة مفتاح OpenAI الخاص بك إلى نظام التحكم في الإصدارات.
|
||||
|
||||
|
||||
"
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
slug: /
|
||||
---
|
||||
|
||||
# ما هو LlamaIndex.TS؟
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
LlamaIndex.TS هو إطار بيانات لتطبيقات LLM لاستيعاب وتنظيم والوصول إلى البيانات الخاصة أو الخاصة بالمجال. في حين أن حزمة Python متاحة أيضًا (انظر [هنا](https://docs.llamaindex.ai/en/stable/)), يوفر LlamaIndex.TS ميزات أساسية في حزمة بسيطة ، محسنة للاستخدام مع TypeScript.
|
||||
|
||||
## 🚀 لماذا LlamaIndex.TS؟
|
||||
|
||||
في جوهرها ، توفر LLMs واجهة لغة طبيعية بين البشر والبيانات المستنتجة. تأتي النماذج المتاحة على نطاق واسع محملة مسبقًا بكميات هائلة من البيانات المتاحة للجمهور ، من ويكيبيديا وقوائم البريد الإلكتروني إلى الكتب المدرسية وشفرة المصدر.
|
||||
|
||||
غالبًا ما تتطلب التطبيقات المبنية على LLMs تعزيز هذه النماذج بالبيانات الخاصة أو الخاصة بالمجال. للأسف ، يمكن توزيع هذه البيانات عبر تطبيقات ومخازن بيانات معزولة. إنها خلف واجهات برمجة التطبيقات ، في قواعد البيانات SQL ، أو محبوسة في ملفات PDF وعروض تقديمية.
|
||||
|
||||
هنا يأتي دور **LlamaIndex.TS**.
|
||||
|
||||
## 🦙 كيف يمكن أن يساعد LlamaIndex.TS؟
|
||||
|
||||
يوفر LlamaIndex.TS الأدوات التالية:
|
||||
|
||||
- **تحميل البيانات**: استيعاب البيانات الحالية الخاصة بك بتنسيقات `.txt`, `.pdf`, `.csv`, `.md` و `.docx` مباشرة.
|
||||
- **فهارس البيانات**: تنظيم البيانات الخاصة بك في تمثيلات وسيطة سهلة وفعالة للاستخدام من قبل LLMs.
|
||||
- **المحركات**: توفر واجهات الوصول إلى اللغة الطبيعية لبياناتك. على سبيل المثال:
|
||||
- محركات الاستعلام هي واجهات استرجاع قوية للإخراج المعزز بالمعرفة.
|
||||
- محركات الدردشة هي واجهات محادثة للتفاعلات "ذهابًا وإيابًا" متعددة الرسائل مع بياناتك.
|
||||
|
||||
## 👨👩👧👦 من أجل من هو LlamaIndex؟
|
||||
|
||||
يوفر LlamaIndex.TS مجموعة أدوات أساسية ، ضرورية لأي شخص يقوم ببناء تطبيقات LLM باستخدام JavaScript و TypeScript.
|
||||
|
||||
يتيح لنا واجهة برمجة التطبيقات على مستوى عالي استخدام LlamaIndex.TS لاستيعاب واستعلام البيانات الخاصة بهم.
|
||||
|
||||
بالنسبة للتطبيقات المعقدة أكثر ، تتيح لنا واجهات برمجة التطبيقات على مستوى أدنى للمستخدمين المتقدمين تخصيص وتوسيع أي وحدة - موصلات البيانات والفهارس وأجهزة الاسترجاع ومحركات الاستعلام - لتناسب احتياجاتهم.
|
||||
|
||||
## البدء
|
||||
|
||||
`npm install llamaindex`
|
||||
|
||||
تتضمن وثائقنا [تعليمات التثبيت](./installation.md) و[دليل البداية](./starter.md) لبناء تطبيقك الأول.
|
||||
|
||||
بمجرد أن تكون جاهزًا وتعمل ، يحتوي [مفاهيم عالية المستوى](./concepts.md) على نظرة عامة على الهندسة المعمارية المتعددة المستويات لـ LlamaIndex. لمزيد من الأمثلة العملية التفصيلية ، يمكنك الاطلاع على [دروس النهاية إلى النهاية](./end_to_end.md).
|
||||
|
||||
## 🗺️ النظام البيئي
|
||||
|
||||
لتنزيل أو المساهمة ، ابحث عن LlamaIndex على:
|
||||
|
||||
- Github: https://github.com/run-llama/LlamaIndexTS
|
||||
- NPM: https://www.npmjs.com/package/llamaindex
|
||||
|
||||
"
|
||||
|
||||
## المجتمع
|
||||
|
||||
هل تحتاج إلى مساعدة؟ هل لديك اقتراح لميزة؟ انضم إلى مجتمع LlamaIndex:
|
||||
|
||||
- تويتر: https://twitter.com/llama_index
|
||||
- ديسكورد: https://discord.gg/dGcwcsnxhU
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# محرك الدردشة (ChatEngine)
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
محرك الدردشة هو طريقة سريعة وبسيطة للدردشة مع البيانات في الفهرس الخاص بك.
|
||||
|
||||
```typescript
|
||||
const retriever = index.asRetriever();
|
||||
const chatEngine = new ContextChatEngine({ retriever });
|
||||
|
||||
// بدء الدردشة
|
||||
const response = await chatEngine.chat(query);
|
||||
```
|
||||
|
||||
## مراجع الواجهة البرمجية
|
||||
|
||||
- [محرك الدردشة السياقي (ContextChatEngine)](../../api/classes/ContextChatEngine.md)
|
||||
- [محرك الدردشة المكثف للأسئلة (CondenseQuestionChatEngine)](../../api/classes/ContextChatEngine.md)
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# الفهرس
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
الفهرس هو الحاوية الأساسية والتنظيم لبياناتك. يدعم LlamaIndex.TS نوعين من الفهارس:
|
||||
|
||||
- `VectorStoreIndex` - سيقوم بإرسال أعلى `Node` الموجودة إلى LLM عند إنشاء استجابة. القيمة الافتراضية لأعلى `k` هي 2.
|
||||
- `SummaryIndex` - سيقوم بإرسال كل `Node` في الفهرس إلى LLM لإنشاء استجابة.
|
||||
|
||||
```typescript
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
const document = new Document({ text: "اختبار" });
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية
|
||||
|
||||
- [SummaryIndex](../../api/classes/SummaryIndex.md)
|
||||
- [VectorStoreIndex](../../api/classes/VectorStoreIndex.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# قارئ / محمل
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
يدعم LlamaIndex.TS تحميل الملفات بسهولة من المجلدات باستخدام فئة `SimpleDirectoryReader`. حاليًا ، يتم دعم الملفات `.txt` ، `.pdf` ، `.csv` ، `.md` و `.docx` ، مع المزيد المخطط له في المستقبل!
|
||||
|
||||
```typescript
|
||||
import { SimpleDirectoryReader } from "llamaindex";
|
||||
|
||||
documents = new SimpleDirectoryReader().loadData("./data");
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية
|
||||
|
||||
- [SimpleDirectoryReader](../../api/classes/SimpleDirectoryReader.md)
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
# المستندات والعقد
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
`المستندات` و `العقد` هما العناصر الأساسية لأي فهرس. بينما يكون واجهة برمجة التطبيق (API) لهذه الكائنات مشابهة، يُمثل كائن `المستند` ملفات كاملة، بينما تكون `العقد` قطعًا أصغر من ذلك المستند الأصلي، والتي تكون مناسبة لـ LLM و Q&A.
|
||||
|
||||
```typescript
|
||||
import { Document } from "llamaindex";
|
||||
|
||||
document = new Document({ text: "نص", metadata: { key: "val" } });
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية
|
||||
|
||||
- [المستند (Document)](../../api/classes/Document.md)
|
||||
- [نص العقد (TextNode)](../../api/classes/TextNode.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# محرك الاستعلامات (QueryEngine)
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
يقوم محرك الاستعلامات بتجميع "Retriever" و "ResponseSynthesizer" في أنبوبة، والتي ستستخدم سلسلة الاستعلام لاسترداد العقد ومن ثم إرسالها إلى LLM لتوليد استجابة.
|
||||
|
||||
```typescript
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const response = await queryEngine.query("سلسلة الاستعلام");
|
||||
```
|
||||
|
||||
## محرك الاستعلام للأسئلة الفرعية
|
||||
|
||||
الفكرة الأساسية لمحرك الاستعلام للأسئلة الفرعية هي تقسيم استعلام واحد إلى استعلامات متعددة، والحصول على إجابة لكل من تلك الاستعلامات، ثم دمج تلك الإجابات المختلفة في استجابة واحدة متسقة للمستخدم. يمكنك أن تفكر فيها كتقنية "فكر في ذلك خطوة بخطوة" ولكن بتكرار مصادر البيانات الخاصة بك!
|
||||
|
||||
### البدء
|
||||
|
||||
أسهل طريقة لبدء تجربة محرك الاستعلام للأسئلة الفرعية هي تشغيل ملف subquestion.ts في [examples](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts).
|
||||
|
||||
```bash
|
||||
npx ts-node subquestion.ts
|
||||
```
|
||||
|
||||
"
|
||||
|
||||
### الأدوات
|
||||
|
||||
يتم تنفيذ محرك الاستعلام للأسئلة الفرعية باستخدام الأدوات. الفكرة الأساسية للأدوات هي أنها خيارات قابلة للتنفيذ لنموذج اللغة الكبيرة. في هذه الحالة، يعتمد محرك الاستعلام للأسئلة الفرعية على أداة QueryEngineTool، والتي كما تخمن هي أداة لتشغيل استعلامات على محرك الاستعلام. يتيح لنا ذلك إعطاء النموذج خيارًا للاستعلام عن وثائق مختلفة لأسئلة مختلفة على سبيل المثال. يمكنك أيضًا أن تتخيل أن محرك الاستعلام للأسئلة الفرعية يمكنه استخدام أداة تبحث عن شيء ما على الويب أو تحصل على إجابة باستخدام Wolfram Alpha.
|
||||
|
||||
يمكنك معرفة المزيد عن الأدوات من خلال الاطلاع على وثائق LlamaIndex Python https://gpt-index.readthedocs.io/en/latest/core_modules/agent_modules/tools/root.html
|
||||
|
||||
"
|
||||
|
||||
## مرجع واجهة برمجة التطبيق (API)
|
||||
|
||||
- [محرك استعلام الاسترجاع (RetrieverQueryEngine)](../../api/classes/RetrieverQueryEngine.md)
|
||||
- [محرك استعلام السؤال الفرعي (SubQuestionQueryEngine)](../../api/classes/SubQuestionQueryEngine.md)
|
||||
- [أداة محرك الاستعلام (QueryEngineTool)](../../api/interfaces/QueryEngineTool.md)
|
||||
@@ -0,0 +1,33 @@
|
||||
# الوحدات الأساسية
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
يوفر LlamaIndex.TS عدة وحدات أساسية، مقسمة إلى وحدات عالية المستوى للبدء السريع ووحدات منخفضة المستوى لتخصيص المكونات الرئيسية حسب الحاجة.
|
||||
|
||||
## وحدات عالية المستوى
|
||||
|
||||
- [**المستند**](./high_level/documents_and_nodes.md): يمثل المستند ملف نصي أو ملف PDF أو قطعة بيانات متتابعة أخرى.
|
||||
|
||||
- [**العقدة**](./high_level/documents_and_nodes.md): هو البناء الأساسي للبيانات. في أغلب الأحيان، تكون هذه أجزاء من المستند المقسمة إلى قطع قابلة للإدارة وصغيرة بما يكفي ليتم تغذيتها إلى نموذج التضمين و LLM.
|
||||
|
||||
- [**القارئ/المحمل**](./high_level/data_loader.md): القارئ أو المحمل هو شيء يأخذ المستند في العالم الحقيقي ويحوله إلى فئة المستند التي يمكن استخدامها في الفهرس الخاص بك والاستعلامات. ندعم حاليًا ملفات النص العادي وملفات PDF والمزيد الكثير.
|
||||
|
||||
- [**الفهارس**](./high_level/data_index.md): تخزن الفهارس العقد وتضمينات تلك العقد.
|
||||
|
||||
- [**محرك الاستعلامات**](./high_level/query_engine.md): محركات الاستعلامات هي التي تولد الاستعلام الذي تدخله وتعيد لك النتيجة. عمومًا، تجمع محركات الاستعلامات بين تعليمة مسبقة مبنية مع العقد المحددة من الفهرس الخاص بك لتعطي LLM السياق الذي يحتاجه للإجابة على استعلامك.
|
||||
|
||||
- [**محرك الدردشة**](./high_level/chat_engine.md): يساعدك محرك الدردشة على بناء روبوت دردشة سيتفاعل مع فهرسك.
|
||||
|
||||
## وحدة منخفضة المستوى
|
||||
|
||||
- [**LLM**](./low_level/llm.md): فئة LLM هي واجهة موحدة فوق مزود نموذج لغة كبير مثل OpenAI GPT-4 أو Anthropic Claude أو Meta LLaMA. يمكنك توريثها لكتابة موصل إلى نموذج اللغة الخاص بك.
|
||||
|
||||
- [**Embedding**](./low_level/embedding.md): يتم تمثيل التضمين كمتجه من الأرقام العائمة. نموذج التضمين الافتراضي لدينا هو text-embedding-ada-002 من OpenAI ويتكون كل تضمين يولده من 1,536 رقمًا عائمًا. نموذج التضمين الشائع الآخر هو BERT الذي يستخدم 768 رقمًا عائمًا لتمثيل كل عقدة. نوفر عددًا من الأدوات للعمل مع التضمين بما في ذلك 3 خيارات لحساب التشابه و Maximum Marginal Relevance.
|
||||
|
||||
- [**TextSplitter/NodeParser**](./low_level/node_parser.md): تعتبر استراتيجيات تقسيم النصوص مهمة للغاية لفعالية البحث في التضمين. حاليًا، على الرغم من أن لدينا قيمة افتراضية، إلا أنه لا يوجد حلاً مناسبًا للجميع. اعتمادًا على وثائق المصدر، قد ترغب في استخدام أحجام واستراتيجيات تقسيم مختلفة. حاليًا، ندعم التقسيم حسب الحجم الثابت، التقسيم حسب الحجم الثابت مع أجزاء تتداخل، التقسيم حسب الجملة، والتقسيم حسب الفقرة. يتم استخدام مقسم النصوص بواسطة NodeParser عند تقسيم `Document` إلى `Node`.
|
||||
|
||||
- [**Retriever**](./low_level/retriever.md): يقوم Retriever بتحديد العقد التي يتم استردادها من الفهرس. هنا، قد ترغب في محاولة استرداد عدد أكبر أو أقل من العقد لكل استعلام، تغيير وظيفة التشابه الخاصة بك، أو إنشاء استرداد خاص بك لكل حالة استخدام فردية في تطبيقك. على سبيل المثال، قد ترغب في وجود استرداد منفصل لمحتوى الشفرة مقابل محتوى النص.
|
||||
|
||||
- [**ResponseSynthesizer**](./low_level/response_synthesizer.md): يتحمل ResponseSynthesizer مسؤولية أخذ سلسلة استعلام واستخدام قائمة من العقد لإنشاء استجابة. يمكن أن يأخذ هذا الشكل العديد من الأشكال، مثل التكرار عبر جميع السياق وتحسين الإجابة، أو بناء شجرة من الملخصات وإرجاع الملخص الجذري.
|
||||
|
||||
- [**Storage**](./low_level/storage.md): في نقطة ما، سترغب في تخزين الفهارس والبيانات والمتجهات بدلاً من إعادة تشغيل نماذج التضمين في كل مرة. IndexStore و DocStore و VectorStore و KVStore هي تجريدات تتيح لك ذلك. مجتمعة، تشكل هذه التجريدات سياق التخزين. حاليًا، نسمح لك بالاحتفاظ بالتضمينات الخاصة بك في ملفات على نظام الملفات (أو نظام ملفات افتراضي في الذاكرة)، ولكننا نضيف أيضًا تكاملات مع قواعد بيانات المتجهات.
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# تضمين
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
يتولى النموذج المضمن في LlamaIndex إنشاء تمثيلات رقمية للنص. بشكل افتراضي ، ستستخدم LlamaIndex نموذج `text-embedding-ada-002` من OpenAI.
|
||||
|
||||
يمكن تعيين ذلك بشكل صريح في كائن `ServiceContext`.
|
||||
|
||||
```typescript
|
||||
import { OpenAIEmbedding, serviceContextFromDefaults } from "llamaindex";
|
||||
|
||||
const openaiEmbeds = new OpenAIEmbedding();
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({ embedModel: openaiEmbeds });
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية
|
||||
|
||||
- [OpenAIEmbedding](../../api/classes/OpenAIEmbedding.md)
|
||||
- [ServiceContext](../../api/interfaces/ServiceContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
# LLM
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
يتولى LLM قراءة النص وتوليد استجابات لغوية طبيعية للاستفسارات. بشكل افتراضي ، يستخدم LlamaIndex.TS `gpt-3.5-turbo`.
|
||||
|
||||
يمكن تعيين LLM بشكل صريح في كائن `ServiceContext`.
|
||||
|
||||
```typescript
|
||||
import { OpenAI, serviceContextFromDefaults } from "llamaindex";
|
||||
|
||||
const openaiLLM = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0 });
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({ llm: openaiLLM });
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية
|
||||
|
||||
- [OpenAI](../../api/classes/OpenAI.md)
|
||||
- [ServiceContext](../../api/interfaces/ServiceContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,37 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# NodeParser (محلل العقدة)
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
`NodeParser` في LlamaIndex مسؤول عن تقسيم كائنات `Document` إلى كائنات `Node` أكثر إدارة. عند استدعاء `.fromDocuments()`, يتم استخدام `NodeParser` من `ServiceContext` للقيام بذلك تلقائيًا بالنسبة لك. بدلاً من ذلك ، يمكنك استخدامه لتقسيم المستندات مسبقًا.
|
||||
|
||||
```typescript
|
||||
import { Document, SimpleNodeParser } from "llamaindex";
|
||||
|
||||
const nodeParser = new SimpleNodeParser();
|
||||
const nodes = nodeParser.getNodesFromDocuments([
|
||||
new Document({ text: "أنا عمري 10 سنوات. جون عمره 20 سنة." }),
|
||||
]);
|
||||
```
|
||||
|
||||
## TextSplitter (مقسم النص)
|
||||
|
||||
سيقوم مقسم النص الأساسي بتقسيم النص إلى جمل. يمكن أيضًا استخدامه كوحدة مستقلة لتقسيم النص الخام.
|
||||
|
||||
```typescript
|
||||
import { SentenceSplitter } from "llamaindex";
|
||||
|
||||
const splitter = new SentenceSplitter({ chunkSize: 1 });
|
||||
|
||||
const textSplits = splitter.splitText("مرحبًا بالعالم");
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية
|
||||
|
||||
- [SimpleNodeParser (محلل العقدة البسيط)](../../api/classes/SimpleNodeParser.md)
|
||||
- [SentenceSplitter (مقسم الجمل)](../../api/classes/SentenceSplitter.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,45 @@
|
||||
---
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
# مركب الاستجابة (ResponseSynthesizer)
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
مركب الاستجابة (ResponseSynthesizer) مسؤول عن إرسال الاستعلام والعقد وقوالب الاستفسار إلى LLM لتوليد استجابة. هناك بعض وسائط رئيسية لتوليد استجابة:
|
||||
|
||||
- `تحسين`: "إنشاء وتحسين" إجابة عن طريق المرور تتاليًا عبر كل قطعة نص مُسترجعة. يتم إجراء استدعاء LLM منفصل لكل عقدة. جيد للإجابات المفصلة.
|
||||
- `مضغوط وتحسين` (الافتراضي): "ضغط" الاستفسار أثناء كل استدعاء LLM عن طريق حشو أكبر عدد ممكن من قطع النص التي يمكن أن تتناسب مع حجم الاستفسار الأقصى. إذا كان هناك الكثير من القطع لتعبئتها في استفسار واحد، "إنشاء وتحسين" إجابة عن طريق المرور بعدة استفسارات مضغوطة. نفس العملية كـ `تحسين`، ولكن يجب أن تؤدي إلى مزيد من استدعاءات LLM أقل.
|
||||
- `ملخص الشجرة`: بناء شجرة بشكل متكرر بناءً على مجموعة من قطع النص والاستعلام، وإرجاع العقدة الجذرية كاستجابة. جيد لأغراض التلخيص.
|
||||
- `منشئ الاستجابة البسيط`: تطبيق الاستعلام على كل قطعة نص وتجميع الاستجابات في مصفوفة. يعيد سلسلة متصلة من جميع الاستجابات. جيد عندما تحتاج إلى تشغيل نفس الاستعلام بشكل منفصل على كل قطعة نص.
|
||||
|
||||
```typescript
|
||||
import { NodeWithScore, ResponseSynthesizer, TextNode } from "llamaindex";
|
||||
|
||||
const responseSynthesizer = new ResponseSynthesizer();
|
||||
|
||||
const nodesWithScore: NodeWithScore[] = [
|
||||
{
|
||||
node: new TextNode({ text: "أنا عمري 10 سنوات." }),
|
||||
score: 1,
|
||||
},
|
||||
{
|
||||
node: new TextNode({ text: "جون عمره 20 سنة." }),
|
||||
score: 0.5,
|
||||
},
|
||||
];
|
||||
|
||||
const response = await responseSynthesizer.synthesize(
|
||||
"ما هو عمري؟",
|
||||
nodesWithScore,
|
||||
);
|
||||
console.log(response.response);
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية
|
||||
|
||||
- [مركب الاستجابة (ResponseSynthesizer)](../../api/classes/ResponseSynthesizer.md)
|
||||
- [تحسين (Refine)](../../api/classes/Refine.md)
|
||||
- [مضغوط وتحسين (CompactAndRefine)](../../api/classes/CompactAndRefine.md)
|
||||
- [ملخص الشجرة (TreeSummarize)](../../api/classes/TreeSummarize.md)
|
||||
- [منشئ الاستجابة البسيط (SimpleResponseBuilder)](../../api/classes/SimpleResponseBuilder.md)
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# الباحث (Retriever)
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
الباحث في LlamaIndex هو ما يُستخدم لاسترداد العقد (`Node`) من فهرس باستخدام سلسلة الاستعلام. سيقوم الباحث `VectorIndexRetriever` بجلب أعلى k عقد مشابهة. بينما سيقوم الباحث `SummaryIndexRetriever` بجلب جميع العقد بغض النظر عن الاستعلام.
|
||||
|
||||
```typescript
|
||||
const retriever = vector_index.asRetriever();
|
||||
retriever.similarityTopK = 3;
|
||||
|
||||
// جلب العقد!
|
||||
const nodesWithScore = await retriever.retrieve("سلسلة الاستعلام");
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية (API Reference)
|
||||
|
||||
- [SummaryIndexRetriever](../../api/classes/SummaryIndexRetriever.md)
|
||||
- [SummaryIndexLLMRetriever](../../api/classes/SummaryIndexLLMRetriever.md)
|
||||
- [VectorIndexRetriever](../../api/classes/VectorIndexRetriever.md)
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
sidebar_position: 7
|
||||
---
|
||||
|
||||
# التخزين
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
يعمل التخزين في LlamaIndex.TS تلقائيًا بمجرد تكوين كائن `StorageContext`. قم بتكوين `persistDir` وربطه بفهرس.
|
||||
|
||||
في الوقت الحالي ، يتم دعم حفظ وتحميل البيانات من القرص فقط ، مع وجود تكاملات مستقبلية مخططة!
|
||||
|
||||
```typescript
|
||||
import { Document, VectorStoreIndex, storageContextFromDefaults } from "./src";
|
||||
|
||||
const storageContext = await storageContextFromDefaults({
|
||||
persistDir: "./storage",
|
||||
});
|
||||
|
||||
const document = new Document({ text: "نص اختبار" });
|
||||
const index = await VectorStoreIndex.fromDocuments([document], {
|
||||
storageContext,
|
||||
});
|
||||
```
|
||||
|
||||
## مرجع الواجهة البرمجية
|
||||
|
||||
- [StorageContext](../../api/interfaces/StorageContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# دليل البداية
|
||||
|
||||
`تمت ترجمة هذه الوثيقة تلقائيًا وقد تحتوي على أخطاء. لا تتردد في فتح طلب سحب لاقتراح تغييرات.`
|
||||
|
||||
بمجرد [تثبيت LlamaIndex.TS باستخدام NPM](installation) وإعداد مفتاح OpenAI الخاص بك، أنت الآن جاهز لبدء تطبيقك الأول:
|
||||
|
||||
في مجلد جديد:
|
||||
|
||||
```bash npm2yarn
|
||||
npm install typescript
|
||||
npm install @types/node
|
||||
npx tsc --init # إذا لزم الأمر
|
||||
```
|
||||
|
||||
أنشئ ملف `example.ts`. سيقوم هذا الكود بتحميل بعض البيانات المثالية، وإنشاء وثيقة، وفهرسة الوثيقة (مما ينشئ تضمينات باستخدام OpenAI)، ثم إنشاء محرك الاستعلام للإجابة على الأسئلة حول البيانات.
|
||||
|
||||
```ts
|
||||
// example.ts
|
||||
import fs from "fs/promises";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
async function main() {
|
||||
// تحميل المقالة من abramov.txt في Node
|
||||
const essay = await fs.readFile(
|
||||
"node_modules/llamaindex/examples/abramov.txt",
|
||||
"utf-8",
|
||||
);
|
||||
|
||||
// إنشاء كائن Document بواسطة المقالة
|
||||
const document = new Document({ text: essay });
|
||||
|
||||
// تقسيم النص وإنشاء التضمينات. تخزينها في VectorStoreIndex
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
|
||||
// استعلام الفهرس
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const response = await queryEngine.query("ماذا فعل الكاتب في الكلية؟");
|
||||
|
||||
// إخراج الاستجابة
|
||||
console.log(response.toString());
|
||||
}
|
||||
|
||||
main();
|
||||
```
|
||||
|
||||
ثم يمكنك تشغيله باستخدام
|
||||
|
||||
```bash
|
||||
npx ts-node example.ts
|
||||
```
|
||||
|
||||
هل أنت مستعد للمزيد من التعلم؟ تفضل بزيارة منصة NextJS الخاصة بنا على https://llama-playground.vercel.app/. يمكنك العثور على المصدر على https://github.com/run-llama/ts-playground
|
||||
|
||||
"
|
||||
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1 @@
|
||||
../../../../docs/api
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# Високо ниво на концепции
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
LlamaIndex.TS ви помага да създавате приложения, базирани на LLM (например Q&A, чатбот) върху персонализирани данни.
|
||||
|
||||
В това ръководство за високо ниво на концепции ще научите:
|
||||
|
||||
- как LLM може да отговори на въпроси, използвайки вашите собствени данни.
|
||||
- ключови концепции и модули в LlamaIndex.TS за създаване на ваша собствена заявка.
|
||||
|
||||
## Отговаряне на въпроси върху вашите данни
|
||||
|
||||
LlamaIndex използва двустепенен метод при използване на LLM с вашите данни:
|
||||
|
||||
1. **стъпка за индексиране**: подготовка на база от знания и
|
||||
2. **стъпка за заявка**: извличане на съответния контекст от знанията, за да помогне на LLM да отговори на въпрос
|
||||
|
||||

|
||||
|
||||
Този процес е известен също като Retrieval Augmented Generation (RAG).
|
||||
|
||||
LlamaIndex.TS предоставя основния инструментариум, който прави и двете стъпки изключително лесни.
|
||||
|
||||
Нека изследваме всяка стъпка подробно.
|
||||
|
||||
### Стъпка на индексиране
|
||||
|
||||
LlamaIndex.TS ви помага да подготвите базата от знания с помощта на набор от конектори за данни и индекси.
|
||||
|
||||

|
||||
|
||||
[**Data Loaders**](./modules/high_level/data_loader.md):
|
||||
Конектор за данни (т.е. `Reader`) поема данни от различни източници на данни и формати на данни и ги превръща в просто представяне на `Document` (текст и прости метаданни).
|
||||
|
||||
[**Documents / Nodes**](./modules/high_level/documents_and_nodes.md): `Document` е общ контейнер за всякакъв вид данни - например PDF, изход от API или извлечени данни от база данни. `Node` е атомарната единица от данни в LlamaIndex и представлява "част" от източниковия `Document`. Това е богато представяне, което включва метаданни и връзки (към други възли), за да позволи точни и изразителни операции за извличане.
|
||||
|
||||
[**Data Indexes**](./modules/high_level/data_index.md):
|
||||
След като сте поели данните си, LlamaIndex ви помага да индексирате данните във формат, който е лесен за извличане.
|
||||
|
||||
Под капака, LlamaIndex анализира суровите документи в промеждинни представяния, изчислява векторни вложения и съхранява данните в паметта или на диска.
|
||||
|
||||
"
|
||||
|
||||
### Стъпка за заявка
|
||||
|
||||
В стъпката за заявка, конвейерът за заявки извлича най-съответния контекст, даден на потребителска заявка,
|
||||
и го предава на LLM (заедно със заявката), за да синтезира отговор.
|
||||
|
||||
Това дава на LLM актуални познания, които не са в неговите оригинални обучаващи данни,
|
||||
(също така намалява халюцинацията).
|
||||
|
||||
Основното предизвикателство в стъпката за заявка е извличането, организирането и резонирането върху (потенциално много) бази от знания.
|
||||
|
||||
LlamaIndex предоставя модули, които могат да се комбинират и помагат за създаването и интегрирането на RAG конвейери за Q&A (заявки), чатбот (чат двигател) или като част от агент.
|
||||
|
||||
Тези строителни блокове могат да бъдат персонализирани, за да отразяват предпочитанията за ранжиране, както и да бъдат комбинирани, за да резонират върху множество бази от знания по структуриран начин.
|
||||
|
||||

|
||||
|
||||
#### Строителни блокове
|
||||
|
||||
[**Извличатели**](./modules/low_level/retriever.md):
|
||||
Извличател дефинира как да се извлича ефективно съответния контекст от база от знания (т.е. индекс), когато се предостави заявка.
|
||||
Конкретната логика за извличане се различава за различни индекси, като най-популярното е плътно извличане срещу векторен индекс.
|
||||
|
||||
[**Синтезатори на отговори**](./modules/low_level/response_synthesizer.md):
|
||||
Синтезаторът на отговор генерира отговор от LLM, използвайки потребителска заявка и даден набор от извлечени текстови части.
|
||||
|
||||
"
|
||||
|
||||
#### Конвейери
|
||||
|
||||
[**Заявки**](./modules/high_level/query_engine.md):
|
||||
Заявката е цялостен конвейер, който ви позволява да задавате въпроси относно вашите данни.
|
||||
Тя приема заявка на естествен език и връща отговор, заедно с извлечения контекст, предаден на LLM.
|
||||
|
||||
[**Чат двигатели**](./modules/high_level/chat_engine.md):
|
||||
Чат двигателът е цялостен конвейер за провеждане на разговор с вашите данни
|
||||
(множество въпроси и отговори вместо единичен въпрос и отговор).
|
||||
|
||||
"
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Примери от начало до край
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
Включени са няколко примера от начало до край, използвайки LlamaIndex.TS в хранилището
|
||||
|
||||
Разгледайте примерите по-долу или ги опитайте и завършете за минути с интерактивни уроци на Github Codespace, предоставени от Dev-Docs [тук](https://codespaces.new/team-dev-docs/lits-dev-docs-playground?devcontainer_path=.devcontainer%2Fjavascript_ltsquickstart%2Fdevcontainer.json):
|
||||
|
||||
## [Чат двигател (Chat Engine)](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/chatEngine.ts)
|
||||
|
||||
Прочетете файл и обсъждайте го с LLM.
|
||||
|
||||
## [Векторен индекс](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndex.ts)
|
||||
|
||||
Създайте векторен индекс и го запитайте. Векторният индекс ще използва вграждания, за да извлече най-релевантните k върха. По подразбиране, k е 2.
|
||||
|
||||
"
|
||||
|
||||
## [Summary Index](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/summaryIndex.ts)
|
||||
|
||||
Създайте списъчен индекс и го заявете. Този пример също използва `LLMRetriever`, който използва LLM, за да избере най-добрите възли за използване при генериране на отговор.
|
||||
|
||||
"
|
||||
|
||||
## [Запазване / Зареждане на индекс](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/storageContext.ts)
|
||||
|
||||
Създайте и заредете векторен индекс. Запазването на диска в LlamaIndex.TS става автоматично, веднага след като е създаден обект за контекст на съхранение.
|
||||
|
||||
## [Персонализиран векторен индекс](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndexCustomize.ts)
|
||||
|
||||
Създайте векторен индекс и го заявете, като конфигурирате `LLM`, `ServiceContext` и `similarity_top_k`.
|
||||
|
||||
"
|
||||
|
||||
## [OpenAI LLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/openai.ts)
|
||||
|
||||
Създайте OpenAI LLM и го използвайте директно за чат.
|
||||
|
||||
## [Llama2 DeuceLLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/llamadeuce.ts)
|
||||
|
||||
Създайте Llama-2 LLM и го използвайте директно за чат.
|
||||
|
||||
## [SubQuestionQueryEngine](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts)
|
||||
|
||||
Използва `SubQuestionQueryEngine`, който разбива сложни заявки на множество въпроси и след това агрегира отговорите на всички под-въпроси.
|
||||
|
||||
"
|
||||
|
||||
## [Модули с ниско ниво](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/lowlevel.ts)
|
||||
|
||||
Този пример използва няколко компонента с ниско ниво, които премахват нуждата от реален двигател за заявки. Тези компоненти могат да се използват навсякъде, във всяко приложение или да бъдат персонализирани и подкласирани, за да отговарят на вашите нужди.
|
||||
|
||||
"
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Среди
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
LlamaIndex в момента официално поддържа NodeJS 18 и NodeJS 20.
|
||||
|
||||
## NextJS App Router
|
||||
|
||||
Ако използвате обработчици на маршрути/сървърни функции на NextJS App Router, ще трябва да използвате режима на NodeJS:
|
||||
|
||||
```js
|
||||
export const runtime = "nodejs"; // по подразбиране
|
||||
```
|
||||
|
||||
и ще трябва да добавите изключение за pdf-parse във вашия next.config.js
|
||||
|
||||
```js
|
||||
// next.config.js
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
experimental: {
|
||||
serverComponentsExternalPackages: ["pdf-parse"], // Поставя pdf-parse в реален режим на NodeJS с NextJS App Router
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = nextConfig;
|
||||
```
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
|
||||
# Инсталация и настройка
|
||||
|
||||
```Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.```
|
||||
|
||||
|
||||
Уверете се, че имате NodeJS v18 или по-нова версия.
|
||||
|
||||
|
||||
## Използване на create-llama
|
||||
|
||||
Най-лесният начин да започнете с LlamaIndex е чрез използването на `create-llama`. Този инструмент с команден ред ви позволява бързо да започнете да създавате ново приложение LlamaIndex, като всичко е настроено за вас.
|
||||
|
||||
Просто изпълнете
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="1" label="npm" default>
|
||||
|
||||
```bash
|
||||
npx create-llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="2" label="Yarn">
|
||||
|
||||
```bash
|
||||
yarn create llama
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="3" label="pnpm">
|
||||
|
||||
```bash
|
||||
pnpm create llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
за да започнете. След като приложението ви е генерирано, изпълнете
|
||||
|
||||
```bash npm2yarn
|
||||
npm run dev
|
||||
```
|
||||
|
||||
за да стартирате сървъра за разработка. След това можете да посетите [http://localhost:3000](http://localhost:3000), за да видите вашето приложение.
|
||||
## Инсталация от NPM
|
||||
|
||||
```bash npm2yarn
|
||||
npm install llamaindex
|
||||
```
|
||||
|
||||
|
||||
### Променливи на средата
|
||||
|
||||
Нашият пример използва OpenAI по подразбиране. Ще трябва да настроите вашия Open AI ключ по следния начин:
|
||||
|
||||
```bash
|
||||
export OPENAI_API_KEY="sk-......" # Заменете с вашия ключ от https://platform.openai.com/account/api-keys
|
||||
```
|
||||
|
||||
Ако искате да го зареждате автоматично всеки път, добавете го към вашия .zshrc/.bashrc.
|
||||
|
||||
ВНИМАНИЕ: не добавяйте вашия OpenAI ключ в системата за контрол на версиите.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
slug: /
|
||||
---
|
||||
|
||||
# Какво е LlamaIndex.TS?
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
LlamaIndex.TS е рамка за данни за приложения на LLM, която позволява внасяне, структуриране и достъп до частни или специфични за домейна данни. Въпреки че има наличен и пакет на Python (вижте [тук](https://docs.llamaindex.ai/en/stable/)), LlamaIndex.TS предлага основни функции в едно просто пакетиране, оптимизирано за използване с TypeScript.
|
||||
|
||||
## 🚀 Защо LlamaIndex.TS?
|
||||
|
||||
В основата си, LLM-ите предлагат естествен езиков интерфейс между хората и изводените данни. Широко разпространените модели са предварително обучени на голямо количество публично достъпни данни, от Уикипедия и списания до учебници и изходен код.
|
||||
|
||||
Приложенията, построени върху LLM-и, често изискват допълване на тези модели с частни или специфични за домейна данни. За съжаление, тези данни могат да бъдат разпределени в различни приложения и хранилища на данни. Те се намират зад API-и, в SQL бази данни или са затворени в PDF файлове и презентации.
|
||||
|
||||
Тук идва **LlamaIndex.TS**.
|
||||
|
||||
## 🦙 Как може да помогне LlamaIndex.TS?
|
||||
|
||||
LlamaIndex.TS предоставя следните инструменти:
|
||||
|
||||
- **Зареждане на данни** - внасяйте вашите съществуващи данни във формат `.txt`, `.pdf`, `.csv`, `.md` и `.docx` директно
|
||||
- **Индекси на данни** - структурирайте данните си в промежуточни представяния, които са лесни и ефективни за консумация от LLM.
|
||||
- **Двигатели** - предоставят достъп до вашите данни чрез естествен език. Например:
|
||||
- Заявителни двигатели са мощни интерфейси за извличане на знания.
|
||||
- Чат двигатели са разговорни интерфейси за многократни, "напред и назад" взаимодействия с вашите данни.
|
||||
|
||||
"
|
||||
|
||||
## 👨👩👧👦 За кого е LlamaIndex?
|
||||
|
||||
LlamaIndex.TS предоставя основен набор от инструменти, необходими за всеки, който създава LLM приложения с JavaScript и TypeScript.
|
||||
|
||||
Нашето API на високо ниво позволява на начинаещите потребители да използват LlamaIndex.TS за внасяне и заявка на техните данни.
|
||||
|
||||
За по-сложни приложения нашите API на по-ниско ниво позволяват на напредналите потребители да персонализират и разширят всяко модул - връзки с данни, индекси, извличатели и заявки, за да отговарят на техните нужди.
|
||||
|
||||
## Започване
|
||||
|
||||
`npm install llamaindex`
|
||||
|
||||
Документацията ни включва [Инструкции за инсталиране](./installation.md) и [Урок за начинаещи](./starter.md), за да построите първото си приложение.
|
||||
|
||||
След като сте готови, [Високо ниво концепции](./concepts.md) представя общ преглед на модулната архитектура на LlamaIndex. За повече практически примери, разгледайте нашите [Уроци от начало до край](./end_to_end.md).
|
||||
|
||||
## 🗺️ Екосистема
|
||||
|
||||
За да изтеглите или допринесете, намерете LlamaIndex на:
|
||||
|
||||
- Github: https://github.com/run-llama/LlamaIndexTS
|
||||
- NPM: https://www.npmjs.com/package/llamaindex
|
||||
|
||||
"
|
||||
|
||||
## Общност
|
||||
|
||||
Нуждаете се от помощ? Имате предложение за функционалност? Присъединете се към общността на LlamaIndex:
|
||||
|
||||
- Twitter: https://twitter.com/llama_index
|
||||
- Discord: https://discord.gg/dGcwcsnxhU
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Чат двигател (ChatEngine)
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
Чат двигателят е бърз и прост начин да чатите с данните във вашата индекс.
|
||||
|
||||
```typescript
|
||||
const retriever = index.asRetriever();
|
||||
const chatEngine = new ContextChatEngine({ retriever });
|
||||
|
||||
// започнете да чатите
|
||||
const response = await chatEngine.chat(query);
|
||||
```
|
||||
|
||||
## Api Референции
|
||||
|
||||
- [Чат двигател за контекст (ContextChatEngine)](../../api/classes/ContextChatEngine.md)
|
||||
- [Чат двигател за кондензиране на въпроси (CondenseQuestionChatEngine)](../../api/classes/ContextChatEngine.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Индекс
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
Индексът е основният контейнер и организация за вашите данни. LlamaIndex.TS поддържа два вида индекси:
|
||||
|
||||
- `VectorStoreIndex` - ще изпраща най-добрите `Node` до LLM при генериране на отговор. По подразбиране, най-добрите два.
|
||||
- `SummaryIndex` - ще изпраща всеки `Node` в индекса до LLM, за да генерира отговор.
|
||||
|
||||
```typescript
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
const document = new Document({ text: "тест" });
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
```
|
||||
|
||||
## API Референция
|
||||
|
||||
- [SummaryIndex](../../api/classes/SummaryIndex.md)
|
||||
- [VectorStoreIndex](../../api/classes/VectorStoreIndex.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Четец / Зареждач
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
LlamaIndex.TS поддържа лесно зареждане на файлове от папки с помощта на класа `SimpleDirectoryReader`. В момента се поддържат файлове с разширения `.txt`, `.pdf`, `.csv`, `.md` и `.docx`, с планове за добавяне на още в бъдеще!
|
||||
|
||||
```typescript
|
||||
import { SimpleDirectoryReader } from "llamaindex";
|
||||
|
||||
documents = new SimpleDirectoryReader().loadData("./data");
|
||||
```
|
||||
|
||||
## API Референция
|
||||
|
||||
- [SimpleDirectoryReader](../../api/classes/SimpleDirectoryReader.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
# Документи и Възли
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
`Документи` и `Възли` са основните строителни блокове на всяко индексиране. Въпреки че API-то за тези обекти е подобно, обектите `Документ` представляват цели файлове, докато `Възли` са по-малки части от оригиналния документ, които са подходящи за LLM и Q&A.
|
||||
|
||||
```typescript
|
||||
import { Document } from "llamaindex";
|
||||
|
||||
document = new Document({ text: "текст", metadata: { key: "val" } });
|
||||
```
|
||||
|
||||
## API Референция
|
||||
|
||||
- [Документ](../../api/classes/Document.md)
|
||||
- [ТекстовВъзел](../../api/classes/TextNode.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# QueryEngine (Заявка на двигател)
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
Заявка на двигател обвива `Retriever` и `ResponseSynthesizer` в тръбопровод, който използва низа от заявки, за да извлече възли и след това ги изпраща към LLM, за да генерира отговор.
|
||||
|
||||
```typescript
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const response = await queryEngine.query("query string");
|
||||
```
|
||||
|
||||
## Заявка на подзапитване на двигател
|
||||
|
||||
Основната концепция на Заявка на подзапитване на двигател е, че тя разделя една заявка на множество заявки, получава отговор за всяка от тези заявки и след това комбинира тези различни отговори в един цялостен отговор за потребителя. Можете да си представите това като техника за "мислене стъпка по стъпка", но като итерира върху източниците на данни!
|
||||
|
||||
### Започване
|
||||
|
||||
Най-лесният начин да започнете да използвате Заявка на подзапитване на двигател е да стартирате файла subquestion.ts в [примерите](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts).
|
||||
|
||||
```bash
|
||||
npx ts-node subquestion.ts
|
||||
```
|
||||
|
||||
### Инструменти
|
||||
|
||||
Заявка на подзапитване на двигател е реализирана с инструменти. Основната идея на инструментите е, че те са изпълними опции за големия езиков модел. В този случай нашият Заявка на подзапитване на двигател разчита на QueryEngineTool, който, както се предполага, е инструмент за изпълнение на заявки върху QueryEngine. Това ни позволява да дадем на модела възможност да заявява различни документи за различни въпроси, например. Също така можем да си представим, че Заявка на подзапитване на двигател може да използва инструмент, който търси нещо в Интернет или получава отговор, използвайки Wolfram Alpha.
|
||||
|
||||
Можете да научите повече за инструментите, като разгледате документацията на LlamaIndex Python https://gpt-index.readthedocs.io/en/latest/core_modules/agent_modules/tools/root.html
|
||||
|
||||
## API Reference (API справка)
|
||||
|
||||
- [RetrieverQueryEngine (Заявка на двигател за извличане)](../../api/classes/RetrieverQueryEngine.md)
|
||||
- [SubQuestionQueryEngine (Заявка на двигател за подзапитване)](../../api/classes/SubQuestionQueryEngine.md)
|
||||
- [QueryEngineTool (Инструмент за заявка на двигател)](../../api/interfaces/QueryEngineTool.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,33 @@
|
||||
# Основни модули
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
LlamaIndex.TS предлага няколко основни модула, разделени на модули на високо ниво, за бързо стартиране, и модули на ниско ниво, за персонализиране на ключовите компоненти според вашите нужди.
|
||||
|
||||
## Модули на високо ниво
|
||||
|
||||
- [**Документ**](./high_level/documents_and_nodes.md): Документ представлява текстов файл, PDF файл или друг непрекъснат парче данни.
|
||||
|
||||
- [**Възел**](./high_level/documents_and_nodes.md): Основният строителен блок от данни. Най-често това са части от документа, разделени на управляеми парчета, достатъчно малки, за да бъдат подадени на модел за вграждане и LLM.
|
||||
|
||||
- [**Четец/Зареждач**](./high_level/data_loader.md): Четецът или зареждачът е нещо, което приема документ от реалния свят и го преобразува в клас Документ, който после може да се използва в индекса и заявките ви. В момента поддържаме обикновени текстови файлове и PDF файлове, с много други, които ще бъдат добавени.
|
||||
|
||||
- [**Индекси**](./high_level/data_index.md): Индексите съхраняват Възлите и вгражданията на тези възли.
|
||||
|
||||
- [**QueryEngine**](./high_level/query_engine.md): Заявките са това, което генерира заявката, която въвеждате и ви връща резултата. Заявките обикновено комбинират предварително изграден prompt със избрани възли от вашия индекс, за да предоставят на LLM контекста, от който се нуждае, за да отговори на вашата заявка.
|
||||
|
||||
- [**ChatEngine**](./high_level/chat_engine.md): ChatEngine ви помага да построите чатбот, който ще взаимодейства с вашите индекси.
|
||||
|
||||
## Модули на ниско ниво
|
||||
|
||||
- [**LLM**](./low_level/llm.md): Класът LLM е обединен интерфейс над голям доставчик на модели на езика като OpenAI GPT-4, Anthropic Claude или Meta LLaMA. Можете да го наследите, за да напишете конектор към собствен модел на голям език.
|
||||
|
||||
- [**Embedding**](./low_level/embedding.md): Вграждането се представя като вектор от числа с плаваща запетая. Нашето вграждане по подразбиране е OpenAI's text-embedding-ada-002 и всяко вграждане, което генерира, се състои от 1,536 числа с плаваща запетая. Друго популярно вграждане е BERT, което използва 768 числа с плаваща запетая, за да представи всеки възел. Предоставяме няколко помощни функции за работа с вграждания, включително 3 опции за изчисляване на подобие и Maximum Marginal Relevance.
|
||||
|
||||
- [**TextSplitter/NodeParser**](./low_level/node_parser.md): Стратегиите за разделяне на текст са изключително важни за общата ефективност на търсенето на вграждания. В момента, въпреки че имаме стойност по подразбиране, няма универсално решение. В зависимост от източниците на документите, може да искате да използвате различни размери и стратегии за разделяне. В момента поддържаме разделяне по фиксиран размер, разделяне по фиксиран размер с препокриващи се секции, разделяне по изречение и разделяне по параграф. TextSplitter се използва от NodeParser при разделянето на `Document` на `Node`.
|
||||
|
||||
- [**Retriever**](./low_level/retriever.md): Retriever е този, който наистина избира възлите за връщане от индекса. Тук може да желаете да опитате да вземете повече или по-малко възли за всяка заявка, да промените функцията за подобие или да създадете собствен retriever за всеки отделен случай в приложението си. Например може да желаете да имате отделен retriever за съдържание на код срещу текстово съдържание.
|
||||
|
||||
- [**ResponseSynthesizer**](./low_level/response_synthesizer.md): ResponseSynthesizer е отговорен за вземането на низ от заявка и използването на списък от `Node`-и за генериране на отговор. Това може да бъде в различни форми, като обхождане на всички контексти и уточняване на отговор, или изграждане на дърво от резюмета и връщане на кореновото резюме.
|
||||
|
||||
- [**Storage**](./low_level/storage.md): На някакъв етап ще искате да съхранявате индексите, данните и векторите си, вместо да изпълнявате моделите за вграждане всеки път. IndexStore, DocStore, VectorStore и KVStore са абстракции, които ви позволяват да го направите. Заедно те формират StorageContext. В момента ви позволяваме да запазвате вгражданията си във файлове на файловата система (или виртуална файлова система в паметта), но също така активно добавяме интеграции към Vector Databases.
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Вграждане (Embedding)
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
Моделът за вграждане в LlamaIndex е отговорен за създаването на числови представяния на текст. По подразбиране, LlamaIndex използва модела `text-embedding-ada-002` от OpenAI.
|
||||
|
||||
Това може да бъде явно зададено в обекта `ServiceContext`.
|
||||
|
||||
```typescript
|
||||
import { OpenAIEmbedding, serviceContextFromDefaults } from "llamaindex";
|
||||
|
||||
const openaiEmbeds = new OpenAIEmbedding();
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({ embedModel: openaiEmbeds });
|
||||
```
|
||||
|
||||
## API Референция
|
||||
|
||||
- [OpenAIEmbedding](../../api/classes/OpenAIEmbedding.md)
|
||||
- [ServiceContext](../../api/interfaces/ServiceContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
# LLM
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
LLM е отговорен за четене на текст и генериране на отговори на естествен език на заявки. По подразбиране, LlamaIndex.TS използва `gpt-3.5-turbo`.
|
||||
|
||||
LLM може да бъде явно зададен в обекта `ServiceContext`.
|
||||
|
||||
```typescript
|
||||
import { OpenAI, serviceContextFromDefaults } from "llamaindex";
|
||||
|
||||
const openaiLLM = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0 });
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({ llm: openaiLLM });
|
||||
```
|
||||
|
||||
## API Референция
|
||||
|
||||
- [OpenAI](../../api/classes/OpenAI.md)
|
||||
- [ServiceContext](../../api/interfaces/ServiceContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,37 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# NodeParser (Анализатор на възли)
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
`NodeParser` в LlamaIndex е отговорен за разделянето на обекти от тип `Document` на по-лесни за управление обекти от тип `Node`. Когато извикате `.fromDocuments()`, `NodeParser` от `ServiceContext` се използва автоматично за това. Алтернативно, можете да го използвате, за да разделяте документи предварително.
|
||||
|
||||
```typescript
|
||||
import { Document, SimpleNodeParser } from "llamaindex";
|
||||
|
||||
const nodeParser = new SimpleNodeParser();
|
||||
const nodes = nodeParser.getNodesFromDocuments([
|
||||
new Document({ text: "Аз съм на 10 години. Джон е на 20 години." }),
|
||||
]);
|
||||
```
|
||||
|
||||
## TextSplitter (TextSplitter)
|
||||
|
||||
Основният разделящ текст ще раздели текста на изречения. Той може също да се използва като самостоятелен модул за разделяне на суров текст.
|
||||
|
||||
```typescript
|
||||
import { SentenceSplitter } from "llamaindex";
|
||||
|
||||
const splitter = new SentenceSplitter({ chunkSize: 1 });
|
||||
|
||||
const textSplits = splitter.splitText("Здравей, свят");
|
||||
```
|
||||
|
||||
## API Reference (API справка)
|
||||
|
||||
- [SimpleNodeParser (Прост анализатор на възли)](../../api/classes/SimpleNodeParser.md)
|
||||
- [SentenceSplitter (Разделяне на изречения)](../../api/classes/SentenceSplitter.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
# ResponseSynthesizer (Синтезатор на отговори)
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
ResponseSynthesizer е отговорен за изпращането на заявката, възлите и шаблоните за подсказки към LLM, за да генерира отговор. Има няколко ключови режима за генериране на отговор:
|
||||
|
||||
- `Refine` (Подобряване): "създаване и подобряване" на отговор, като последователно се преминава през всеки извлечен текстов фрагмент. Това прави отделно LLM обаждане за всеки възел. Подходящо за по-подробни отговори.
|
||||
- `CompactAndRefine` (Компактно и подобряване) (по подразбиране): "компактиране" на подсказката по време на всяко LLM обаждане, като се пълни с колкото може повече текстови фрагменти, които могат да се поберат в максималния размер на подсказката. Ако има твърде много фрагменти, които не могат да се поберат в една подсказка, се "създава и подобрява" отговор, като се преминава през няколко компактни подсказки. Същото като `refine`, но трябва да доведе до по-малко LLM обаждания.
|
||||
- `TreeSummarize` (Сумиране на дърво): Дадени набор от текстови фрагменти и заявката, рекурсивно се конструира дърво и се връща кореновият възел като отговор. Подходящо за цели на сумиране.
|
||||
- `SimpleResponseBuilder` (Прост създател на отговори): Дадени набор от текстови фрагменти и заявката, се прилага заявката към всеки текстов фрагмент, като се натрупват отговорите в масив. Връща конкатениран низ от всички отговори. Подходящо, когато трябва да изпълните същата заявка отделно за всеки текстов фрагмент.
|
||||
|
||||
```typescript
|
||||
import { NodeWithScore, ResponseSynthesizer, TextNode } from "llamaindex";
|
||||
|
||||
const responseSynthesizer = new ResponseSynthesizer();
|
||||
|
||||
const nodesWithScore: NodeWithScore[] = [
|
||||
{
|
||||
node: new TextNode({ text: "Аз съм на 10 години." }),
|
||||
score: 1,
|
||||
},
|
||||
{
|
||||
node: new TextNode({ text: "Джон е на 20 години." }),
|
||||
score: 0.5,
|
||||
},
|
||||
];
|
||||
|
||||
const response = await responseSynthesizer.synthesize(
|
||||
"Колко години съм?",
|
||||
nodesWithScore,
|
||||
);
|
||||
console.log(response.response);
|
||||
```
|
||||
|
||||
## API Референция
|
||||
|
||||
- [ResponseSynthesizer (Синтезатор на отговори)](../../api/classes/ResponseSynthesizer.md)
|
||||
- [Refine (Подобряване)](../../api/classes/Refine.md)
|
||||
- [CompactAndRefine (Компактно и подобряване)](../../api/classes/CompactAndRefine.md)
|
||||
- [TreeSummarize (Сумиране на дърво)](../../api/classes/TreeSummarize.md)
|
||||
- [SimpleResponseBuilder (Прост създател на отговори)](../../api/classes/SimpleResponseBuilder.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Retriever (Извличател)
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
Извличател в LlamaIndex е това, което се използва за извличане на `Node` от индекс чрез заявка. `VectorIndexRetriever` ще извлече най-подобните k върха. В същото време, `SummaryIndexRetriever` ще извлече всички върхове, независимо от заявката.
|
||||
|
||||
```typescript
|
||||
const retriever = vector_index.asRetriever();
|
||||
retriever.similarityTopK = 3;
|
||||
|
||||
// Извличане на върхове!
|
||||
const nodesWithScore = await retriever.retrieve("query string");
|
||||
```
|
||||
|
||||
## API Reference (API справка)
|
||||
|
||||
- [SummaryIndexRetriever](../../api/classes/SummaryIndexRetriever.md)
|
||||
- [SummaryIndexLLMRetriever](../../api/classes/SummaryIndexLLMRetriever.md)
|
||||
- [VectorIndexRetriever](../../api/classes/VectorIndexRetriever.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
sidebar_position: 7
|
||||
---
|
||||
|
||||
# Съхранение (Storage)
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
Съхранението в LlamaIndex.TS работи автоматично, след като сте конфигурирали обект `StorageContext`. Просто конфигурирайте `persistDir` и го свържете с индекс.
|
||||
|
||||
В момента се поддържа само запазване и зареждане от диск, с планирани бъдещи интеграции!
|
||||
|
||||
```typescript
|
||||
import { Document, VectorStoreIndex, storageContextFromDefaults } from "./src";
|
||||
|
||||
const storageContext = await storageContextFromDefaults({
|
||||
persistDir: "./storage",
|
||||
});
|
||||
|
||||
const document = new Document({ text: "Тестов текст" });
|
||||
const index = await VectorStoreIndex.fromDocuments([document], {
|
||||
storageContext,
|
||||
});
|
||||
```
|
||||
|
||||
## API Референция
|
||||
|
||||
- [StorageContext](../../api/interfaces/StorageContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Начално ръководство
|
||||
|
||||
`Тази документация е преведена автоматично и може да съдържа грешки. Не се колебайте да отворите Pull Request, за да предложите промени.`
|
||||
|
||||
След като сте [инсталирали LlamaIndex.TS с помощта на NPM](installation) и сте настроили вашия OpenAI ключ, вие сте готови да стартирате първото си приложение:
|
||||
|
||||
В нова папка:
|
||||
|
||||
```bash npm2yarn
|
||||
npm install typescript
|
||||
npm install @types/node
|
||||
npx tsc --init # ако е необходимо
|
||||
```
|
||||
|
||||
Създайте файла `example.ts`. Този код ще зареди някакви примерни данни, ще създаде документ, ще го индексира (което създава вграждания с помощта на OpenAI) и след това ще създаде търсачка, която да отговаря на въпроси относно данните.
|
||||
|
||||
```ts
|
||||
// example.ts
|
||||
import fs from "fs/promises";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
async function main() {
|
||||
// Заредете есе от abramov.txt в Node
|
||||
const essay = await fs.readFile(
|
||||
"node_modules/llamaindex/examples/abramov.txt",
|
||||
"utf-8",
|
||||
);
|
||||
|
||||
// Създайте обект Document с есето
|
||||
const document = new Document({ text: essay });
|
||||
|
||||
// Разделете текста и създайте вграждания. Запазете ги в VectorStoreIndex
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
|
||||
// Заявете индекса
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const response = await queryEngine.query(
|
||||
"Какво направи авторът по време на колеж?",
|
||||
);
|
||||
|
||||
// Изведете отговора
|
||||
console.log(response.toString());
|
||||
}
|
||||
|
||||
main();
|
||||
```
|
||||
|
||||
След това можете да го стартирате чрез
|
||||
|
||||
```bash
|
||||
npx ts-node example.ts
|
||||
```
|
||||
|
||||
Готови ли сте да научите още? Проверете нашия NextJS игрален площад на адрес https://llama-playground.vercel.app/. Изходният код е достъпен на адрес https://github.com/run-llama/ts-playground
|
||||
|
||||
"
|
||||
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1 @@
|
||||
../../../../docs/api
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# Conceptes de Nivell Alt
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
LlamaIndex.TS t'ajuda a construir aplicacions amb potència LLM (per exemple, Q&A, chatbot) sobre dades personalitzades.
|
||||
|
||||
En aquesta guia de conceptes de nivell alt, aprendràs:
|
||||
|
||||
- com un LLM pot respondre preguntes utilitzant les teves pròpies dades.
|
||||
- conceptes clau i mòduls en LlamaIndex.TS per compondre la teva pròpia canalització de consulta.
|
||||
|
||||
## Resposta a preguntes a través de les teves dades
|
||||
|
||||
LlamaIndex utilitza un mètode de dues etapes quan utilitza un LLM amb les teves dades:
|
||||
|
||||
1. **etapa d'indexació**: preparació d'una base de coneixement, i
|
||||
2. **etapa de consulta**: recuperació de context rellevant de la base de coneixement per ajudar el LLM a respondre a una pregunta
|
||||
|
||||

|
||||
|
||||
Aquest procés també és conegut com a Generació Augmentada per Recuperació (RAG).
|
||||
|
||||
LlamaIndex.TS proporciona les eines essencials per facilitar ambdós passos.
|
||||
|
||||
Explorarem cada etapa en detall.
|
||||
|
||||
### Etapa d'Indexació
|
||||
|
||||
LlamaIndex.TS t'ajuda a preparar la base de coneixement amb una sèrie de connectors de dades i índexs.
|
||||
|
||||

|
||||
|
||||
[**Carregadors de Dades**](./modules/high_level/data_loader.md):
|
||||
Un connector de dades (és a dir, `Reader`) ingestiona dades de diferents fonts de dades i formats de dades en una representació simple de `Document` (text i metadades simples).
|
||||
|
||||
[**Documents / Nodes**](./modules/high_level/documents_and_nodes.md): Un `Document` és un contenidor genèric al voltant de qualsevol font de dades - per exemple, un PDF, una sortida d'API o dades recuperades d'una base de dades. Un `Node` és la unitat atòmica de dades en LlamaIndex i representa un "tros" d'un `Document` origen. És una representació completa que inclou metadades i relacions (amb altres nodes) per permetre operacions de recuperació precises i expressives.
|
||||
|
||||
[**Índexs de Dades**](./modules/high_level/data_index.md):
|
||||
Un cop hagis ingestat les teves dades, LlamaIndex t'ajuda a indexar les dades en un format fàcil de recuperar.
|
||||
|
||||
A sota dels panells, LlamaIndex analitza els documents en representacions intermèdies, calcula incrustacions vectorials i emmagatzema les teves dades a la memòria o al disc.
|
||||
|
||||
"
|
||||
|
||||
### Etapa de Consulta
|
||||
|
||||
En l'etapa de consulta, la canalització de consulta recupera el context més rellevant donada una consulta de l'usuari,
|
||||
i ho passa al LLM (juntament amb la consulta) per sintetitzar una resposta.
|
||||
|
||||
Això proporciona al LLM un coneixement actualitzat que no es troba en les seves dades d'entrenament originals,
|
||||
(i també redueix la al·lucinació).
|
||||
|
||||
El repte clau en l'etapa de consulta és la recuperació, l'orquestració i el raonament sobre bases de coneixement (potencialment moltes).
|
||||
|
||||
LlamaIndex proporciona mòduls componibles que t'ajuden a construir i integrar canalitzacions RAG per a Q&A (motor de consulta), chatbot (motor de xat) o com a part d'un agent.
|
||||
|
||||
Aquests blocs de construcció es poden personalitzar per reflectir les preferències de classificació, així com compondre el raonament sobre múltiples bases de coneixement de manera estructurada.
|
||||
|
||||

|
||||
|
||||
#### Blocs de Construcció
|
||||
|
||||
[**Recuperadors**](./modules/low_level/retriever.md):
|
||||
Un recuperador defineix com recuperar eficientment el context rellevant d'una base de coneixement (és a dir, índex) quan se li dóna una consulta.
|
||||
La lògica de recuperació específica difereix per a diferents índexs, sent la més popular la recuperació densa contra un índex vectorial.
|
||||
|
||||
[**Sintetitzadors de Resposta**](./modules/low_level/response_synthesizer.md):
|
||||
Un sintetitzador de resposta genera una resposta a partir d'un LLM, utilitzant una consulta de l'usuari i un conjunt donat de trossos de text recuperats.
|
||||
|
||||
"
|
||||
|
||||
#### Canalitzacions
|
||||
|
||||
[**Motor de Consulta**](./modules/high_level/query_engine.md):
|
||||
Un motor de consulta és una canalització de cap a cap que et permet fer preguntes sobre les teves dades.
|
||||
Rebutja una consulta en llenguatge natural i retorna una resposta, juntament amb el context de referència recuperat i passat al LLM.
|
||||
|
||||
[**Motor de Xat**](./modules/high_level/chat_engine.md):
|
||||
Un motor de xat és una canalització de cap a cap per mantenir una conversa amb les teves dades
|
||||
(múltiples intercanvis en lloc d'una única pregunta i resposta).
|
||||
|
||||
"
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Exemples de principi a fi
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
Incluïm diversos exemples de principi a fi utilitzant LlamaIndex.TS en el repositori.
|
||||
|
||||
Comproveu els exemples a continuació o proveu-los i completeu-los en qüestió de minuts amb els tutorials interactius de Github Codespace proporcionats per Dev-Docs [aquí](https://codespaces.new/team-dev-docs/lits-dev-docs-playground?devcontainer_path=.devcontainer%2Fjavascript_ltsquickstart%2Fdevcontainer.json):
|
||||
|
||||
## [Motor de xat](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/chatEngine.ts)
|
||||
|
||||
Llegeix un fitxer i xerra sobre això amb el LLM.
|
||||
|
||||
## [Índex de vectors](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndex.ts)
|
||||
|
||||
Creeu un índex de vectors i consulteu-lo. L'índex de vectors utilitzarà incrustacions per obtenir els nodes més rellevants més importants. Per defecte, els nodes més importants són 2.
|
||||
|
||||
"
|
||||
|
||||
## [Índex de resum](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/summaryIndex.ts)
|
||||
|
||||
Creeu un índex de llista i consulteu-lo. Aquest exemple també utilitza el `LLMRetriever`, que utilitzarà el LLM per seleccionar els millors nodes a utilitzar en la generació de la resposta.
|
||||
|
||||
"
|
||||
|
||||
## [Guardar / Carregar un Índex](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/storageContext.ts)
|
||||
|
||||
Creeu i carregueu un índex de vectors. La persistència al disc en LlamaIndex.TS es produeix automàticament una vegada que es crea un objecte de context d'emmagatzematge.
|
||||
|
||||
## [Índex de vectors personalitzat](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndexCustomize.ts)
|
||||
|
||||
Creeu un índex de vectors i consulteu-lo, mentre configureu el `LLM`, el `ServiceContext` i el `similarity_top_k`.
|
||||
|
||||
## [OpenAI LLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/openai.ts)
|
||||
|
||||
Crea un OpenAI LLM i utilitza'l directament per a xatejar.
|
||||
|
||||
"
|
||||
|
||||
## [Llama2 DeuceLLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/llamadeuce.ts)
|
||||
|
||||
Crea un Llama-2 LLM i utilitza'l directament per a xatejar.
|
||||
|
||||
"
|
||||
|
||||
## [Motor de consulta de subpreguntes](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts)
|
||||
|
||||
Utilitza el `Motor de consulta de subpreguntes`, que descompon les consultes complexes en múltiples preguntes i després agrega una resposta a través de les respostes a totes les subpreguntes.
|
||||
|
||||
"
|
||||
|
||||
## [Mòduls de baix nivell](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/lowlevel.ts)
|
||||
|
||||
Aquest exemple utilitza diversos components de baix nivell, el que elimina la necessitat d'un motor de consulta real. Aquests components es poden utilitzar en qualsevol lloc, en qualsevol aplicació, o personalitzar i sub-classificar per satisfer les vostres pròpies necessitats.
|
||||
|
||||
"
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Entorns
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
LlamaIndex actualment suporta oficialment NodeJS 18 i NodeJS 20.
|
||||
|
||||
## Enrutador d'aplicacions NextJS
|
||||
|
||||
Si utilitzeu els gestors de rutes/funcions sense servidor de l'enrutador d'aplicacions NextJS, haureu d'utilitzar el mode NodeJS:
|
||||
|
||||
```js
|
||||
export const runtime = "nodejs"; // per defecte
|
||||
```
|
||||
|
||||
i haureu d'afegir una excepció per a pdf-parse al vostre next.config.js
|
||||
|
||||
```js
|
||||
// next.config.js
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
experimental: {
|
||||
serverComponentsExternalPackages: ["pdf-parse"], // Posiciona pdf-parse en el mode NodeJS real amb l'enrutador d'aplicacions NextJS
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = nextConfig;
|
||||
```
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
|
||||
# Instal·lació i configuració
|
||||
|
||||
```Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.```
|
||||
|
||||
|
||||
Assegureu-vos de tenir NodeJS v18 o superior.
|
||||
|
||||
|
||||
## Utilitzant create-llama
|
||||
|
||||
La manera més senzilla de començar amb LlamaIndex és utilitzant `create-llama`. Aquesta eina de línia de comandes us permet començar ràpidament a construir una nova aplicació LlamaIndex, amb tot configurat per a vosaltres.
|
||||
|
||||
Simplement executeu
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="1" label="npm" default>
|
||||
|
||||
```bash
|
||||
npx create-llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="2" label="Yarn">
|
||||
|
||||
```bash
|
||||
yarn create llama
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="3" label="pnpm">
|
||||
|
||||
```bash
|
||||
pnpm create llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
per començar. Un cop la vostra aplicació estigui generada, executeu
|
||||
|
||||
```bash npm2yarn
|
||||
npm run dev
|
||||
```
|
||||
|
||||
per iniciar el servidor de desenvolupament. A continuació, podeu visitar [http://localhost:3000](http://localhost:3000) per veure la vostra aplicació.
|
||||
## Instal·lació des de NPM
|
||||
|
||||
```bash npm2yarn
|
||||
npm install llamaindex
|
||||
```
|
||||
|
||||
|
||||
### Variables d'entorn
|
||||
|
||||
Els nostres exemples utilitzen OpenAI per defecte. Hauràs de configurar la teva clau d'Open AI de la següent manera:
|
||||
|
||||
```bash
|
||||
export OPENAI_API_KEY="sk-......" # Reemplaça amb la teva clau de https://platform.openai.com/account/api-keys
|
||||
```
|
||||
|
||||
Si vols que es carregui automàticament cada vegada, afegiu-la al teu .zshrc/.bashrc.
|
||||
|
||||
ADVERTÈNCIA: no afegiu la vostra clau d'OpenAI al control de versions.
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
slug: /
|
||||
---
|
||||
|
||||
# Què és LlamaIndex.TS?
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
LlamaIndex.TS és un marc de dades per a aplicacions LLM per a ingestió, estructuració i accés a dades privades o específiques del domini. Tot i que també hi ha un paquet de Python disponible (vegeu [aquí](https://docs.llamaindex.ai/en/stable/)), LlamaIndex.TS ofereix funcionalitats principals en un paquet senzill, optimitzat per a l'ús amb TypeScript.
|
||||
|
||||
## 🚀 Per què LlamaIndex.TS?
|
||||
|
||||
En el seu nucli, els LLM ofereixen una interfície de llenguatge natural entre els humans i les dades inferides. Els models àmpliament disponibles estan preentrenats amb grans quantitats de dades disponibles públicament, des de Wikipedia i llistes de correu fins a llibres de text i codi font.
|
||||
|
||||
Les aplicacions construïdes sobre els LLM sovint requereixen augmentar aquests models amb dades privades o específiques del domini. Desafortunadament, aquestes dades es poden trobar distribuïdes en aplicacions i emmagatzematges de dades aïllats. Es troben darrere d'APIs, en bases de dades SQL o atrapades en PDFs i presentacions.
|
||||
|
||||
Aquí és on entra en joc **LlamaIndex.TS**.
|
||||
|
||||
## 🦙 Com pot ajudar LlamaIndex.TS?
|
||||
|
||||
LlamaIndex.TS proporciona les següents eines:
|
||||
|
||||
- **Càrrega de dades** per a la ingestió directa de les vostres dades en format `.txt`, `.pdf`, `.csv`, `.md` i `.docx`.
|
||||
- **Índexs de dades** per a l'estructuració de les vostres dades en representacions intermèdies que siguin fàcils i eficients per als LLM per a consumir.
|
||||
- **Motors** que proporcionen accés en llenguatge natural a les vostres dades. Per exemple:
|
||||
- Els motors de consulta són interfícies de recuperació potents per a una sortida augmentada de coneixement.
|
||||
- Els motors de xat són interfícies conversacionals per a interaccions de "anar i venir" amb múltiples missatges amb les vostres dades.
|
||||
|
||||
## 👨👩👧👦 Per a qui és LlamaIndex?
|
||||
|
||||
LlamaIndex.TS proporciona un conjunt d'eines bàsiques essencials per a qualsevol persona que construeixi aplicacions LLM amb JavaScript i TypeScript.
|
||||
|
||||
La nostra API de nivell superior permet als usuaris principiants utilitzar LlamaIndex.TS per a la ingestió i consulta de les seves dades.
|
||||
|
||||
Per a aplicacions més complexes, les nostres API de nivell inferior permeten als usuaris avançats personalitzar i ampliar qualsevol mòdul: connectors de dades, índexs, recuperadors i motors de consulta, per adaptar-se a les seves necessitats.
|
||||
|
||||
## Començar
|
||||
|
||||
`npm install llamaindex`
|
||||
|
||||
La nostra documentació inclou [Instruccions d'Instal·lació](./installation.md) i un [Tutorial d'Inici](./starter.md) per a construir la vostra primera aplicació.
|
||||
|
||||
Un cop tingueu tot a punt, [Conceptes de Nivell Alt](./concepts.md) ofereix una visió general de l'arquitectura modular de LlamaIndex. Per a més exemples pràctics, consulteu els nostres [Tutorials de Principi a Fi](./end_to_end.md).
|
||||
|
||||
## 🗺️ Ecosistema
|
||||
|
||||
Per descarregar o contribuir, troba LlamaIndex a:
|
||||
|
||||
- Github: https://github.com/run-llama/LlamaIndexTS
|
||||
- NPM: https://www.npmjs.com/package/llamaindex
|
||||
|
||||
"
|
||||
|
||||
## Comunitat
|
||||
|
||||
Necessiteu ajuda? Teniu alguna suggerència de funcionalitat? Uneix-te a la comunitat de LlamaIndex:
|
||||
|
||||
- Twitter: https://twitter.com/llama_index
|
||||
- Discord: https://discord.gg/dGcwcsnxhU
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# ChatEngine (Motor de Xat)
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
El motor de xat és una manera ràpida i senzilla de xatejar amb les dades del teu índex.
|
||||
|
||||
```typescript
|
||||
const retriever = index.asRetriever();
|
||||
const chatEngine = new ContextChatEngine({ retriever });
|
||||
|
||||
// comença a xatejar
|
||||
const response = await chatEngine.chat(query);
|
||||
```
|
||||
|
||||
## Referències de l'API
|
||||
|
||||
- [ContextChatEngine (Motor de Xat de Context)](../../api/classes/ContextChatEngine.md)
|
||||
- [CondenseQuestionChatEngine (Motor de Xat de Pregunta Condensada)](../../api/classes/ContextChatEngine.md)
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Índex
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
Un índex és el contenidor bàsic i l'organització de les dades. LlamaIndex.TS suporta dos índexos:
|
||||
|
||||
- `VectorStoreIndex` - enviarà els `Node`s més rellevants al LLM quan generi una resposta. El valor per defecte de top-k és 2.
|
||||
- `SummaryIndex` - enviarà cada `Node` de l'índex al LLM per generar una resposta.
|
||||
|
||||
```typescript
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
const document = new Document({ text: "prova" });
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
```
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [SummaryIndex](../../api/classes/SummaryIndex.md)
|
||||
- [VectorStoreIndex](../../api/classes/VectorStoreIndex.md)
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Lector / Carregador
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
LlamaIndex.TS permet carregar fàcilment fitxers des de carpetes utilitzant la classe `SimpleDirectoryReader`. Actualment, són compatibles els fitxers `.txt`, `.pdf`, `.csv`, `.md` i `.docx`, i s'està planejant afegir-ne més en el futur!
|
||||
|
||||
```typescript
|
||||
import { SimpleDirectoryReader } from "llamaindex";
|
||||
|
||||
documents = new SimpleDirectoryReader().loadData("./data");
|
||||
```
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [SimpleDirectoryReader](../../api/classes/SimpleDirectoryReader.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
# Documents i Nodes
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
Els `Document`s i els `Node`s són els blocs de construcció bàsics de qualsevol índex. Tot i que l'API per a aquests objectes és similar, els objectes `Document` representen fitxers sencers, mentre que els `Node`s són peces més petites d'aquest document original, que són adequades per a un LLM i una Q&A.
|
||||
|
||||
```typescript
|
||||
import { Document } from "llamaindex";
|
||||
|
||||
document = new Document({ text: "text", metadata: { key: "val" } });
|
||||
```
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [Document](../../api/classes/Document.md)
|
||||
- [TextNode](../../api/classes/TextNode.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# Motor de Consulta (QueryEngine)
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
Un motor de consulta envolta un `Retriever` i un `ResponseSynthesizer` en un pipeline, que utilitzarà la cadena de consulta per obtenir nodes i després enviar-los a LLM per generar una resposta.
|
||||
|
||||
```typescript
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const response = await queryEngine.query("cadena de consulta");
|
||||
```
|
||||
|
||||
## Motor de Consulta de Subpreguntes
|
||||
|
||||
El concepte bàsic del Motor de Consulta de Subpreguntes és que divideix una única consulta en múltiples consultes, obté una resposta per a cada una d'aquestes consultes i després combina aquestes respostes diferents en una única resposta coherent per a l'usuari. Podeu pensar-hi com a tècnica de "pensa-ho pas a pas" però iterant sobre les fonts de dades!
|
||||
|
||||
### Començar
|
||||
|
||||
La manera més senzilla de començar a provar el Motor de Consulta de Subpreguntes és executar el fitxer subquestion.ts a [examples](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts).
|
||||
|
||||
```bash
|
||||
npx ts-node subquestion.ts
|
||||
```
|
||||
|
||||
"
|
||||
|
||||
### Eines
|
||||
|
||||
El SubQuestionQueryEngine s'implementa amb eines. La idea bàsica de les eines és que són opcions executables per al gran model de llenguatge. En aquest cas, el nostre SubQuestionQueryEngine es basa en QueryEngineTool, que, com podeu imaginar, és una eina per executar consultes en un QueryEngine. Això ens permet donar al model una opció per consultar diferents documents per a diferents preguntes, per exemple. També podeu imaginar que el SubQuestionQueryEngine podria utilitzar una eina que cerqui alguna cosa a la web o obtingui una resposta utilitzant Wolfram Alpha.
|
||||
|
||||
Podeu obtenir més informació sobre les eines consultant la documentació de LlamaIndex Python a https://gpt-index.readthedocs.io/en/latest/core_modules/agent_modules/tools/root.html
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [Motor de Consulta del Recuperador (RetrieverQueryEngine)](../../api/classes/RetrieverQueryEngine.md)
|
||||
- [Motor de Consulta de Subpreguntes (SubQuestionQueryEngine)](../../api/classes/SubQuestionQueryEngine.md)
|
||||
- [Eina del Motor de Consulta (QueryEngineTool)](../../api/interfaces/QueryEngineTool.md)
|
||||
@@ -0,0 +1,33 @@
|
||||
# Mòduls principals
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
LlamaIndex.TS ofereix diversos mòduls principals, separats en mòduls de nivell alt per començar ràpidament i mòduls de nivell baix per personalitzar els components clau segons les teves necessitats.
|
||||
|
||||
## Mòduls de Nivell Alt
|
||||
|
||||
- [**Document**](./high_level/documents_and_nodes.md): Un document representa un fitxer de text, un fitxer PDF o una altra peça de dades contínua.
|
||||
|
||||
- [**Node**](./high_level/documents_and_nodes.md): El bloc de construcció de dades bàsic. Normalment, aquests són parts del document dividides en peces manejables que són prou petites per ser alimentades a un model d'incrustació i LLM.
|
||||
|
||||
- [**Reader/Loader**](./high_level/data_loader.md): Un lector o carregador és quelcom que pren un document del món real i el transforma en una classe Document que després es pot utilitzar en el teu índex i consultes. Actualment, donem suport a fitxers de text pla i PDFs, i en el futur en donarem suport a molts més.
|
||||
|
||||
- [**Índexs**](./high_level/data_index.md): els índexs emmagatzemen els Nodes i les incrustacions d'aquests nodes.
|
||||
|
||||
- [**Motor de Consulta**](./high_level/query_engine.md): Els motors de consulta són els que generen la consulta que introduïu i us retornen el resultat. Els motors de consulta generalment combinen una indicació predefinida amb nodes seleccionats del vostre índex per donar al LLM el context que necessita per respondre a la vostra consulta.
|
||||
|
||||
- [**Motor de Xat**](./high_level/chat_engine.md): Un motor de xat us ajuda a construir un chatbot que interactuarà amb els vostres índexs.
|
||||
|
||||
## Mòdul de nivell baix
|
||||
|
||||
- [**LLM**](./low_level/llm.md): La classe LLM és una interfície unificada per a un proveïdor de models de llenguatge gran com OpenAI GPT-4, Anthropic Claude o Meta LLaMA. Pots crear una subclasse per escriure un connector per al teu propi model de llenguatge gran.
|
||||
|
||||
- [**Embedding**](./low_level/embedding.md): Un embedding es representa com un vector de nombres de punt flotant. El nostre model d'embedding per defecte és el text-embedding-ada-002 de OpenAI i cada embedding que genera consisteix en 1.536 nombres de punt flotant. Un altre model d'embedding popular és BERT, que utilitza 768 nombres de punt flotant per representar cada node. Proporcionem diverses utilitats per treballar amb embeddings, incloent-hi 3 opcions de càlcul de similitud i Maximum Marginal Relevance.
|
||||
|
||||
- [**TextSplitter/NodeParser**](./low_level/node_parser.md): Les estratègies de divisió de text són increïblement importants per a l'eficàcia global de la cerca d'embedding. Actualment, tot i que tenim una opció per defecte, no hi ha una solució única per a tots els casos. Depenent dels documents font, potser voldràs utilitzar diferents mides i estratègies de divisió. Actualment, donem suport a la divisió per mida fixa, la divisió per mida fixa amb seccions superposades, la divisió per frases i la divisió per paràgrafs. El text splitter s'utilitza pel NodeParser per dividir els `Document`s en `Node`s.
|
||||
|
||||
- [**Retriever**](./low_level/retriever.md): El Retriever és el que decideix quins Nodes recuperar de l'índex. Aquí, potser voldràs provar a recuperar més o menys Nodes per consulta, canviar la funció de similitud o crear el teu propi retriever per a cada cas d'ús individual de l'aplicació. Per exemple, potser voldràs tenir un retriever separat per al contingut de codi i el contingut de text.
|
||||
|
||||
- [**ResponseSynthesizer**](./low_level/response_synthesizer.md): El ResponseSynthesizer és responsable de prendre una cadena de consulta i utilitzar una llista de `Node`s per generar una resposta. Això pot prendre diverses formes, com iterar sobre tot el context i refinar una resposta o construir un arbre de resums i retornar el resum principal.
|
||||
|
||||
- [**Storage**](./low_level/storage.md): En algun moment, voldràs emmagatzemar els teus índexs, dades i vectors en comptes d'executar els models d'embedding cada vegada. IndexStore, DocStore, VectorStore i KVStore són abstraccions que et permeten fer-ho. En conjunt, formen el StorageContext. Actualment, et permetem persistir els teus embeddings en fitxers al sistema de fitxers (o en un sistema de fitxers virtual a la memòria), però també estem afegint activament integracions amb bases de dades de vectors.
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Incrustació
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
El model d'incrustació a LlamaIndex és responsable de crear representacions numèriques de text. Per defecte, LlamaIndex utilitzarà el model `text-embedding-ada-002` de OpenAI.
|
||||
|
||||
Això es pot establir explícitament a l'objecte `ServiceContext`.
|
||||
|
||||
```typescript
|
||||
import { OpenAIEmbedding, serviceContextFromDefaults } from "llamaindex";
|
||||
|
||||
const openaiEmbeds = new OpenAIEmbedding();
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({ embedModel: openaiEmbeds });
|
||||
```
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [OpenAIEmbedding](../../api/classes/OpenAIEmbedding.md)
|
||||
- [ServiceContext](../../api/interfaces/ServiceContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
# LLM
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
El LLM és responsable de llegir text i generar respostes en llenguatge natural a les consultes. Per defecte, LlamaIndex.TS utilitza `gpt-3.5-turbo`.
|
||||
|
||||
El LLM es pot establir explícitament a l'objecte `ServiceContext`.
|
||||
|
||||
```typescript
|
||||
import { OpenAI, serviceContextFromDefaults } from "llamaindex";
|
||||
|
||||
const openaiLLM = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0 });
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({ llm: openaiLLM });
|
||||
```
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [OpenAI](../../api/classes/OpenAI.md)
|
||||
- [ServiceContext](../../api/interfaces/ServiceContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# NodeParser
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
El `NodeParser` a LlamaIndex és responsable de dividir els objectes `Document` en objectes `Node` més manejables. Quan truqueu a `.fromDocuments()`, s'utilitza el `NodeParser` del `ServiceContext` per fer-ho automàticament per a vosaltres. Alternativament, podeu utilitzar-lo per dividir els documents amb antelació.
|
||||
|
||||
```typescript
|
||||
import { Document, SimpleNodeParser } from "llamaindex";
|
||||
|
||||
const nodeParser = new SimpleNodeParser();
|
||||
const nodes = nodeParser.getNodesFromDocuments([
|
||||
new Document({ text: "Tinc 10 anys. John té 20 anys." }),
|
||||
]);
|
||||
```
|
||||
|
||||
## TextSplitter
|
||||
|
||||
El separador de text subjacent dividirà el text per frases. També es pot utilitzar com a mòdul independent per dividir text en brut.
|
||||
|
||||
```typescript
|
||||
import { SentenceSplitter } from "llamaindex";
|
||||
|
||||
const splitter = new SentenceSplitter({ chunkSize: 1 });
|
||||
|
||||
const textSplits = splitter.splitText("Hola món");
|
||||
```
|
||||
|
||||
"
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [SimpleNodeParser](../../api/classes/SimpleNodeParser.md)
|
||||
- [SentenceSplitter](../../api/classes/SentenceSplitter.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
# ResponseSynthesizer (Sintetitzador de Resposta)
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
El ResponseSynthesizer és responsable d'enviar la consulta, els nodes i les plantilles de prompt al LLM per generar una resposta. Hi ha alguns modes clau per generar una resposta:
|
||||
|
||||
- `Refine` (Refinar): "crear i refinar" una resposta passant seqüencialment per cada fragment de text recuperat. Això fa una crida separada al LLM per a cada Node. És bo per a respostes més detallades.
|
||||
- `CompactAndRefine` (Compactar i Refinar) (per defecte): "compactar" el prompt durant cada crida al LLM, omplint tants fragments de text com puguin cabre dins de la mida màxima del prompt. Si hi ha massa fragments per a omplir en un sol prompt, "crear i refinar" una resposta passant per diversos prompts compactes. És el mateix que `refine`, però hauria de resultar en menys crides al LLM.
|
||||
- `TreeSummarize` (Resumir en forma d'arbre): Donat un conjunt de fragments de text i la consulta, construeix recursivament un arbre i retorna el node arrel com a resposta. És bo per a fins de resum.
|
||||
- `SimpleResponseBuilder` (Constructor de Resposta Simple): Donat un conjunt de fragments de text i la consulta, aplica la consulta a cada fragment de text mentre acumula les respostes en un array. Retorna una cadena concatenada de totes les respostes. És bo quan necessites executar la mateixa consulta per separat en cada fragment de text.
|
||||
|
||||
```typescript
|
||||
import { NodeWithScore, ResponseSynthesizer, TextNode } from "llamaindex";
|
||||
|
||||
const responseSynthesizer = new ResponseSynthesizer();
|
||||
|
||||
const nodesWithScore: NodeWithScore[] = [
|
||||
{
|
||||
node: new TextNode({ text: "Tinc 10 anys." }),
|
||||
score: 1,
|
||||
},
|
||||
{
|
||||
node: new TextNode({ text: "John té 20 anys." }),
|
||||
score: 0.5,
|
||||
},
|
||||
];
|
||||
|
||||
const response = await responseSynthesizer.synthesize(
|
||||
"Quina edat tinc?",
|
||||
nodesWithScore,
|
||||
);
|
||||
console.log(response.response);
|
||||
```
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [ResponseSynthesizer (Sintetitzador de Resposta)](../../api/classes/ResponseSynthesizer.md)
|
||||
- [Refine (Refinar)](../../api/classes/Refine.md)
|
||||
- [CompactAndRefine (Compactar i Refinar)](../../api/classes/CompactAndRefine.md)
|
||||
- [TreeSummarize (Resumir en forma d'arbre)](../../api/classes/TreeSummarize.md)
|
||||
- [SimpleResponseBuilder (Constructor de Resposta Simple)](../../api/classes/SimpleResponseBuilder.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Retriever (Recuperador)
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
Un recuperador a LlamaIndex és el que s'utilitza per obtenir `Node`s d'un índex utilitzant una cadena de consulta. Un `VectorIndexRetriever` obtindrà els nodes més similars al top-k. Mentrestant, un `SummaryIndexRetriever` obtindrà tots els nodes, independentment de la consulta.
|
||||
|
||||
```typescript
|
||||
const recuperador = vector_index.asRetriever();
|
||||
recuperador.similarityTopK = 3;
|
||||
|
||||
// Obteniu els nodes!
|
||||
const nodesAmbPuntuació = await recuperador.retrieve("cadena de consulta");
|
||||
```
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [SummaryIndexRetriever (Recuperador d'índex de resum)](../../api/classes/SummaryIndexRetriever.md)
|
||||
- [SummaryIndexLLMRetriever (Recuperador d'índex de resum LLM)](../../api/classes/SummaryIndexLLMRetriever.md)
|
||||
- [VectorIndexRetriever (Recuperador d'índex de vectors)](../../api/classes/VectorIndexRetriever.md)
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
sidebar_position: 7
|
||||
---
|
||||
|
||||
# Emmagatzematge
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
L'emmagatzematge a LlamaIndex.TS funciona automàticament un cop hagueu configurat un objecte `StorageContext`. Simplement configureu el `persistDir` i adjunteu-lo a un índex.
|
||||
|
||||
En aquest moment, només s'admet guardar i carregar des del disc, amb integracions futures planejades!
|
||||
|
||||
```typescript
|
||||
import { Document, VectorStoreIndex, storageContextFromDefaults } from "./src";
|
||||
|
||||
const storageContext = await storageContextFromDefaults({
|
||||
persistDir: "./storage",
|
||||
});
|
||||
|
||||
const document = new Document({ text: "Text de prova" });
|
||||
const index = await VectorStoreIndex.fromDocuments([document], {
|
||||
storageContext,
|
||||
});
|
||||
```
|
||||
|
||||
## Referència de l'API
|
||||
|
||||
- [StorageContext](../../api/interfaces/StorageContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Tutorial d'Inici
|
||||
|
||||
`Aquesta documentació s'ha traduït automàticament i pot contenir errors. No dubteu a obrir una Pull Request per suggerir canvis.`
|
||||
|
||||
Un cop hagueu [instal·lat LlamaIndex.TS utilitzant NPM](installation) i hagueu configurat la vostra clau d'OpenAI, esteu preparats per començar la vostra primera aplicació:
|
||||
|
||||
En una nova carpeta:
|
||||
|
||||
```bash npm2yarn
|
||||
npm install typescript
|
||||
npm install @types/node
|
||||
npx tsc --init # si cal
|
||||
```
|
||||
|
||||
Creeu el fitxer `example.ts`. Aquest codi carregarà algunes dades d'exemple, crearà un document, l'indexarà (que crea incrustacions utilitzant OpenAI) i després crearà un motor de consulta per respondre preguntes sobre les dades.
|
||||
|
||||
```ts
|
||||
// example.ts
|
||||
import fs from "fs/promises";
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
async function main() {
|
||||
// Carrega l'assaig des de abramov.txt a Node
|
||||
const assaig = await fs.readFile(
|
||||
"node_modules/llamaindex/examples/abramov.txt",
|
||||
"utf-8",
|
||||
);
|
||||
|
||||
// Crea un objecte Document amb l'assaig
|
||||
const document = new Document({ text: assaig });
|
||||
|
||||
// Divideix el text i crea incrustacions. Emmagatzema-les en un VectorStoreIndex
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
|
||||
// Consulta l'índex
|
||||
const motorConsulta = index.asQueryEngine();
|
||||
const resposta = await motorConsulta.query(
|
||||
"Què va fer l'autor a la universitat?",
|
||||
);
|
||||
|
||||
// Mostra la resposta
|
||||
console.log(resposta.toString());
|
||||
}
|
||||
|
||||
main();
|
||||
```
|
||||
|
||||
A continuació, podeu executar-lo utilitzant
|
||||
|
||||
```bash
|
||||
npx ts-node example.ts
|
||||
```
|
||||
|
||||
Preparat per aprendre més? Consulteu el nostre espai de jocs NextJS a https://llama-playground.vercel.app/. El codi font està disponible a https://github.com/run-llama/ts-playground
|
||||
|
||||
"
|
||||
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1 @@
|
||||
../../../../docs/api
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# Vysokoúrovňové koncepty
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
LlamaIndex.TS vám pomáhá vytvářet aplikace s podporou LLM (např. Q&A, chatbot) nad vlastními daty.
|
||||
|
||||
V tomto průvodci vysokoúrovňovými koncepty se dozvíte:
|
||||
|
||||
- jak LLM může odpovídat na otázky pomocí vašich vlastních dat.
|
||||
- klíčové koncepty a moduly v LlamaIndex.TS pro sestavení vlastního dotazovacího řetězce.
|
||||
|
||||
## Odpovídání na otázky v rámci vašich dat
|
||||
|
||||
LlamaIndex používá dvoustupňovou metodu při použití LLM s vašimi daty:
|
||||
|
||||
1. **indexační fáze**: příprava znalostní báze a
|
||||
2. **dotazovací fáze**: získání relevantního kontextu z informací, které pomohou LLM odpovědět na otázku
|
||||
|
||||

|
||||
|
||||
Tento proces je také známý jako Retrieval Augmented Generation (RAG).
|
||||
|
||||
LlamaIndex.TS poskytuje základní nástroje, které vám usnadní oba kroky.
|
||||
|
||||
Pojďme si každou fázi prozkoumat podrobněji.
|
||||
|
||||
### Indexační fáze
|
||||
|
||||
LlamaIndex.TS vám pomáhá připravit znalostní bázi pomocí sady konektorů a indexů dat.
|
||||
|
||||

|
||||
|
||||
[**Datoví načítadla**](./modules/high_level/data_loader.md):
|
||||
Datový konektor (tzv. `Reader`) načítá data z různých zdrojů dat a formátů do jednoduché reprezentace `Document` (text a jednoduchá metadata).
|
||||
|
||||
[**Dokumenty / Uzly**](./modules/high_level/documents_and_nodes.md): `Document` je obecný kontejner pro jakýkoli zdroj dat - například PDF, výstup z API nebo načtená data z databáze. `Node` je atomická jednotka dat v LlamaIndex a představuje "část" zdrojového `Document`. Jedná se o bohatou reprezentaci, která zahrnuje metadata a vztahy (k ostatním uzlům), aby umožnila přesné a výstižné operace získávání.
|
||||
|
||||
[**Indexy dat**](./modules/high_level/data_index.md):
|
||||
Jakmile jste načetli svá data, LlamaIndex vám pomáhá indexovat data do formátu, který je snadno získatelný.
|
||||
|
||||
Pod pokličkou LlamaIndex analyzuje nezpracované dokumenty do mezireprezentací, vypočítá vektorová vnoření a ukládá vaše data do paměti nebo na disk.
|
||||
|
||||
"
|
||||
|
||||
### Dotazovací fáze
|
||||
|
||||
V dotazovací fázi dotazovací řetězec získává nejrelevantnější kontext na základě uživatelského dotazu
|
||||
a předává ho LLM (spolu s dotazem) k syntéze odpovědi.
|
||||
|
||||
Tímto způsobem LLM získává aktuální znalosti, které nejsou obsaženy v jeho původních trénovacích datech,
|
||||
(což také snižuje halucinace).
|
||||
|
||||
Klíčovou výzvou v dotazovací fázi je získávání, orchestrace a dedukce z (potenciálně mnoha) znalostních bází.
|
||||
|
||||
LlamaIndex poskytuje komponovatelné moduly, které vám pomáhají sestavit a integrovat RAG řetězce pro Q&A (dotazovací engine), chatbot (chatovací engine) nebo jako součást agenta.
|
||||
|
||||
Tyto stavební bloky lze přizpůsobit tak, aby odrážely preference ohodnocování a byly sestaveny tak, aby dedukovaly z více znalostních bází strukturovaným způsobem.
|
||||
|
||||

|
||||
|
||||
#### Stavební bloky
|
||||
|
||||
[**Retrievery**](./modules/low_level/retriever.md):
|
||||
Retriever definuje, jak efektivně získat relevantní kontext z znalostní báze (tj. indexu) na základě dotazu.
|
||||
Konkrétní logika získávání se liší pro různé indexy, nejpopulárnější je husté získávání pomocí vektorového indexu.
|
||||
|
||||
[**Syntetizátory odpovědí**](./modules/low_level/response_synthesizer.md):
|
||||
Syntetizátor odpovědí generuje odpověď z LLM pomocí uživatelského dotazu a daného souboru získaných textových částí.
|
||||
|
||||
"
|
||||
|
||||
#### Řetězce
|
||||
|
||||
[**Dotazovací enginy**](./modules/high_level/query_engine.md):
|
||||
Dotazovací engine je koncový řetězec, který vám umožňuje klást otázky nad vašimi daty.
|
||||
Přijímá dotaz v přirozeném jazyce a vrací odpověď spolu s referenčním kontextem získaným a předaným LLM.
|
||||
|
||||
[**Chatovací enginy**](./modules/high_level/chat_engine.md):
|
||||
Chatovací engine je koncový řetězec pro konverzaci s vašimi daty
|
||||
(více vzájemných otázek a odpovědí namísto jedné otázky a odpovědi).
|
||||
|
||||
"
|
||||
@@ -0,0 +1,59 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Příklady od začátku do konce
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
V repozitáři jsou k dispozici několik příkladů od začátku do konce, které používají LlamaIndex.TS.
|
||||
|
||||
Podívejte se na následující příklady nebo je vyzkoušejte a dokončete je během několika minut s interaktivními tutoriály na Github Codespace poskytovanými Dev-Docs [zde](https://codespaces.new/team-dev-docs/lits-dev-docs-playground?devcontainer_path=.devcontainer%2Fjavascript_ltsquickstart%2Fdevcontainer.json):
|
||||
|
||||
## [Chatovací engine](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/chatEngine.ts)
|
||||
|
||||
Načtěte soubor a diskutujte o něm s LLM.
|
||||
|
||||
## [Vektorový index](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndex.ts)
|
||||
|
||||
Vytvořte vektorový index a vyhledejte v něm. Vektorový index používá vnoření pro získání nejrelevantnějších uzlů. Výchozí hodnota pro nejrelevantnější uzly je 2.
|
||||
|
||||
"
|
||||
|
||||
## [Index shrnutí](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/summaryIndex.ts)
|
||||
|
||||
Vytvořte seznamový index a vyhledejte v něm. Tento příklad také používá `LLMRetriever`, který používá LLM k výběru nejlepších uzlů pro generování odpovědi.
|
||||
|
||||
"
|
||||
|
||||
## [Uložení / Načtení indexu](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/storageContext.ts)
|
||||
|
||||
Vytvoření a načtení vektorového indexu. Ukládání na disk v LlamaIndex.TS se provádí automaticky poté, co je vytvořen objekt kontextu úložiště.
|
||||
|
||||
"
|
||||
|
||||
## [Přizpůsobený vektorový index](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/vectorIndexCustomize.ts)
|
||||
|
||||
Vytvořte vektorový index a dotazujte se na něj, přičemž také konfigurujte `LLM`, `ServiceContext` a `similarity_top_k`.
|
||||
|
||||
## [OpenAI LLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/openai.ts)
|
||||
|
||||
Vytvořte OpenAI LLM a použijte ho přímo pro chatování.
|
||||
|
||||
"
|
||||
|
||||
## [Llama2 DeuceLLM](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/llamadeuce.ts)
|
||||
|
||||
Vytvořte Llama-2 LLM a použijte jej přímo pro chatování.
|
||||
|
||||
"
|
||||
|
||||
## [SubQuestionQueryEngine](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts)
|
||||
|
||||
Používá `SubQuestionQueryEngine`, který rozděluje složité dotazy na více poddotazů a poté agreguje odpověď na všechny poddotazy.
|
||||
|
||||
"
|
||||
|
||||
## [Moduly nízké úrovně](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/lowlevel.ts)
|
||||
|
||||
Tento příklad používá několik modulů nízké úrovně, což odstraňuje potřebu skutečného dotazovacího enginu. Tyto moduly lze použít kdekoli, v jakékoliv aplikaci, nebo je lze upravit a podřadit, aby vyhovovaly vašim vlastním potřebám.
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Prostředí
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
LlamaIndex aktuálně oficiálně podporuje NodeJS 18 a NodeJS 20.
|
||||
|
||||
## NextJS App Router
|
||||
|
||||
Pokud používáte NextJS App Router pro zpracování tras/route a serverless funkce, budete muset použít režim NodeJS:
|
||||
|
||||
```js
|
||||
export const runtime = "nodejs"; // výchozí hodnota
|
||||
```
|
||||
|
||||
a budete muset přidat výjimku pro pdf-parse ve vašem next.config.js
|
||||
|
||||
```js
|
||||
// next.config.js
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
experimental: {
|
||||
serverComponentsExternalPackages: ["pdf-parse"], // Přepne pdf-parse do režimu NodeJS s NextJS App Router
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = nextConfig;
|
||||
```
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
|
||||
# Instalace a nastavení
|
||||
|
||||
```Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.```
|
||||
|
||||
|
||||
Ujistěte se, že máte nainstalovaný NodeJS ve verzi 18 nebo vyšší.
|
||||
|
||||
|
||||
## Použití create-llama
|
||||
|
||||
Nejjednodušší způsob, jak začít s LlamaIndexem, je použití `create-llama`. Tento nástroj příkazového řádku vám umožní rychle začít s vytvářením nové aplikace LlamaIndex s přednastaveným prostředím.
|
||||
|
||||
Jen spusťte
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="1" label="npm" default>
|
||||
|
||||
```bash
|
||||
npx create-llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="2" label="Yarn">
|
||||
|
||||
```bash
|
||||
yarn create llama
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="3" label="pnpm">
|
||||
|
||||
```bash
|
||||
pnpm create llama@latest
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
abyste začali. Jakmile je vaše aplikace vygenerována, spusťte
|
||||
|
||||
```bash npm2yarn
|
||||
npm run dev
|
||||
```
|
||||
|
||||
pro spuštění vývojového serveru. Poté můžete navštívit [http://localhost:3000](http://localhost:3000), abyste viděli vaši aplikaci.
|
||||
## Instalace pomocí NPM
|
||||
|
||||
```bash npm2yarn
|
||||
npm install llamaindex
|
||||
```
|
||||
|
||||
|
||||
### Proměnné prostředí
|
||||
|
||||
Naše příklady výchozí používají OpenAI. Budete potřebovat nastavit svůj Open AI klíč následovně:
|
||||
|
||||
```bash
|
||||
export OPENAI_API_KEY="sk-......" # Nahraďte svým klíčem z https://platform.openai.com/account/api-keys
|
||||
```
|
||||
|
||||
Pokud chcete, aby se klíč automaticky načítal pokaždé, přidejte ho do souboru .zshrc/.bashrc.
|
||||
|
||||
VAROVÁNÍ: Neukládejte svůj OpenAI klíč do verzovacího systému.
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
slug: /
|
||||
---
|
||||
|
||||
# Co je LlamaIndex.TS?
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
LlamaIndex.TS je datový framework pro aplikace LLM, který slouží k příjmu, strukturování a přístupu k soukromým nebo doménově specifickým datům. Zatímco je také k dispozici python balíček (viz [zde](https://docs.llamaindex.ai/en/stable/)), LlamaIndex.TS nabízí základní funkce v jednoduchém balíčku, optimalizovaném pro použití s TypeScriptem.
|
||||
|
||||
## 🚀 Proč LlamaIndex.TS?
|
||||
|
||||
V jádru LLMs nabízejí přirozené jazykové rozhraní mezi lidmi a odvozenými daty. Široce dostupné modely jsou předtrénované na obrovském množství veřejně dostupných dat, od Wikipedie a mailingových seznamů po učebnice a zdrojový kód.
|
||||
|
||||
Aplikace postavené na LLMs často vyžadují rozšíření těchto modelů o soukromá nebo doménově specifická data. Bohužel, tato data mohou být rozptýlena mezi izolovanými aplikacemi a úložišti dat. Jsou za API, v SQL databázích nebo uvězněna v PDF a prezentacích.
|
||||
|
||||
A právě zde přichází **LlamaIndex.TS**.
|
||||
|
||||
## 🦙 Jak může LlamaIndex.TS pomoci?
|
||||
|
||||
LlamaIndex.TS poskytuje následující nástroje:
|
||||
|
||||
- **Načítání dat** - příjem vašich existujících dat ve formátech `.txt`, `.pdf`, `.csv`, `.md` a `.docx` přímo
|
||||
- **Indexy dat** - strukturování vašich dat do prostředních reprezentací, které jsou snadné a výkonné pro použití s LLM.
|
||||
- **Engine** poskytují přirozený přístup k vašim datům. Například:
|
||||
- Dotazovací enginy jsou výkonná rozhraní pro získávání znalostmi rozšířeného výstupu.
|
||||
- Chat enginy jsou konverzační rozhraní pro interakce s vašimi daty ve více zprávách, "zpětně a vpřed".
|
||||
|
||||
## 👨👩👧👦 Pro koho je LlamaIndex určen?
|
||||
|
||||
LlamaIndex.TS poskytuje základní sadu nástrojů, které jsou nezbytné pro všechny, kteří staví LLM aplikace s použitím JavaScriptu a TypeScriptu.
|
||||
|
||||
Naše API na vyšší úrovni umožňuje začátečníkům používat LlamaIndex.TS k příjmu a dotazování dat.
|
||||
|
||||
Pro složitější aplikace naše API na nižší úrovni umožňuje pokročilým uživatelům upravit a rozšířit libovolný modul - konektory dat, indexy, získávače a dotazovací enginy, aby vyhovoval jejich potřebám.
|
||||
|
||||
## Začínáme
|
||||
|
||||
`npm install llamaindex`
|
||||
|
||||
Naše dokumentace obsahuje [Návod k instalaci](./installation.md) a [Úvodní tutoriál](./starter.md) pro vytvoření vaší první aplikace.
|
||||
|
||||
Jakmile jste připraveni, [Vysokoúrovňové koncepty](./concepts.md) poskytují přehled o modulární architektuře LlamaIndexu. Pro více praktických příkladů se podívejte na naše [Tutoriály od začátku do konce](./end_to_end.md).
|
||||
|
||||
## 🗺️ Ekosystém
|
||||
|
||||
Pro stažení nebo přispění najdete LlamaIndex na:
|
||||
|
||||
- Github: https://github.com/run-llama/LlamaIndexTS
|
||||
- NPM: https://www.npmjs.com/package/llamaindex
|
||||
|
||||
"
|
||||
|
||||
## Komunita
|
||||
|
||||
Potřebujete pomoc? Máte návrh na novou funkci? Připojte se do komunity LlamaIndex:
|
||||
|
||||
- Twitter: https://twitter.com/llama_index
|
||||
- Discord: https://discord.gg/dGcwcsnxhU
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# ChatEngine (聊天引擎)
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
ChatEngine je rychlý a jednoduchý způsob, jak chatovat s daty ve vašem indexu.
|
||||
|
||||
```typescript
|
||||
const retriever = index.asRetriever();
|
||||
const chatEngine = new ContextChatEngine({ retriever });
|
||||
|
||||
// začněte chatovat
|
||||
const response = await chatEngine.chat(query);
|
||||
```
|
||||
|
||||
## Api Reference (Odkazy na API)
|
||||
|
||||
- [ContextChatEngine (Kontextový chatovací engine)](../../api/classes/ContextChatEngine.md)
|
||||
- [CondenseQuestionChatEngine (Kondenzovaný chatovací engine)](../../api/classes/ContextChatEngine.md)
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Index (Index)
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
Index je základním kontejnerem a organizací vašich dat. LlamaIndex.TS podporuje dva indexy:
|
||||
|
||||
- `VectorStoreIndex` - při generování odpovědi odešle nejlepších k `Node` do LLM. Výchozí hodnota pro nejlepších k je 2.
|
||||
- `SummaryIndex` - při generování odpovědi odešle každý `Node` v indexu do LLM.
|
||||
|
||||
```typescript
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
|
||||
const document = new Document({ text: "test" });
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
```
|
||||
|
||||
## API Reference (API Reference)
|
||||
|
||||
- [SummaryIndex](../../api/classes/SummaryIndex.md)
|
||||
- [VectorStoreIndex](../../api/classes/VectorStoreIndex.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Čtenář / Načítání
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
LlamaIndex.TS podporuje snadné načítání souborů z adresářů pomocí třídy `SimpleDirectoryReader`. V současné době jsou podporovány soubory `.txt`, `.pdf`, `.csv`, `.md` a `.docx`, s plánem na podporu dalších typů souborů v budoucnosti!
|
||||
|
||||
```typescript
|
||||
import { SimpleDirectoryReader } from "llamaindex";
|
||||
|
||||
documents = new SimpleDirectoryReader().loadData("./data");
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
- [SimpleDirectoryReader](../../api/classes/SimpleDirectoryReader.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
# Dokumenty a uzly
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
`Dokumenty` a `Uzly` jsou základní stavební kameny každého indexu. Zatímco API pro tyto objekty je podobné, objekty `Dokument` představují celé soubory, zatímco `Uzly` jsou menší části tohoto původního dokumentu, které jsou vhodné pro LLM a Q&A.
|
||||
|
||||
```typescript
|
||||
import { Document } from "llamaindex";
|
||||
|
||||
document = new Document({ text: "text", metadata: { key: "val" } });
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
- [Dokument](../../api/classes/Document.md)
|
||||
- [TextNode](../../api/classes/TextNode.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# QueryEngine (Dotazovací engine)
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
Dotazovací engine obaluje `Retriever` a `ResponseSynthesizer` do potrubí, které použije řetězec dotazu k získání uzlů a poté je odešle do LLM pro generování odpovědi.
|
||||
|
||||
```typescript
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const response = await queryEngine.query("řetězec dotazu");
|
||||
```
|
||||
|
||||
## Dotazovací engine pro poddotazy
|
||||
|
||||
Základní koncept Dotazovacího engine pro poddotazy spočívá v rozdělení jednoho dotazu na více dotazů, získání odpovědi na každý z těchto dotazů a následné kombinaci těchto různých odpovědí do jedné soudržné odpovědi pro uživatele. Můžete si to představit jako techniku "promyslete to krok za krokem", ale s iterací přes zdroje dat!
|
||||
|
||||
### Začínáme
|
||||
|
||||
Nejjednodušší způsob, jak začít vyzkoušet Dotazovací engine pro poddotazy, je spustit soubor subquestion.ts v adresáři [examples](https://github.com/run-llama/LlamaIndexTS/blob/main/examples/subquestion.ts).
|
||||
|
||||
```bash
|
||||
npx ts-node subquestion.ts
|
||||
```
|
||||
|
||||
"
|
||||
|
||||
### Nástroje
|
||||
|
||||
Dotazovací engine pro poddotazy je implementován pomocí nástrojů (Tools). Základní myšlenkou nástrojů je, že jsou to proveditelné možnosti pro velký jazykový model. V tomto případě se náš Dotazovací engine pro poddotazy spoléhá na nástroj QueryEngineTool, který, jak jste si již domysleli, je nástrojem pro spouštění dotazů na Dotazovací engine. To nám umožňuje modelu nabídnout možnost dotazovat se na různé dokumenty pro různé otázky například. Můžete si také představit, že Dotazovací engine pro poddotazy může použít nástroj, který vyhledává něco na webu nebo získává odpověď pomocí Wolfram Alpha.
|
||||
|
||||
Více informací o nástrojích najdete v dokumentaci k LlamaIndex Python na adrese https://gpt-index.readthedocs.io/en/latest/core_modules/agent_modules/tools/root.html
|
||||
|
||||
## API Reference (Odkazy na rozhraní API)
|
||||
|
||||
- [RetrieverQueryEngine (Dotazovací engine pro získávání)](../../api/classes/RetrieverQueryEngine.md)
|
||||
- [SubQuestionQueryEngine (Dotazovací engine pro poddotazy)](../../api/classes/SubQuestionQueryEngine.md)
|
||||
- [QueryEngineTool (Nástroj pro dotazovací engine)](../../api/interfaces/QueryEngineTool.md)
|
||||
@@ -0,0 +1,33 @@
|
||||
# Hlavní moduly
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
LlamaIndex.TS nabízí několik hlavních modulů, které jsou rozděleny na vysoce úrovňové moduly pro rychlý start a nízkoúrovňové moduly pro přizpůsobení klíčových komponent podle vašich potřeb.
|
||||
|
||||
## Moduly vyšší úrovně
|
||||
|
||||
- [**Dokument**](./high_level/documents_and_nodes.md): Dokument představuje textový soubor, PDF soubor nebo jiný souvislý datový blok.
|
||||
|
||||
- [**Uzel**](./high_level/documents_and_nodes.md): Základní stavební blok dat. Nejčastěji se jedná o části dokumentu rozdělené do spravovatelných kusů, které jsou dostatečně malé na to, aby mohly být vloženy do modelu a LLM.
|
||||
|
||||
- [**Čtečka/Načítání**](./high_level/data_loader.md): Čtečka nebo načítání je něco, co přijímá dokument ve skutečném světě a přeměňuje ho na třídu Dokument, kterou lze poté použít ve vašem indexu a dotazech. V současné době podporujeme soubory s čistým textem a PDF soubory a mnoho dalších bude následovat.
|
||||
|
||||
- [**Indexy**](./high_level/data_index.md): Indexy ukládají uzly a vektory těchto uzlů.
|
||||
|
||||
- [**Dotazovací engine**](./high_level/query_engine.md): Dotazovací enginy generují dotaz, který zadáte, a vracejí vám výsledek. Dotazovací enginy obvykle kombinují předem vytvořený prompt s vybranými uzly z vašeho indexu, aby poskytly LLM kontext, který potřebuje k odpovědi na váš dotaz.
|
||||
|
||||
- [**Chatovací engine**](./high_level/chat_engine.md): Chatovací engine vám pomáhá vytvořit chatbota, který bude interagovat s vašimi indexy.
|
||||
|
||||
## Nízkoúrovňový modul
|
||||
|
||||
- [**LLM**](./low_level/llm.md): Třída LLM je sjednocené rozhraní nad velkým poskytovatelem jazykového modelu, jako je OpenAI GPT-4, Anthropic Claude nebo Meta LLaMA. Můžete ji podřídit, abyste vytvořili konektor pro vlastní velký jazykový model.
|
||||
|
||||
- [**Embedding**](./low_level/embedding.md): Embedding je reprezentován jako vektor s plovoucími čísly. Výchozím modelem pro embedding je OpenAI text-embedding-ada-002 a každý vygenerovaný embedding se skládá z 1 536 plovoucích čísel. Dalším populárním modelem embeddingu je BERT, který používá 768 plovoucích čísel k reprezentaci každého uzlu. Poskytujeme několik nástrojů pro práci s embeddiny, včetně 3 možností výpočtu podobnosti a Maximum Marginal Relevance.
|
||||
|
||||
- [**TextSplitter/NodeParser**](./low_level/node_parser.md): Strategie rozdělování textu jsou nesmírně důležité pro celkovou účinnost vyhledávání v embeddinzích. V současné době nemáme žádné univerzální řešení. V závislosti na zdrojových dokumentech můžete chtít použít různé velikosti a strategie rozdělování. V současné době podporujeme rozdělování podle pevné velikosti, rozdělování podle pevné velikosti s překrývajícími se částmi, rozdělování podle věty a rozdělování podle odstavce. Textový splitter je používán NodeParserem při rozdělování `Dokumentů` na `Uzly`.
|
||||
|
||||
- [**Retriever**](./low_level/retriever.md): Retriever je ten, který skutečně vybírá uzly, které mají být získány z indexu. Zde můžete zkusit získat více nebo méně uzlů na dotaz, změnit funkci podobnosti nebo vytvořit vlastní retriever pro každý jednotlivý případ použití ve vaší aplikaci. Například můžete mít samostatného retrievera pro obsah kódu a textový obsah.
|
||||
|
||||
- [**ResponseSynthesizer**](./low_level/response_synthesizer.md): ResponseSynthesizer je zodpovědný za přijetí řetězce dotazu a použití seznamu `Uzly` k vygenerování odpovědi. To může mít různé formy, například procházení všech kontextů a zpřesňování odpovědi nebo vytváření stromu shrnutí a vrácení kořenového shrnutí.
|
||||
|
||||
- [**Storage**](./low_level/storage.md): V nějakém okamžiku budete chtít uložit své indexy, data a vektory místo opakovaného spouštění modelů embeddingu pokaždé. IndexStore, DocStore, VectorStore a KVStore jsou abstrakce, které vám to umožňují. Společně tvoří StorageContext. V současné době vám umožňujeme ukládat vaše embeddiny do souborů na souborovém systému (nebo do virtuálního paměťového souborového systému), ale aktivně také přidáváme integrace do Vector Databází.
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Vkládání
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
Model vkládání v LlamaIndexu je zodpovědný za vytváření číselných reprezentací textu. Ve výchozím nastavení LlamaIndex používá model `text-embedding-ada-002` od OpenAI.
|
||||
|
||||
Toto lze explicitně nastavit v objektu `ServiceContext`.
|
||||
|
||||
```typescript
|
||||
import { OpenAIEmbedding, serviceContextFromDefaults } from "llamaindex";
|
||||
|
||||
const openaiEmbeds = new OpenAIEmbedding();
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({ embedModel: openaiEmbeds });
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
- [OpenAIEmbedding](../../api/classes/OpenAIEmbedding.md)
|
||||
- [ServiceContext](../../api/interfaces/ServiceContext.md)
|
||||
|
||||
"
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
# LLM
|
||||
|
||||
`Tato dokumentace byla automaticky přeložena a může obsahovat chyby. Neváhejte otevřít Pull Request pro navrhování změn.`
|
||||
|
||||
LLM je zodpovědný za čtení textu a generování přirozených jazykových odpovědí na dotazy. Výchozím modelem pro LlamaIndex.TS je `gpt-3.5-turbo`.
|
||||
|
||||
LLM lze explicitně nastavit v objektu `ServiceContext`.
|
||||
|
||||
```typescript
|
||||
import { OpenAI, serviceContextFromDefaults } from "llamaindex";
|
||||
|
||||
const openaiLLM = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0 });
|
||||
|
||||
const serviceContext = serviceContextFromDefaults({ llm: openaiLLM });
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
- [OpenAI](../../api/classes/OpenAI.md)
|
||||
- [ServiceContext](../../api/interfaces/ServiceContext.md)
|
||||
|
||||
"
|
||||