from langsmith import wrappers, Client
from openai import AsyncOpenAI
# 可选:包装 OpenAI 客户端,以跟踪所有模型调用。
oai_client = wrappers.wrap_openai(AsyncOpenAI())
# 可选:为此函数添加 'traceable' 装饰器,以跟踪输入和输出。
@traceable
async def researcher_app(inputs: dict) -> str:
instructions = """你是一名优秀的研究人员。给定一个高层次的研究想法, \
列出 5 个应当调查的具体问题,以确定该想法是否值得继续推进。"""
response = await oai_client.chat.completions.create(
model="gpt-5.4-mini",
messages=[
{"role": "system", "content": instructions},
{"role": "user", "content": inputs["idea"]},
],
)
return response.choices[0].message.content
# 评估器函数可以是同步的,也可以是异步的
def concise(inputs: dict, outputs: dict) -> bool:
return len(outputs["output"]) < 3 * len(inputs["idea"])
ls_client = Client()
ideas = [
"全民基本收入",
"核聚变",
"超级高铁",
"核动力火箭",
]
dataset = ls_client.create_dataset("研究想法")
ls_client.create_examples(
dataset_name=dataset.name,
examples=[{"inputs": {"idea": i}} for i in ideas],
)
# 也可以直接使用 'aevaluate' 函数:
# from langsmith import aevaluate
# await aevaluate(...)
results = await ls_client.aevaluate(
researcher_app,
data=dataset,
evaluators=[concise],
# 可选:添加并发。
max_concurrency=2, # 可选:添加并发。
experiment_prefix="gpt-5.4-mini-baseline" # 可选:默认为随机值。
)