|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
% i# e3 _% `6 U/ q* \7 o G4 M$ a) q) |' D, _2 D: ?
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
9 I- H+ d; {$ g4 ]$ F2 c
) G# `7 M4 G; \4 |---
, v% J. l$ N3 P$ M3 P, U" \7 z
( l; R4 p) l; E2 T, R/ a### **1. 环境准备**0 n+ j. x/ ^7 M, t! ~
#### 1.1 服务器要求0 k- q' S! a' ^0 i8 e
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
5 Q6 y/ C6 U8 b- [* D- **Node.js**:安装 Node.js v16.x 或更高版本。& e5 w0 A0 G& g7 c1 p. q& c
- **数据库**:PostgreSQL(推荐)或 MySQL。4 u2 K# p; C: I, `- P
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。 U _- q8 W9 |: }0 _
0 g W8 N$ {) z* x! E6 T5 L
#### 1.2 安装依赖% }" N4 x7 D, W
- 安装 Node.js 和 npm:( X; ]$ b r. z( G4 ~" j! U
```bash
1 I7 @2 \. x2 x; Y curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
7 @$ }# ?1 F J" ~$ V0 A/ t9 p sudo apt-get install -y nodejs
* ~6 s4 P7 J/ G4 ] ```
! v# D/ w% Y/ [' U, Y1 d- 安装 PostgreSQL:
9 e1 l$ E% o: X% g& x4 o" v( R ```bash
8 {0 t9 \1 p* q) f ~ sudo apt-get install postgresql postgresql-contrib
" h5 N) H: h8 k# a" A sudo systemctl start postgresql6 [% @ f- l4 B b0 {% N5 }
sudo systemctl enable postgresql
) p$ G2 @5 P" f u/ W2 F( \$ S ```
3 I5 [" C5 _) `+ ?3 N5 w6 P0 B- @7 V( a9 [" W9 X+ p% m3 }5 _
---
3 o2 X& V# k: f* z* k Y; c1 g6 Z9 y0 F$ r+ M: f ?- Q
### **2. 安装 NocoBase**7 f9 Y. ]5 S6 W: j7 D
#### 2.1 下载 NocoBase
8 E9 v0 K/ }$ a3 K4 j- 从 GitHub 克隆 NocoBase 仓库:
6 c; `% n8 u: v ```bash7 ~$ J% s$ o, V
git clone https://github.com/nocobase/nocobase.git
- R! r4 z1 q3 U* s7 [4 n cd nocobase! `$ N3 c, ]0 c; h& [6 y: I1 M! g! Y9 ]
```
o- {6 g8 X' t7 f& z7 E& l/ X% O- s2 [9 ^4 _5 d7 X/ o
#### 2.2 安装依赖7 Z# Z' q/ y, @8 o; }, o9 x
- 安装项目依赖:! L+ ]0 O. O8 v6 S( k8 @
```bash$ h+ R0 q+ M' |
npm install; T2 J' K5 ]1 b6 j% p- D" o( A
```
4 W5 J' ~$ e( g$ O" \3 Y5 G4 E! n+ v
#### 2.3 配置数据库* S; Y. [& K+ s; d3 _0 X/ _
- 创建 PostgreSQL 数据库:
( d" |& i8 q T1 ~ ```bash
2 n! V$ K& t5 J2 z sudo -u postgres psql, A( s/ a+ U8 ^$ o( N
CREATE DATABASE nocobase;! L; n m5 H- k N, f2 E& g2 _; h
CREATE USER nocobase_user WITH PASSWORD 'your_password';
2 M7 ?4 h; b9 i* i6 l GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;1 ^) E T5 K0 b% n" G* v. E
\q/ J$ U" R B; ^! Q
```" b! s: E' ^ Z- i% h% A& P
- 修改 NocoBase 配置文件:
8 O& E! N% d8 K5 [4 M 编辑 `config/config.json`,配置数据库连接信息:
1 d6 _( J& @2 V1 `! U ```json
5 z7 t+ _& N- k1 R7 H {
% L* z$ G* Z, I' B6 Q2 U$ |3 \ "database": {
$ D7 h( _3 w8 B "dialect": "postgres",6 B) T+ T/ V3 [8 n
"host": "localhost",
- n& J. I7 m- V$ o7 W. [ "port": 5432,
6 u7 } L1 j; A! C( g; O6 d6 U$ } "username": "nocobase_user",
% }2 H: \9 |1 A: H "password": "your_password",& a/ D& `; X/ f" c
"database": "nocobase"
L8 r# X1 `* _8 q+ A U* V }9 d4 E# `+ p j- m B
}
2 G1 e! _, R! |* D ```
. t4 o7 o4 k- M# l- Q2 p8 u. O" p% i
#### 2.4 初始化数据库
. g. k G: R- @5 g- 运行数据库迁移脚本:
* ?4 q0 I$ h8 t, T0 S1 q ```bash4 J U7 J. r, j
npm run db:migrate
4 Y3 h7 ]' ]! n8 ]) a) A- e* A) F ```. j8 L I9 ]) D. X( p
7 f" [. _. M+ f% ?7 B#### 2.5 启动 NocoBase
. u/ e2 y8 D# g! f- 启动开发服务器:
: H, b0 k- D2 t: C( M$ I ```bash: D1 O) [% V# l0 `0 y: R) f- ^
npm run start5 X4 _: h8 ~ }6 J. y
```
0 C" s! M6 j0 Y* H) e1 _- 访问 NocoBase:
, A, @, J! L1 x 打开浏览器,访问 `http://localhost:3000`,完成初始设置。+ z% ~, Q1 A; d; Q3 `
* Z3 x7 T$ k( l2 M# |8 P$ _---+ {' H" s) R8 \
e0 M7 u; A, Y8 @6 P5 G4 Z
### **3. 集成 DeepSeek**
" B5 v; Z, I2 z/ [0 H#### 3.1 创建 NocoBase 插件6 H# F& q! O& d, s% O
- 使用 NocoBase CLI 创建插件:
# b& C/ K# Q# @7 j, Q ```bash
6 p7 }# L% R1 \8 a/ x. B5 M npm run cli plugin:create deepseek-integration3 s h _$ `& N
cd plugins/deepseek-integration
# i" Q/ h6 E0 X& {1 k. S6 {0 r ```0 B6 e* c: y& X, U+ _3 T
1 \4 {$ n t! n$ R0 S
#### 3.2 安装 DeepSeek SDK
" U _1 r, s6 b+ Y) {) a- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
: \/ A; C5 a6 P/ p ```bash& |2 y! j. @3 D# |( v3 y G" `
npm install deepseek-sdk
. G) R9 G. F5 A7 h ```
9 ~. Y: f$ I; H; b' N" R$ [3 j. |* o6 o _5 q: M
#### 3.3 配置 DeepSeek API 密钥
# `: C8 W+ _$ M; u- 在插件配置文件中添加 DeepSeek API 密钥:
2 j' H0 E- K: ~+ Y. |" c 编辑 `plugins/deepseek-integration/config/config.json`:& V8 N" l9 n$ g' \& _/ c' H3 }
```json% u2 s+ E P. @+ r; u7 U: s
{
* y3 F6 V, J+ P4 S" d$ r% E: u "deepseek": {
0 h8 V2 p$ |* | "apiKey": "your_deepseek_api_key"/ v5 ~$ Q" _9 q# s1 F3 [) H0 y
}$ ~' G' `' y" H) e0 ]; D9 r/ d
}
6 g3 D4 g, L1 J5 n' \ ```
: b, A* ?7 }6 b# D) b* Q
, J8 C0 Z: F, f' |8 {! p#### 3.4 实现 DeepSeek 服务. r7 ^3 w' h, N1 T, L3 l6 E4 ~
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:% S( c0 y, v' s8 N3 k& Q
```javascript, i; [ T' o3 F* E V. m8 h
const DeepSeek = require('deepseek-sdk');+ Z+ C) B z8 X! J' C
6 C( f9 j4 x0 p9 V1 O class DeepSeekService {
7 c+ r# ?# h# K2 s9 v! ~ constructor(apiKey) {
O$ c' i' a' Z( ?1 V2 E* q this.deepseek = new DeepSeek(apiKey);
8 l1 N0 [0 v' M) i7 e/ E- R6 _8 S }' Y5 n/ ~1 E) }: y0 u
1 X$ k) @* R- J1 M async query(prompt) {! \' e* e) Z) m; X# N3 V
const response = await this.deepseek.complete({+ l6 A2 ~6 W% Q; ~) d+ @
prompt: prompt,3 P, f% T# f5 ~: G
max_tokens: 1508 j" U. d) O$ x9 ^7 c
});
) c+ J4 }* i& D7 n return response.choices[0].text.trim();1 K0 X6 u( F- g
}
0 p) a$ I! U1 D* E }
, r: t9 u$ O# r& }/ N* W( y8 o1 n) \! c7 t" w) n: ?6 @6 V
module.exports = DeepSeekService;
( B9 x: o# @ u$ }3 g- R ```0 n: X" v0 [& t2 }
/ G# d8 v! W! C' [( P- t) o#### 3.5 创建 API 路由& I9 A6 g, [$ a' S
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:9 b1 A- |$ M1 s2 I6 i" P, G
```javascript
4 z# v# T' U7 ^1 F! D const express = require('express');
- J( o4 Q0 X' ?) N* Q const DeepSeekService = require('../services/deepseekService');
0 X) S4 a- h( B2 V- f4 c. X const router = express.Router();) w y/ F1 i! y8 o( j' C/ i% p
const config = require('config');( Q$ X6 M8 ?' F/ C1 W1 f
# o' {$ [3 H+ {9 e$ k0 r9 Y" e2 K1 h const deepseekService = new DeepSeekService(config.deepseek.apiKey);. b9 u* Z$ c+ e9 \9 R+ k
+ l7 g7 @8 a7 ?% Z5 b5 L
router.post('/query', async (req, res) => {& d. P' X, j: }' |$ n6 z; O3 `
const { prompt } = req.body;
) J5 l& M' I- R. t0 d2 ~' | try {; _$ S B1 D* m, F2 v
const result = await deepseekService.query(prompt);; k9 A5 ], B2 f0 _ ^
res.json({ success: true, result });
$ p, D; Y" p) X. w1 b: P } catch (error) {
. p9 n& I8 b5 f& y res.status(500).json({ success: false, error: error.message });9 E; [* b8 D! j' H* c9 R
}
, Z. Y/ ?9 `1 ^% B) `8 ] });
" i# U: `9 X# q! R& p0 ~; J( r5 s& w
module.exports = router;
5 H* R/ Z0 o) J8 q8 @$ U( \! u; `2 d ```
) @& N$ Q0 i3 v+ e# f7 n& B6 m2 u8 m0 d! E
#### 3.6 注册插件- e3 Y' Q* }0 t3 R$ ^7 Z# W
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
7 Z' y, {# P! f3 b: Z9 X/ y ```javascript- o, w9 Y# H. K# T- g0 ^
const deepseekRoutes = require('./routes/deepseekRoutes');3 q/ z* n3 [3 B D$ W
, N# }; f9 v4 J+ @ module.exports = function(app) {
' y/ M% J. l2 C$ E" f6 A- ~6 x app.use('/api/deepseek', deepseekRoutes);
9 T6 ?4 B8 |% \7 H. c };
; l5 ` u, |$ ^- G+ V ```
/ C6 v, L# O7 j3 p/ z+ j6 U; q0 v5 T7 r+ T& k" y$ u
---
" V( e, [6 |8 m0 C5 S. L$ G7 B2 g+ Q% {. r7 X
### **4. 测试集成**3 s& G% J* d' H8 z2 w0 m* ^/ n- d
#### 4.1 启动 NocoBase
F3 n- B& N4 s6 K- 启动 NocoBase:
' B1 k% i9 ^( k+ \$ T; K ```bash
/ L& O' ^ [: Q; b# H0 ~ npm run start, L/ M5 G ]9 E# {7 x' t- j+ R& ]% P
```
3 V. X) P' } k& O
( |9 o: Y( s3 u3 N#### 4.2 测试 DeepSeek API
~9 G( F! h9 c- e- 使用 `curl` 或 Postman 测试 API:
; F, Q! ]1 ~% t8 Z0 F9 P ```bash- J+ ^/ i& ]. |; _
curl -X POST http://localhost:3000/api/deepseek/query \
. d% O3 p3 i3 Y% I -H "Content-Type: application/json" \
: @) O/ p7 K$ J) _ -d '{"prompt": "显示最近三个月联系过的客户"}'+ m4 ?% M7 B- s8 X' y0 T, L
```
1 J" x1 ` n- A' p; r5 D' ?# {, U' m# e$ ]% [6 o' @. d; `
---) K0 f, u( n$ ^, u
# Z2 C& f2 Z* i/ \ }% d. y( \### **5. 部署到生产环境**# ?+ a# F1 Z/ I' s
#### 5.1 使用 Docker 部署
) @0 D$ ~% L+ Y6 p2 i- 创建 `docker-compose.yml` 文件:
, j5 V' u. \- L/ v ```yaml4 s: w$ D" w( k3 \# r
version: '3'7 E, t* @3 Y) G1 c8 c) z. p7 D
services:
. O7 r3 W, o* X" t app:
0 ^3 u {" ?! W" P- M" E n4 Z0 s image: node:16- I* v: a" b9 ?& D
container_name: nocobase! b8 \; z; d- C! b8 D' ?
working_dir: /app
) ]- [4 n; @) D( a2 ` volumes:
' x0 K5 u1 e+ R$ P, g6 y - .:/app: ^* X/ D) ]* X0 }4 v" n) g7 f. z( I4 Q
ports:
# O' H" D: ]/ e0 c% f. J- @$ T3 r* K: q - "3000:3000"
! o/ [+ c y" F: e environment:7 }. H& S! i; } ~
- NODE_ENV=production
" j+ T3 x- W2 Y$ G7 U/ b& Z command: npm run start
) z2 s: H2 [- j& w3 B& t db:- X; ]2 ~5 {0 S
image: postgres:13
: X0 ^( `5 E0 T+ l container_name: nocobase_db" i/ Q- p& F) J
environment:
" e& Y3 A+ l6 S POSTGRES_USER: nocobase_user- N* \4 Q' V. X
POSTGRES_PASSWORD: your_password5 G$ o ]; ^" U
POSTGRES_DB: nocobase
5 ]+ s# `: `5 W ports:9 d0 n" N% b; E9 D+ f& h: R7 p( v
- "5432:5432"
3 v) u# }+ @) f ```
. Q& [) n; Q! E/ T5 Y- 启动 Docker 容器:
4 X" W; c G/ ]: o ```bash
9 F4 U y3 `' y# @ X4 Q' T docker-compose up -d
9 T/ y2 K, | ]2 G( p1 A; s ```
5 @# U) i- x/ T8 n; M
5 u ] ] d1 m- u* a; m+ J#### 5.2 配置 HTTPS
9 S/ u% A- J' ]1 Y- 使用 Nginx 反向代理并配置 HTTPS:
% f, c: [# i' z3 {# T ```nginx- R- |& s/ K5 o
server {
/ E) v( V7 Y+ }/ `6 U, |/ p3 F listen 80;
; P( l ~% e2 B, I: { server_name yourdomain.com;* d# s$ K0 r5 b1 A) U) N
return 301 https://$host$request_uri;, [- U* n. b4 R: `% v4 O1 j
}
6 J8 l* S$ ?/ [- t8 r3 g, x. u0 _( N7 E
server {6 d) ?. C9 ?; s( x
listen 443 ssl;6 Z, ^' d) ]/ H. J$ D
server_name yourdomain.com;% n+ r0 q# e+ S0 x
! X; K7 _$ t% @% ?6 S; N ssl_certificate /path/to/your/certificate.crt;3 E7 N% c( h( a# v/ C& Z( J8 g6 ^
ssl_certificate_key /path/to/your/private.key;
( D" `* I2 _+ b9 V# B6 y! ?: D' ?0 e
location / {
# j$ g" f% L) v3 Y, o proxy_pass http://localhost:3000;9 D; @3 i$ P" ~# H% I7 } f
proxy_set_header Host $host;
9 L: i8 L2 `2 C; X* d# _$ F, {& H5 Y proxy_set_header X-Real-IP $remote_addr;
" F5 S$ W8 b- O }
# [7 O q% f+ H; P# s( F }* r" C! g/ U# R1 ~8 |( L+ O5 ] o
```
( g w1 C, {" Q" @9 ^' n; s5 h9 z/ E) m; |0 i$ s4 S
---% P; D/ Q& s( W+ n1 T( L
; ~% |0 X$ X% y3 ?! b% U% b1 D
### **6. 总结**
9 s9 n2 R/ D8 m/ u5 O+ Z U通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|