Files
linux/deploy_reme_issue.md
2026-04-08 13:57:23 +08:00

50 KiB
Raw Blame History

记录 ReMe 容器化部署踩的坑

Dockerfile

FROM ubuntu:24.04

# 1. 更换为中科大 (USTC) 源
# Ubuntu 24.04 使用 DEB822 格式,配置文件在 /etc/apt/sources.list.d/ubuntu.sources
# 我们需要将 URIs 字段中的默认地址替换为中科大镜像地址
RUN sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.ustc.edu.cn/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources && \
    sed -i 's|http://security.ubuntu.com/ubuntu|http://mirrors.ustc.edu.cn/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources

ENV DEBIAN_FRONTEND=noninteractive \
    TZ=Asia/Shanghai

# 2. 安装基础依赖
RUN apt-get update && apt-get install -y \
    locales \
    tzdata \
    ca-certificates \
    python3 \
    python3-venv \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

# 3. 设置语言环境
RUN locale-gen zh_CN.UTF-8 en_US.UTF-8

ENV LANG=zh_CN.UTF-8 \
    LANGUAGE=zh_CN:zh \
    LC_ALL=zh_CN.UTF-8

# 4. 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata

WORKDIR /opt

# 5. 复制项目文件
COPY ReMe-0.3.1.8 ./reme

# 6. 创建虚拟环境并安装依赖
RUN cd reme \
    && python3 -m venv .venv \
    && .venv/bin/pip install --no-cache-dir --upgrade pip \
    && .venv/bin/pip install --no-cache-dir -e ".[light]"

# 7. 设置环境变量
ENV PATH="/opt/reme/.venv/bin:$PATH"

WORKDIR /opt/reme

docker-compose.yaml

services:
  reme:
    image: reme:0.3.1.8
    container_name: reme
    restart: on-failure:3
    volumes:
      - ./local_vector_store:/opt/reme/local_vector_store
      - ./.env:/opt/reme/.env
    ports:
      - "28202:28202"
    command: [
      "reme",
      "http.port=28202",
      "llm.default.model_name=qwen2.5",
      "embedding_model.default.model_name=bge-m3",
      "vector_store.default.backend=local"
    ]

.env 文件的内容

LLM_API_KEY=sk-***
LLM_BASE_URL=http://IP:PORT/v1
EMBEDDING_API_KEY=sk-***
EMBEDDING_BASE_URL=http://IP:PORT/v1

通过 agentscope-java 构建的 demo

package ai.agentscope.example.memory;

import ai.agentscope.example.conf.LlmConfig;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import io.agentscope.core.ReActAgent;
import io.agentscope.core.memory.LongTermMemoryMode;
import io.agentscope.core.memory.reme.ReMeLongTermMemory;
import io.agentscope.core.message.Msg;
import io.agentscope.core.message.MsgRole;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.Optional;
import java.util.Scanner;

@Component
@ConditionalOnBooleanProperty(value = "ENABLE_RE_ME_TEST")
@RequiredArgsConstructor
public class ReMeMemoryCmdRunner implements CommandLineRunner {

    private final LlmConfig llmConfig;

    @Value("${RE_ME_BASE_URL}")
    private String longTermMemoryBaseUrl;

    @Override
    public void run(String... args) throws Exception {
        System.out.println("-".repeat(40));
        System.out.printf("Start %s%n", this.getClass().getSimpleName());
        System.out.println("-".repeat(40));

        Scanner scanner = new Scanner(System.in);
        for (; ; ) {
            System.out.print(">>>You");
            String input = scanner.nextLine();
            if (StrUtil.isBlank(input)) {
                continue;
            }
            if ("q".equals(input) || "exit".equals(input)) {
                break;
            }
            Msg assistantMsg = this.agent().call(this.readUserMsg(input)).block();
            System.out.printf("""
                    >>>LLM
                    %s
                    %n""", Optional.ofNullable(assistantMsg).map(Msg::getTextContent).orElse("没有获取到任何输出"));
        }
    }

    private Msg readUserMsg(String input) {
        return Msg.builder()
                .timestamp(LocalDateTime.now().format(DatePattern.PURE_DATETIME_MS_FORMATTER))
                .role(MsgRole.USER)
                .textContent(input)
                .build();
    }

