我将Jev变成了一个(糟糕的)聊天机器人
摘要
这个GitHub项目使用Jev模型创建了一个具有各种采样策略的糟糕聊天机器人,在Claude的帮助下开发,作为一个有趣的实验。
查看缓存全文
缓存时间: 2026/09/20 18:35
kyle-pena-nlp/jevchat
来源:https://github.com/kyle-phea-nlp/jevchat
jevchat
我们了解 Jev (https://docs.typesafe.ai/api)。jevchat 将其转化为一个聊天模型。在每一步中,它向 Jev 提出一个问题:
给定用户的问题和已生成的回复,下一个符号应该是哪个?
选项包括一个字母表,以及一个停止生成的选项。Jev 为每个选项返回一个概率值,然后采样器从该归一化分布中抽取下一个符号。如此循环:追加、重复,直到抽中 STOP 为止。
该工具提供多种字母表和采样策略。它的设计初衷是趣味性,成本不太实用,但结果非常有趣。这是一个由 Claude 加速完成的实验:我描述了采样算法、策略等,然后由它实现。
设置
poetry install
将你的 Jev 密钥放在 pyproject.toml 旁边的 .env 文件中(该文件会被 git 忽略):
api_key="..."
同时也接受 JEV_API_KEY 和 TYPESAFE_API_KEY。.env 中的值优先于导出的环境变量,因此只需编辑该文件即可切换密钥。
使用
poetry run jevchat # 交互式聊天
poetry run jevchat ask "do people need water?"
poetry run jevchat alphabets # 查看可选的采样表
poetry run jevchat bench # 比较所有模式(见下表)
回复会在生成时实时显示在一个面板中,包含生成速率(符号/秒、字符/秒、每次 API 调用毫秒数、耗时)以及上一步 Jev 评分最高的几个符号,让你可以看到采样器正在抽取的分布。
Ctrl-C 取消操作。
- 第一次按下:等待进行中的请求返回后停止生成,保留已生成的部分回复。
- 第二次按下:立即中止。
在聊天模式中,部分回复会保留在对话历史中。
ask命令被取消时退出码为 130。
聊天命令:/help、/alphabet [name]、/temp <value>、/stop-bias <value>、/reset、/stats、/exit。
模式
有两件事情可以替换:
- 如何获得下一个符号的分布(
-s/--strategy) - 分布是基于什么(
-a/--alphabet)
以下每种组合都是一个可运行的命令。
策略
choice:对整个字母表提出一个问题。bisect:将字母表排序,然后通过一系列“早/晚”的“是/否”问题缩小范围,直到组内只剩少量符号,再在其中进行选择。
# choice — 对整个字母表的一个问题(默认模式)
poetry run jevchat -s choice ask "how many eyes do people have?"
# ...不进行重新排序,以消除 Jev 的位置偏差(最差模式)
poetry run jevchat -s choice --no-shuffle-criteria ask "how many eyes do people have?"
# ...平均 4 种重新排序,在一个请求中作为 4 个并行问题发送
poetry run jevchat -s choice --ensemble 4 ask "how many eyes do people have?"
# bisect — 二分到大小为 20 的组,每组都进行双向询问
poetry run jevchat -s bisect ask "how many eyes do people have?"
# ...更经济:更大的组,每组只问一次
poetry run jevchat -s bisect --bisect-cutoff 32 --no-bisect-swap ask "how many eyes do people have?"
# buckets — 字母表被分成多个问题,每个问题都有一个 OTHER 逃逸选项。
# 这是唯一能容纳超过 255 个符号的策略。
poetry run jevchat -a words1k -s buckets ask "what colour is snow?"
poetry run jevchat -a bpe5k -s buckets --bucket-size 127 ask "what is the capital of france?"
# refine — 先用 buckets,然后对胜出者提问,最后进行一次重新评分的核。
# 正确符号的概率加倍,并且解析的词汇量大约是 19 倍。
poetry run jevchat -a words1k -s refine ask "where do fish live?"
poetry run jevchat -a words1k -s refine --refine-nucleus 6 --refine-rounds 2 ask "..."
呈现方式
# hypothesis — 选项是生成的文本(默认)
poetry run jevchat -p hypothesis --window 40 ask "what colour is snow?"
# symbol — 选项是裸符号,就像最初版本那样
poetry run jevchat -p symbol ask "what colour is snow?"
集束搜索
# 保留 3 个候选回复,而不是逐符号确定
poetry run jevchat -b 3 ask "what is the opposite of hot?"
每一步每个活跃的集束都消耗一次评分。当宽度大于 1 时,temperature、top_p 和 top_k 不再适用——集束是按概率排序,而不是从中抽取的。
字母表
poetry run jevchat -a lower26 -t 0 ask "what is 2+2?" # 仅 a-z 和空格
poetry run jevchat -a ascii -t 0 ask "what is 2+2?" # 能拼写任何内容
poetry run jevchat -a tokens -t 0 ask "do people need water?" # 完整单词
# 这三个选项超过 255 个,因此需要 --strategy buckets
poetry run jevchat -a words1k -s buckets -t 0 ask "what colour is grass?"
poetry run jevchat -a bpe2k -s buckets -t 0 ask "where do fish live?"
poetry run jevchat -a bpe5k -s buckets -t 0 ask "what do bees make?"
组合使用
poetry run jevchat -a tokens -s bisect --bisect-cutoff 20 ask "do people need water?"
poetry run jevchat -a ascii -s choice --ensemble 12 -t 0.2 --repetition-penalty 1.0 \
ask "what colour is grass?"
假设选项
向 Jev 提出相同问题有两种方式。
在 --presentation symbol 模式下,选项是符号本身——'a'、'i'、' the'——Jev 在判断前,必须在其内部将选项追加到回复后。最初使用的指令正是如此:“请基于拼接后的文本判断语法和拼写,而不是仅基于选项本身。”
在 --presentation hypothesis 模式下,选项是生成后的文本:
answer_so_far = "The capital of France is Par"
symbol options: 'a' 'i' 's' ... STOP
hypothesis options: '...he capital of France is Para'
'...he capital of France is Pari'
'...he capital of France is Pars'
'...he capital of France is Par' <- 未变:这是 STOP
追加操作已经完成,因此 Jev 只需对完整的字符串进行排序——这正是决策模型的设计用途。这是项目中最大的改进:在字符字母表上,它大约将 top-1 准确率提升了三倍,并将落在正确符号上的概率质量增加了一倍,同时比符号选项(及其每个选项的描述)所需的输入 token 更少。
测试
poetry run pytest
158 个测试,全部离线运行——针对生成循环使用脚本化的假客户端,针对 HTTP 层使用 httpx.MockTransport。无需 API 密钥,也无需网络连接。
jevchat bench 是实际调用 API 的部分。
相似文章
体验Jev——一种有趣的AI代理方法
作者讨论了尝试使用Jev,这是一种专注于决策的AI代理工具,与使用大型语言模型处理所有任务相比,它声称在速度和成本上有显著优势。
一位ChatGPT发明者推出的新型AI模型令开发者兴奋不已
一款名为Jev的新型AI模型,由TypeSafe AI的ChatGPT发明者开发,输出概率而非文本,为软件自动化任务提供快速、廉价且无幻觉的替代方案。
我将Jev作为我的AI智能体的“潜意识”辅助工具进行了测试
本文介绍了使用Jev作为快速分类器,为AI智能体过滤和处理小任务,从而提高效率并降低成本。
@PrajwalTomar_: 如果你仍然困惑Jev到底在做什么,请阅读这个。共同发明ChatGPT的人花了两年时间构建…
Jev是一个免费的AI工具,旨在基于电子邮件或潜在客户等输入做出决策,而不生成文本,从而避免幻觉,专注于成本效益高的AI决策。
Jev-like逆向工程模型
本文介绍了'jevlike',一个用于在一次传递中从文本选项中选择的逆向工程AI模型,有演示如Doom和国际象棋游戏,托管在GitHub上。