LangSmith — это инструмент оценки возможностей больших моделей, который может количественно оценивать эффекты систем, основанных на больших моделях. LangSmith записывает промежуточный процесс приложения большой модели, созданного langchain, чтобы можно было лучше настроить слова подсказки и другие промежуточные процессы для оптимизации. Если вы хотите использовать LangSmith, сначала войдите на страницу его настроек https://smith.langchain.com/settings, чтобы зарегистрировать учетную запись, а затем войдите на страницу ключей API, чтобы создать ключи API. Давайте рассмотрим это в качестве примера для дальнейшего. демонстрация. Здесь мы создаем ключ API с именем test_api_key, как показано на рисунке ниже.
Затем нам нужно установить пакеты зависимостей LangSmith локально.
pip install -U langsmith
После завершения настроек вы можете добавить переменную среды LangSmith в код LangChain для сбора данных процесса. Необходимо установить четыре переменные среды:
Для тестирования мы использовали модель iFlytek Spark для создания класса, который наследует CustomLLMSparkLLM LangChain (код приведен в главе 6.2.1). На основе соответствующего класса я создал следующий тестовый код.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@File : try.py
@Time : 2024/03/29
@Author : CrissChan
@Version : 1.0
@Site : https://blog.csdn.net/crisschan
@Desc :
'''
import os
##Временно установить переменные среды
###LANGCHAIN_TRACING_V2 — установить, включает ли LangChain режим бревного отслеживания.
os.environ['LANGCHAIN_TRACING_V2']="true"
###LANGCHAIN_API_KEY — это ключ LangSmith, созданный выше.
os.environ['LANGCHAIN_API_KEY']="ls__626de75e47214de3a9b73ea801774183"
os.environ['LANGCHAIN_ENDPOINT']="https://api.smith.langchain.com"
###LANGCHAIN_PROJECT — имя отслеживаемого проекта. Если проект не существует на платформе LangSmith, он будет создан автоматически. Если эта переменная среды не установлена, соответствующая информация будет записана в проект по умолчанию. Проекты здесь не обязательно соответствуют вашим реальным проектам один в один. Их можно понимать как категории или ярлыки. Если вы измените этот элемент перед запуском приложения, под ним будет написано соответствующее бревно.
###Его можно разделить по средам разработки и производства, по дате и т. д.
os.environ['LANGCHAIN_PROJECT']="Food"
import warnings
warnings.filterwarnings('ignore')
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
from iflytek import SparkLLM
# Создайте шаблоны для двух сценариев.
chinese_food_template = """
Вы опытный китайский повар, который хорошо умеет готовить китайскую еду.
Вот вопросы, на которые вам нужно ответить:
{input}
"""
western_food_template = """
Вы опытный кондитер и умеете готовить выпечку.
Вот вопросы, на которые вам нужно ответить:
{input}
"""
# Создайте оперативную информацию
prompt_infos = [
{
"key": "food",
"description": «Подходит для ответов на вопросы о приготовлении китайской еды»,
"template": chinese_food_template,
},
{
"key": "bakery",
"description": «Подходит для ответов на вопросы о западном производстве продуктов питания»,
"template": western_food_template,
}
]
# Язык инициализации Модель
llm = SparkLLM(temperature=0.1)
# Постройте целевую цепочку
from langchain.chains.llm import LLMChain
from langchain.prompts import PromptTemplate
chain_map = {}
for info in prompt_infos:
prompt = PromptTemplate(
template=info['template'],
input_variables=["input"]
)
print("Целевая подсказка:\n", prompt)
chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=True
)
chain_map[info["key"]] = chain
# Построить цепочку маршрутизации
from langchain.chains.router.llm_router import LLMRouterChain,RouterOutputParser
из langchain.chains.router.multi_prompt_prompt импортируйте MULTI_PROMPT_ROUTER_TEMPLATE как RounterTemplate
места назначения = [f"{p['key']}: {p['description']}" для p в Prompt_infos]
router_template = RounderTemplate.format(destinations="\n".join(destinations))
print("Маршрутизация:\n", router_template)
router_prompt = PromptTemplate(
template=router_template,
input_variables=["input"],
output_parser=RouterOutputParser(),)
print("маршрутизациянамекать:\n", router_prompt)
router_chain = LLMRouterChain.from_llm(
llm,
router_prompt,
verbose=True
)
# Построить цепочку по умолчанию
from langchain.chains import ConversationChain
default_chain = ConversationChain(
llm=llm,
output_key="text",
verbose=True
)
# Создайте несколько цепочек подсказок
from langchain.chains.router import MultiPromptChain
chain = MultiPromptChain(
router_chain=router_chain,
destination_chains=chain_map,
default_chain=default_chain,
verbose=True
)
# тест
print(chain.run("Как приготовить бублики"))
После запуска просмотрите LangSmith, как показано ниже.
Мы можем увидеть подробный промежуточный процесс на странице Ланг Смита и быстро определить функции различных модулей с помощью значков. Мы можем видеть входные и выходные данные каждого процесса обработки, что также облегчает нам отладку и оценку результатов.
Вы также можете посмотреть количество Токенов, время исполнения и т.д. в соответствующем разделе. В списке проекта приложения большой модели, построенной LangChain, которые мы выполняли много раз, также можно сравнить по горизонтали.
Каждая трассировка обработки и обратной связи может отображать время ответа и количество использованных токенов. Компания LangSmith завершила отслеживание всех промежуточных процессов приложений, созданных LangChain, что также предоставляет мощные средства для принятия или тестирования приложений на основе больших моделей, созданных LangChain.