Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Примеры по работе c langchain.js #240

Merged
merged 1 commit into from
Jan 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions js/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Примеры работы с LangChain.js
* [QnA с помощью RAG](rag.ipynb)
* [Поиск в интернете с помощью Tavily](tools.ipynb)
* [Выделение сущностей из текста](extraction.ipynb)
* [Пример агента с помощью LangGraph.js](langgraph_quickstart.ipynb)
26 changes: 26 additions & 0 deletions js/deno.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"imports": {
"langchain/": "npm:/[email protected]/",
"@langchain/anthropic": "npm:@langchain/[email protected]",
"@langchain/cloudflare": "npm:@langchain/[email protected]",
"@langchain/community/": "npm:/@langchain/[email protected]/",
"@langchain/openai": "npm:@langchain/[email protected]",
"@langchain/cohere": "npm:@langchain/[email protected]",
"@langchain/textsplitters": "npm:@langchain/[email protected]",
"@langchain/google-vertexai-web": "npm:@langchain/[email protected]",
"@langchain/mistralai": "npm:@langchain/[email protected]",
"@langchain/core/": "npm:/@langchain/[email protected]/",
"@langchain/pinecone": "npm:@langchain/[email protected]",
"@langchain/google-common": "npm:@langchain/[email protected]",
"@langchain/langgraph": "npm:/@langchain/[email protected]",
"@langchain/langgraph/": "npm:/@langchain/[email protected]/",
"langchain-gigachat": "npm:[email protected]",
"@faker-js/faker": "npm:@faker-js/faker",
"events": "node:events",
"cheerio": "npm:cheerio",
"chromadb": "npm:/chromadb",
"dotenv/": "npm:/dotenv/",
"zod": "npm:/zod",
"zod-to-json-schema": "npm:/zod-to-json-schema"
}
}
163 changes: 163 additions & 0 deletions js/extraction.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Extraction\n",
"В этом ноутбуке мы создадим pipeline, с помощью которого мы сможем выделять сущности из текста.\n",
"\n",
"## Установка\n",
"### Зависимости\n",
"```bash\n",
"npm install --save langchain langchain-gigachat zod\n",
"```\n",
"### Переменные окружения\n",
"```bash\n",
"export GIGACHAT_CREDENTIALS='ваши креды'\n",
"export GIGACHAT_SCOPE='GIGACHAT_API_CORP' или 'GIGACHAT_API_PERS' или 'GIGACHAT_API_B2B'\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Схема\n",
"Здесь мы инициализируем схему, по которой GigaChat будет выделять сущности.\n",
"Схему мы инициализируем с помощью [Zod](https://zod.dev/)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"import { z } from \"zod\";\n",
"\n",
"const personSchema = z.object({\n",
" name: z.optional(z.string()).describe(\"Имя человека\"),\n",
" hair_color: z\n",
" .optional(z.string())\n",
" .describe(\"Цвет волос, если известен\"),\n",
" height_in_meters: z\n",
" .optional(z.number())\n",
" .describe(\"Высота в метрах\"),\n",
"});"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## LLM цепочка\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import { ChatPromptTemplate } from \"@langchain/core/prompts\";\n",
"\n",
"// Определите пользовательский промпт для предоставления инструкций и дополнительного контекста.\n",
"// 1) Вы можете добавить примеры в шаблон промпта, чтобы улучшить качество извлечения.\n",
"// 2) Введите дополнительные параметры, чтобы учитывать контекст (например, включите метаданные\n",
"// о документе, из которого был извлечен текст.)\n",
"const promptTemplate = ChatPromptTemplate.fromMessages([\n",
" [\n",
" \"system\",\n",
" `Ты алгоритм выделения сущностей из текста.\n",
"Выделяй только релевантную информацию из текста\n",
"Если ты не знаешь значение для атрибута, который нужно выделить проставь значение этого атрибута в null.`,\n",
" ],\n",
" [\"human\", \"{text}\"],\n",
"]);"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"import { Agent } from 'node:https';\n",
"import { GigaChat } from \"langchain-gigachat\"\n",
"/*\n",
"В обычном Node.js такое отключение проверки сертификатов срабатывает.\n",
"\n",
"Но в Deno нет, \n",
"поэтому используйте проставление NODE_EXTRA_CA_CERTS в env.\n",
" */\n",
"const httpsAgent = new Agent({\n",
" rejectUnauthorized: false,\n",
"}); \n",
"\n",
"const llm = new GigaChat({\n",
" maxRetries: 0,\n",
" model: 'GigaChat-Max',\n",
" httpsAgent\n",
"})"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"const structured_llm = llm.withStructuredOutput(personSchema);"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"UPDATE TOKEN\n"
]
},
{
"data": {
"text/plain": [
"{ name: \u001b[32m\"Алан Смит\"\u001b[39m, hair_color: \u001b[32m\"белый\"\u001b[39m, height_in_meters: \u001b[33m1.8288\u001b[39m }"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"const prompt = await promptTemplate.invoke({\n",
" text: \"Алан Смит высотой 6 футов с белыми волосами \",\n",
" });\n",
"await structured_llm.invoke(prompt);"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Deno",
"language": "typescript",
"name": "deno"
},
"language_info": {
"codemirror_mode": "typescript",
"file_extension": ".ts",
"mimetype": "text/x.typescript",
"name": "typescript",
"nbconvert_exporter": "script",
"pygments_lexer": "typescript",
"version": "5.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
203 changes: 203 additions & 0 deletions js/langgraph_quickstart.ipynb

Large diffs are not rendered by default.

Loading