    private ReActAgent agent() {
        return ReActAgent.builder()
                .name("ReMeMemoryAgent")
                .model(llmConfig.model())
                .longTermMemory(this.longTermMemory())
                .longTermMemoryMode(LongTermMemoryMode.STATIC_CONTROL)
                .build();
    }

    private ReMeLongTermMemory longTermMemory() {
        return ReMeLongTermMemory.builder()
                .userId("example_user_id")
                .apiBaseUrl(this.longTermMemoryBaseUrl)
                .build();
    }

}

对话时观测到 reme 容器抛出异常堆栈,核心异常堆栈信息如下

2026-04-07 15:56:51 | ERROR | base_embedding_model.py:126 | embedding model name=bge-negative-train encounter error with e=('Connection error.',)
Traceback (most recent call last):

  File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
    yield
  File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request
    resp = await self._pool.handle_async_request(req)
                 │    │     │                    └ <Request [b'POST']>
                 │    │     └ <function AsyncConnectionPool.handle_async_request at 0x72074ae19c60>
                 │    └ <AsyncConnectionPool [Requests: 0 active, 0 queued | Connections: 0 active, 0 idle]>
                 └ <httpx.AsyncHTTPTransport object at 0x72074aebf6e0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 207, in handle_async_request
    raise UnsupportedProtocol(
          └ <class 'httpcore.UnsupportedProtocol'>

httpcore.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.


The above exception was the direct cause of the following exception:


Traceback (most recent call last):

  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1604, in request
    response = await self._client.send(
                     │    │       └ <function AsyncClient.send at 0x72075ed6e2a0>
                     │    └ <openai._base_client.AsyncHttpxClientWrapper object at 0x72074af718b0>
                     └ <openai.AsyncOpenAI object at 0x72074afb1160>
  File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send
    response = await self._send_handling_auth(
                     │    └ <function AsyncClient._send_handling_auth at 0x72075ed6e340>
                     └ <openai._base_client.AsyncHttpxClientWrapper object at 0x72074af718b0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth
    response = await self._send_handling_redirects(
                     │    └ <function AsyncClient._send_handling_redirects at 0x72075ed6e3e0>
                     └ <openai._base_client.AsyncHttpxClientWrapper object at 0x72074af718b0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects
    response = await self._send_single_request(request)
                     │    │                    └ <Request('POST', '/embeddings')>
                     │    └ <function AsyncClient._send_single_request at 0x72075ed6e480>
                     └ <openai._base_client.AsyncHttpxClientWrapper object at 0x72074af718b0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request
    response = await transport.handle_async_request(request)
                     │         │                    └ <Request('POST', '/embeddings')>
                     │         └ <function AsyncHTTPTransport.handle_async_request at 0x72075ed53100>
                     └ <httpx.AsyncHTTPTransport object at 0x72074aebf6e0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request
    with map_httpcore_exceptions():
         └ <function map_httpcore_exceptions at 0x72075ed52700>
  File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
    │    │   │     └ UnsupportedProtocol("Request URL is missing an 'http://' or 'https://' protocol.")
    │    │   └ <method 'throw' of 'generator' objects>
    │    └ <generator object map_httpcore_exceptions at 0x720742fc8740>
    └ <contextlib._GeneratorContextManager object at 0x720742fcce30>
  File "/opt/reme/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions
    raise mapped_exc(message) from exc
          │          └ "Request URL is missing an 'http://' or 'https://' protocol."
          └ <class 'httpx.UnsupportedProtocol'>

httpx.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.


The above exception was the direct cause of the following exception:


Traceback (most recent call last):

  File "/opt/reme/.venv/bin/reme", line 6, in <module>
    sys.exit(main())
    │   │    └ <function main at 0x72074b0089a0>
    │   └ <built-in function exit>
    └ <module 'sys' (built-in)>

  File "/opt/reme/reme_ai/main.py", line 231, in main
    app.run_service()
    │   └ <function Application.run_service at 0x72074b009580>
    └ <reme_ai.main.ReMeApp object at 0x720760696a50>

  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/application.py", line 384, in run_service
    service.run()
    │       └ <function HttpService.run at 0x72074c0d7e20>
    └ <flowllm.core.service.http_service.HttpService object at 0x72074af46750>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/service/http_service.py", line 123, in run
    uvicorn.run(
    │       └ <function run at 0x72075e2ddb20>
    └ <module 'uvicorn' from '/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/__init__.py'>
  File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/main.py", line 606, in run
    server.run()
    │      └ <function Server.run at 0x72075e2ddee0>
    └ <uvicorn.server.Server object at 0x72074abbb650>
  File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py", line 75, in run
    return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
           │           │    │             │                      │    │      └ <function Config.get_loop_factory at 0x72075e2dd8a0>
           │           │    │             │                      │    └ <uvicorn.config.Config object at 0x72074aebe060>
           │           │    │             │                      └ <uvicorn.server.Server object at 0x72074abbb650>
           │           │    │             └ None
           │           │    └ <function Server.serve at 0x72075e2ddf80>
           │           └ <uvicorn.server.Server object at 0x72074abbb650>
           └ <function run at 0x72075fd55ee0>
  File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
    return runner.run(main)
           │      │   └ <coroutine object Server.serve at 0x72074ac1c200>
           │      └ <function Runner.run at 0x72075fda3880>
           └ <asyncio.runners.Runner object at 0x72074af47d40>
  File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           │    │     │                  └ <Task pending name='Task-4' coro=<Server.serve() running at /opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py:79...
           │    │     └ <cyfunction Loop.run_until_complete at 0x72074aba9300>
           │    └ <uvloop.Loop running=True closed=False debug=False>
           └ <asyncio.runners.Runner object at 0x72074af47d40>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/op/base_async_op.py", line 185, in async_call
    result = await self.async_execute()
                   │    └ <function LoadTodayMemoryOp.async_execute at 0x72074ae345e0>
                   └ <reme_ai.summary.personal.load_today_memory_op.LoadTodayMemoryOp object at 0x72074a94ac60>

  File "/opt/reme/reme_ai/summary/personal/load_today_memory_op.py", line 49, in async_execute
    today_memories = await self._retrieve_today_memories(workspace_id, user_name, top_k)
                           │    │                        │             │          └ 50
                           │    │                        │             └ 'user'
                           │    │                        └ 'example_user_id'
                           │    └ <function LoadTodayMemoryOp._retrieve_today_memories at 0x72074ae34680>
                           └ <reme_ai.summary.personal.load_today_memory_op.LoadTodayMemoryOp object at 0x72074a94ac60>

  File "/opt/reme/reme_ai/summary/personal/load_today_memory_op.py", line 87, in _retrieve_today_memories
    nodes: List[VectorNode] = await self.vector_store.async_search(
           │    │                   │    └ <property object at 0x72074c304b80>
           │    │                   └ <reme_ai.summary.personal.load_today_memory_op.LoadTodayMemoryOp object at 0x72074a94ac60>
           │    └ <class 'flowllm.core.schema.vector_node.VectorNode'>
           └ typing.List

  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/local_vector_store.py", line 512, in async_search
    return await super().async_search(query, workspace_id, top_k, filter_dict, **kwargs)
                                      │      │             │      │              └ {}
                                      │      │             │      └ {'memory_type': 'personal', 'target': 'user', 'created_date': '20260407'}
                                      │      │             └ 50
                                      │      └ 'example_user_id'
                                      └ ' '
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/memory_vector_store.py", line 673, in async_search
    query_vector = await self.async_get_embeddings(query) if use_vector_search else None
                         │    │                    │         └ True
                         │    │                    └ ' '
                         │    └ <function BaseVectorStore.async_get_embeddings at 0x72074c2c04a0>
                         └ <flowllm.core.vector_store.local_vector_store.LocalVectorStore object at 0x72074af73980>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/base_vector_store.py", line 123, in async_get_embeddings
    return await self.embedding_model.async_get_embeddings(query)
                 │    │               │                    └ ' '
                 │    │               └ <function BaseEmbeddingModel.async_get_embeddings at 0x72075d257e20>
                 │    └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x72074c324f20>
                 └ <flowllm.core.vector_store.local_vector_store.LocalVectorStore object at 0x72074af73980>
> File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 123, in async_get_embeddings
    return await self._async_get_embeddings(input_text)
                 │    │                     └ ' '
                 │    └ <function OpenAICompatibleEmbeddingModel._async_get_embeddings at 0x72075cbb0400>
                 └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x72074c324f20>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/openai_compatible_embedding_model.py", line 124, in _async_get_embeddings
    completion = await self._async_client.embeddings.create(
                       │    │             │          └ <function AsyncEmbeddings.create at 0x7207482b5440>
                       │    │             └ <openai.resources.embeddings.AsyncEmbeddings object at 0x72074ae0f980>
                       │    └ <openai.AsyncOpenAI object at 0x72074afb1160>
                       └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x72074c324f20>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/resources/embeddings.py", line 259, in create
    return await self._post(
                 │    └ <bound method AsyncAPIClient.post of <openai.AsyncOpenAI object at 0x72074afb1160>>
                 └ <openai.resources.embeddings.AsyncEmbeddings object at 0x72074ae0f980>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
    return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
                 │    │       │        │            │                  └ None
                 │    │       │        │            └ False
                 │    │       │        └ FinalRequestOptions(method='post', url='/embeddings', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT_GIVEN,...
                 │    │       └ <class 'openai.types.create_embedding_response.CreateEmbeddingResponse'>
                 │    └ <function AsyncAPIClient.request at 0x72075cc47e20>
                 └ <openai.AsyncOpenAI object at 0x72074afb1160>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1636, in request
    raise APIConnectionError(request=request) from err
          │                          └ <Request('POST', '/embeddings')>
          └ <class 'openai.APIConnectionError'>

openai.APIConnectionError: Connection error.
2026-04-07 15:56:51 | ERROR | load_today_memory_op.py:103 | Error retrieving today's memories: Connection error.

** 问题源头 **FlowLLM 的 openai_compatible_embedding_model.py 脚本中使用的环境变量是写死的

self.api_key = api_key or os.getenv("FLOW_EMBEDDING_API_KEY", "")
self.base_url = base_url or os.getenv("FLOW_EMBEDDING_BASE_URL", "")

** 修复方案 **:在 .env 文件添加正确的环境变量

LLM_API_KEY=sk-***
LLM_BASE_URL=http://IP:PORT/v1
EMBEDDING_API_KEY=sk-***
EMBEDDING_BASE_URL=http://IP:PORT/v1
FLOW_EMBEDDING_API_KEY=sk-***
FLOW_EMBEDDING_BASE_URL=http://IP:PORT/v1
FLOW_LLM_API_KEY=sk-***
FLOW_LLM_BASE_URL=http://IP:PORT/v1

再次发起调用出现以下异常堆栈

2026-04-08 10:33:27 | ERROR | base_embedding_model.py:126 | embedding model name=bge-m3 encounter error with e=('Error code: 400 - {\'error\': {\'message\': \'Model "bge-m3" does not support matryoshka representation, changing output dimensions will lead to poor results.\', \'type\': \'BadRequestError\', \'param\': \'\', \'code\': 400}}',)
Traceback (most recent call last):

  File "/opt/reme/.venv/bin/reme", line 6, in <module>
    sys.exit(main())
    │   │    └ <function main at 0x73b6151dc9a0>
    │   └ <built-in function exit>
    └ <module 'sys' (built-in)>

  File "/opt/reme/reme_ai/main.py", line 231, in main
    app.run_service()
    │   └ <function Application.run_service at 0x73b6151dd580>
    └ <reme_ai.main.ReMeApp object at 0x73b62a862b70>

  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/application.py", line 384, in run_service
    service.run()
    │       └ <function HttpService.run at 0x73b6162abe20>
    └ <flowllm.core.service.http_service.HttpService object at 0x73b6281913d0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/service/http_service.py", line 123, in run
    uvicorn.run(
    │       └ <function run at 0x73b6284a5b20>
    └ <module 'uvicorn' from '/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/__init__.py'>
  File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/main.py", line 606, in run
    server.run()
    │      └ <function Server.run at 0x73b6284a5ee0>
    └ <uvicorn.server.Server object at 0x73b614d549b0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py", line 75, in run
    return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
           │           │    │             │                      │    │      └ <function Config.get_loop_factory at 0x73b6284a58a0>
           │           │    │             │                      │    └ <uvicorn.config.Config object at 0x73b614d8fcb0>
           │           │    │             │                      └ <uvicorn.server.Server object at 0x73b614d549b0>
           │           │    │             └ None
           │           │    └ <function Server.serve at 0x73b6284a5f80>
           │           └ <uvicorn.server.Server object at 0x73b614d549b0>
           └ <function run at 0x73b629f21ee0>
  File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
    return runner.run(main)
           │      │   └ <coroutine object Server.serve at 0x73b614bf82e0>
           │      └ <function Runner.run at 0x73b629f6f880>
           └ <asyncio.runners.Runner object at 0x73b614d8cd70>
  File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           │    │     │                  └ <Task pending name='Task-4' coro=<Server.serve() running at /opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py:79...
           │    │     └ <cyfunction Loop.run_until_complete at 0x73b614d81300>
           │    └ <uvloop.Loop running=True closed=False debug=False>
           └ <asyncio.runners.Runner object at 0x73b614d8cd70>
> File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 123, in async_get_embeddings
    return await self._async_get_embeddings(input_text)
                 │    │                     └ ['Xiao Bai, 29, apples, Hami melons']
                 │    └ <function OpenAICompatibleEmbeddingModel._async_get_embeddings at 0x73b626d7c400>
                 └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/openai_compatible_embedding_model.py", line 124, in _async_get_embeddings
    completion = await self._async_client.embeddings.create(
                       │    │             │          └ <function AsyncEmbeddings.create at 0x73b611c89440>
                       │    │             └ <openai.resources.embeddings.AsyncEmbeddings object at 0x73b614c7a900>
                       │    └ <openai.AsyncOpenAI object at 0x73b61517d070>
                       └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/resources/embeddings.py", line 259, in create
    return await self._post(
                 │    └ <bound method AsyncAPIClient.post of <openai.AsyncOpenAI object at 0x73b61517d070>>
                 └ <openai.resources.embeddings.AsyncEmbeddings object at 0x73b614c7a900>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
    return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
                 │    │       │        │            │                  └ None
                 │    │       │        │            └ False
                 │    │       │        └ FinalRequestOptions(method='post', url='/embeddings', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT_GIVEN,...
                 │    │       └ <class 'openai.types.create_embedding_response.CreateEmbeddingResponse'>
                 │    └ <function AsyncAPIClient.request at 0x73b626e13e20>
                 └ <openai.AsyncOpenAI object at 0x73b61517d070>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1669, in request
    raise self._make_status_error_from_response(err.response) from None
          │    └ <function BaseClient._make_status_error_from_response at 0x73b626e10fe0>
          └ <openai.AsyncOpenAI object at 0x73b61517d070>

openai.BadRequestError: Error code: 400 - {'error': {'message': 'Model "bge-m3" does not support matryoshka representation, changing output dimensions will lead to poor results.', 'type': 'BadRequestError', 'param': '', 'code': 400}}
2026-04-08 10:33:27 | ERROR | base_async_op.py:190 | op=update_vector_store_op async execute failed, error=('Error code: 400 - {\'error\': {\'message\': \'Model "bge-m3" does not support matryoshka representation, changing output dimensions will lead to poor results.\', \'type\': \'BadRequestError\', \'param\': \'\', \'code\': 400}}',)
Traceback (most recent call last):

  File "/opt/reme/.venv/bin/reme", line 6, in <module>
    sys.exit(main())
    │   │    └ <function main at 0x73b6151dc9a0>
    │   └ <built-in function exit>
    └ <module 'sys' (built-in)>

  File "/opt/reme/reme_ai/main.py", line 231, in main
    app.run_service()
    │   └ <function Application.run_service at 0x73b6151dd580>
    └ <reme_ai.main.ReMeApp object at 0x73b62a862b70>

  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/application.py", line 384, in run_service
    service.run()
    │       └ <function HttpService.run at 0x73b6162abe20>
    └ <flowllm.core.service.http_service.HttpService object at 0x73b6281913d0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/service/http_service.py", line 123, in run
    uvicorn.run(
    │       └ <function run at 0x73b6284a5b20>
    └ <module 'uvicorn' from '/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/__init__.py'>
  File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/main.py", line 606, in run
    server.run()
    │      └ <function Server.run at 0x73b6284a5ee0>
    └ <uvicorn.server.Server object at 0x73b614d549b0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py", line 75, in run
    return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
           │           │    │             │                      │    │      └ <function Config.get_loop_factory at 0x73b6284a58a0>
           │           │    │             │                      │    └ <uvicorn.config.Config object at 0x73b614d8fcb0>
           │           │    │             │                      └ <uvicorn.server.Server object at 0x73b614d549b0>
           │           │    │             └ None
           │           │    └ <function Server.serve at 0x73b6284a5f80>
           │           └ <uvicorn.server.Server object at 0x73b614d549b0>
           └ <function run at 0x73b629f21ee0>
  File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
    return runner.run(main)
           │      │   └ <coroutine object Server.serve at 0x73b614bf82e0>
           │      └ <function Runner.run at 0x73b629f6f880>
           └ <asyncio.runners.Runner object at 0x73b614d8cd70>
  File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           │    │     │                  └ <Task pending name='Task-4' coro=<Server.serve() running at /opt/reme/.venv/lib/python3.12/site-packages/uvicorn/server.py:79...
           │    │     └ <cyfunction Loop.run_until_complete at 0x73b614d81300>
           │    └ <uvloop.Loop running=True closed=False debug=False>
           └ <asyncio.runners.Runner object at 0x73b614d8cd70>
  File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
                   └ <uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware object at 0x73b614d8e8a0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    return await self.app(scope, receive, send)
                 │    │   │      │        └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614ce5e...
                 │    │   │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
                 │    │   └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
                 │    └ <fastapi.applications.FastAPI object at 0x73b61516aed0>
                 └ <uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware object at 0x73b614d8e8a0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1163, in __call__
    await super().__call__(scope, receive, send)
                           │      │        └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614ce5e...
                           │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
                           └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/applications.py", line 90, in __call__
    await self.middleware_stack(scope, receive, send)
          │    │                │      │        └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614ce5e...
          │    │                │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │    │                └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │    └ <starlette.middleware.errors.ServerErrorMiddleware object at 0x73b614ce56a0>
          └ <fastapi.applications.FastAPI object at 0x73b61516aed0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in __call__
    await self.app(scope, receive, _send)
          │    │   │      │        └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x73b6148ef740>
          │    │   │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │    │   └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │    └ <starlette.middleware.cors.CORSMiddleware object at 0x73b614ce5640>
          └ <starlette.middleware.errors.ServerErrorMiddleware object at 0x73b614ce56a0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 88, in __call__
    await self.app(scope, receive, send)
          │    │   │      │        └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x73b6148ef740>
          │    │   │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │    │   └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │    └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x73b614e1e270>
          └ <starlette.middleware.cors.CORSMiddleware object at 0x73b614ce5640>
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
          │                            │    │    │     │      │        └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x73b6148ef740>
          │                            │    │    │     │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │                            │    │    │     └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │                            │    │    └ <starlette.requests.Request object at 0x73b614ce6120>
          │                            │    └ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x73b614e1d0a0>
          │                            └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x73b614e1e270>
          └ <function wrap_app_handling_exceptions at 0x73b628876c00>
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
          │   │      │        └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
          │   │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │   └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          └ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x73b614e1d0a0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
          │    │   │      │        └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
          │    │   │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │    │   └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │    └ <fastapi.routing.APIRouter object at 0x73b61517e090>
          └ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x73b614e1d0a0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/routing.py", line 660, in __call__
    await self.middleware_stack(scope, receive, send)
          │    │                │      │        └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
          │    │                │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │    │                └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │    └ <bound method Router.app of <fastapi.routing.APIRouter object at 0x73b61517e090>>
          └ <fastapi.routing.APIRouter object at 0x73b61517e090>
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/routing.py", line 680, in app
    await route.handle(scope, receive, send)
          │     │      │      │        └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
          │     │      │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │     │      └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │     └ <function Route.handle at 0x73b6288991c0>
          └ APIRoute(path='/summary_personal_memory', name='execute_endpoint', methods=['POST'])
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
          │    │   │      │        └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
          │    │   │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │    │   └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │    └ <function request_response.<locals>.app at 0x73b614d40ae0>
          └ APIRoute(path='/summary_personal_memory', name='execute_endpoint', methods=['POST'])
  File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 134, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
          │                            │    │        │      │        └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148ef880>
          │                            │    │        │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │                            │    │        └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          │                            │    └ <starlette.requests.Request object at 0x73b614ce5c70>
          │                            └ <function request_response.<locals>.app.<locals>.app at 0x73b6148ef920>
          └ <function wrap_app_handling_exceptions at 0x73b628876c00>
  File "/opt/reme/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
          │   │      │        └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x73b6148efa60>
          │   │      └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x73b614c...
          │   └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.2', 28202), '...
          └ <function request_response.<locals>.app.<locals>.app at 0x73b6148ef920>
  File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 120, in app
    response = await f(request)
                     │ └ <starlette.requests.Request object at 0x73b614ce5c70>
                     └ <function get_request_handler.<locals>.app at 0x73b614d17d80>
  File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 674, in app
    raw_response = await run_endpoint_function(
                         └ <function run_endpoint_function at 0x73b6162a8360>
  File "/opt/reme/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 328, in run_endpoint_function
    return await dependant.call(**values)
                 │         │      └ {'request': SummaryPersonalMemoryModel(query='', messages=[], workspace_id='example_user_id', metadata={}, trajectories=[{'me...
                 │         └ <function HttpService.integrate_tool_flow.<locals>.execute_endpoint at 0x73b614e02e80>
                 └ Dependant(path_params=[], query_params=[], header_params=[], cookie_params=[], body_params=[ModelField(field_info=Body(Pydant...
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/service/http_service.py", line 61, in execute_endpoint
    return await flow.async_call(**request.model_dump(exclude_none=True))
                 │    │            │       └ <function BaseModel.model_dump at 0x73b629562480>
                 │    │            └ SummaryPersonalMemoryModel(query='', messages=[], workspace_id='example_user_id', metadata={}, trajectories=[{'messages': [{'...
                 │    └ <function BaseFlow.async_call at 0x73b6164e3e20>
                 └ <flowllm.core.flow.expression_tool_flow.ExpressionToolFlow object at 0x73b614e041d0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/flow/base_flow.py", line 255, in async_call
    result = await self._async_call(context=context)
                   │    │                   └ FlowContext({'query': '', 'messages': [PersonalMemory(workspace_id='example_user_id', memory_id='56dc81c4a3a945fb9aaf8cc671bf...
                   │    └ <function BaseFlow._async_call at 0x73b6164e3d80>
                   └ <flowllm.core.flow.expression_tool_flow.ExpressionToolFlow object at 0x73b614e041d0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/flow/base_flow.py", line 225, in _async_call
    await flow_op.async_call(context=context)
          │       │                  └ FlowContext({'query': '', 'messages': [PersonalMemory(workspace_id='example_user_id', memory_id='56dc81c4a3a945fb9aaf8cc671bf...
          │       └ <function BaseAsyncOp.async_call at 0x73b6164e22a0>
          └ <flowllm.core.op.sequential_op.SequentialOp object at 0x73b611bb3200>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/op/base_async_op.py", line 185, in async_call
    result = await self.async_execute()
                   │    └ <function SequentialOp.async_execute at 0x73b6164e37e0>
                   └ <flowllm.core.op.sequential_op.SequentialOp object at 0x73b611bb3200>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/op/sequential_op.py", line 51, in async_execute
    result = await op.async_call(context=self.context)
                   │  │                  │    └ FlowContext({'query': '', 'messages': [PersonalMemory(workspace_id='example_user_id', memory_id='56dc81c4a3a945fb9aaf8cc671bf...
                   │  │                  └ <flowllm.core.op.sequential_op.SequentialOp object at 0x73b611bb3200>
                   │  └ <function BaseAsyncOp.async_call at 0x73b6164e22a0>
                   └ <reme_ai.vector_store.update_vector_store_op.UpdateVectorStoreOp object at 0x73b614ce7170>
> File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/op/base_async_op.py", line 185, in async_call
    result = await self.async_execute()
                   │    └ <function UpdateVectorStoreOp.async_execute at 0x73b61504c9a0>
                   └ <reme_ai.vector_store.update_vector_store_op.UpdateVectorStoreOp object at 0x73b614ce7170>

  File "/opt/reme/reme_ai/vector_store/update_vector_store_op.py", line 54, in async_execute
    await self.vector_store.async_insert(nodes=insert_nodes, workspace_id=workspace_id)
          │    │                               │                          └ 'example_user_id'
          │    │                               └ [VectorNode(unique_id='49dc2f8253d34deaa2e57c185cc62ac2', workspace_id='example_user_id', content='Xiao Bai, 29, apples, Hami...
          │    └ <property object at 0x73b6164dc900>
          └ <reme_ai.vector_store.update_vector_store_op.UpdateVectorStoreOp object at 0x73b614ce7170>

  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/local_vector_store.py", line 546, in async_insert
    await super().async_insert(nodes, workspace_id, **kwargs)
                               │      │               └ {}
                               │      └ 'example_user_id'
                               └ [VectorNode(unique_id='49dc2f8253d34deaa2e57c185cc62ac2', workspace_id='example_user_id', content='Xiao Bai, 29, apples, Hami...
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/memory_vector_store.py", line 755, in async_insert
    nodes = await self.async_get_node_embeddings(nodes)
                  │    │                         └ [VectorNode(unique_id='49dc2f8253d34deaa2e57c185cc62ac2', workspace_id='example_user_id', content='Xiao Bai, 29, apples, Hami...
                  │    └ <function BaseVectorStore.async_get_node_embeddings at 0x73b616494360>
                  └ <flowllm.core.vector_store.local_vector_store.LocalVectorStore object at 0x73b616cca2a0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/vector_store/base_vector_store.py", line 91, in async_get_node_embeddings
    return await self.embedding_model.async_get_node_embeddings(nodes)
                 │    │               │                         └ [VectorNode(unique_id='49dc2f8253d34deaa2e57c185cc62ac2', workspace_id='example_user_id', content='Xiao Bai, 29, apples, Hami...
                 │    │               └ <function BaseEmbeddingModel.async_get_node_embeddings at 0x73b627423f60>
                 │    └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
                 └ <flowllm.core.vector_store.local_vector_store.LocalVectorStore object at 0x73b616cca2a0>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 207, in async_get_node_embeddings
    batch_results = await asyncio.gather(*batch_tasks)
                          │       │       └ [<coroutine object BaseEmbeddingModel.async_get_embeddings at 0x73b614c8ab40>]
                          │       └ <function gather at 0x73b629f5dee0>
                          └ <module 'asyncio' from '/usr/lib/python3.12/asyncio/__init__.py'>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 129, in async_get_embeddings
    raise e
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/base_embedding_model.py", line 123, in async_get_embeddings
    return await self._async_get_embeddings(input_text)
                 │    │                     └ ['Xiao Bai, 29, apples, Hami melons']
                 │    └ <function OpenAICompatibleEmbeddingModel._async_get_embeddings at 0x73b626d7c400>
                 └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
  File "/opt/reme/.venv/lib/python3.12/site-packages/flowllm/core/embedding_model/openai_compatible_embedding_model.py", line 124, in _async_get_embeddings
    completion = await self._async_client.embeddings.create(
                       │    │             │          └ <function AsyncEmbeddings.create at 0x73b611c89440>
                       │    │             └ <openai.resources.embeddings.AsyncEmbeddings object at 0x73b614c7a900>
                       │    └ <openai.AsyncOpenAI object at 0x73b61517d070>
                       └ <flowllm.core.embedding_model.openai_compatible_embedding_model.OpenAICompatibleEmbeddingModel object at 0x73b6153c5d90>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/resources/embeddings.py", line 259, in create
    return await self._post(
                 │    └ <bound method AsyncAPIClient.post of <openai.AsyncOpenAI object at 0x73b61517d070>>
                 └ <openai.resources.embeddings.AsyncEmbeddings object at 0x73b614c7a900>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
    return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
                 │    │       │        │            │                  └ None
                 │    │       │        │            └ False
                 │    │       │        └ FinalRequestOptions(method='post', url='/embeddings', params={}, headers=NOT_GIVEN, max_retries=NOT_GIVEN, timeout=NOT_GIVEN,...
                 │    │       └ <class 'openai.types.create_embedding_response.CreateEmbeddingResponse'>
                 │    └ <function AsyncAPIClient.request at 0x73b626e13e20>
                 └ <openai.AsyncOpenAI object at 0x73b61517d070>
  File "/opt/reme/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1669, in request
    raise self._make_status_error_from_response(err.response) from None
          │    └ <function BaseClient._make_status_error_from_response at 0x73b626e10fe0>
          └ <openai.AsyncOpenAI object at 0x73b61517d070>

openai.BadRequestError: Error code: 400 - {'error': {'message': 'Model "bge-m3" does not support matryoshka representation, changing output dimensions will lead to poor results.', 'type': 'BadRequestError', 'param': '', 'code': 400}}

没招了,不知道咋改