首页 / 文章 / 与Jev一起对票据进行排序,用Python实现其规则,并让大语言模型处理剩余工作。

与Jev一起对票据进行排序,用Python实现其规则,并让大语言模型处理剩余工作。

使用 Jev 对工单进行排序的实操指南,介绍如何在 Python 中应用相关规则以及如何利用大语言模型:为采用该模式的团队提供合同模板、检查清单及可直接插入的代码片段。

2043 词

以下笔记梳理了“使用Jev对工单进行排序、在Python中应用相应规则,并让大语言模型生成回复:基于NOVA的实用教程”这一流程的实际路径。重点在于契约、校验以及可直接插入的代码占位符,而非激励性表述。 在完成概览阶段时,首先写下契约内容:所需输入、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功校验标准,并拒绝默许的部分完成情况。

Jev不能替代负责撰写的模型

Jev 并不能替代实际测试,将其视为可测量的界面使用效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解成本情况,就能避免在从演示环境过渡到共享环境时出现意外费用。

代码之前的架构设计

在将L架构视为可测量的表面时,其在预测试阶段的表现最为出色。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 应将配置与应用程序代码分开。环境文件、密钥存储和功能标志应集中存放于一个位置,这样操作人员无需查看整个架构即可进行审计。 在讲解循环之前,先锁定解释器和依赖项的版本。笔记本电脑与持续集成环境之间的差异是API演示中最常见的隐性故障原因。

Message client + historique
            ↓
Jev : service, urgence, frustration
            ↓
Python : validation et règles métier
            ↓
Agent LangChain + LLM
            ↓
Consultation des commandes et procédures
            ↓
Dossier pour l’équipe support + brouillon de réponse

准备环境

将环境准备阶段视为可度量的对象时,其效果最佳。在扩大范围之前,需记录一份理想运行案例、一个故障案例以及回滚说明。 同时记录正常流程与恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的一部分,而非后续需要补充的内容。 在讲解循环逻辑之前,先锁定解释器及依赖项的锁文件。笔记本电脑与持续集成环境之间的差异是API演示中最常见的隐性故障原因。 将环境准备阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,杜绝隐性部分完成的情况。

TYPESAFE_API_KEY=ta_cle_typesafe
OPENAI_API_KEY=ta_cle_openai
JEV_MODEL=jev-latest
OPENAI_MODEL=gpt-4.1-mini
jev = TypeSafeClassifier(
    model=os.getenv("JEV_MODEL") or "jev-latest",
    timeout=30,
)
modele = ChatOpenAI(
    model=os.getenv("OPENAI_MODEL") or "gpt-4.1-mini",
    timeout=60,
    max_retries=1,
)

三种基本要素:选择、数值与得分

在“三种基本要素:选择”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及退出标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 除了功能结果外,还需记录执行时间以及令牌或查询成本。提前显示成本可避免在从演示环境切换到共享环境时出现意外费用。 将客户端构建与消息循环分开,这样即便更换服务提供商,也无需重写对话状态机。

选择:挑选服务

在为“选择实习服务”这一环节编写代码之前,需先确定输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 配置信息应置于应用程序代码之外。环境文件、密钥存储以及功能开关应集中存放于一个位置,这样操作人员无需查看整个流程即可进行审计。 将客户端构建逻辑与消息处理循环分开,这样即便更换服务提供商,也无需重写对话状态机。

新功能:评估是/否问题

在修改代码之前,对于“Noul valuer une question”阶段,需先明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新执行该步骤,而无需猜测隐藏状态。 需同时记录正常流程与异常恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的组成部分,而非后续需要补充的功能。 应将客户端构建逻辑与消息处理循环分开,这样即便更换服务提供商,也无需重写对话状态机。 在修改代码之前,对于“Noul valuer une question”阶段,需先明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新执行该步骤,而无需猜测隐藏状态。 应将此阶段视为输入与验证后输出之间的契约。为相关产物命名,明确成功判定标准,杜绝无声的半完成状态。

评分:将挫败感量化

在完成“评分:将挫败感量化”这一阶段时,首先写下相关约定:所需输入、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。 每次调用都要记录请求ID、模型ID以及延迟时间。如果没有这些记录,间歇性的服务提供商错误就会被视为应用程序故障。

from langchain_typesafe import Choice, Noul, Score
def questions_triage():
    return {
        "service": Choice(
            instructions=(
                "Quel service doit traiter en priorité la dernière demande du client ? "
                "Utilise le contexte seulement pour comprendre cette demande."
            ),
            criteria={
                "livraison": "Retard, suivi ou réception d'une commande.",
                "facturation": "Paiement, facture ou remboursement.",
                "technique": "Panne ou utilisation d'un produit.",
                "autre": "Demande ambiguë ou sans rapport avec les catégories précédentes.",
            },
        ),
        "urgence": Noul(
            instructions=(
                "Les faits décrits nécessitent-ils une prise en charge immédiate, "
                "plutôt qu'un traitement normal ? Ne te fonde pas seulement sur le ton."
            )
        ),
        "frustration": Score(
            instructions="Quel niveau de frustration le client exprime-t-il ?",
            criteria=[
                "Le client s'exprime calmement, sans insatisfaction.",
                "Le client exprime une insatisfaction tout en restant mesuré.",
                "Le client exprime une forte colère ou des réclamations répétées.",
            ],
        ),
    }

分析第一个工单

