把大模型塞进 Python:用 Nerif 把“智能”变成一行代码

如果你写过哪怕一次“调用 GPT”的脚本,大概都体会过那种“明明只是想让 AI 回答个是非题,却被它写出一篇小作文”的尴尬。
Nerif 的出现,就是为了解决这种尴尬。它把 LLM 的“灵光一现”封装成 Python 里的一行判断、一次函数调用、一张指标报表,让开发者不必再和提示词较劲,也能把 AI 的能力稳稳地放进生产代码。

写代码时抬头看云

为什么需要再做一个“调用大模型”的工具?

过去两年,开源社区里出现了不少“链式框架”或“低代码平台”,它们确实降低了上手门槛,却常常带来新问题:

  • 过度封装:想改一句提示词,得翻三层文档。
  • 响应失控:AI 稍一“发散”,下游代码就直接崩溃。
  • 黑盒指标:跑了一个月,只知道烧了多少钱,却不知道到底成功了多少次。

Nerif 的设计哲学只有一句话:
让开发者像用普通 Python 库一样用大模型,同时保留可观测、可调试、可回滚的全部自由。


Nerif 能做什么?用一句话总结

场景 传统做法 Nerif 做法
判断“这句话对不对” 写提示 → 正则提取 → 自己转 bool nerif("the sky is blue")
把模型回答塞进字典 提示 + JSON 模式 + 异常捕获 model.chat(..., format="json")
统计成本 & 成功率 自己打日志、写脚本 nerif.metrics()

换句话说,Nerif 把 LLM 变成了可调用的 Python 函数,同时把性能、成本、异常都管了起来。


安装:三分钟搞定

1. 准备环境

  • Python ≥ 3.9
  • 一个 LLM API Key(目前官方示例用 OpenAI)
# Linux / macOS
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export NERIF_DEFAULT_LLM_MODEL="gpt-4o"
export NERIF_DEFAULT_EMBEDDING_MODEL="text-embedding-3-small"

# Windows PowerShell
setx OPENAI_API_KEY "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
setx NERIF_DEFAULT_LLM_MODEL "gpt-4o"
setx NERIF_DEFAULT_EMBEDDING_MODEL "text-embedding-3-small"

如果你用 Azure、Claude 或其他厂商,只要把对应的环境变量换成自己的即可;Nerif 在初始化时会自动读取。

2. 一行安装

pip install nerif
终端执行 pip install

QuickStart:把自然语言变成布尔值

很多业务场景其实只是想让 AI 回答“是 / 否”。
传统写法需要写提示、解析答案、处理异常;Nerif 把它浓缩成了一个函数:

from nerif.core import nerif
from nerif.model import SimpleChatModel

# 初始化模型,默认就是 gpt-4o
model = SimpleChatModel()

# 一行判断
if nerif("the sky is blue"):
    print("True")          # AI 认为这句话成立
else:
    print("No, ", end="")
    # 如果判断为假,再让模型告诉你为什么
    print(model.chat("what is the color of the sky?"))

运行结果:

True

或者:

No, During sunset, the sky can be red, orange, or even purple...

发生了什么?

  • nerif() 会自动构造一个“判断真伪”的提示,并强制模型只返回 true / false
  • 如果模型给出异常值,Nerif 会捕获并抛出自定义异常,方便你上层兜底。
  • 所有调用记录(提示、回答、耗时、token 数)都会写入内存指标,供后续查询。

进阶:把回答塞进结构化数据

LLM 最常被吐槽的就是“输出不稳定”。
Nerif 支持把回答直接转成 Python 对象,省去正则和 JSON 解析的麻烦:

from nerif.model import SimpleChatModel

model = SimpleChatModel()

# 让模型返回 JSON 格式
recipe = model.chat(
    "Give me a 3-step recipe for iced coffee with ingredients and time.",
    format="json"
)

print(recipe)

输出:

{
  "ingredients": ["coffee", "ice", "milk", "sugar"],
  "steps": [
    "Brew 200 ml strong coffee and let it cool.",
    "Fill a glass with ice cubes.",
    "Pour coffee and milk over ice, add sugar to taste."
  ],
  "time_minutes": 5
}

Nerif 在背后做了三件事:

  1. 自动在提示末尾加上 “请用 JSON 回答”。
  2. 如果模型返回的不是合法 JSON,会尝试修复一次;修复失败则抛异常。
  3. 把解析好的 dict 直接返回给你,不额外包一层“响应对象”。

观测:实时看“花了多少钱、成功了多少次”

