code
from enum import Enum from dotenv import load_dotenv from pydantic import BaseModel class IntentEnum(str, Enum): eat = "吃饭" action = "运动" UNKNOWN = "UNKNOWN" class IntentResult(BaseModel): intent: IntentEnum confidence: float | None = None load_dotenv() from pydantic_ai import Agent intent_agent = Agent( 'deepseek:deepseek-chat', output_type=IntentResult, system_prompt=""" 根据用户输入判断其意图。只返回意图标签和(可选)置信度。 用户输入可能是自然语言查询。 """, ) def classify_intent(text: str): result = intent_agent.run_sync(text) return result.output.intent, result.output.confidence # 示例输入 texts = [ "明天去上海午饭怎么办?", "你喜欢打篮球吗", "我想听个笑话" ] for text in texts: intent, conf = classify_intent(text) print(f"输入: {text}") print(f"意图: {intent}, 置信度: {conf}") print("----")
输出
输入: 明天去上海午饭怎么办? 意图: IntentEnum.eat, 置信度: 0.8 ---- 输入: 你喜欢打篮球吗 意图: IntentEnum.UNKNOWN, 置信度: None ---- 输入: 我想听个笑话 意图: IntentEnum.UNKNOWN, 置信度: 0.8 ----
结果枚举限制
from enum import Enum from dotenv import load_dotenv from pydantic import BaseModel class MLType(str, Enum): regression = "回归" classifier = "分类" UNKNOWN = "UNKNOWN" class IntentResult(BaseModel): data_location: str ml_type_name: MLType data_source_limit: float | None = None load_dotenv() from pydantic_ai import Agent intent_agent = Agent( 'deepseek:deepseek-chat', output_type=IntentResult, system_prompt=""" """, ) def classify_intent(text: str): result = intent_agent.run_sync(text) return result.output.intent, result.output.confidence # 示例输入 texts = [ "对 /data/1.txt 进行回归分析,不需要全量,只提取125条即可", "我想听个笑话" ] for text in texts: out = intent_agent.run_sync(user_prompt=text).output print(f"输入: {text}") print(f"数据位置:{out.data_location},模型类型:{out.ml_type_name},数据源限制:{out.data_source_limit}") print("----") """ 输出结果: 输入: 对 /data/1.txt 进行回归分析,不需要全量,只提取125条即可 数据位置:/data/1.txt,模型类型:MLType.regression,数据源限制:125.0 ---- 输入: 我想听个笑话 数据位置:用户请求讲笑话,模型类型:MLType.UNKNOWN,数据源限制:None ---- """
system pt
from enum import Enum from dotenv import load_dotenv from pydantic import BaseModel, Field class MLType(str, Enum): regression = "回归" classifier = "分类" UNKNOWN = "UNKNOWN" class IntentResult(BaseModel): data_location: str = Field(..., description="数据路径") ml_type_name: MLType = Field(..., description="希望用来机器学习的模型类别") data_source_limit: float | None = Field(..., description="探索性数据分析,从全量中抽样的数据行数") load_dotenv() from pydantic_ai import Agent intent_agent = Agent( 'deepseek:deepseek-chat', output_type=IntentResult, system_prompt=""" 有些护具无法意图识别,则返回None填充即可 """, ) def classify_intent(text: str): result = intent_agent.run_sync(text) return result.output.intent, result.output.confidence # 示例输入 texts = [ "对 /data/1.txt 进行回归分析,不需要全量,只提取125条即可", "我想听个笑话" ] for text in texts: out = intent_agent.run_sync(user_prompt=text).output print(f"输入: {text}") print(f"数据位置:{out.data_location},模型类型:{out.ml_type_name},数据源限制:{out.data_source_limit}") print("----") """ 输出结果: 输入: 对 /data/1.txt 进行回归分析,不需要全量,只提取125条即可 数据位置:/data/1.txt,模型类型:MLType.regression,数据源限制:125.0 ---- 输入: 我想听个笑话 数据位置:用户请求讲笑话,模型类型:MLType.UNKNOWN,数据源限制:None ---- """