|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
! P. e. w' W9 J3 X; u
# a# L1 {4 `: f" S# i& O3 W我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。4 |6 \+ @* U& ?! f; [. j- X8 }
& \. E' W0 O- K! ~! N
---
& B$ T! u- _7 @8 i0 @ s) S& u9 p& x# v7 S1 n5 o8 |
### **1. 环境准备**& O1 ^+ t9 ~' n( E
#### 1.1 服务器要求" j0 ` g3 z' \" F0 R
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
+ ]+ Y1 T; r5 S1 }. x9 C- **Node.js**:安装 Node.js v16.x 或更高版本。
, t2 t6 N. b4 M9 t- **数据库**:PostgreSQL(推荐)或 MySQL。
- |5 T* {5 |( a- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
{7 B; b& B1 @- `5 ?! c# |' l) G; C; }3 F. B" `8 y. n
#### 1.2 安装依赖
* T) b1 Y4 L8 X2 M- 安装 Node.js 和 npm:
& i- f- J) o! k, D$ Z ```bash
! ]2 @9 |/ y1 }( C+ L0 ^1 X curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -3 z" j) r6 X& r9 u
sudo apt-get install -y nodejs; ^3 l* K F" ?9 r
```9 c! y6 z- P2 r) w. ]: h. ] r/ D) A
- 安装 PostgreSQL:
R- m2 @9 c. B F; c$ d4 y k ```bash
, ] b' x3 K4 o% s2 f6 e/ a D sudo apt-get install postgresql postgresql-contrib0 w/ Y# g" [7 z" F% i
sudo systemctl start postgresql8 a9 H9 o" F v& G" R& d
sudo systemctl enable postgresql4 c' ~; O4 v9 ^/ g
```
! ?5 S6 h2 l a' X; D" k q7 Q7 d& U) Y. y& a' G- V- m* e" N* B- P
---5 D1 x+ ]+ e* r8 J8 {* z1 a0 i; @
! ^9 G; @+ q( d" u. @8 f$ \ ?
### **2. 安装 NocoBase**& {! T4 {( ?- U& X, b! a1 {. f
#### 2.1 下载 NocoBase
5 T. W9 X& u5 e' J* `' w# C- 从 GitHub 克隆 NocoBase 仓库:
# y) {0 r' h D+ O# r ```bash
' x7 r+ s4 m; Z3 d% \# r git clone https://github.com/nocobase/nocobase.git o9 C3 W( T/ J9 @. r. ]
cd nocobase6 A) x) |/ ? [; m
```6 t1 {9 T7 x& }3 q( Q7 Q; g
' _ l( g, Z- |4 d" _+ e7 u
#### 2.2 安装依赖
( M& `5 {, y4 q8 F" Y3 q- 安装项目依赖:3 K+ S% G8 q q2 @0 u/ @2 j8 Q% [, ~$ d
```bash2 N6 M' [9 }* E8 }
npm install2 J# B/ X0 F; o! X |
```6 x" G, D& F7 I4 k- l. ^! M
" q9 W! R, \# M2 \/ |2 g% d#### 2.3 配置数据库
/ K5 V, N& ^' ^ {- v$ F- 创建 PostgreSQL 数据库:5 E& a: q- d) Q1 S, D; h/ m
```bash
/ i+ h# }& ^$ ^$ Q sudo -u postgres psql5 H3 P O" _9 O# D' _/ d
CREATE DATABASE nocobase;: D$ M+ D+ Q- h6 c5 k) n
CREATE USER nocobase_user WITH PASSWORD 'your_password';. T# l5 l9 K# V7 X$ A' P: H
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
) b# Z) @0 C; a+ ` \q
' G$ C, S8 P7 S: X7 [ ```
# {; F* F6 e! I- 修改 NocoBase 配置文件:
2 c7 I/ n/ T; m7 ?9 M 编辑 `config/config.json`,配置数据库连接信息:
. a" o; [& O0 R8 z5 X8 h ```json
8 q5 x6 k' ?% h6 B {
2 ?( |, }& n7 i$ g "database": {
5 \6 y* u2 @+ C$ Q0 ?8 s5 X2 j "dialect": "postgres",4 L+ @5 B; O* s. ]. F. V
"host": "localhost",
0 \$ A& [( H; k+ m$ I "port": 5432,# |- a; D0 M# N3 L) g/ V$ Q e) |
"username": "nocobase_user",
) E3 \" k' ~3 B4 F5 \$ `) c "password": "your_password",
6 d3 r+ h s5 e/ P "database": "nocobase"
! w3 X9 _' V5 _% Z }4 s# M- ?: f8 R* Q9 u# U% V4 _; @
}, g" ]1 l) D. {
```
6 V" S$ A p" C* ]. m: c
* g7 h# i4 Z9 O+ h2 q) a+ E#### 2.4 初始化数据库
" m9 E& j1 `- P- 运行数据库迁移脚本:# F2 T. [( Z b# V+ t! j; b
```bash
; u; N+ g4 Q5 w! x; a+ G' Q% A npm run db:migrate. s9 \! ?! x5 T( c& J. W* u+ ^7 i2 }
```
! B9 Z$ M( y( x) `8 D1 ?2 H* O9 {* ~9 G6 d& m) s
#### 2.5 启动 NocoBase3 h% i+ }- i2 p, S! m: @2 m
- 启动开发服务器:
, F1 H0 |/ _; q& u2 @ ```bash
4 l' }* Y% ?5 R- ~. z0 s npm run start
, }/ Z1 A o" a6 w$ S, b ```
: j; w% e! J3 s% Q4 k d- 访问 NocoBase:
# L* d+ o* O' k: N; e3 d 打开浏览器,访问 `http://localhost:3000`,完成初始设置。5 o# }: x! O& A C/ r5 c* t
0 ^1 X6 A9 i8 q8 T---
; \2 w" c) G7 w& y9 @* E
5 o3 ]; }& G5 g: B$ j/ E### **3. 集成 DeepSeek**5 A: [8 @, ~0 U% } W* J( S. K
#### 3.1 创建 NocoBase 插件
' r2 D9 H8 b7 X7 _5 i- 使用 NocoBase CLI 创建插件:$ l- N! \3 T8 R
```bash
3 h1 R4 K/ f. M t npm run cli plugin:create deepseek-integration
; [2 O+ s- c; V6 ?' x cd plugins/deepseek-integration
/ Y$ h6 ^6 w, }# t R: {9 l" o2 P5 A ```
; t$ x' X$ ?0 j8 n3 D1 W& h2 X( z
#### 3.2 安装 DeepSeek SDK
- y! t( l7 q0 o: n* D- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):/ g+ T* c5 W6 ~, I" L" K/ l
```bash
3 B$ {( q7 B' ~ L# K4 S1 Y npm install deepseek-sdk" T$ u/ ~% Z# c5 o
```
}/ V5 Y4 {0 t1 q/ k9 p- h) ~; y- y( A" D% l9 z: _1 \
#### 3.3 配置 DeepSeek API 密钥
( i, }* f+ s$ s) @- 在插件配置文件中添加 DeepSeek API 密钥:
9 p! |* Y- G7 i; r3 L3 B 编辑 `plugins/deepseek-integration/config/config.json`:
4 q& a0 `+ O6 u2 n2 x" U' D- V, t0 V ```json7 J# q* V0 y g
{+ ` n% v* H2 ?4 G' S) y& ]
"deepseek": {
' e3 Z/ E- O, ^* L" U. B( r "apiKey": "your_deepseek_api_key"! K9 J4 c$ h; p) Z
}
/ t6 x$ c* L& J }, w7 ~, {8 W1 ^" F* v3 |
```
" d" C0 |6 S& b
; X' l1 C: w# D+ l5 n#### 3.4 实现 DeepSeek 服务9 O' {3 \' N; T: C0 k1 T( h
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:- v4 p3 G7 R Z, Z
```javascript
- r; M; Q; m% [1 H const DeepSeek = require('deepseek-sdk');" B0 V+ F Z: i
" S2 q% p2 D. @) Y, J. K! \/ c* E
class DeepSeekService {
4 ]* ~: m4 H4 C8 z$ @ constructor(apiKey) {
" a6 z" W6 H& H( ]3 w4 h3 o/ l9 K this.deepseek = new DeepSeek(apiKey);/ A' [! @7 M' i( K* J H
}7 ]+ T8 ~3 E1 V5 R* P9 M+ a
; r# G* v$ V8 {- K* k7 G async query(prompt) {7 T: L" @3 m$ C8 x, U
const response = await this.deepseek.complete({& ^! h: R9 L0 v- {5 ^5 B+ U2 o
prompt: prompt,
/ w, p% \( X; x# e9 z max_tokens: 1503 m$ D+ p4 n0 K
});& T7 Y2 C' D+ z4 U2 }& p
return response.choices[0].text.trim();
, P, V, ?5 q4 M' w' { }; Q, f1 g; j" b
}
# Q0 r5 z. _% N J" z
% n; ]' z3 b \( O& g5 G module.exports = DeepSeekService;
9 l* d! |' F$ t8 \& D) q- r ```
- ~; W1 u/ Q% ?! K# z8 [
, C0 j. Y" t0 l1 o#### 3.5 创建 API 路由
9 o1 X( |+ _1 Z/ h, `- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
+ f- V0 @! l t8 y ```javascript5 c! v# Y& i. \9 L% d0 b8 v
const express = require('express');, O0 X6 J4 r) U' L
const DeepSeekService = require('../services/deepseekService');
* F: B, T1 v4 _, [2 W const router = express.Router();( L3 y- P3 R& }& x
const config = require('config');5 W& E! o6 l1 z) _. I( ]8 a- `
! z) D) l% C9 M) b
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
d1 H5 z; c" ]' |- d0 v2 G! ~1 R C9 J! e! P5 Y9 X
router.post('/query', async (req, res) => {
. q0 l" E) E2 {! {: y const { prompt } = req.body;; ]$ Q$ q& O, D7 g9 F; L/ w
try {
: G& Z, R2 Z7 Z const result = await deepseekService.query(prompt);
* N1 @( H, i) N; P res.json({ success: true, result });
$ {, K- H5 ~1 x } catch (error) {6 A9 v9 F1 n$ K& k% ^
res.status(500).json({ success: false, error: error.message });
' W0 H& u$ ?0 {" c, ?6 n }
, q( @6 [$ L5 f3 k& w6 h });3 C! P8 H- j. O$ d b9 ^
: N8 Z6 f9 M6 U module.exports = router;0 [; F3 |" W5 r: ~! `$ ^4 R3 D. z
```
- y* k7 ]7 P9 N* V* h K0 e! x& `; Z1 v& o( S; w2 y) I
#### 3.6 注册插件8 i) n @# v% ]. P
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:' c& Q/ e' F- E! r1 m4 k
```javascript
; y: D2 p2 B& V! E. }$ H$ G const deepseekRoutes = require('./routes/deepseekRoutes');
: f3 r0 V5 G' y) M+ ^. L
8 I# Z% o! H9 @% z9 |* `& a3 f module.exports = function(app) {7 t" ~3 O& A+ v% N
app.use('/api/deepseek', deepseekRoutes);
6 @6 S6 D6 I4 @4 u5 H+ g# [ };
. J8 x1 ^9 C D ```& g+ P& {% x* J2 T
% N% X, ^( [- w
---8 [3 ?/ W! \" X7 h! i4 D
% q v* C0 f9 t5 J) W3 h o& u4 ]0 C+ L/ ?
### **4. 测试集成**- r' S- Y* o$ t5 g) x+ K
#### 4.1 启动 NocoBase
9 I6 x7 j F4 Q \' t2 |5 x7 V- m( \- 启动 NocoBase:
( o8 x2 a, q% M. Y ```bash }8 W. v' B; ~2 r
npm run start0 |& Q# _/ K- E& O6 T( _
```
3 J0 R( ?3 G2 s" X' h) s' Z; F% q
U% ^) w# M# h7 _/ _1 O0 `#### 4.2 测试 DeepSeek API. T C% x( l8 p" q
- 使用 `curl` 或 Postman 测试 API:
* ~: c6 ?( Q F' g# o7 x8 l- F; G ```bash
8 b0 M: }5 U% ^. u$ m$ A6 b! X curl -X POST http://localhost:3000/api/deepseek/query \
# [2 x* X( f5 z/ d -H "Content-Type: application/json" \
- r: s9 c5 l0 W. G -d '{"prompt": "显示最近三个月联系过的客户"}'9 v6 k) X4 ~ M% s" r
```
: F% z# ]6 a/ A. S6 E7 h0 W% t! p! `
8 _/ O1 H: ]% G0 e---
9 N% s' q4 g5 V/ D4 u
/ ]4 @) s( G4 N9 \ F5 t### **5. 部署到生产环境**& e' K/ r! x5 X/ I. N4 F/ i
#### 5.1 使用 Docker 部署
7 a: C0 c8 {! l6 K& L- 创建 `docker-compose.yml` 文件:
. |0 H7 {$ h. s6 A ```yaml% u& w2 F- _, T$ s9 J3 D! M- k9 e% ~
version: '3'
- X5 z2 f+ r3 Q7 x: s services:
[& a6 e% X7 S) a4 X9 N app:+ T, V" a; ~( G) l0 d% t
image: node:16
) s; W5 R8 N- x# Z container_name: nocobase, a6 t4 @5 I- [5 a
working_dir: /app4 x! }" O- b2 A4 Z1 k4 p2 C' K
volumes:
' V5 J' t* a& S! A$ B0 z. j& H8 A4 A - .:/app
& o9 K2 z! t' \+ ? ports:
; }8 O8 y9 \! k - "3000:3000"% n3 r2 r3 c7 `; y; S/ o
environment:/ X& N- }# I" k. E- @6 B
- NODE_ENV=production
5 w: J3 w1 M" w3 v/ ]+ }% T6 }6 O command: npm run start
2 F/ C/ B; Z9 @" K4 X; L db:
, K& c; c. K: o9 U3 _0 `7 I9 \; ] image: postgres:13, L4 c: |/ P! B5 g# b
container_name: nocobase_db7 m, e# A8 [3 h" e
environment:. ]/ G1 ?* {6 d8 [
POSTGRES_USER: nocobase_user! K/ U, I! b$ r$ g5 K
POSTGRES_PASSWORD: your_password
& G& t4 m1 ~* N POSTGRES_DB: nocobase, f# {7 \" v1 r# ]- V* b; q! C
ports:; z: P/ W8 u+ g( K1 H' R
- "5432:5432"
6 s) C3 Q+ z; r$ {4 N. L9 Y ```* D# s! v' T6 \% q
- 启动 Docker 容器:' a0 }2 Z/ |1 z4 m) N) m0 w v
```bash
* j) k, ^- h% @3 |( T) W docker-compose up -d* X' C! M8 U$ ^! A+ M
```
" Z! g, d0 }, r6 G; ^
0 [3 d9 r. q8 T9 X! t' W. K# o# D( z#### 5.2 配置 HTTPS
% r/ u( ^2 z' N" [5 \: a# e% O- 使用 Nginx 反向代理并配置 HTTPS:3 G& L! S/ x* G9 H2 S8 Y/ b
```nginx' \3 E p4 B3 F- W1 s. ?
server {. r7 b. G7 l) D# Y) {& N# j
listen 80;
" P p& E# T# j& t7 D; n8 @ server_name yourdomain.com;
+ r/ ?7 c s& { return 301 https://$host$request_uri;
/ M8 ]7 J! e+ ^ L* I }
0 z l1 j: @* x9 q3 ^, G! O1 r: r% q3 A
server {
7 }4 y$ W( @: h. [ listen 443 ssl;- }" S( k- c5 t P
server_name yourdomain.com;$ S" o% C. h8 I2 c* M% n3 ]
& L6 Y1 f+ w1 ~% W2 x ssl_certificate /path/to/your/certificate.crt;
7 O9 a1 R+ e8 d8 v( J ssl_certificate_key /path/to/your/private.key;% i& w% N" Z0 F9 |$ Y. B H
6 @! \3 L" @& I9 D location / {
0 ^! U7 L: W/ `0 e proxy_pass http://localhost:3000;
; L$ r3 f: F4 K) {# n: ~5 E proxy_set_header Host $host;4 P. e, t) f' w) f" H4 \
proxy_set_header X-Real-IP $remote_addr;' a$ h0 `6 Q u5 w
}7 H; h* y4 z0 n
}
# M9 E# q- R1 e+ V2 Z) b ```
/ w4 O$ }# K( ]' F% D/ L! \6 u8 D( d& c$ z
---3 \; L/ y) I4 u
) w# k) E: ?" a1 c
### **6. 总结**
Q9 x. D2 s6 n" I通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|