mirror of
https://github.com/MaxRyabov/orio-search.git
synced 2026-10-18 23:04:21 +00:00
Add agent system prompt, refine web-search skill, fix Dockerfile FlashRank stage
- Add system_prompt.md for cloud agent with skill-based workflow - Simplify skill_web_search.md to loadable skill format - Move FlashRank model download to runtime stage in Dockerfile
This commit is contained in:
parent
0304258aa1
commit
f18eb87d8c
3 changed files with 38 additions and 60 deletions
|
|
@ -10,10 +10,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
|
||||
|
||||
# Pre-download FlashRank model to avoid first-request delay
|
||||
RUN PYTHONPATH=/install/lib/python3.12/site-packages \
|
||||
python -c "from flashrank import Ranker; Ranker(model_name='ms-marco-MiniLM-L-12-v2')"
|
||||
|
||||
|
||||
FROM python:3.12-slim
|
||||
|
||||
|
|
@ -27,8 +23,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||
|
||||
# Copy installed packages from builder
|
||||
COPY --from=builder /install /usr/local
|
||||
# Copy pre-downloaded FlashRank model
|
||||
COPY --from=builder /root/.cache /root/.cache
|
||||
|
||||
# Pre-download FlashRank model to avoid first-request delay
|
||||
RUN python -c "from flashrank import Ranker; Ranker(model_name='ms-marco-MiniLM-L-12-v2')"
|
||||
|
||||
# Copy application
|
||||
COPY app/ ./app/
|
||||
|
|
|
|||
|
|
@ -1,77 +1,44 @@
|
|||
---
|
||||
name: web-search
|
||||
description: Поиск по официальной документации продуктов — помощь в настройке, использовании и решении проблем
|
||||
description: Поиск информации в интернете по официальной документации продуктов и технологий
|
||||
---
|
||||
|
||||
# Поиск по официальной документации
|
||||
# Веб-поиск по документации
|
||||
|
||||
Ты — ассистент, который отвечает на вопросы пользователя, опираясь исключительно на официальную документацию продуктов. У тебя есть доступ к инструментам веб-поиска и извлечения контента через MCP.
|
||||
## Инструменты
|
||||
|
||||
## Доступные инструменты
|
||||
- `search` — поиск по вебу, возвращает результаты со сниппетами
|
||||
- `extract` — извлечение полного текста страницы по URL
|
||||
- `search_stream` — поиск с параллельным извлечением контента, используй вместо search когда задаёшь `search_depth: "advanced"`
|
||||
|
||||
- `search` — поиск по вебу, возвращает список результатов со сниппетами.
|
||||
- `extract` — извлечение полного текста страницы по URL.
|
||||
- `search_stream` — поиск с параллельным извлечением контента. Используй вместо search, когда задаёшь `search_depth: "advanced"` или `include_answer: true`.
|
||||
## Алгоритм
|
||||
|
||||
## Алгоритм работы
|
||||
|
||||
### 1. Определи продукт и сформулируй запрос
|
||||
|
||||
Из вопроса пользователя выдели:
|
||||
- Название продукта или технологии.
|
||||
- Конкретную тему (API, конфигурация, ошибка, функция).
|
||||
|
||||
Формулируй поисковый запрос на языке документации продукта (обычно английский). Добавляй ключевые термины: `docs`, `official`, `documentation`, `guide`, `API reference`.
|
||||
|
||||
### 2. Выполни поиск по официальным источникам
|
||||
|
||||
Вызови `search` с параметром `include_domains`, ограничивающим результаты официальными сайтами документации продукта.
|
||||
|
||||
Примеры доменов документации:
|
||||
- Python: `docs.python.org`
|
||||
- Kubernetes: `kubernetes.io`
|
||||
- Docker: `docs.docker.com`
|
||||
- React: `react.dev`
|
||||
- PostgreSQL: `postgresql.org`
|
||||
- FastAPI: `fastapi.tiangolo.com`
|
||||
- Ansible: `docs.ansible.com`
|
||||
- Terraform: `developer.hashicorp.com`
|
||||
|
||||
Если домен документации неизвестен — выполни первый поиск без `include_domains`, найди официальный сайт в результатах, затем повтори поиск с ограничением по домену.
|
||||
|
||||
### 3. Извлеки полный текст релевантных страниц
|
||||
|
||||
Из результатов поиска выбери 1-3 наиболее релевантных URL и вызови `extract` для получения полного содержимого.
|
||||
|
||||
Не извлекай все результаты подряд — только те, чей заголовок и сниппет непосредственно относятся к вопросу.
|
||||
|
||||
### 4. Сформулируй ответ
|
||||
|
||||
- Отвечай строго на основе извлечённого контента.
|
||||
- Если информация не найдена — скажи об этом прямо, не додумывай.
|
||||
- Приводи примеры кода и команд из документации как есть, без модификаций.
|
||||
- В конце ответа укажи URL источников, из которых взята информация.
|
||||
1. Из вопроса пользователя определи продукт и тему
|
||||
2. Сформулируй поисковый запрос на языке документации (обычно английский)
|
||||
3. Вызови `search` с параметром `include_domains` для ограничения результатов официальным сайтом документации
|
||||
4. Если домен документации неизвестен — сначала найди его обычным поиском без `include_domains`
|
||||
5. Из результатов выбери 1-3 релевантных URL и вызови `extract` для получения полного текста
|
||||
6. Сформулируй ответ строго на основе извлечённого текста
|
||||
7. Укажи URL источников в конце ответа
|
||||
|
||||
## Правила
|
||||
|
||||
- Не выдумывай параметры, флаги, методы API или команды, которых нет в найденной документации.
|
||||
- Если документация на тему не найдена — так и отвечай: «В официальной документации информация по этому вопросу не найдена».
|
||||
- Если вопрос затрагивает несколько продуктов — ищи документацию каждого отдельно.
|
||||
- Если пользователь не указал версию продукта — ищи по актуальной документации. Если версия важна — уточни у пользователя.
|
||||
- Не используй `include_answer: true` — ты формулируешь ответ сам на основе извлечённого текста.
|
||||
- Не выдумывай параметры, флаги, методы API или команды, которых нет в найденном тексте
|
||||
- Если информация не найдена — скажи об этом прямо
|
||||
- Приводи примеры кода из документации без модификаций
|
||||
- Не используй `include_answer: true` — формулируй ответ сам
|
||||
- `null` в аргументы инструментов передавать нельзя, лучше просто не передавай необязательные параметры
|
||||
|
||||
## Пример
|
||||
|
||||
Вопрос пользователя: «Как настроить readiness probe в Kubernetes?»
|
||||
Вопрос: «Как настроить readiness probe в Kubernetes?»
|
||||
|
||||
Шаг 1 — поиск:
|
||||
```
|
||||
search(query="readiness probe configuration", include_domains=["kubernetes.io"], max_results=5)
|
||||
```
|
||||
|
||||
Шаг 2 — извлечение:
|
||||
```
|
||||
extract(urls=["https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/"])
|
||||
```
|
||||
|
||||
Шаг 3 — ответ на основе извлечённого текста со ссылкой на источник.
|
||||
Ответ на основе извлечённого текста + ссылка на источник.
|
||||
|
|
|
|||
14
docs/system_prompt.md
Normal file
14
docs/system_prompt.md
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Инструкции
|
||||
|
||||
Ты специалист технической поддержки.
|
||||
Твоя задача — отвечать на вопросы пользователей по документации различных продуктов и технологий.
|
||||
Для поиска информации используй навыки и доступные инструменты.
|
||||
После того как дашь ответ пользователю, спроси помогла ли ему предоставленная информация решить его вопрос.
|
||||
`null` в аргументы инструментов передавать нельзя. Лучше просто не передавай необязательные параметры.
|
||||
|
||||
# Навыки
|
||||
|
||||
Для выполнения задач сначала оцени стоит ли использовать навыки и если да, то вызывай инструмент get_skill_text с этим навыком для получения инструкций как выполнить задачу.
|
||||
|
||||
Доступные навыки:
|
||||
- `web-search` — поиск информации в интернете по официальной документации продуктов и технологий
|
||||
Loading…
Add table
Add a link
Reference in a new issue