在处理分析器的首个工单阶段时,首先写下相关契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合要求。 将配置信息与应用程序代码分开。环境文件、密钥存储以及功能开关应集中存放于一个位置,这样操作人员无需查看整个系统结构即可进行审计。 每次调用时都要记录请求ID、模型ID以及延迟时间。如果没有这些记录,间歇性的服务错误就会被视为应用程序的缺陷。

reponse_jev = jev.invoke(requete_triage(ticket))
print("Service :", reponse_jev.choices["service"].choice)
print("Urgence :", reponse_jev.nouls["urgence"].noul)
print("Frustration sur 2 :", reponse_jev.scores["frustration"].score)
Service : livraison
Urgence : 0.76
Frustration sur 2 : 1.93

业务规则应保留在程序中

在处理“规则定义”阶段时,首先需写下接口契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 同时记录正常流程与异常恢复路径。重试机制、人工审核环节以及错误消息处理都是产品功能的一部分,而非后续需要补充的内容。 每次调用时都要记录请求ID、模型ID以及响应延迟时间。如果没有这些记录,间歇性的服务错误就会被视为应用程序的缺陷。 在处理“规则定义”阶段时,首先需写下接口契约:所需的输入参数、成功信号以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 应将此阶段视为输入与验证后输出之间的契约。为相关组件命名,明确成功判定标准,并杜绝无声的半完成状态。

def orienter_ticket(analyse, seuil_urgence=0.8, seuil_confiance=0.6):
    raisons = []
    if analyse["urgence"] >= seuil_urgence:
        raisons.append("urgence élevée")
    if analyse["frustration"] >= 1.5:
        raisons.append("forte frustration")
    if analyse["confiance_service"] < seuil_confiance:
        raisons.append("service incertain")
    if analyse["service"] == "autre":
        raisons.append("demande à clarifier")    return {
        "service": analyse["service"],
        "priorite": "haute" if analyse["urgence"] >= seuil_urgence else "normale",
        "revue_humaine": bool(raisons),
        "raisons": raisons or ["traitement courant"],
    }
{
  "service": "livraison",
  "priorite": "normale",
  "revue_humaine": true,
  "raisons": ["forte frustration"]
}

为NOVA提供可供查阅的信息

在将“为NOVA提供信息”这一环节视为可度量的工作面时,其效果最佳。在扩大范围之前,先记录一份成功的案例、一个失败案例以及回滚说明。 在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。 在讲解循环逻辑之前,先固定解释器及依赖项的锁文件。笔记本电脑与持续集成环境之间的差异是API演示中最常见的隐性故障原因。

组装LangChain代理

将 LangChain 的 Assembler 代理视为可度量的对象时,其效果最佳。在扩大范围之前,先记录一份理想的运行结果、一个失败案例以及回滚说明。 配置应置于应用程序代码之外。环境文件、密钥存储和功能开关应集中存放,以便操作人员无需查看整个架构即可进行审计。 在设置循环之前,先锁定解释器及依赖项的版本。笔记本电脑与持续集成环境之间的差异是 API 演示中最常见的隐性故障原因。

def creer_agent(modele, analyse, orientation):
    contexte = json.dumps(
        {"analyse_jev": analyse, "orientation": orientation},
        ensure_ascii=False,
    )
    return create_agent(
        model=modele,
        tools=[consulter_commande, consulter_procedure],
        system_prompt=(
            ROLE_NOVA
            + "\nContexte de traitement fourni par le programme :\n"
            + contexte
        ),
    )

笔记本测试所展示的内容

“Ce que montrent les stage”作为可度量的对象来使用效果最佳。在扩大范围之前,先记录一份完美的操作日志、一个故障案例以及回滚说明。 同时记录正常流程和恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的一部分,而非后续需要补充的内容。 在讲解循环逻辑之前,先锁定解释器和依赖项的版本。笔记本电脑与持续集成环境之间的差异是API演示中最常见的隐性故障原因。 “Ce que montrent les stage”作为可度量的对象来使用效果最佳。在扩大范围之前,先记录一份完美的操作日志、一个故障案例以及回滚说明。 应将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,杜绝隐性部分完成的情况。

suivi = traiter_ticket(
    "Quel article contient cette commande ?",
    modele,
    jev,
    historique=dossier["messages"],
)
print(suivi["reponse"])

在真正的项目中我会保留的内容

在“Ce que je garderais”阶段,修改代码之前需明确输入参数、该步骤的负责人以及退出标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。应在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境切换到共享环境时出现意外费用。

操作检查清单

在“Operational checklist”阶段,修改代码之前需明确输入参数、该步骤的负责人以及退出标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。

应优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤出错时,故障应指向单一责任模块,而非复杂的处理流程。

将客户端构建逻辑与消息循环分离,这样无需重写对话状态机即可更换提供方。

缓存稳定的系统指令和工具架构。重复发送相同的前置数据是导致资源浪费的常见原因。

锁定依赖版本的编号,并记录用于运行演示的图像摘要。可重复性比经验知识更为重要。

将配置信息置于应用程序代码之外。环境文件、密钥存储及功能开关应集中存放,以便操作人员无需查看整个系统结构即可进行审计。

在推广该技术栈之前,应先冻结版本,为关键路径生成标准记录,并明确回滚步骤。共享环境需要设置速率限制、租户验证机制,以及明确的密钥轮换负责人。与其展示花哨的一次性演示,不如注重扎实的可靠性。

关于 cf51dd985f5e 的批量说明:请将提供者密钥移出代码仓库,设定单会话令牌上限,并将记录存储在评估用示例文件旁,以便后续模型替换时保持数据可比性。