当你把 Nerif 放进生产环境,最关心的两件事是“贵不贵”和“稳不稳”。
Nerif 内置了极简的指标系统,随时可查:

from nerif.core import nerif

# 跑一堆判断
for claim in ["earth is flat", "2+2=4", "water boils at 90°C"]:
    nerif(claim)

# 查看指标
print(nerif.metrics())

输出示例:

{
  "total_calls": 3,
  "success_rate": 0.67,
  "total_cost_usd": 0.0024,
  "avg_latency_ms": 580
}

每次调用都会记录 token 数、API 返回码、异常类型;你可以把这些数据灌进 Prometheus、Grafana,也可以直接落盘做离线分析。


设计哲学:为什么 Nerif 能做到“既简单又可控”?

1. 最小化魔法

Nerif 不会偷偷帮你做“智能路由”或“自动缓存”。
所有行为都显式写在代码里,出了问题可以一行行调试。

2. 可组合的函数

  • nerif() 只管“真伪判断”。
  • SimpleChatModel().chat() 只管“自由问答”。
  • 想加向量检索?再包一层 EmbeddingModel,不破坏原有接口。

3. 指标即日志

不把“可观测性”做成独立服务,而是直接暴露成 Python 字典。
你可以一分钟内把它接进自己的监控体系,也可以两分钟写个脚本把数据导进 Excel。


常见疑问 FAQ

Q1:除了 OpenAI,能接其他模型吗?

可以。Nerif 的 SimpleChatModel 底层是“协议驱动”的,只要模型支持 HTTP + JSON 的聊天协议,就能通过环境变量 NERIF_LLM_BASE_URLNERIF_LLM_API_KEY 接入。Claude、Gemini、本地 llama.cpp 都已有用户验证可行。

Q2:会不会像 Langchain 一样“升级就崩”?

Nerif 的版本策略是 SemVer + 最小破坏。
所有公开 API 在 1.x 阶段保持向后兼容;真要改接口,会提前三个 minor 版本发 deprecation warning。

Q3:我需要写 prompts 吗?

90% 的常见场景(判断、提取、格式化)已经内置了最佳实践 prompt。
如果你确实要自定义,Nerif 也支持传入 prompt_template 参数,或者干脆继承 SimpleChatModel 重写 _build_prompt 方法。


真实案例:用 Nerif 做“简历筛选机器人”

下面这段 40 行不到的脚本,每天帮一家 50 人初创公司筛掉 80% 的不合适简历:

import os, json
from nerif.core import nerif
from nerif.model import SimpleChatModel

model = SimpleChatModel()

def is_relevant(cv_text: str) -> bool:
    """判断简历是否符合岗位关键词"""
    return nerif(f"Does this CV match a senior backend Python position? CV: {cv_text[:2000]}")

def extract_info(cv_text: str) -> dict:
    """提取关键字段"""
    return model.chat(
        f"Extract name, email, years of Python experience from this CV: {cv_text[:2000]}",
        format="json"
    )

for file in os.listdir("cvs"):
    with open(f"cvs/{file}", encoding="utf-8") as f:
        cv = f.read()

    if not is_relevant(cv):
        continue

    info = extract_info(cv)
    print(json.dumps(info, ensure_ascii=False))
  • 每天运行一次,调用量 300~400 次,成本不到 0.2 美元。
  • 通过 nerif.metrics() 发现,判断准确率 94%,平均耗时 600 ms。
  • HR 只需要点开 JSON 里打勾的候选人,效率提升肉眼可见。

小结:把 AI 当自来水,拧开就用

Nerif 没有酷炫的拖拽界面,也没有“一键生成应用”的噱头。
它只是在 Python 和 LLM 之间搭了一座“稳、薄、透明”的桥:

  • 稳:失败可重试,异常可追踪。
  • 薄:不替你做任何业务假设,只做好“调用 + 解析 + 观测”。
  • 透明:提示词、token、成本全都一目了然。

如果你厌倦了“提示词工程”变成“提示词考古”,
如果你只想把 AI 当成一个“能回答问题的函数”,
Nerif 大概就是你正在找的那块拼图。

桥上的夕阳

延伸阅读

  • 👉官方文档:包含所有 API 细节、环境变量列表、以及自定义模型的完整示例。
  • 👉License:GNU GPLv3,可商用、可修改,只要保留版权声明即可。

祝你编码愉快,也欢迎把 Nerif 用在你下一个“想让 AI 帮忙做点小判断”的项目里。