Перейти к основному содержимому

Промпты

В главе Основы мы научились получать простой промпт. В этом разделе подробнее рассмотрим работу с промптами, предоставляемыми MCP-сервером.

Получение промпта​

Для получения промпта используйте client.prompts().get(). Он принимает имя промпта и необязательные аргументы.

use neva::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Error> {
let mut client = Client::new()
.with_options(|opt| opt
.with_stdio(
"cargo",
["run", "--manifest-path", "./neva-mcp-server/Cargo.toml"]));

client.connect().await?;

let args = ("lang", "Rust");
let prompt = client.prompts().get("hello_world_code", args).await?;

println!("{prompt.descr:?}: {prompt.messages:?}");

client.disconnect().await
}

Передача аргументов​

Если промпт принимает один параметр, передайте кортеж с именем параметра и его значением:

let args = ("lang", "Rust");
let prompt = client.prompts().get("hello_world_code", args).await?;

Если промпт принимает несколько параметров, передайте их в виде массива, Vec или HashMap:

let args = [
("lang", "Rust"),
("topic", "Hello World function"),
];
let prompt = client.prompts().get("write_code", args).await?;

Если промпт не принимает параметров, передайте тип-единицу ():

let prompt = client.prompts().get("rust_hello_world", ()).await?;

Список промптов​

list(cursor) запрашивает одну страницу промптов сервера, а list_all() обходит все страницы:

for prompt in client.prompts().list_all().await? {
println!("{}: {:?}", prompt.name, prompt.descr);
}

Промпт выбирает пользователь, а не вызывает модель. Чтобы начать с него разговор, neva::svir::prompt_messages превращает его в сообщения, которые отправляются модели.

Обучение на примерах​

Полный пример доступен здесь.