目前,当用户向 LLM 发送输入时,其格式必须为:
<|im_start|>user\
User input here.<|im_end|>
这非常麻烦并且使得即时工程非常乏味。 现在我正在使用 llama.cpp 在终端本地运行 llama2 模型 - 有没有办法在两个标记(im_start 和 im_end)之间自动插入用户输入?
我可能以错误的方式解决了这个问题,但以下是我尝试过的:
我当前(到目前为止不成功)的方法是使用bash脚本在另一个终端中启动LLM并将当前终端的输出重定向到LLM终端。后来我打算制作一个第一个“启动器终端”的脚本,它将格式化所有用户输入并将其发送到 LLM 终端。
到目前为止我还无法让终端之间的通信正常工作。这个剧本对我来说是微不足道的。我正在努力解决的是 bash 脚本问题。
我怀疑我的 bash 实现有很大缺陷,我对此不太有经验。
RUN_PATH="/llama.cpp/main"
MODEL_PATH="/llama.cpp/models/dolphin-2.9-llama3-8b-q4_K_M.gguf"
INIT_PATH="prompt.txt"
FLAGS="-n 512 --keep -1 --ctx-size 2048 --temp 0.0"
LAUNCH_CMD=".${RUN_PATH} -m .${MODEL_PATH} ${FLAGS} --color --interactive-first --file .${INIT_PATH}"
# gnome-terminal -- "${LAUNCH_CMD}"
# Here im launching an impostor python program which just prints the input it receives.
gnome-terminal -- python3 impostor.py
LAUNCHER_PID="${$}"
LLM_PID="$PPID"
# It seems I don't get the PIDs i expect to get.
echo "Launcher PID: ${LAUNCHER_PID}"
echo "LLM PID: ${LLM_PID}"
# Set STD-output of the launcher to LLM
ps -p $LLM_PID << ps -p $LAUNCHER_PID
/bin/bash
在启动器终端中输入
echo hello world
时,它不会显示在 LLM 终端中,这是所需的效果。
如果您想连接到正在运行的进程的标准输入和输出,您可以使用 coprocess。
类似的东西
coproc ./impostor.py
然后您可以读取查询、修改它们并发送到协进程
while read -rp 'Prompt: ' p; do printf '<|im_start|>user\\\n%s<|im_end|>\n' "$p" >&"${COPROC[1]}"; done
要阅读来自
${COPROC[0]}
的回复