|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
( Q8 y/ z1 E+ s6 k9 U0 ^+ D- G1 J9 ?' I6 E* r X: K
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。3 v. v( I2 R/ r- ^" h' E, B; U7 i/ u5 V; C
" ^( ^( E& w5 {# |' a! r8 e/ L( d---: u2 L/ P8 b2 Q- c( H% h# h
+ ~' r( F8 c7 ?4 N9 X+ T6 d: h### **1. 环境准备**" p9 ?, f3 c" j4 O/ i
#### 1.1 服务器要求
7 C3 l+ O8 C. {( J; x- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。. @2 W% Q# X' u5 {/ k
- **Node.js**:安装 Node.js v16.x 或更高版本。
' T4 k& s$ f# i3 L. ~- **数据库**:PostgreSQL(推荐)或 MySQL。( p3 Z' A3 l* L. D+ E* e' k
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。/ {- w# R. K0 s6 [! w
* M. B0 J' ^ g) G$ I' e: g3 l, L#### 1.2 安装依赖
* {/ K! ]( @$ F- 安装 Node.js 和 npm:9 v+ u2 F2 d7 D6 q; \
```bash
+ n. a& l+ K$ P- y3 @! ]+ K, q curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -8 h5 M; ~+ P/ U
sudo apt-get install -y nodejs- ^$ [% R' |3 C- S/ L
```
4 E- b: K0 w3 z0 K0 Y8 d4 X- 安装 PostgreSQL:
! N: f' t; [' y; k& W* {% m3 b0 { ```bash- [7 Q3 z& F" J& {! t. i
sudo apt-get install postgresql postgresql-contrib
1 l }9 e! C: M4 | sudo systemctl start postgresql
) d( L; L" [3 j3 y& D sudo systemctl enable postgresql5 |1 D7 ^% X% M5 h2 E9 J; l
```. T: c( s0 C0 B
3 `. e/ o% f9 \
---
3 Y8 ?+ I7 n' U9 K- B) c4 O$ { \: H" P4 T% N0 w5 Q) K! v9 ~$ t
### **2. 安装 NocoBase**
! e' y7 Q, e3 d% q& N+ q. R#### 2.1 下载 NocoBase- h# X6 T+ Q7 I+ o6 C. J2 @
- 从 GitHub 克隆 NocoBase 仓库:" [1 n3 |% s4 X
```bash
, q" A) M5 e7 v0 S/ A git clone https://github.com/nocobase/nocobase.git
2 U' T$ E) L d+ P# E cd nocobase
0 y- I# j, J& O+ R4 A: i: z ```6 A5 n: k1 N: C! d8 I
6 B/ W& c! u; X* I% `#### 2.2 安装依赖2 p2 B+ v# a" r, z- J- ^/ X* h( Y
- 安装项目依赖:/ Q3 U, ~- u- P% D1 E
```bash0 F$ J6 f/ y; |1 G0 q# }1 L
npm install1 _! D/ O4 O, U" L, R/ c& C8 e
```. K* w, t2 d% z/ r7 {+ O: P }8 D
9 _" g7 ?8 w0 ]) M0 [5 _
#### 2.3 配置数据库
3 y- B$ s" g. q8 r% l- k1 o- W6 Y2 j- 创建 PostgreSQL 数据库:
" s" ]: m' s, ^& ^ ?. w( K ```bash2 Q# M" f/ ?3 W3 x& v x* p
sudo -u postgres psql9 t4 `" f! u: Z% [& |" V, T
CREATE DATABASE nocobase;7 Y: S- L# u' n6 d7 F) B
CREATE USER nocobase_user WITH PASSWORD 'your_password';
; y4 S: P3 _. E/ j+ G( f/ T GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;. p5 p3 u, s- {, O+ T
\q
% c e: z, o4 o" X/ ~9 Z; i* z6 E ```
+ g- K% _0 G* _: E" P- e- 修改 NocoBase 配置文件:
2 w$ U" x: e1 ?3 a/ i 编辑 `config/config.json`,配置数据库连接信息:( K* i6 a& j& J1 B2 X- q
```json* @5 o. e1 S# v0 I, _+ Y3 q
{
) }8 @( e2 V% f7 H3 i "database": { C( V3 H5 ]$ C& a/ u
"dialect": "postgres",
4 h0 u+ ?1 N) E0 F, X "host": "localhost",) A4 c) i% ] W) j
"port": 5432,
/ R+ ^. ^: o: U+ k- }* q7 d% o1 k "username": "nocobase_user",
% Q7 M3 d5 c* A "password": "your_password",2 O: j# a1 |6 ?* y! w b
"database": "nocobase"
- d; h" U) |# M- C5 ~$ B, B. @" B }
% ~( z9 R: R# c& n( ~ }. p) }* X; Y" I; d) S6 f0 }* c5 [
```1 z8 ?2 a* J( R6 o
8 k- {3 w1 S; O6 d7 X
#### 2.4 初始化数据库
) r, m3 {$ c5 r: g; P( [- 运行数据库迁移脚本:3 q' q& a" A0 v' u* K
```bash
; c( B6 R) y* h. `( Q+ k2 K* Q+ D2 d npm run db:migrate& u5 P& y# [* h. _
```
* Z# |/ x6 |' y+ K# I& O& N9 n' o* K2 m0 y3 w7 g; b/ q
#### 2.5 启动 NocoBase4 T; L4 z. w A2 u! _% g4 e, [ y
- 启动开发服务器:2 D: c& A/ ?+ c1 s6 ^! c+ O* B
```bash- f) @& z3 [- o9 y) R- J$ ~/ i7 m6 T
npm run start
: j4 P/ Y+ L; b8 O; v7 G3 ^5 R ```( o- M9 x/ M3 P& y; X$ t
- 访问 NocoBase:6 I. f3 u5 K. {0 \
打开浏览器,访问 `http://localhost:3000`,完成初始设置。
0 r( r! A. I- H! G X: N2 b3 @
/ h' B3 C; j- \- P---
$ `# ?: |7 X, \
4 S) A3 i8 X8 Z6 \2 l### **3. 集成 DeepSeek**6 Z. P+ Q; i1 |) \ a5 b' d) A
#### 3.1 创建 NocoBase 插件- t2 C. [$ `; a6 E* W! A4 C0 Z% n
- 使用 NocoBase CLI 创建插件:9 M, E1 g6 |1 L
```bash& i$ e9 P2 |7 S1 R, ^
npm run cli plugin:create deepseek-integration
( P7 f/ \+ z: O A+ U cd plugins/deepseek-integration2 n. R2 N5 ?. z6 u1 Q
```% a! d! l" b B7 r0 }) M+ \. o' \
3 W1 \; ^) J7 _
#### 3.2 安装 DeepSeek SDK$ O* B. r- x) O E! N2 S1 f
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):& p7 _9 G1 y' N/ d0 h- G) q* S
```bash
, W, H8 `+ p& p9 w" L npm install deepseek-sdk
7 y" S4 P! }$ |& I ```; @ Q9 Q* ]$ @, g# H
; w* u( A+ |" b$ P7 u1 P3 U#### 3.3 配置 DeepSeek API 密钥
& a5 d0 U, |5 V* y4 C' I2 V3 X* r- 在插件配置文件中添加 DeepSeek API 密钥:
2 B! _8 D; E% e! I" p 编辑 `plugins/deepseek-integration/config/config.json`:, j; j- m3 `+ s0 |& X
```json: h" g2 x7 G3 i# J# Z
{
a1 O: ]$ r$ _ K+ W! |, [& t9 A! p& p "deepseek": { h( d M" ~; B& c
"apiKey": "your_deepseek_api_key"
% [+ M5 l+ V1 ^4 D9 o$ O }
$ A% z" c; ~; w. \- ` }
! F& k; l7 |7 d. U ```! s3 |# N7 J8 i% X
2 O$ Z6 w, C D2 s3 c+ E; A
#### 3.4 实现 DeepSeek 服务
8 W" |1 K: E8 B4 s- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:$ {$ D8 b) n# ?4 `( u4 t
```javascript U" }5 c% A; b9 B
const DeepSeek = require('deepseek-sdk');0 a {! O" x* N1 a3 i! X. Q# M+ n/ F) |
; n- b% F( e* k% x class DeepSeekService {3 z% i+ k& {1 e4 m u1 B
constructor(apiKey) {
+ c5 K) U. d: n3 g) C. H& p. a this.deepseek = new DeepSeek(apiKey);
# p! t3 y+ _ ?' z; C }
8 s. S: B$ \0 ~ `
+ V: z l. c. q( C% p async query(prompt) {* ~" b3 g0 G! o) p+ V
const response = await this.deepseek.complete({
& T5 |1 |+ }1 u. s( S$ Q prompt: prompt,
# K! q0 v0 l5 I9 P: a8 k, b2 n max_tokens: 1506 S8 P5 e0 q+ u2 \ T7 u0 c9 j
});) l& l1 r$ U- h5 R$ y% q$ L
return response.choices[0].text.trim();0 A) j5 @/ P5 x- n
}6 l0 @ h5 x+ Z7 [: S7 T
}
: [) V8 c8 I% _
5 b8 C7 H& a! n1 ~/ s) | module.exports = DeepSeekService;
# h0 V& W% S! ]% ~) X, V* x! u" J8 @1 O ```) E% j/ ?# r( P
( F6 j/ N$ ]* z, H3 o
#### 3.5 创建 API 路由* m$ @ K8 b) w7 S# q! x
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
* q. G' ?- `5 Z' @5 j9 W0 ?4 E8 g ```javascript3 D8 {1 _/ ?1 M; ^; V, ^
const express = require('express');
; u: i) h3 z' q3 h: ^- c8 F const DeepSeekService = require('../services/deepseekService');/ Z. {9 @; P: U0 d% F' |$ Y
const router = express.Router();" n$ G. W7 y) Z2 q
const config = require('config');0 Y5 }( e9 p4 [+ E: M3 ]4 | S
2 l2 i- T' b v0 P9 [
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
, l" s7 Z) U/ e9 T/ u0 q d; C* i1 g
router.post('/query', async (req, res) => {% @5 z3 W) r/ x) C
const { prompt } = req.body;
8 o8 x& p$ g% {( F try {& {& \' D/ Y4 }$ M( a+ X
const result = await deepseekService.query(prompt);. ^* s1 A$ r; s
res.json({ success: true, result }); H9 g0 }$ X' z
} catch (error) {
1 B, ]$ F0 q+ a' ?0 Y res.status(500).json({ success: false, error: error.message });0 H& i& v# y' S& A9 g
}/ r' O6 ^7 m2 f% k$ z) _
});5 p7 ~' r t o# |4 `
q$ u+ P" n* |8 e module.exports = router;; q$ x% J3 F1 {% ~2 T T
```
, K3 V; C0 |! W, e8 u) p( ~3 R4 I+ ]* T* f. l9 I& j& M
#### 3.6 注册插件' _& R8 m' F3 e3 O$ w
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:* P) B4 h$ E9 Y" r3 Z8 |
```javascript' b* k& J3 B* g6 I# a4 P. K6 t2 ?) z
const deepseekRoutes = require('./routes/deepseekRoutes');
- `0 K% g. E/ T9 q2 t6 m& S' I" F1 Y q2 X; ~
module.exports = function(app) {4 q+ @$ e! d, H- u# q' E5 Y
app.use('/api/deepseek', deepseekRoutes);6 d! S( ^9 f1 `1 V. Y' E; o
};
! c, F8 Z, V& D8 x ```: G* w- K" A' K
/ b" f. |/ ~1 Y
---6 t; I' L- i) J; C
) q1 n% v: v9 i. g( u### **4. 测试集成**& o6 E3 t6 u4 j
#### 4.1 启动 NocoBase
7 I/ W. E- H' f1 B( r! s- 启动 NocoBase:; C: ?, y' o5 [
```bash
' Q# V$ v! H9 V" |) g1 ]; Z4 H npm run start
. Q( P* a8 `: w7 R+ [ ```
' j% G: e2 {0 V$ H! {
5 ?4 J; I/ G0 U* a: f9 _#### 4.2 测试 DeepSeek API4 F) W$ R$ E0 o* S. B
- 使用 `curl` 或 Postman 测试 API: a+ c% X1 {9 f
```bash- ~7 D5 W2 a! ~' T
curl -X POST http://localhost:3000/api/deepseek/query \4 X0 i* j6 V- M N; R2 r
-H "Content-Type: application/json" \
8 Y: ^( A/ n4 D- b -d '{"prompt": "显示最近三个月联系过的客户"}'$ L9 f7 }( X% I# P" |
```
$ R: \% u6 ?9 R/ ?6 i, l n: ~+ r, t+ r5 g" R' U
---
b4 c' ?* z3 |+ T# V2 ]
9 t$ t4 k& W$ r% M' K, E### **5. 部署到生产环境**# W- C: V" W$ }. M% _( m: {
#### 5.1 使用 Docker 部署
8 ?) \. p, U# P V7 y% h& w- 创建 `docker-compose.yml` 文件:
- {4 k' F' G+ i5 _- U& \ a ```yaml
$ V G9 |3 ?* N) | p0 H6 D version: '3'- `0 o: y& g [
services:/ I3 K" O* y9 t) A# Y
app:% \8 }7 X# q' x& G# E W1 B& t
image: node:16
) @3 H& H* K. y0 P! k/ q container_name: nocobase
' q) F6 T$ ^! k, S, W working_dir: /app
& H$ t3 F# o9 A1 p; \5 I volumes:& p; A+ C/ G( r$ [( x2 s
- .:/app$ x2 L# B0 s- N
ports:
* z( N6 [* S. x' q - "3000:3000"
7 V; z- i9 u: Q' \/ a2 l environment:
8 x7 E; ]% X' k - NODE_ENV=production
0 G, `8 }5 Q) y( R command: npm run start
% x) Q3 E, V( ` db:
' W5 _& k) p$ Q1 s! \9 v& M image: postgres:13 R8 Y# O L4 e1 O
container_name: nocobase_db& s( F9 c! V: C5 }+ j* e" R/ o
environment:
' t! L8 f! v7 q4 n POSTGRES_USER: nocobase_user
) R5 i* t1 b0 G6 k' n POSTGRES_PASSWORD: your_password
% D% y" J! Y0 X4 H4 J POSTGRES_DB: nocobase& q9 P0 {: Q' ?7 F
ports:" H/ e, T0 T( z2 n( W8 f \ N- o
- "5432:5432"6 C; S) A9 a5 P: y# E! H3 I7 F/ i3 Z
```. B n! }6 Z' Y1 ?# {
- 启动 Docker 容器:
, C, M' O% A* m7 o7 y/ B ```bash
1 w7 ~, o! L: Z6 I- {5 d docker-compose up -d
! [' j2 I( g) h, z ```) A$ E! `/ F6 s. K s
A5 t! U% p4 {. c#### 5.2 配置 HTTPS
6 ?8 |# ?5 \4 H( d3 R- 使用 Nginx 反向代理并配置 HTTPS:
8 N) O& |+ p2 M9 i q: t4 G) X ```nginx q' X* f8 c( \; D% `
server {
( o& w) k! N+ r. h) ] listen 80;- B! I, c% M7 O W. R
server_name yourdomain.com;' l7 K6 @- g6 \* }$ h7 Y4 _1 D
return 301 https://$host$request_uri;
$ f6 U3 \1 k# v1 n# Y9 ] }. \4 e4 ~7 D2 b$ o `. L8 V
; g* k7 \6 c& L+ }7 P6 i d
server {
$ ~* K# ^, d: g& d m: N5 b listen 443 ssl;
5 o2 {/ w5 ]# d6 U1 R server_name yourdomain.com;
. ^( I9 g# \* T
2 F& \6 w3 h7 X7 y ssl_certificate /path/to/your/certificate.crt;; P( `0 A+ k! q9 i7 ]
ssl_certificate_key /path/to/your/private.key;
$ l+ O; p2 ?: B6 L2 `
! S, F" O8 w2 S k location / {
5 q8 H/ @& G) H! W proxy_pass http://localhost:3000;( ?8 W" R+ |' N( B7 @. d
proxy_set_header Host $host;/ Z$ _' v# M! p7 @
proxy_set_header X-Real-IP $remote_addr;6 Q$ g8 ` |' a9 c }& j- ~
}. t6 i8 E6 b+ C
}
& D P; O- `0 b ```
( Z1 l. L. u7 m; R& b5 V; {0 K7 `, I3 T+ N% v6 A
---
' R; H+ W/ K4 J9 E/ a4 O5 K3 |
* C9 w( Q T8 z5 F4 j! T( S### **6. 总结**
& A0 m2 K/ m+ q8 [6 Q) r9 E+ Z" }通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|