|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
2 U, `, O) J# y2 L' _# m
( K/ P& o0 h) ]- k3 e1 x& r+ i我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
" E7 O4 @/ t0 e3 a, k
* w z& q1 k1 r---
2 |; o+ ~# R; ?4 X) L8 y1 p$ M+ p2 [/ @7 s
### **1. 环境准备**
: W) e- e9 I `* j6 D2 |' t! C' @0 n#### 1.1 服务器要求& H" W/ \# l% \: a' F! I. ~
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。7 p/ J+ z8 A/ Q1 o' i1 s) e
- **Node.js**:安装 Node.js v16.x 或更高版本。: X# J r* R$ a1 C
- **数据库**:PostgreSQL(推荐)或 MySQL。: t7 Q4 n3 R/ O
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。& U" R0 V, \1 i* I w8 y
$ N% D9 U+ H- P J, o' G' v
#### 1.2 安装依赖) {1 p1 ^' Z4 x: n% M2 Q- w8 l1 v
- 安装 Node.js 和 npm:8 |& b4 d/ Y Q6 s! Q" Q f
```bash
! X5 q" w2 P$ Z+ ]5 ^6 Z curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -% Z2 W7 L! n- t) c
sudo apt-get install -y nodejs+ c3 h7 o i4 e5 k
```
% S) a! X3 k: m4 J. m- 安装 PostgreSQL:
* G7 _! } m6 K ```bash
' O1 V" v W- [: ~( A sudo apt-get install postgresql postgresql-contrib( K9 C/ E, t! E' T% W* u4 _
sudo systemctl start postgresql/ C9 v8 F7 P' P
sudo systemctl enable postgresql
1 d: I" ~, h' ?* i: ]- m! E- M5 V ```
& [, l1 f- R8 ~8 E8 V; m+ B" k8 a& m4 p/ n8 F6 }/ e- Y' g
---
# H/ K0 R" u W3 Y* z* m7 S0 @# t& w5 f) d$ F
### **2. 安装 NocoBase**
& R7 B' o" }/ g% U#### 2.1 下载 NocoBase
8 p! z) ?, ~( i; M3 E- 从 GitHub 克隆 NocoBase 仓库:) t% w/ o, V5 O) m) ~# y2 L
```bash
S0 t$ A6 u6 y4 W2 O' k' e git clone https://github.com/nocobase/nocobase.git9 M8 m' Q3 Z5 p0 p0 w
cd nocobase8 \4 c P1 q! A9 y$ \% O
```, P6 f. } ]! Y5 X7 R+ ^/ t
! @) E& P4 e; _/ ~0 v#### 2.2 安装依赖
9 Q3 O! L( p/ C. {3 p- 安装项目依赖:
2 z& x6 Z$ z0 C ```bash7 f. l' Q9 _/ m( Y$ Q; }
npm install& n1 O3 l7 e, M
```
- y0 m7 D- \0 O/ H
* `+ \7 [$ ?* x8 e' c/ C* D#### 2.3 配置数据库
) X4 V$ x) y% R5 b! l# S- 创建 PostgreSQL 数据库:. M' t5 O G) z& S
```bash! S* F2 F' z$ w
sudo -u postgres psql
5 ~3 A" E( B) q9 g- c CREATE DATABASE nocobase;- d' i3 ^; Q" g8 v* v! W
CREATE USER nocobase_user WITH PASSWORD 'your_password';
: k9 ^( m; [8 x& D; a- c GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
( c+ P1 A8 J6 p. o( } \q) O) I; n: u. V9 m
``` |5 U q5 a, }( ~. N3 r r+ G
- 修改 NocoBase 配置文件:; R) B2 F9 C2 y U
编辑 `config/config.json`,配置数据库连接信息:
' W+ j) r' ?+ c" ~- d ```json
. e; |( L3 l" ^; I% z {: u& D1 |* L7 H6 l3 I, Z8 L
"database": {
6 h5 m8 o' `6 z1 U9 s" a "dialect": "postgres",
9 J0 k% o0 ^4 f) o5 ?9 b "host": "localhost",. g0 y& R+ n, E o& |! x3 i
"port": 5432,% `- k6 K! n+ Z- e! {7 x
"username": "nocobase_user",
5 E6 h: _; X& K7 B. m "password": "your_password",0 Z/ H1 d0 N& w! S* @
"database": "nocobase"
" H. R" l, A l }
! p. y* d0 B% N! `, ?8 k W }
" f) k9 Y5 z8 E" Z ```
8 e' y# N& D9 W1 n5 l0 t6 t% P- q8 V* E! Q
#### 2.4 初始化数据库, v. z y- o+ w0 C( u
- 运行数据库迁移脚本:
* d& E' w) F& C, T/ [ ```bash
% e2 G; V+ \4 h1 J0 h: |' h$ a' k npm run db:migrate0 c" O% j6 G' O* j2 F4 k
```
5 i9 L. {$ ~' m# L1 V, ~
% i' T5 j$ X% i6 I7 [6 q: w#### 2.5 启动 NocoBase
& z5 j0 o! {& F- 启动开发服务器:
: j L6 n8 i: l' b( u; e/ k ```bash* a9 n8 K9 I' w
npm run start
$ n0 K% W. j. @$ z" ? ```2 u5 b# D& N- W0 {& s
- 访问 NocoBase:
7 h: t! Y8 X/ g& b 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
4 K8 v c6 `2 V% j& S
, R) l( J1 X1 H# S---
! M' z5 s. E) ~. q
$ |+ Z- R! _5 |1 ?### **3. 集成 DeepSeek**
) V: e; Q* {4 l#### 3.1 创建 NocoBase 插件& k, L. U8 f, w& z) |
- 使用 NocoBase CLI 创建插件:0 W) ~% M; b9 Q; j4 i% }* v" Z. k1 \ \
```bash# I8 W* ^' x" @4 t& N% u/ B
npm run cli plugin:create deepseek-integration
7 ]. w- V3 O& z$ {1 K2 y cd plugins/deepseek-integration. ~" \2 @/ w% h( s: ]) a$ n
```
) S; Z6 \) f" |7 I5 {, U+ [/ R, y$ l* e
#### 3.2 安装 DeepSeek SDK" S1 i# \# M9 [* l& a& n
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
2 q7 e; S/ y- M ```bash
5 r1 s7 ?' X$ u* S7 z% o _- { npm install deepseek-sdk
# W) S" N) T! ~4 J0 n- O! n ```
' G/ u4 ^* |: J2 P, l; h$ b. L+ {* }6 i0 [/ B
#### 3.3 配置 DeepSeek API 密钥
8 L9 Q H" b, L$ B- 在插件配置文件中添加 DeepSeek API 密钥:
3 U: i4 s7 z% s# `) H% b 编辑 `plugins/deepseek-integration/config/config.json`:
- R& O1 T% R# y8 r3 @ ```json, q, O9 F/ o* a- F" A$ U' Y
{, W5 A I9 T, q% \: a
"deepseek": {+ j& v4 |3 t/ ?
"apiKey": "your_deepseek_api_key"8 c- Q( Z+ j- e, ~
}; G6 e; V* H0 _2 t$ S) W; b
}
' E7 J% Z% p6 f) a8 x; b4 _ ```
/ p. I8 S9 l# \" M" Y3 v8 ?1 B
( u6 | Y9 S' G#### 3.4 实现 DeepSeek 服务! o$ i" {/ x* j8 [5 V: P+ a
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:6 t; N, J2 I5 w
```javascript
6 t! |: g% Q2 b; ~9 v. G# H const DeepSeek = require('deepseek-sdk');# a T. Q- q0 ?3 k% \0 Z( T& w
7 t. u/ |0 J1 U' D# Y' j& ` class DeepSeekService {
4 I& `* e7 A, \% L8 z( b; V constructor(apiKey) {
& _& a0 U+ N" \$ W this.deepseek = new DeepSeek(apiKey);
( ^- g9 i( w3 L/ j; ` }
* [ L5 V. N- t' R* {
% \2 v( a: d! s7 | async query(prompt) {! K6 {+ e) |5 P; e8 r; i
const response = await this.deepseek.complete({
6 ~0 [+ E" V0 {, y* |; ? prompt: prompt,/ W- G' I/ H6 L2 v0 T" b& V
max_tokens: 150$ W6 W2 E/ ^# V. S- t( z
});- h8 Y8 F6 f' A% f. @8 r
return response.choices[0].text.trim();
& b% m+ [5 w( z! ~0 b' F }
' T- I1 i, d0 ] }2 P* V. [2 e9 S) Z5 Q
# T( W3 H! X) T% [
module.exports = DeepSeekService;% y4 a' V3 O4 K2 b* a
```
{# Q* {: I% D" E* i
, u/ ^8 l {* A# h, Q/ q#### 3.5 创建 API 路由
& s+ g* X* L9 Q. G$ ? ]- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
7 j+ \6 T8 x# P' @. G8 g r H ```javascript
1 W: l w2 |1 s const express = require('express');
! M$ a' C4 A( B const DeepSeekService = require('../services/deepseekService');/ D& B" _2 T7 R( F3 `2 x2 s* r
const router = express.Router();
/ w4 i7 j$ ~( B const config = require('config');. ?: {& d# Q/ J1 c
! E, k) |( e4 J0 \) o const deepseekService = new DeepSeekService(config.deepseek.apiKey);
( b7 D! H, ?6 z5 A
# M% _# M9 P2 } N( M8 A3 h router.post('/query', async (req, res) => {
; x E6 R( a, E8 D, `: j const { prompt } = req.body;. }3 k" I$ b! Q" d' o2 i0 [* Y
try {* q0 P7 s$ b( o0 c
const result = await deepseekService.query(prompt);! e# {. _* z; P1 M
res.json({ success: true, result }); P1 t% d* y% q! M1 r
} catch (error) {
# d5 O* g7 g( M# Y$ c' Z res.status(500).json({ success: false, error: error.message });. n+ j* { ~4 z5 L" V: v
}5 M& A- U$ @) N, B0 R
});7 T% g H' C; _' @
& {$ m! F3 y F6 b9 n1 l! O module.exports = router;* l/ G, N( _- d& c: k
```
4 e, H+ s; Q/ H! X
3 y8 f6 l. [: A/ z3 U7 n" k/ y' |8 ?#### 3.6 注册插件
$ }/ x& L9 X9 w7 v- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:9 ?# C1 a6 }) n: Z/ b
```javascript
5 |- l* [( y0 N& i4 M const deepseekRoutes = require('./routes/deepseekRoutes');
6 v" g1 H4 r* q+ \/ R. c: U+ _% a( \5 l
( ~. m0 d# B. B* a module.exports = function(app) {
; v4 P! v; S) Y% w app.use('/api/deepseek', deepseekRoutes);
8 ?! ]; V5 y! t G% f# H };& ?- \& N5 u) n9 N5 J0 O% F2 Z2 J
```: @/ K8 U0 [1 r
7 x7 A. F5 {/ B1 ~2 k
--- U; C$ @. O) t$ [! @9 I( f( S4 |
) U/ W; X, h* N! v& h" y. @
### **4. 测试集成**
7 ]" v* N# r& w& v#### 4.1 启动 NocoBase5 @; E4 p/ W3 J2 Q
- 启动 NocoBase:4 U9 e3 z4 D# x! h8 e
```bash
e; N4 {6 D, b. L) O, V npm run start
' e5 R, y. J( |0 A; v, d ```5 _$ t! ]6 x6 S$ g& U
1 u6 y7 @- D( Z. O
#### 4.2 测试 DeepSeek API
' ]8 u% v/ o" G7 n+ ?- 使用 `curl` 或 Postman 测试 API:
6 ~9 `/ G# B: b( b; y; k( o ```bash9 _: ^% y; ]( S$ U% J
curl -X POST http://localhost:3000/api/deepseek/query \
3 Q5 P: |% }, C, i( m% F -H "Content-Type: application/json" \$ V( @9 L. O* w3 I: c# ~
-d '{"prompt": "显示最近三个月联系过的客户"}'* b+ ]4 f8 T( n' r3 O3 a0 J
```! m, \$ }' D8 H: X# N
+ h+ Y0 f" ^7 b | j9 e! }---/ I! `2 Y$ s2 `+ N" ^
" J1 l/ `4 x& o. y# Z, a# U
### **5. 部署到生产环境**1 o7 D: J' Z' M m
#### 5.1 使用 Docker 部署3 o4 `9 j$ J) Y) b
- 创建 `docker-compose.yml` 文件: `! {1 Y( P3 _, n5 h' F
```yaml- v) Y& l% s- \6 ~' t& C
version: '3'
' z5 ]$ u9 p8 q$ E) U( Z services:
( c5 ?$ p5 Y/ n* O4 B5 N5 ^ app:
7 E. P0 Q X; c) V image: node:16; C6 V6 G- L0 [: I( H9 I8 z: W
container_name: nocobase* G7 V$ N: c- k9 t! W- ^2 \
working_dir: /app
9 r6 p @. F; n. L- |6 v" F volumes:* O5 u' x1 e$ x/ ~8 S8 N
- .:/app( ^/ d4 g' R$ s) I" h$ r
ports:/ ~; T H) W1 A
- "3000:3000"2 P" A6 S- s# b8 x0 E, ]
environment:' _! f9 r, R, D( ^9 E+ h( S, h. Z! v
- NODE_ENV=production
I6 I. E5 E3 ?+ e command: npm run start5 m4 R8 a- |! g
db:
+ h8 p* g* s$ d# A: X& s1 h image: postgres:13
6 m0 d, U" x) t* S- q1 y, x' O* k+ h container_name: nocobase_db
. X' d* Z$ n4 U9 \4 C6 h6 M environment:/ w' h5 c) o! ^- W" P- X* K4 U
POSTGRES_USER: nocobase_user
- ~, y9 U0 {0 [. h POSTGRES_PASSWORD: your_password- o7 f. H$ X0 Q( a1 o& q9 g
POSTGRES_DB: nocobase
7 V% E) \5 X) Q& X" }3 r0 Y& I ports:
" u+ q" C' J( H - "5432:5432"$ B# ~- X# h. |+ \3 O
```0 Q, |1 _1 v! v
- 启动 Docker 容器:9 p3 T5 }# I. X, {( c
```bash
$ T+ L) X. u3 ]9 T% j M0 w3 f docker-compose up -d
, v* b9 |+ I0 c5 ^% q2 x/ ?7 Q ```
5 }. Y. L3 M. M
2 m- q) w/ g% W- }' p9 }5 O8 V5 N#### 5.2 配置 HTTPS
2 w1 N; g# x# S* G/ L1 J; D# S7 V- 使用 Nginx 反向代理并配置 HTTPS:1 x+ D5 B4 c+ D9 F; c
```nginx
6 V8 U( \- z# I; W: Z server {
4 z( w# n0 M; c! ^- b3 R6 ~6 R listen 80;
3 @' Q; K& c, M2 t, g: F5 ~$ i" V# Z server_name yourdomain.com;
9 \5 ?: q/ M' c+ H B" N5 J" f! w return 301 https://$host$request_uri;
7 ?) y# L, Z8 j% D. m; k( ^6 J } w1 j' u! f: C q! v( T
+ x4 H/ X6 s9 p" U. ? server {
/ Z5 m8 E" v0 l2 \8 |7 {7 j listen 443 ssl;7 T# \# D$ i8 k+ V/ R. _
server_name yourdomain.com;, W4 ^& l e& ~" \+ g9 Q
& L n8 ?( [3 k! D
ssl_certificate /path/to/your/certificate.crt; G5 x V# X x
ssl_certificate_key /path/to/your/private.key;6 e2 k9 o8 ?* [
; k3 g5 t, _* Z# e. v- V) _( d location / {
1 G( Q7 m7 ]; E+ H' N- `9 L' L _, z proxy_pass http://localhost:3000;
" r. U) g/ m$ U' l, R% y proxy_set_header Host $host;8 _' F' W: n0 Z* V6 n; h6 X
proxy_set_header X-Real-IP $remote_addr;8 h4 \2 J& T$ }* R5 J. C* a& K3 d
}
9 R1 |6 C5 K* a- C; W% ~4 b# F }
' Y, v3 h# g: P, P! N, D ```
0 E* b. B8 P" b* K0 `6 ?
) k4 k2 G i6 K z---
# r+ @$ n# X* B
B: |, F" m3 a### **6. 总结**
. J3 R p# V, v5 l. k' n4 R通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|