Предупреждение
Размещение в процессе является экспериментальным в каждом пакете SDK. Тестирование поведения запуска, запуска, модели и завершения работы в каждой развернутой операционной системе и архитектуре.
Когда следует использовать внутрипроцессное размещение
Размещение в процессе хорошо подходит, когда:
- Приложение должно выполняться без отдельного процесса выполнения.
- Вы хотите, чтобы пакет SDK владел жизненным циклом среды выполнения.
- Вы можете отправить собственную библиотеку для каждой платформы развертывания.
- Допустимые параметры среды и рабочего каталога.
Используйте Настройка по умолчанию (в комплекте CLI) , если изоляция процесса и наиболее установленный путь развертывания являются более важными. Используйте Настройка серверных сервисов , если несколько экземпляров приложений должны подключаться к общей среде выполнения через TCP.
Принцип работы
Пакет SDK загружает собственную библиотеку среды выполнения Copilot и привязывает фиксированный ABI C. Все методы ПАКЕТА SDK продолжают использовать существующий Content-LengthJSON-RPC протокол JSON-RPC через подключение в памяти.

Среда выполнения:
- Выполняется в процессе приложения без Node.js, дочернего процесса, TCP-порта или маркера подключения.
- Поддерживает те же сеансы, потоковые события, средства, перехватчики, разрешения и запросы между клиентами, что и другие транспорты.
- Может вызывать обратные вызовы пакета SDK из собственных рабочих потоков. Пакет SDK обрабатывает маршалирование потоков и время существования обратного вызова.
- Сохраняет загруженную собственную библиотеку и его рабочий пул доступны в течение всего времени существования процесса приложения.
Требования к пакету SDK
Все пакеты SDK предоставляют явный параметр подключения в процессе. Для некоторых языков требуется дополнительная конфигурация сборки или пакета.
| SDK | Параметр подключения | Дополнительное требование |
|---|---|---|
| TypeScript | Runtime | Нет, если пакет включает совместимый пакет среды выполнения |
| Python | Runtime | Предварительная загрузка при python -m copilot download-runtime --in-process недоступности загрузки среды выполнения во время запуска |
| Go | copilot.In | Сборка с помощью -tags copilot_inprocess |
| .NET | Runtime | Разрешить диагностику экспериментального GHCP001 API |
| Rust | Transport::In | |
bundled-in-process Включение функции Cargo | ||
| Java | Runtime | Добавление JNA, классификатора среды выполнения платформы и экспериментального использования API |
Собственный пакет среды выполнения должен соответствовать операционной системе узла, архитектуре ЦП и библиотеке Linux, C. Неподдерживаемые узлы завершаются ошибкой во время разрешения среды выполнения или запуска вместо возврата к дочернему процессу.
Настройка подключения в процессе
Передайте параметр подключения для конкретного языка при создании клиента.
import { CopilotClient, RuntimeConnection } from "@github/copilot-sdk";
const client = new CopilotClient({
connection: RuntimeConnection.forInProcess(),
});
await client.start();
from copilot import CopilotClient, RuntimeConnection
client = CopilotClient(
connection=RuntimeConnection.for_inprocess(),
)
await client.start()
client := copilot.NewClient(&copilot.ClientOptions{
Connection: copilot.InProcessConnection{},
})
if err := client.Start(context.Background()); err != nil {
log.Fatal(err)
}
defer client.Stop()
#pragma warning disable GHCP001
var client = new CopilotClient(new CopilotClientOptions
{
Connection = RuntimeConnection.ForInProcess(),
});
await client.StartAsync();
let options = ClientOptions::default()
.with_transport(Transport::InProcess);
let client = Client::start(options).await?;
import com.github.copilot.AllowCopilotExperimental;
@AllowCopilotExperimental
public class Example {
public void run() throws Exception {
CopilotClientOptions options = new CopilotClientOptions()
.setConnection(RuntimeConnection.forInProcess());
CopilotClient client = new CopilotClient(options);
client.start().join();
}
}
RuntimeConnection.forInProcess() is @CopilotExperimental, поэтому потребляемый класс или метод должен принять участие @AllowCopilotExperimental (или скомпилировать с -Acopilot.experimental.allowed=true). См. статью "Использование экспериментальных API".
Вы также можете задать COPILOT_SDK_DEFAULT_CONNECTION=inprocess перед запуском приложения. Пакет SDK использует это значение только в том случае, если клиент не указывает явное подключение. Недопустимое значение приводит к сбою запуска.
Предпочитайте явную конфигурацию клиента в коде приложения. Используйте переменную среды, если конфигурация развертывания должна выбрать транспорт без изменения приложения.
Настройка среды выполнения
Пакет SDK преобразует поддерживаемые типизированные параметры клиента в собственные аргументы среды выполнения и значения среды с областью узла. В зависимости от пакета SDK эти параметры включают:
- Маркер проверки подлинности и резервный вариант входа в систему.
- Copilot базовый каталог.
- Уровень журнала.
- Время ожидания простоя сеанса.
- Режим удаленного сеанса.
Среда выполнения в процессе получает моментальный снимок среды узла, а также поддерживаемые переопределения, управляемые пакетом SDK. Он не изменяет среду узла.
Задайте значения на уровне процесса перед созданием первого внутрипроцессного клиента. К ним относятся переменные среды, которые не представлены типизированными параметрами клиента и текущим рабочим каталогом приложения.
Разрешение библиотеки среды выполнения
Каждый пакет SDK сначала ищет совместимую или кэшированную библиотеку среды выполнения. Вы можете задать COPILOT_CLI_PATH указатель на совместимый пакет среды выполнения Copilot, если необходимо предоставить среду выполнения отдельно.
В процессе обычно загружается только один путь к библиотеке собственной среды выполнения и версия. Запуск другого клиента с той же загруженной библиотекой поддерживается, но попытка загрузить другую библиотеку среды выполнения завершается ошибкой.
Для рабочих развертываний:
- Создание и тестирование приложения для каждой целевой платформы.
- Убедитесь, что соответствующий собственный артефакт среды выполнения включен в развернутый пакет или доступен с помощью механизма загрузки среды выполнения пакета SDK.
- Запустите по крайней мере один сеанс и завершите поворот модели в тестовом режиме развертывания.
- Перед завершением работы приложения остановите клиентов.
Поведение жизненного цикла
Запуск внутрипроцессного клиента загружает собственную библиотеку, создает узел среды выполнения, открывает подключение в памяти и выполняет нормальное подтверждение версии протокола SDK.
Во время корректного завершения работы пакет SDK:
- Закрывает активные сеансы.
- Запрашивает обычное завершение работы среды выполнения через JSON-RPC.
- Закрывает JSON-RPC и собственные подключения.
- Освобождает узел среды выполнения.
Собственная библиотека может оставаться загруженной до завершения процесса приложения. Не зависят от выгрузки и замены библиотеки среды выполнения после первого использования.
Limitations
В процессе размещения имеются следующие текущие ограничения:
- Экспериментальный API: требования к поведению и упаковке могут меняться между выпусками.
- Состояние общего процесса: все клиенты совместно используют среду процесса узла, текущий рабочий каталог, собственную библиотеку и рабочий пул среды выполнения.
- Варианты ограниченного процесса: параметры пакета SDK для произвольной среды, рабочего каталога, конфигурации телеметрии, пути исполняемого файла или аргументы CLI отклоняются, если это применимо. Настройте глобальные значения процесса в хост-процессе и используйте поддерживаемые типизированные параметры для параметров среды выполнения.
- Нет рабочего каталога для каждого клиента: среда выполнения использует рабочий каталог процесса размещения.
- Одна версия среды выполнения для каждого процесса: загрузка другого пути к собственной библиотеке или версии не поддерживается.
- Степень зрелости платформы зависит от того, что некоторые сочетания пакетов SDK и платформы снижают уровень охвата модели или завершения работы. Проверьте точное сочетание развернутых данных.
Дополнительные материалы
- Руководства по настройке: сравнение размещения в процессе с другими моделями развертывания
- Настройка по умолчанию (в комплекте CLI): запуск пакетной среды выполнения в управляемом дочернем процессе
- Настройка серверных сервисов: подключение приложений к общей среде выполнения через TCP
- Крючки жизненного цикла сессии: обработка событий начала и завершения сеанса