Как создать надёжных диалоговых агентов искусственного интеллекта с помощью Parlant?

Parlant — это фреймворк, разработанный для помощи разработчикам в создании готовых к производству агентов искусственного интеллекта, которые работают стабильно и надёжно.

При развёртывании агентов на основе больших языковых моделей (LLM) часто возникает проблема: они хорошо работают при тестировании, но не справляются при взаимодействии с реальными пользователями. Они могут игнорировать тщательно разработанные системные подсказки, генерировать неточные или нерелевантные ответы в критические моменты, испытывать трудности с крайними случаями или демонстрировать непоследовательное поведение от одного разговора к другому.

Parlant решает эти проблемы, перенося акцент с разработки подсказок на разработку, основанную на принципах. Вместо того чтобы полагаться только на подсказки, он предоставляет механизмы для определения чётких правил и интеграции инструментов, обеспечивая безопасный и предсказуемый доступ агента к реальным данным и их обработку.

В этом руководстве мы создадим страхового агента, который сможет:
* получать информацию об открытых заявках;
* оформлять новые заявки;
* предоставлять подробную информацию о полисе.

Это продемонстрирует, как интегрировать специализированные инструменты в систему искусственного интеллекта на базе Parlant для последовательной и надёжной поддержки клиентов.

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

`pip install parlant`

`import asyncio`
`from datetime import datetime`
`import parlant.sdk as p`

Определение инструментов

В следующем блоке кода представлены три инструмента, которые имитируют взаимодействия, необходимые страховому помощнику.

`@p.tool`
`async def getopenclaims(context: p.ToolContext) -> p.ToolResult:`
` return p.ToolResult(data=[“Claim #123 – Pending”, “Claim #456 – Approved”])`

`@p.tool`
`async def fileclaim(context: p.ToolContext, claimdetails: str) -> p.ToolResult:`
` return p.ToolResult(data=f”New claim filed: {claim_details}”)`

`@p.tool`
`async def getpolicydetails(context: p.ToolContext) -> p.ToolResult:`
` return p.ToolResult(data={`
` “policy_number”: “POL-7788”,`
` “coverage”: “Covers accidental damage and theft up to $50,000″`
` })`

Определение глоссария и маршрутов

В этом разделе мы определяем глоссарий и маршруты, которые формируют способ обработки агентом знаний предметной области и ведения разговоров. Глоссарий содержит важные бизнес-термины, такие как номер службы поддержки клиентов и часы работы, что позволяет агенту точно ссылаться на них при необходимости.

`async def adddomainglossary(agent: p.Agent):`
` await agent.create_term(`
` name=”Customer Service Number”,`
` description=”You can reach us at +1-555-INSURE”,`
` )`
` await agent.create_term(`
` name=”Operating Hours”,`
` description=”We are available Mon-Fri, 9AM-6PM”,`
` )`

Создание маршрута подачи заявки на страхование

`async def createclaimjourney(agent: p.Agent) -> p.Journey:`
` journey = await agent.create_journey(`
` title=”File an Insurance Claim”,`
` description=”Helps customers report and submit a new claim.”,`
` conditions=[“The customer wants to file a claim”],`
` )`
` s0 = await journey.initialstate.transitionto(chat_state=”Ask for accident details”) `
` …`

Создание маршрута объяснения страхового покрытия

`async def createpolicyjourney(agent: p.Agent) -> p.Journey:`
` journey = await agent.create_journey(`
` title=”Explain Policy Coverage”,`
` description=”Retrieves and explains customer’s insurance coverage.”,`
` conditions=[“The customer asks about their policy”],`
` )`
` s0 = await journey.initialstate.transitionto(toolstate=getpolicy_details)`
` …`

Определение основного исполнителя

Основной исполнитель связывает все компоненты, определённые в предыдущих ячейках, и запускает агента. Он запускает сервер Parlant, создаёт агента поддержки страхования и загружает его глоссарий, маршруты и глобальные рекомендации. Он также обрабатывает крайние случаи, такие как неоднозначные намерения клиента, предлагая агенту выбрать между соответствующими маршрутами.

`async def main():`
` async with p.Server() as server:`
` agent = await server.create_agent(`
` name=”Insurance Support Agent”,`
` description=”Friendly and professional; helps with claims and policy queries.”,`
` )`
` await adddomainglossary(agent)`
` claimjourney = await createclaim_journey(agent)`
` policyjourney = await createpolicy_journey(agent)`
` …`
` print(” Insurance Agent is ready! Open the Parlant UI to chat.”)`
` if name == “main“:`
` import asyncio`
` asyncio.run(main())`

Ознакомьтесь с ПОЛНЫМ КОДОМ здесь.

1. Какие проблемы возникают при развёртывании агентов на основе больших языковых моделей (LLM) и как Parlant решает эти проблемы?

Parlant решает проблемы, связанные с нестабильностью и непредсказуемостью поведения агентов на основе LLM, путём переноса акцента с разработки подсказок на разработку, основанную на принципах. Он предоставляет механизмы для определения чётких правил и интеграции инструментов, обеспечивая безопасный и предсказуемый доступ агента к реальным данным и их обработку.

2. Какие инструменты используются для имитации взаимодействий, необходимых страховому помощнику, при работе с Parlant?

Для имитации взаимодействий, необходимых страховому помощнику, используются три инструмента:
* `getopenclaims` — возвращает список открытых заявок;
* `file_claim` — оформляет новую заявку на основе предоставленных данных;
* `getpolicydetails` — возвращает подробную информацию о полисе.

3. Какие основные компоненты включает в себя создание маршрута подачи заявки на страхование с использованием Parlant?

Создание маршрута подачи заявки на страхование включает в себя следующие основные компоненты:
* определение глоссария, содержащего важные бизнес-термины;
* создание маршрута (journey) с помощью `createclaimjourney`;
* определение основного исполнителя, который связывает все компоненты и запускает агента.

4. Какие инструменты и функции Parlant используются для определения глоссария и маршрутов в системе искусственного интеллекта?

Для определения глоссария и маршрутов в системе искусственного интеллекта используются следующие инструменты и функции Parlant:
* `adddomainglossary` — функция для добавления терминов в глоссарий;
* `createclaimjourney` и `createpolicyjourney` — функции для создания маршрутов подачи заявки на страхование и объяснения страхового покрытия соответственно.

5. Какие основные функции выполняет основной исполнитель в системе искусственного интеллекта на базе Parlant?

Основной исполнитель в системе искусственного интеллекта на базе Parlant выполняет следующие функции:
* связывает все компоненты, определённые в предыдущих ячейках;
* запускает агента;
* запускает сервер Parlant;
* создаёт агента поддержки страхования и загружает его глоссарий, маршруты и глобальные рекомендации;
* обрабатывает крайние случаи, такие как неоднозначные намерения клиента, предлагая агенту выбрать между соответствующими маршрутами.

Источник