使用自定义大模型来部署Wren AI(开源的文本生成SQL方案)
关于
- 首次发表日期:2024-07-15
- Wren AI官方文档: https://docs.getwren.ai/overview/introduction
- Wren AI Github仓库: https://github.com/Canner/WrenAI
关于Wren AI
Wren AI 是一个开源的文本生成SQL解决方案。
前提准备
由于之后会使用docker来启动服务,所以首先确保docker已经安装好了,并且网络没问题。
先克隆仓库:
git clone https://github.com/Canner/WrenAI.git
关于在Wren AI中使用自定义大模型和Embedding模型
Wren AI目前是支持自定义LLM和Embedding模型的,其官方文档 https://docs.getwren.ai/installation/custom_llm 中有提及,需要创建自己的provider类。
其中Wren AI本身已经支持和OPEN AI兼容的大模型了;但是自定义的Embedding模型方面,可能会报错,具体来说是wren-ai-service/src/providers/embedder/openai.py
中的以下代码
if self.dimensions is not None:
response = await self.client.embeddings.create(
model=self.model, dimensions=self.dimensions, input=text_to_embed
)
else:
response = await self.client.embeddings.create(
model=self.model, input=text_to_embed
)
其中if self.dimensions is not None
这个条件分支是会报错的(默认会运行这个分支),所以我的临时解决方案是注释掉它。
具体而言是在wren-ai-service/src/providers/embedder
文件夹中创建一个openai_like.py
文件,表示定义一个和open ai类似的embedding provider,取个名字叫做openai_like_embedder
,具体的完整代码见本文附录。
配置docker环境变量等并启动服务
首先,进入docker
文件夹,拷贝.env.example
并重命名为.env.local
。
然后拷贝.env.ai.example
并重命名为.env.ai
,修改其中的LLM和Embedding的配置,相关部分如下:
LLM_PROVIDER=openai_llm
LLM_OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxx
LLM_OPENAI_API_BASE=http://api.siliconflow.cn/v1
GENERATION_MODEL=meta-llama/Meta-Llama-3-70B
# GENERATION_MODEL_KWARGS={"temperature": 0, "n": 1, "max_tokens": 32768, "response_format": {"type": "json_object"}}
EMBEDDER_PROVIDER=openai_like_embedder
EMBEDDING_MODEL=bge-m3
EMBEDDING_MODEL_DIMENSION=1024
EMBEDDER_OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxx
EMBEDDER_OPENAI_API_BASE=https://xxxxxxxxxxxxxxxx/v1
由于我们创建