背景
我现在有两类内容,一个是大量的 auto-coder 示例配置,每次我用的时候都需要去找示例,然后复制黏贴。
第二类是各种启动模型的脚本:
需要关闭或者开启一个模型,都需要查找然后复制黏贴,比较麻烦。
这个时候,我就在想如何把这些内容构建成知识库,让问答小助手帮到自己,甚至小助手还可以直接帮我执行一些脚本。于是有了 AutoCoder 的文档功能。
安装
conda create --name autocoder python=3.10.11
conda activate autocoder
pip install -U auto-coder
ray start --head
最后一步是启动一个 daemon 管理进程。
接着,因为知识库需要存储(向量检索+全文检索),所以我们还需要安装一个Stroage。安装也很简单:
# export JAVA_HOME=/Users/allwefantasy/Library/Java/JavaVirtualMachines/openjdk-21/Contents/Home
byzerllm storage start
注意,你系统需要装有 JDK21。如果JDK21不是你默认 SDK,可以在启动命令前临时export JAVA_HOME。系统会在启动期间下载一些库和文件,请确保网络畅通。
这就是所有安装部署了。
准备模型
文档构建需要依赖大模型和embedding模型。所以我们用 byzerllm 命令启动他们。
qianwen_chat:
byzerllm deploy --pretrained_model_type saas/qianwen \
--cpus_per_worker 0.001 \
--gpus_per_worker 0 \
--num_workers 2 \
--infer_params saas.api_key=${MODEL_QIANWEN_TOKEN} saas.model=qwen-max \
--model qianwen_chat
qianwen_emb:
byzerllm deploy --pretrained_model_type saas/qianwen \
--cpus_per_worker 0.001 \
--gpus_per_worker 0 \
--num_workers 2 \
--infer_params saas.api_key=${MODEL_QIANWEN_TOKEN} saas.model=text-embedding-v2 \
--model qianwen_emb
如果你用 OpenAI,可以这样:
gpt3_5_chat:
byzerllm deploy --pretrained_model_type saas/openai \
--cpus_per_worker 0.001 \
--gpus_per_worker 0 \
--num_workers 1 \
--infer_params saas.api_key=${MODEL_OPENAI_TOKEN} saas.model=gpt-3.5-turbo-0125 \
--model gpt3_5_chat
gpt_emb:
byzerllm deploy --pretrained_model_type saas/openai \
--cpus_per_worker 0.001 \
--gpus_per_worker 0 \
--num_workers 1 \
--infer_params saas.api_key=${MODEL_OPENAI_TOKEN} saas.model=text-embedding-3-small \
--model gpt_emb
如果你想用本地模型(包括向量模型),参考:
https://github.com/allwefantasy/byzer-llm
祝威廉:014 - AutoCoder 如何使用 Ollama
构建索引
auto-coder doc build --model qianwen_chat \
--emb_model qianwen_emb \
--source_dir 你存放文档的目录
你也可以把上面的参数放到一个 YAML 文件里去:
source_dir: /Users/allwefantasy/projects/deploy_models
model: qianwen_chat
emb_model: qianwen_emb
然后这样运行:
auto-coder doc build --file actions/build_doc.yml
终端问答助手
auto-coder doc query --model qianwen_chat \
--emb_model qianwen_emb --source_dir . \
--query "请给出 qianwen_chat 的启动语句"
输出:
面是输出:
=============RESPONSE==================
2024-04-17 14:01:50.287 | INFO | autocoder.utils.llm_client_interceptors:token_counter_interceptor:16 - Input tokens count: 0, Generated tokens count: 0
byzerllm deploy --pretrained_model_type saas/qianwen \
--cpus_per_worker 0.001 \
--gpus_per_worker 0 \
--num_workers 2 \
--infer_params saas.api_key=${MODEL_QIANWEN_TOKEN} saas.model=qwen-max \
--model qianwen_chat
=============CONTEXTS==================
/Users/allwefantasy/projects/deploy_models/run.txt
/Users/allwefantasy/projects/deploy_models/run.sh
如果你想多轮对话:
auto-coder doc chat --model qianwen_chat \
--emb_model qianwen_emb --source_dir .
把 query 换成 chat ,就可以在终端直接聊天:
Web/App 界面问答助手
首先,用AutoCoder 启动一个服务:
auto-coder doc serve --model qianwen_chat \
--emb_model qianwen_emb --source_dir .
默认会监听 8000端口。
下载一个桌面版聊天程序: https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/releases
双击运行后,做如下配置:
自定义模型名这里,你需要修改成 qianwen_chat, 也就是你启动时给模型取的名字。
模型那块,你要选择你自定义模型名字,表示启用这个模型。
模型供应商,我们是兼容 OpenAI的接口的,所以你选择 OpenAI 即可。
现在可以开聊了:
会自动执行命令的助手
auto-coder doc query --model qianwen_chat --emb_model qianwen_emb \
--source_dir . \
--query "帮我启动 qianwen_chat" \
--execute
相比前面的小助手,末尾加一个参数 --execute, 这个时候小助手会自动执行部署命令:
=============RESPONSE==================
2024-04-17 13:22:33.788 | INFO | autocoder.utils.llm_client_interceptors:token_counter_interceptor:16 - Input tokens count: 0, Generated tokens count: 0
byzerllm deploy --pretrained_model_type saas/qianwen \
--cpus_per_worker 0.001 \
--gpus_per_worker 0 \
--num_workers 2 \
--infer_params saas.api_key=${MODEL_QIANWEN_TOKEN} saas.model=qwen-max \
--model qianwen_chat
=============CONTEXTS==================
/Users/allwefantasy/projects/deploy_models/run.txt
/Users/allwefantasy/projects/deploy_models/run.sh
=============EXECUTE==================
2024-04-17 13:22:45.916 | INFO | autocoder.utils.llm_client_interceptors:token_counter_interceptor:16 - Input tokens count: 1184, Generated tokens count: 136
steps=[ExecuteStep(code='byzerllm deploy --pretrained_model_type saas/qianwen --cpus_per_worker 0.001 --gpus_per_worker 0 --num_workers 2 --infer_params saas.api_key=${MODEL_QIANWEN_TOKEN} saas.model=qwen-max --model qianwen_chat', lang='shell', total_steps=1, current_step=1, cwd=None, env=None, timeout=None, ignore_error=False)]
Shell Command:
byzerllm deploy --pretrained_model_type saas/qianwen --cpus_per_worker 0.001 --gpus_per_worker 0 --num_workers 2 --infer_params saas.api_key=${MODEL_QIANWEN_TOKEN} saas.model=qwen-max --model qianwen_chat
Output:
Command Line Arguments:
--------------------------------------------------
command : deploy
ray_address : auto
num_workers : 2
gpus_per_worker : 0.0
cpus_per_worker : 0.001
model_path :
pretrained_model_type: saas/qianwen
model : qianwen_chat
infer_backend : vllm
infer_params : {'saas.api_key': '', 'saas.model': 'qwen-max'}
file : None
--------------------------------------------------
模型 qianwen_chat 已经部署过了
可以看到,byzerllm 会提示 qianwen_chat 已经部署过了。
最后
实际上这里只是一个锦上添花的功能,该功能的实际作用是和搜索引擎的价值是一样的,就是自动帮你检索一些你的文档,然后在你写代码的时候,帮你扩充相关信息,从而让大模型帮你更好的生成代码。