Anthropic Academy Courses My Profile Sign Out

Обзор работы с выборкой

/* Корневые переменные цвета */

:root {

/* Цвет текста по умолчанию */

/* Система цветов Slate */

--color-slate-50: #faf9f6; /* Светло-костяной */

--color-slate-150: #f0eee6; /* Средне-костяной */

--color-slate-200: #e5e2d9; /* Тёмно-костяной */

--color-slate-300: #d1cfc5; /* Светло-облачный */

--color-slate-400: #b8b5a6; /* Средне-облачный */

--color-slate-500: #9a9788; /* Тёмно-облачный */

--color-slate-600: #7c7968; /* Светло-сланцевый */

--color-slate-700: #5e5b4e; /* Средне-сланцевый */

--color-slate-950: #2c2b25; /* Тёмно-сланцевый */

/* Макет контейнера редактора */

/* Стили обозревателя файлов - сохраняем шрифт редактора кода */

#tutorial-container .file-icon,

#tutorial-container .file-name,

/* Вкладки файлов - сохраняем шрифт редактора кода */

/* Пустое состояние при отсутствии открытых файлов */

/* Кнопки навигации */

/* Стили для тура/подсветки */

/* Кнопка триггера тура */

0% {

70% {

100% {

/* Обеспечение корректной работы элементов тура с существующей компоновкой */

/* Мобильные стили */

/* Скрываем название урока на мобильных устройствах */

/* Уменьшаем отступы в навигации урока */

/* Убираем отступы у контейнера кнопок навигации */

/* Уменьшаем высоту кнопок навигации */

/* Уменьшаем отступы контейнера аккордеона */

/* Настройки тура для мобильных устройств */

← Назад Далее →

// Данные из advanced_mcp/sampling.js

".gitignore": `# Файлы, сгенерированные Python

__pycache__/

*.py[oc]

build/

dist/

wheels/

*.egg-info

Виртуальные окружения

.venv

.python-version

`,

"README.md": `# Демонстрация ведения журнала и прогресса MCP

Демонстрация работы протокола Model Context Protocol с использованием транспорта STDIO.

Установка

Установите зависимости с помощью uv:

\`\`\`bash

uv sync

\`\`\`

Запуск проекта

Запустите клиент MCP:

\`\`\`bash

uv run client.py

\`\`\`

`,

"client.py": `import asyncio

from anthropic import AsyncAnthropic

from mcp import ClientSession, StdioServerParameters

from mcp.client.stdio import stdio_client

from mcp.client.session import RequestContext

from mcp.types import (

CreateMessageRequestParams,

CreateMessageResult,

TextContent,

SamplingMessage,

anthropic_client = AsyncAnthropic()

model = "claude-sonnet-4-0"

server_params = StdioServerParameters(

command="uv",

args=["run", "server.py"],

async def chat(input_messages: list[SamplingMessage], max_tokens=4000):

messages = []

for msg in input_messages:

if msg.role == "user" and msg.content.type == "text":

content = (

msg.content.text

if hasattr(msg.content, "text")

else str(msg.content)

elif msg.role == "assistant" and msg.content.type == "text":

content = (

msg.content.text

if hasattr(msg.content, "text")

else str(msg.content)

response = await anthropic_client.messages.create(

model=model,

messages=messages,

max_tokens=max_tokens,

text = "".join([p.text for p in response.content if p.type == "text"])

return text

async def sampling_callback(

context: RequestContext, params: CreateMessageRequestParams

):

Вызов Claude с использованием SDK Anthropic

text = await chat(params.messages)

return CreateMessageResult(

role="assistant",

model=model,

content=TextContent(type="text", text=text),

async def run():

async with stdio_client(server_params) as (read, write):

async with ClientSession(

read, write, sampling_callback=sampling_callback

) as session:

await session.initialize()

result = await session.call_tool(

name="summarize",

print(result.content)

if __name__ == "__main__":

import asyncio

asyncio.run(run())

`,

"pyproject.toml": `[project]

name = "sampling"

version = "0.1.0"

description = "Демонстрация работы с выборкой в MCP"

readme = "README.md"

requires-python = ">=3.10"

dependencies = [

"aioconsole>=0.8.1",

"anthropic>=0.53.0",

"mcp[cli]>=1.9.3",

[tool.setuptools]

py-modules = ["client", "server"]

[build-system]

requires = ["setuptools>=61.0"]

build-backend = "setuptools.build_meta"

`,

"server.py": `from mcp.server.fastmcp import FastMCP, Context

from mcp.types import SamplingMessage, TextContent

mcp = FastMCP(name="Demo Server")

@mcp.tool()

async def summarize(text_to_summarize: str, ctx: Context):

prompt = f"""

Пожалуйста, сделайте краткое резюме следующего текста:

"""

result = await ctx.session.create_message(

messages=[

SamplingMessage(

role="user", content=TextContent(type="text", text=prompt)

max_tokens=4000,

system_prompt="Вы — полезный исследовательский ассистент.",

if result.content.type == "text":

return result.content.text

else:

raise ValueError("Ошибка при выполнении выборки")

if __name__ == "__main__":

mcp.run(transport="stdio")

`,

file: "server.py",

line: 14,

endLine: 22,

title: "Инициализация выборки",

markdown:

"На сервере во время вызова инструмента выполните метод `create_message()`, передав список сообщений, которые вы хотите отправить языковой модели.",

file: "client.py",

line: 50,

endLine: 52,

title: "Функции обратного вызова для выборки",

markdown:

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

file: "client.py",

line: 24,

endLine: 38,

title: "Форматы сообщений",

markdown: `Список сообщений, предоставленных сервером, отформатирован для общения в MCP. Отдельные сообщения не гарантированно совместимы с используемым вами SDK языковой модели.

Например, если вы используете SDK Anthropic, вам потребуется написать немного логики преобразования, чтобы преобразовать сообщения MCP в формат, совместимый с SDK Anthropic.`,

file: "client.py",

line: 53,

endLine: 60,

title: "Возврат сгенерированного текста",

markdown: `После генерации текста с помощью языковой модели вы вернёте `CreateMessageResult`, который содержит сгенерированный текст.`,

file: "client.py",

line: 66,

endLine: 66,

title: "Подключение функции обратного вызова",

markdown: `Не забудьте: функцию обратного вызова на клиенте нужно передать в вызов `ClientSession`.`,

file: "server.py",

line: 24,

endLine: 27,

title: "Получение результата",

markdown: `После того как клиент сгенерирует и вернёт текст, он будет отправлен на сервер. Вы можете использовать этот текст для различных целей:

  • Использовать его как часть рабочего процесса в вашем инструменте
  • Решить, сделать ли ещё один вызов выборки
  • Вернуть сгенерированный текст

`,

```

Summary

Downloads

  • sampling.zip (opens in new tab)