模型服务

获取代码

git clone https://github.com/WisdomShell/llama_cpp_for_codeshell.git
cd llama_cpp_for_codeshell
make

报错1

Command 'make' not found, but can be installed with:
sudo apt install make        # version 4.3-4.1build1, or
sudo apt install make-guile  # version 4.3-4.1build1

按照提示,安装 make

sudo apt install make

报错2

I LDFLAGS:
/bin/sh: 1: cc: not found
I CC:
/bin/sh: 1: g++: not found
I CXX:

我们安装 gcc 和 g++

sudo apt update
sudo apt install gcc
sudo apt install g++

安装完成后,重新执行 make,等待编译完成。

下载模型

Hugging Face Hub

将模型下载到本地后,将模型放置在以上代码中的 llama_cpp_for_codeshell/models 路径,即可从本地加载模型。

下载后方法入到 \\wsl.localhost\Ubuntu\home\houbinbin\ai\llama_cpp_for_codeshell\models 目录下。

部署模型

使用llama_cpp_for_codeshell项目中的server命令即可提供API服务。

./server -m ./models/codeshell-chat-q4_0.gguf --host 127.0.0.1 --port 18080

启动成功日志:

..............................................................................................
llama_new_context_with_model: n_ctx      = 8192
llama_new_context_with_model: freq_base  = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_new_context_with_model: kv self size  = 1344.00 MB
llama_new_context_with_model: compute buffer total size = 558.13 MB

llama server listening at http://127.0.0.1:18080

{"timestamp":1697814840,"level":"INFO","function":"main","line":1786,"message":"HTTP server listening","hostname":"127.0.0.1","port":18080}

配置插件

下载

下载 idea 插件

https://github.com/WisdomShell/codeshell-intellij/releases/tag/v0.0.1 选择 【CodeShell-0.0.1.zip】

idea 插件直接本地安装。

配置 idea

设置CodeShell大模型服务地址: 我们调整为 http://127.0.0.1:18080/completion 配置是否自动触发代码补全建议 配置补全的最大tokens数量 配置问答的最大tokens数量

测试效果

Q1 你好,你会说中文吗

您好,我是CodeShell,一个由北京大学知识计算实验室(KCL)开发的 AI 助手。我可以用中文与您交流。请问我有什么可以帮助您的吗?

Q2 你的实现原理是什么?你和 chatGPT 的区别

我是一个自然语言处理模型,我的实现原理是基于深度学习和强化学习。我使用了多种算法来训练自己的模型,包括循环神经网络(RNN)、卷积神经网络(CNN)、LSTM 和 Transformer 等。

与 chatGPT 不同的是,我不是一个生成文本的 AI 助手。我的目标是根据用户的问题提供相关的回答和建议。

Q3 fastjson 序列化循环依赖,导致 oom。如何解决

如果使用 FastJSON 序列化存在循环依赖的对象,可能会导致内存溢出(OOM)。这通常是由于 JSON 序列化时对对象进行深度复制导致的。

为了解决这个问题,可以尝试以下方法:

1. 使用 Jackson 代替 FastJSON:Jackson 是目前最流行的 JSON 序列化库之一,它支持循环依赖的对象序列化和反序列化。可以使用 Jackson 的 `ObjectMapper` 类来进行 JSON 序列化和反序列化操作。
2. 使用自定义实现:如果无法避免循环依赖,可以考虑使用自定义实现来解决这个问题。例如,可以在序列化的过程中对循环依赖的对象进行处理,将它们转换为其他形式(如字符串),然后再进行 JSON 序列化和反序列化操作。
3. 使用第三方工具:如果你使用的场景比较特殊,可以考虑使用第三方工具来解决这个问题。例如,可以考虑使用 `protostuff`、`kryo` 等开源的序列化库来解决这个问题。这些库都支持循环依赖的对象序列化和反序列化操作。

总之,解决循环依赖的 JSON 序列化问题需要根据具体的场景进行相应的设计和实现。

Q4 可以通过指定属性来解决这个问题吗

是的,您可以通过指定特定的属性来解决这个问题。

在这种情况下,您可以尝试使用`class`属性来为元素添加一个自定义的类。例如:
<div class="my-custom-class">This is my custom div element</div>

可以发现,这个工具没有上下文记忆功能。

参考资料

https://github.com/WisdomShell/codeshell-intellij