我目前正在为ollama编写一个webui,但我觉得API相当有限/繁琐。
关于它的愿景/计划是什么?它是处于冻结状态,还是计划进行改进?
以下是一些批评:
- 混合模型/生成端点。一些命名空间会很好。
- 混合
model
/name
参数,它们指的是相同的事情。 /api/tags
:为什么这个命名为标签?GET /api/tags
:要获取所有可用的本地模型,但POST /api/show
是要获取一个吗?- 有些端点会抛出错误,有些会返回
status
作为JSON属性。 - 没有查询可用的公共模型仓库的方法
POST /api/create
:不允许仅将Modelfile
指定为原始文本,因此在客户端(客户端端)没有创建模型的方法(没有文件系统访问)。也没有仅使用对象指定模型文件的方法。而且要使其工作,FROM
需要处理远程资源。POST /api/show
:返回一个字符串,迫使客户端解析它以获取实际数据。如果它也返回一个JSON对象,那就更好了。POST /api/embeddings
:没有批处理支持基本上是无用的- 在
Modelfile
中:
为了正确支持聊天代理,最好有一个聊天专用的生成端点,并能够在 template
中遍历它们。
否则,该功能本身相当有限,需要客户端大部分覆盖和重新实现所有逻辑(并且它还需要知道所有底层模型参数)。
(这是HuggingFace如何做的:https://huggingface.co/HuggingFaceH4/zephyr-7b-beta/blob/main/tokenizer_config.json#L34)
示例:
定义 Modelfile
template
:
{{range .Messages}}
<|{{ .Role }}|>
{{ .Content }}
</s>
{{end}}
而不是:
{{- if .System }}
<|system|>
{{ .System }}
</s>
{{- end }}
<|user|>
{{ .Prompt }}
</s>
<|assistant|>
然后将消息作为JSON数组传递给POST /api/chat/generate
{
...,
"messages": [
{"role": "system", "content": "you are an assistant"},
{"role": "user", "content": "hello"},
{"role": "assistant", "content": "hi there"}
]
}
如果你想看看我的应用,可以访问: https://github.com/knoopx/llm-workbench
3条答案
按热度按时间unguejic1#
+1 为聊天代理支持和潜在模板格式更改。
尽管LangChain默认支持Ollama,但其模型实现是错误的,因为它使用自己的提示格式(即Alpaca-like)来预处理输入,然后在将请求发送到服务器后再次用模型特定的提示模板 Package 。(参见https://github.com/langchain-ai/langchainjs/blob/main/langchain/src/chat_models/ollama.ts#L256)
这是一个LangChain应该解决的问题,但真正的问题在于,目前Ollama处理提示模板的方式无法正确实现模型。
具体来说,LangChain假设聊天模型可以在单个提示中处理来自系统、用户或AI的消息列表。
但是,即使我们可以将
ChatOllama
更改为查询模型特定的模板并使用raw
参数发送格式化的提示,也无法解析模板以提取每种消息类型的适当格式。mzmfm0qo2#
你好,有人在开发可以处理嵌入的批处理功能吗?如果没有的话,除了使用基本的小文本语料库进行测试外,这个功能就无法使用了。
klr1opcd3#
批量嵌入对于整个嵌入功能来说是必须的。看起来在#3642中已经完成了一些工作,尽管它已经有一段时间处于草案状态了。