把大模型塞进 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
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 在背后做了三件事:
-
自动在提示末尾加上 “请用 JSON 回答”。 -
如果模型返回的不是合法 JSON,会尝试修复一次;修复失败则抛异常。 -
把解析好的 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_URL
和 NERIF_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 大概就是你正在找的那块拼图。
延伸阅读
祝你编码愉快,也欢迎把 Nerif 用在你下一个“想让 AI 帮忙做点小判断”的项目里。