|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
4 { t7 B" ~$ D4 Y, I6 b, ?
7 p2 U; q5 \0 e( O, a我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
, T) q- d9 h( R5 F9 N; Q; `5 M, {1 \; M- h
---+ J5 y5 x" @9 e
/ X" C" m/ V7 W) E### **1. 环境准备**
; F- w4 f8 l; D7 V$ m" K& J3 G% h( g#### 1.1 服务器要求
+ ^. d3 r( w/ x' J2 W' i- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。! a4 j! }% C1 O9 {* S
- **Node.js**:安装 Node.js v16.x 或更高版本。 F7 B* x) J3 f
- **数据库**:PostgreSQL(推荐)或 MySQL。
1 T* q1 _* l2 h1 h- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。# j! E& `) v0 @& E2 H
) \. b* `+ M) a0 {& p) Q
#### 1.2 安装依赖4 t, {% L0 M' G: e m
- 安装 Node.js 和 npm:' o. Q2 j8 @; b% O
```bash- O! z3 ~0 `7 @; x7 I
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
8 [: [% ~! }4 n% R$ X sudo apt-get install -y nodejs
, I5 p, j) ]# M. b! \- U9 ` ```
$ y$ p9 N, H. t: |" l0 w- 安装 PostgreSQL:7 B1 w/ e3 \9 t
```bash
5 g2 C- r# K) Z8 Z% }5 b sudo apt-get install postgresql postgresql-contrib
" ^1 |" g, ?0 a' E9 T. V* v sudo systemctl start postgresql$ _) t# r) P9 w4 z3 w/ O3 Y! o
sudo systemctl enable postgresql1 E8 M4 W" y" k1 y
```
# P; }/ z, j* {* |6 v* V
& m$ G( U, Y) [/ u! D. W, [3 x1 q---
, z R( V; t s. n: w8 ` \; x8 c7 R8 n: T4 o4 k. O
### **2. 安装 NocoBase**" a4 |' z, d. D5 l
#### 2.1 下载 NocoBase
; V) |+ N3 V- C( }5 x- 从 GitHub 克隆 NocoBase 仓库:' G6 ~0 M: X4 h0 W+ z* X0 P
```bash! Y* B1 d& h6 y3 q# o
git clone https://github.com/nocobase/nocobase.git
9 U( w* E) ~: l cd nocobase
: \% @1 m) `, E, @ ```
, A3 [5 i& n ?" O# I0 g
% W: D2 J, p. S! _#### 2.2 安装依赖: _/ V8 W) k1 g5 T
- 安装项目依赖:. c( L: K4 l; t6 [3 ^3 I
```bash
1 Y& [: I; A g5 R npm install3 g, M. l: ]3 F1 R
```" {9 h4 h- Z" y3 `* b+ H9 e1 R
# w) t) _5 R2 c+ R+ z#### 2.3 配置数据库
' ]; O0 \& I; c3 w/ M; U- 创建 PostgreSQL 数据库:
% t/ G! d$ a; H ```bash# \5 M4 k4 A7 \8 o
sudo -u postgres psql
/ n1 s. W& r2 |5 @5 Z5 U CREATE DATABASE nocobase;
; ?6 L+ F3 @. q9 E6 K CREATE USER nocobase_user WITH PASSWORD 'your_password';# T8 L3 @4 a2 S3 {
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
8 |0 A2 f _4 a6 W+ k4 | \q+ D5 l+ f* z5 a8 B1 x
```# |. b- z, h0 @: }; t3 }
- 修改 NocoBase 配置文件:
. Z, e0 L; N: [2 Z 编辑 `config/config.json`,配置数据库连接信息:$ y7 `" Q7 h- N, s: Q, ^9 @# r
```json* ]1 D0 w& \# ?$ s) G3 t+ p5 l8 y
{6 \) V4 f9 e8 |& Q6 x
"database": {6 I! @3 W4 Z* Y
"dialect": "postgres",
$ H1 H3 j+ ?9 q. b8 c: k+ Y6 U "host": "localhost",% a% U8 i1 d6 a6 a# [* U
"port": 5432,5 Q4 y/ {) S. i" h, j
"username": "nocobase_user",
Z6 b' p- W v& _1 B "password": "your_password",
8 F# d; c. A' P9 z "database": "nocobase"( W2 i. F; x9 `8 a' l% O3 k
}
w" R5 j& L+ v( k; C }
U8 `& b7 \3 p! v1 j1 f" z" \ ```
+ U0 |6 N( l$ t* e2 s. p, x
& i+ _ |0 R/ B: P#### 2.4 初始化数据库( D5 c* h. M/ y7 f: s9 N3 K
- 运行数据库迁移脚本:
+ R( U+ Y( K' i3 M! d/ \4 {1 x4 L ```bash4 M8 G: W2 c: ^! [0 w
npm run db:migrate
% K. Y6 V* m) Z% M8 W ```& ?, I" d9 O" r4 Z
, F* t' |1 W' C/ O' d6 U6 K#### 2.5 启动 NocoBase1 ]/ A0 V9 a2 ~% j* X. d- f# |
- 启动开发服务器:
( f8 S: D, J! A ```bash7 }+ { B m8 D3 D# }" [. t6 @ H
npm run start
: w' p2 }% v7 f# D ```' c3 v- ?. i) E6 g+ ]! P
- 访问 NocoBase:
% l/ d% J) u- N" z& g X/ j" w 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
% [; s( d8 B4 d C7 N1 @$ _9 }: u
---
y0 F: O+ E: f9 A# S2 h& y
0 l* ]0 f7 h# _; N# b8 f### **3. 集成 DeepSeek**7 @ Y; A2 o- l/ i: l5 }
#### 3.1 创建 NocoBase 插件
! M4 J! N) N# u/ i( X9 W7 q- 使用 NocoBase CLI 创建插件:. j- P4 U) Z! ]7 i. H! J# c
```bash
* `% O3 N: D' U: G( v4 e) q4 h1 I" o" G npm run cli plugin:create deepseek-integration2 Q' I0 G$ L5 s( O0 t& r0 D
cd plugins/deepseek-integration
( v8 t; Q) s$ G- v$ {& F8 Y% e ```1 ]8 d. ^2 I* Q7 q
* P+ O6 j' S( S7 K* J#### 3.2 安装 DeepSeek SDK2 u6 s- Q- o- r# w
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):$ m! s E$ |$ k+ l5 J9 G
```bash1 [5 C. W1 j7 ]
npm install deepseek-sdk8 u; |7 E) v; J5 }5 u) f8 A
```! Q1 P1 o% y; U4 q
9 ~6 s1 ~0 E7 X1 g! |; G ~#### 3.3 配置 DeepSeek API 密钥7 Q' X0 `# x, u
- 在插件配置文件中添加 DeepSeek API 密钥:
7 E" q( L5 |1 h9 H- E) ` 编辑 `plugins/deepseek-integration/config/config.json`:' J- T9 i$ O& u9 H/ O% K0 v* V
```json) Q( b( t( ]! |; E! n5 M6 V8 R
{$ C4 t% L+ w0 k1 H
"deepseek": { q' l4 t! n/ h4 v
"apiKey": "your_deepseek_api_key"
}+ e. T7 J. E$ Y& k2 v }
b3 g+ f) I- t2 ~! s }
4 m1 C8 s% o/ K) b8 f2 B ```' q2 R5 y; Q4 u. S" D! n2 D
( m7 y8 m9 I9 W( J! V#### 3.4 实现 DeepSeek 服务
' O/ E2 @- K4 {+ P* W G2 ^" } G- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
! z l# S5 p% N$ ] ```javascript1 j0 @! O; K% y& M
const DeepSeek = require('deepseek-sdk');
/ T0 K% Y, t: U5 l& a: D. K
& B; q+ `" `! x class DeepSeekService {
8 Z' x; O: @1 X$ j) |! _ constructor(apiKey) {
) G4 p8 }( `' f/ a. k( E* Q this.deepseek = new DeepSeek(apiKey);& ] r1 F% y( w Q1 m
}
. K( }5 g" A$ R4 R( Z
. W/ d; W. h* H. r8 U async query(prompt) {
" `( S2 v) u# G$ d8 h const response = await this.deepseek.complete({: z6 h1 P3 a. u {# g$ f3 u
prompt: prompt,
7 F$ c+ d; \6 H Z: q7 l4 | max_tokens: 150! f6 @1 v" K4 D# k& y0 n9 P& o
});' A) l, H7 K y
return response.choices[0].text.trim();
' W5 ^/ Q) K2 w1 R" R# G }
6 z/ j1 I9 k9 T# _/ `' P1 G8 i }
# N* `1 z/ C+ _3 m) L3 [3 Y4 @
5 x$ e1 T2 Z- n8 B3 z; E; K module.exports = DeepSeekService;
8 I- I" ]8 w5 \ s$ V8 i ```
! e7 R& ^' |' ]0 T% |# u
6 ]- n1 v8 Z; _$ a#### 3.5 创建 API 路由+ [6 ]; b' g2 H+ w, w6 Q# S
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
& @/ ~' G) c+ w6 t" s- I ```javascript
" u+ j, h% b" e5 {0 p5 S const express = require('express');
3 \: L2 G9 H7 A const DeepSeekService = require('../services/deepseekService');
; d+ N' _9 a& [5 e const router = express.Router();
$ I! F" e; r, t9 ?( l% A$ y3 t const config = require('config');
) p7 `3 @- q/ v4 s% z" w* ?+ B- N7 Y' `5 T- e. v
const deepseekService = new DeepSeekService(config.deepseek.apiKey);1 E, t3 x, F4 M' p, |) \" A
- ^9 _. g$ g: o7 `
router.post('/query', async (req, res) => {) l. m% T; `9 Z, a/ ^/ m8 i
const { prompt } = req.body;
: a6 z) @6 h6 ?9 _( ^, ~ try {
2 V4 @; ~/ D+ p const result = await deepseekService.query(prompt);
: [6 H: Q6 h- @3 r2 t0 g0 i res.json({ success: true, result });6 s& E7 L' X6 L, b
} catch (error) {
3 [, C+ X! y. V, a8 W# a) q res.status(500).json({ success: false, error: error.message });/ X$ w; E" c2 v
}
+ a" c- q! _& g2 A! R });$ U; K8 O& q# O
( Y6 a# L t' Q! h+ F4 h module.exports = router;
* x! v$ n8 z! M' ^; A7 y7 V% A ```
3 } H6 J" |, P# g. B# t! f; Y
$ g5 L9 K' d( s5 x3 ?1 M2 R1 `4 V#### 3.6 注册插件7 m8 b) t9 t! y1 [" c
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:$ m6 a( [: G }
```javascript
0 v% B% W5 D" Y9 ? const deepseekRoutes = require('./routes/deepseekRoutes');% U! S1 }+ N; z6 S2 f" P
$ K0 Z% q: y! r
module.exports = function(app) {& T% a3 O5 v; {0 G5 v4 p& A& M
app.use('/api/deepseek', deepseekRoutes);
" b& a8 E" D2 |/ B };0 b1 x" Z( J- |, x
```
1 ~7 \( z$ m1 D8 V$ s8 o- Q- N7 _2 G( z9 R+ k
---
, P0 A1 @7 W1 d, L1 @+ Y b8 W% D: D* U! v( \3 y! E2 t
### **4. 测试集成**8 g7 p& E! J' F1 |
#### 4.1 启动 NocoBase
! W3 I J% d; J: r. z" o/ i- 启动 NocoBase:, Q- u" U% l8 b2 Q
```bash
; u3 M7 r- q+ Z% ~3 I; C npm run start
$ e ~/ Z5 r% V" t: S7 r ```# E3 l% `3 K! ~. C' \
7 C0 V1 K( l3 t4 f7 H4 @#### 4.2 测试 DeepSeek API
i; V* k V* z3 K$ Q7 r$ {7 O& L- 使用 `curl` 或 Postman 测试 API:! P3 H+ r/ W* I, l, N6 w
```bash
1 d7 s2 G2 `% U- E! M% S# y1 d curl -X POST http://localhost:3000/api/deepseek/query \7 G \# B, G2 M3 t" Q2 r. V8 f
-H "Content-Type: application/json" \% u9 o9 Y) f- ]3 z# h
-d '{"prompt": "显示最近三个月联系过的客户"}'
$ S5 ], p* q9 x4 U% y0 N ```8 r2 M8 Y( c' @) ]
+ q* p& X. w# h' w5 s7 z9 n+ o
---
$ d- p8 J4 Z# q) v0 J+ \) s, f
; m* n% c5 y% ^### **5. 部署到生产环境**
' c2 h1 Z% C2 V) _#### 5.1 使用 Docker 部署 Y9 v4 D5 i+ r( G; U
- 创建 `docker-compose.yml` 文件:0 e9 r9 F& W% h' D
```yaml+ a! Q4 `+ n { d$ o
version: '3'
/ R. m2 K6 ]+ k) r; u# I& h5 Y services:
6 l3 j2 I4 V N! } app:# p- b. C4 D* F w% a$ `1 U( O0 n4 y/ l
image: node:16" m2 R# v' g J) v, T) f' C5 P
container_name: nocobase3 S/ T! J6 d: q4 L' U5 ~( P, F
working_dir: /app9 \& F [+ [: ?% e
volumes:
3 }. q1 s- z0 T' `/ d; P" g - .:/app. a$ P$ m4 W) e; H6 E7 T
ports:
& F; u' N( Y/ ?7 j - "3000:3000"2 X: ?7 G. `# e5 ~( q
environment:4 q2 l: ~! ?4 {
- NODE_ENV=production
, _7 P' ]; `/ S' b4 i4 [ command: npm run start9 U1 Y! Z: W! D, } s/ z8 k
db:( n: S/ s2 L4 O6 j
image: postgres:13& z5 G& T* C, m' F2 U
container_name: nocobase_db
! x* n5 V0 ]' N environment:
* y' i$ Y7 @! T1 [ POSTGRES_USER: nocobase_user V9 y" Z1 R$ W( `
POSTGRES_PASSWORD: your_password
, Z2 q1 f! N$ t3 j; o POSTGRES_DB: nocobase0 N/ H ?3 Y' x! r9 K2 R' K" K" o
ports:6 K- L) z5 T7 ?" e& d) ]
- "5432:5432"
" a! d2 O T0 C( X ```; g. K, J1 } @
- 启动 Docker 容器:
4 e$ ^" i1 {% M% X ```bash7 i- M1 A& g+ O0 k: s
docker-compose up -d
$ o) S e0 v1 [. f) m ```* X9 G/ e$ g# o
$ [6 e, w# n6 ~0 p: H& g( W( o1 L
#### 5.2 配置 HTTPS
) C$ n% G/ p# G1 k" {- 使用 Nginx 反向代理并配置 HTTPS:
$ ~* z8 g% z, ]% h ```nginx
& r5 r# F# K- ^) x( Z2 `8 K server {8 ^) R/ B% \) @# i# ~
listen 80;
1 P0 U6 x" |1 ?% Q- Z- V; p& L7 s server_name yourdomain.com;
% P( f2 J6 C& H return 301 https://$host$request_uri;) h- W9 A/ P' ~/ f/ G. h' l
}8 p$ e, R2 a# r1 I9 J2 k- G- H- k4 P
" b* \- l" y4 w; \- ^& ]) N+ s server {
( m+ k! L0 `" z listen 443 ssl;
) f" C5 h# e O O p9 [ server_name yourdomain.com;
- M! ~8 k1 z! h
9 O+ V: o' D- P# O5 C ssl_certificate /path/to/your/certificate.crt;) O+ ^9 j2 Q5 t7 W" T0 f4 v3 I
ssl_certificate_key /path/to/your/private.key;3 j5 b3 p0 ?5 F# p
& F7 z% f' G- e6 [( j+ Q location / {
4 N* F9 x9 ? N9 U proxy_pass http://localhost:3000;
( y+ s( C: p! r3 `" }, W- y/ r proxy_set_header Host $host;# L' {# d1 X2 [6 t2 W5 I* t
proxy_set_header X-Real-IP $remote_addr;
: T# i- }) [3 {/ c }" e! m, S! ^* T& C! C7 ?) U
}
- R$ A) I1 y+ s! O( T9 Z: v. E ```3 C2 ?& e) z3 n7 Q3 W, C& E
! K$ A7 S5 b6 u& @$ l( l---
4 ~5 `- G; Z! l+ R; I6 z0 x1 {+ Z
2 d$ L9 N: r9 t) {) d' y### **6. 总结**
; Q4 n6 P- s+ C9 a' o0 N: i8 N- k通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|