TAG

Python

这个标签下的全部内容。

共 9 篇

01文章

用 inspect.signature 过滤关键字参数:接受 **kwargs 的函数被当成什么都不收,重试丢了 model_path2026-11-08inspect.signature(f).parameters 只列声明过的形参,**kwargs 在里面是一个叫 kwargs 的条目。按名字检查「对方收不收这个参数」,最宽松的函数反而什么都过不去。Autarkia 的空回复重试因此丢了 model_path,换成默认模型去请求,返回的 400 混在上游过载的 503 里,同一天的错误分诊把它判成了网关误报。#Python#LLM#调试生成器的异常在第一次 next() 时才抛:try 包住 create_chat_completion(stream=True) 接不到超窗口错误2026-11-08调用生成器函数只会造出生成器,函数体要等第一次 next() 才运行,里面的 raise 也一样。llama-cpp-python 的超窗口检查就在这样的函数体里,所以流式调用外面那层 try 和它的自动收缩重试在真实库下走不到;测试替身在调用时就抛错,测试全绿、覆盖率 100%。#Python#LLM#错误处理#测试#AutarkiaLLM 请求可观测性:日志只统计 messages,原生 tools schema 的开销不在任何日志里2026-11-07原生 function calling 的工具定义放在 tools 参数里,不在 messages 里;只统计消息长度的日志看不到它,流式请求默认也不返回 usage。Autarkia 每轮带了 82 个工具、47,898 字符的 schema,prompt 日志只有两千多字,API 记的是 21k 到 23k token。#LLM#Python#可观测性#Autarkiaasync 生成器被 break 以后会 aclose:最后一个 yield 之后的代码不执行2026-11-07消费方拿到最后一个事件就 break,async 生成器被 aclose(),GeneratorExit 抛进暂停的 yield,后面的 create_task 不会执行,finally 会。Autarkia 的对话历史保存因此一次都没跑过;这个写法 4 月修过,8 月又被一个说得通的理由改了回去。#Python#asyncio#流式输出#Autarkia子类重写请求体时的一行 pop:max_tokens 在发出前被删掉,调用方、日志和测试都看不到2026-10-21父类把参数组进请求体,子类在返回前 pop 掉,调用方传什么都没用,也不会报错。Autarkia 的 MiniMax 客户端从第一个提交起就删掉了所有调用方的 max_tokens,推理模型的输出没有上限,而这件事在记录里被提到三次都没改。#Python#LLM#可观测性项目根目录算了两遍:Path(__file__).parents[N] 在文件挪动后静默指向别处2026-10-19按 __file__ 往上数几级来找项目根,等于把文件所在的位置在代码里又抄了一份;文件挪了或者代码被照抄到别的深度,这份副本不会跟着变。Autarkia 里一个模块因此把数据写进了 core/ 下面一个自动建出来的目录,旧数据被冻住,全程没有报错。#Python#单一真源#文件路径MagicMock 接受任意实参:调用方多传一个参数,测试照样通过,生产抛 TypeError 被 except 吞掉2026-10-17不带 spec 的 MagicMock 不检查调用签名,被测代码传错参数时,替身照样返回你设好的值。Autarkia 里一段 prompt 上下文因此从来没被注入过:真实方法只收 self,调用方多传了 user_id,测试里的替身收下了,生产里的 TypeError 被外层 except 吞掉。#Python#测试

02笔记