weave.init()가 호출되면 Weave는 Cohere Python 라이브러리를 통해 이루어진 LLM 호출을 자동으로 추적하고 로깅합니다.
개발 중은 물론 프로덕션 환경에서도 LLM 애플리케이션의 트레이스를 중앙 데이터베이스에 저장하는 것이 중요합니다. 이러한 트레이스는 디버깅에 사용하고, 애플리케이션을 개선하는 데 도움이 되는 데이터셋으로도 활용할 수 있습니다.
Weave는 cohere-python의 트레이스를 자동으로 캡처합니다. 라이브러리는 평소처럼 사용하면 되며, 먼저 weave.init()를 호출해 시작하세요:
import cohere
import os
import weave
# Cohere 라이브러리를 평소처럼 사용하세요
co = cohere.Client(api_key=os.environ["COHERE_API_KEY"])
weave.init("cohere_project")
response = co.chat(
message="How is the weather in Boston?",
# 질문에 답하기 전에 웹 검색을 수행합니다. 자체 맞춤형 커넥터를 사용할 수도 있습니다.
connectors=[{"id": "web-search"}],
)
print(response.text)
weave.init()를 호출할 때 W&B team을 지정하지 않으면 기본 entity가 사용됩니다. 기본 entity를 확인하거나 업데이트하려면 W&B Models 문서의 User Settings를 참고하세요.
cohere 모델의 강력한 기능 중 하나는 connectors를 사용해 엔드포인트 측에서 다른 API로 요청을 보낼 수 있다는 점입니다. 그러면 응답에는 커넥터가 반환한 문서로 연결되는 인용 요소와 함께 생성된 텍스트가 포함됩니다.
LLM Call을 추적할 수 있도록 Cohere의 Client.chat(), AsyncClient.chat(), Client.chat_stream(), AsyncClient.chat_stream() 방법을 자동으로 패치합니다.
Weave ops는 실험하는 동안 코드를 자동으로 버전 관리하고 입력과 출력을 캡처하여 결과를 재현 가능하게 만듭니다. Cohere의 chat 방법을 호출하는 함수를 @weave.op()으로 데코레이션해 만들기만 하면, Weave가 입력과 출력을 추적합니다. 예시는 다음과 같습니다:
import cohere
import os
import weave
co = cohere.Client(api_key=os.environ["COHERE_API_KEY"])
weave.init("cohere_project")
@weave.op()
def weather(location: str, model: str) -> str:
response = co.chat(
model=model,
message=f"How is the weather in {location}?",
# 질문에 답하기 전에 웹 검색을 수행합니다. 맞춤형 커넥터를 사용할 수도 있습니다.
connectors=[{"id": "web-search"}],
)
return response.text
print(weather("Boston", "command"))
구성 요소가 많아지면 실험을 체계적으로 정리하기가 어렵습니다. Model 클래스를 사용하면 시스템 프롬프트나 사용 중인 모델처럼 앱의 실험 관련 세부 정보를 담아 정리할 수 있습니다. 이렇게 하면 앱의 여러 반복 버전을 정리하고 비교하는 데 도움이 됩니다.
Model은 코드를 버전 관리하고 입력/출력을 기록하는 것에 더해, 애플리케이션의 동작을 제어하는 구조화된 매개변수도 함께 담아 어떤 매개변수가 가장 잘 작동했는지 쉽게 찾을 수 있게 해줍니다. 또한 Weave Models는 serve 및 Evaluation과 함께 사용할 수도 있습니다.
아래 예시에서는 model과 temperature를 바꿔 가며 실험할 수 있습니다. 이 둘 중 하나를 변경할 때마다 WeatherModel의 새로운 version이 생성됩니다.
import weave
import cohere
import os
weave.init('weather-cohere')
class WeatherModel(weave.Model):
model: str
temperature: float
@weave.op()
def predict(self, location: str) -> str:
co = cohere.Client(api_key=os.environ["COHERE_API_KEY"])
response = co.chat(
message=f"How is the weather in {location}?",
model=self.model,
temperature=self.temperature,
connectors=[{"id": "web-search"}]
)
return response.text
weather_model = WeatherModel(
model="command",
temperature=0.7
)
result = weather_model.predict("Boston")
print(result)
