Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Important
Yeni kullanım örnekleri için Databricks aracı kodu, sunucu yapılandırması ve dağıtım iş akışı üzerinde tam denetim için Databricks Uygulamalarına aracı dağıtmanızı önerir. Bkz. Bir yapay zeka aracısı yazma ve Databricks Uygulamalarında dağıtma. Mevcut bir ajanı taşımak için Model Sunumu'ndan Databricks Uygulamalarına ajan göç ettirme bölümüne bakın.
Note
Databricks, aracıları yazmak için ResponsesAgent şemaya geçiş yapmanızı önerir. Bkz. Bir yapay zeka aracısı yazma ve Databricks Uygulamalarında dağıtma.
Yapay zeka aracılarının Databricks'te diğer özelliklerle uyumlu olması için belirli giriş ve çıkış şeması gereksinimlerine uyması gerekir. Bu sayfada eski aracı yazma imzalarının ve arabirimlerinin nasıl kullanılacağı açıklanmaktadır: ChatAgent arabirim, ChatModel arabirim, SplitChatMessageRequest giriş şeması ve StringResponse çıkış şeması.
Eski bir ChatAgent aracısı yazma
MLflow ChatAgent arabirimi, OpenAI ChatCompletion şemasına benzer ancak bu şemayla tam olarak uyumlu değildir.
ChatAgentoluşturmayı öğrenmek için, aşağıdaki bölümdeki örneklere ve MLflow belgelerine bakın: ChatAgent arabiriminedir?
ChatAgent kullanarak aracılar yazmak ve dağıtmak için aşağıdakileri yükleyin:
-
databricks-agents0.16.0 veya üzeri -
mlflow2.20.2 veya üzeri - Python 3.10 veya üzeri.
- Bu gereksinimi karşılamak için sunucusuz işlem veya Databricks Runtime 13.3 LTS veya üzerini kullanabilirsiniz.
%pip install -U -qqqq databricks-agents==0.16.0 mlflow==2.20.2
Ya zaten bir temsilcim varsa?
Zaten LangChain, LangGraph veya benzer bir çerçeveyle oluşturulmuş bir aracınız varsa, aracınızı Databricks'te kullanmak için yeniden yazmanız gerekmez. Bunun yerine, mevcut aracınızı MLflow ChatAgent arabirimiyle sarmalamanız gerekir:
mlflow.pyfunc.ChatAgent'dan devralan bir Python sarmalayıcı sınıfı yazın.Sarmalayıcı sınıfının içinde, mevcut aracınızı özniteliği
self.agent = your_existing_agentolarak tutun.Bir
ChatAgentsınıfı, akış içermeyen istekleri işlemek için birpredictyöntem uygulamanızı gerektirir.predictkabul etmelidir:messages: list[ChatAgentMessage], rolü olan her birininChatAgentMessagelistesidir ("kullanıcı" veya "yardımcı"), istem ve kimlik.(İsteğe bağlı)
context: Optional[ChatContext]vecustom_inputs: Optional[dict]ek veriler için.
import uuid # input example [ ChatAgentMessage( id=str(uuid.uuid4()), # Generate a unique ID for each message role="user", content="What's the weather in Paris?" ) ]predictbirChatAgentResponsedöndürmelidir.import uuid # output example ChatAgentResponse( messages=[ ChatAgentMessage( id=str(uuid.uuid4()), # Generate a unique ID for each message role="assistant", content="It's sunny in Paris." ) ] )Biçimler arasında dönüştürme
predictiçinde, gelen iletilerilist[ChatAgentMessage]temsilcinizin beklediği giriş biçimine dönüştürün.Ajanınız bir yanıt oluşturduktan sonra çıktısını bir veya daha fazla
ChatAgentMessagenesneye dönüştürün ve birChatAgentResponseiçinde sarmalayın.
Tavsiye
LangChain çıkışını otomatik olarak dönüştürme
Bir LangChain aracısını sarmalıyorsanız, LangChain çıkışlarını otomatik olarak MLflow mlflow.langchain.output_parsers.ChatAgentOutputParser ve ChatAgentMessage şeması formatına dönüştürmek için ChatAgentResponse kullanabilirsiniz.
Aşağıda temsilcinizi dönüştürmek için basitleştirilmiş bir şablon bulunmaktadır:
from mlflow.pyfunc import ChatAgent
from mlflow.types.agent import ChatAgentMessage, ChatAgentResponse, ChatAgentChunk
import uuid
class MyWrappedAgent(ChatAgent):
def __init__(self, agent):
self.agent = agent
def predict(self, messages, context=None, custom_inputs=None):
# Convert messages to your agent's format
agent_input = ... # build from messages
agent_output = self.agent.invoke(agent_input)
# Convert output to ChatAgentMessage
return ChatAgentResponse(
messages=[ChatAgentMessage(role="assistant", content=agent_output, id=str(uuid.uuid4()),)]
)
def predict_stream(self, messages, context=None, custom_inputs=None):
# If your agent supports streaming
for chunk in self.agent.stream(...):
yield ChatAgentChunk(delta=ChatAgentMessage(role="assistant", content=chunk, id=str(uuid.uuid4())))
Tam örnekler için aşağıdaki bölümdeki not defterlerine bakın.
ChatAgent örnekleri
Aşağıdaki not defterleri, popüler OpenAI, LangGraph ve AutoGen kitaplıklarını kullanarak akış tabanlı ve akış tabanı olmayan yazılım oluşturmayı gösterir.
LangGraph
Bir LangChain aracısını sarmalıyorsanız, LangChain çıkışlarını otomatik olarak MLflow mlflow.langchain.output_parsers.ChatAgentOutputParser ve ChatAgentMessage şeması formatına dönüştürmek için ChatAgentResponse kullanabilirsiniz.
LangGraph araç çağırma aracısı
OpenAI
OpenAI araç çağırma aracısı
OpenAI Yanıtlar API'sinde araç çağırma aracı
OpenAI yalnızca sohbet aracısı
AutoGen
AutoGen araç çağırma aracısı
DSPy
DSPy yalnızca sohbet aracısı
Araçlar ekleyerek bu aracıların özelliklerini genişletmeyi öğrenmek için bkz. Aracıları araçlara bağlama.
ChatAgent yanıtlarını akışla aktarma
Akış ajanları, yanıtları sürekli bir şekilde küçük, artımlı parçalar halinde sunar. Akış algılanan gecikme süresini azaltır ve konuşma aracıları için kullanıcı deneyimini geliştirir.
Akış ChatAgent yazmak için, predict_stream objeleri oluşturan ve bunları sunan bir jeneratör döndüren bir ChatAgentChunk yöntemi tanımlayın; her bir ChatAgentChunk, yanıtın bir bölümünü içerir.
ChatAgent ideal akış davranışı hakkında daha fazla bilgi edinin.
Aşağıdaki kodda örnek bir predict_stream işlevi gösterilmektedir. Akış aracılarının tam örnekleri için bkz. ChatAgent örnekleri:
def predict_stream(
self,
messages: list[ChatAgentMessage],
context: Optional[ChatContext] = None,
custom_inputs: Optional[dict[str, Any]] = None,
) -> Generator[ChatAgentChunk, None, None]:
# Convert messages to a format suitable for your agent
request = {"messages": self._convert_messages_to_dict(messages)}
# Stream the response from your agent
for event in self.agent.stream(request, stream_mode="updates"):
for node_data in event.values():
# Yield each chunk of the response
yield from (
ChatAgentChunk(**{"delta": msg}) for msg in node_data["messages"]
)
Eski bir ChatModel aracısı yazma
Important
Databricks, aracı veya üretken yapay zeka uygulamaları oluşturmak için ChatAgent arabirimini önerir. ChatModel'den ChatAgent'a geçiş yapmak için bkz. MLflow belgeleri - ChatModel'den ChatAgent'a geçiş.
ChatModel , MLflow'da OpenAI'nin ChatCompletion şemasını genişleten ve özel işlevsellik eklerken ChatCompletion standardını destekleyen platformlarla uyumluluğu korumanızı sağlayan eski bir aracı yazma arabirimidir. Ek ayrıntılar için bkz . MLflow: ChatModel'i Kullanmaya Başlama .
Aracınızı mlflow.pyfunc.ChatModel alt sınıfı olarak yazmak aşağıdaki avantajları sağlar:
Bir hizmet aracısını çağırırken, istek gövdesinde
{stream: true}atlayarak akış aracısı çıktısını etkinleştirir.Aracınız kullanıma sunulduğunda Yapay Zeka Ağ Geçidi Karar Tablolarını otomatik olarak etkinleştirir ve istek sahibinin adı gibi gelişmiş istek günlüğü meta verilerine erişim sağlar.
Warning
İstek günlükleri ve değerlendirme günlükleri kullanım dışıdır ve gelecek bir sürümde kaldırılacaktır. Geçiş kılavuzu için bkz. istek günlükleri ve değerlendirme günlüklerinin kaldırılması.
Yazılan Python sınıflarını kullanarak ChatCompletion şemasıyla uyumlu aracı kodu yazmanızı sağlar.
MLflow, ajan günlüğe kaydedilirken bir
input_exampleolmasa bile sohbet tamamlamasıyla uyumlu imzayı otomatik olarak çıkartır. Bu, aracıyı kaydetme ve dağıtma işlemini basitleştirir. Bkz. Günlükleme sırasında Model İmzasını Çıkart.
Aşağıdaki kod en iyi şekilde Databricks not defterinde çalıştırılır. Not defterleri, ajanlarınızı geliştirmek, test etmek ve yinelemek için uygun bir ortam sağlar.
MyAgent sınıfı, gerekli mlflow.pyfunc.ChatModel yöntemini uygulayarak predictgenişletir. Bu, Custom Agents ile uyumluluğu sağlar.
sınıfı ayrıca akış çıkışlarını işlemek için _create_chat_completion_chunk ve predict_stream isteğe bağlı yöntemleri içerir.
# Install a pinned version of mlflow
%pip install -U mlflow==2.20.2
dbutils.library.restartPython()
import re
from typing import Optional, Dict, List, Generator
from mlflow.pyfunc import ChatModel
from mlflow.types.llm import (
# Non-streaming helper classes
ChatCompletionRequest,
ChatCompletionResponse,
ChatCompletionChunk,
ChatMessage,
ChatChoice,
ChatParams,
# Helper classes for streaming agent output
ChatChoiceDelta,
ChatChunkChoice,
)
class MyAgent(ChatModel):
"""
Defines a custom agent that processes ChatCompletionRequests
and returns ChatCompletionResponses.
"""
def predict(self, context, messages: list[ChatMessage], params: ChatParams) -> ChatCompletionResponse:
last_user_question_text = messages[-1].content
response_message = ChatMessage(
role="assistant",
content=(
f"I will always echo back your last question. Your last question was: {last_user_question_text}. "
)
)
return ChatCompletionResponse(
choices=[ChatChoice(message=response_message)]
)
def _create_chat_completion_chunk(self, content) -> ChatCompletionChunk:
"""Helper for constructing a ChatCompletionChunk instance for wrapping streaming agent output"""
return ChatCompletionChunk(
choices=[ChatChunkChoice(
delta=ChatChoiceDelta(
role="assistant",
content=content
)
)]
)
def predict_stream(
self, context, messages: List[ChatMessage], params: ChatParams
) -> Generator[ChatCompletionChunk, None, None]:
last_user_question_text = messages[-1].content
yield self._create_chat_completion_chunk(f"Echoing back your last question, word by word.")
for word in re.findall(r"\S+\s*", last_user_question_text):
yield self._create_chat_completion_chunk(word)
agent = MyAgent()
model_input = ChatCompletionRequest(
messages=[ChatMessage(role="user", content="What is Databricks?")]
)
response = agent.predict(context=None, messages=model_input.messages, params=None)
print(response)
Aracı sınıfını MyAgent tek bir not defterinde tanımlarken, ayrı bir sürücü not defteri oluşturmanızı öneririz. Sürücü not defteri, aracıyı Model Kayıt Defteri'ne kaydeder ve Model Sunma kullanarak aracıyı dağıtır.
Bu ayrım, MLflow'un Koddan Alınan Modeller metodolojisini kullanarak modelleri günlüğe kaydetmek için Databricks tarafından önerilen iş akışını izler.
SplitChatMessageRequest giriş şeması (kullanım dışı)
SplitChatMessagesRequest, geçerli sorguyu ve geçmişi ayrı ayrı aracı girişi olarak geçirmenizi sağlar.
question = {
"query": "What is MLflow",
"history": [
{
"role": "user",
"content": "What is Retrieval-augmented Generation?"
},
{
"role": "assistant",
"content": "RAG is"
}
]
}
StringResponse çıkış şeması (kullanım dışı)
StringResponse , aracının yanıtını tek content dize alanına sahip bir nesne olarak döndürmenizi sağlar:
{"content": "This is an example string response"}