|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
! f _2 x3 C4 B8 v5 G
* P$ `2 X% j; J我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。# ]5 E+ O( o4 ~( r
|& R: U% B) ^6 D& H---
4 D1 y( X0 ~# F2 U
: w- Q# k3 r; @# C1 c### **1. 环境准备**
) P3 i3 ]3 B, j8 B#### 1.1 服务器要求5 z( E: t+ [* g; _8 j" N
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。. }/ l" Z/ M+ A5 `
- **Node.js**:安装 Node.js v16.x 或更高版本。; I: s7 O. I( N) }) [1 \
- **数据库**:PostgreSQL(推荐)或 MySQL。
) g: P5 H$ E8 b- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。( n1 L3 j) ~7 g. l) j& Q
! x7 }8 F6 Z" l M0 F+ [$ |: [#### 1.2 安装依赖- |0 W- h: g1 E
- 安装 Node.js 和 npm:- t2 C6 Y6 k q, c& S
```bash
1 b4 u6 k; M0 `0 E curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -! T. T! L. s: O6 [( h- D4 ?7 p2 r
sudo apt-get install -y nodejs
4 [+ P- K/ S- a5 I( A2 e ```
/ R3 K1 |; e) Y- 安装 PostgreSQL:/ y. S2 b. C8 z P% R' H
```bash6 C; c% M8 @0 X! u# y5 n
sudo apt-get install postgresql postgresql-contrib6 ]6 O; ]2 q- u
sudo systemctl start postgresql
8 e7 G+ C; T; ?1 j; P sudo systemctl enable postgresql6 Y/ D2 b. l/ I/ v
```
- } @+ Z- W2 ~3 v5 d: H4 e
; A) V$ Z! z2 ~/ w* C* ]---) U" F, V( Y6 h$ {% k2 v. A: Z1 J
4 Z0 O- e$ j s; P; _* c### **2. 安装 NocoBase**
* n5 x. l2 Z6 {; H7 y0 w8 Y( i#### 2.1 下载 NocoBase9 t8 Y' {6 ~7 c
- 从 GitHub 克隆 NocoBase 仓库:! n m8 |: p6 g( s
```bash
8 P5 ^. x1 R) o. @ Y6 A git clone https://github.com/nocobase/nocobase.git
: u: L: q1 _, m& n" N cd nocobase2 F6 A1 z! k. i# A1 Z7 i! {
```8 ~1 J4 j3 R' Q: S8 n& |
, @: K5 U; Z# Z: z5 `* ]#### 2.2 安装依赖
! i3 U8 m6 S# w& }& x0 q- 安装项目依赖:1 {" k, Y) Y2 E* H
```bash
) o9 Y* U1 O3 Q4 a4 u4 W npm install
8 Y7 q+ p% d# w: J ```* l. V) M5 r9 l' w- U/ A5 W' b3 B
6 |" |7 k% y6 w, g7 `! v2 ~# x! t
#### 2.3 配置数据库
; O# s. S* i' ]+ T! b- 创建 PostgreSQL 数据库: [) @$ B4 [- i- ?6 t
```bash
$ Y! V* z4 r1 B( [ sudo -u postgres psql
! f7 H7 S/ f( ] CREATE DATABASE nocobase;" D) G/ X! Q; R6 y+ p% C" G* ~
CREATE USER nocobase_user WITH PASSWORD 'your_password';1 {+ B2 V: ^. S" t d( J# |# J
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user; Z& k. X& J( S
\q
. O i5 w0 Y5 |" Q& O( S ```
; [2 C# I: \8 G) _' @7 a9 W- 修改 NocoBase 配置文件:
8 X9 C- M" v# ^! {# Z) V 编辑 `config/config.json`,配置数据库连接信息:
) k) K, v* a& Q& N" ~) \" x0 v ```json( e0 B3 T' q @7 I, Z
{8 i/ ^( O6 }2 b7 V8 m7 Q4 m/ R
"database": {
7 s `/ V/ E; P( S2 I- \ "dialect": "postgres",
6 d& d2 e4 l5 }, Y0 n "host": "localhost",
( b/ P0 g# p( U' Q0 i "port": 5432,
$ j1 F( v8 l4 R, w& S2 t "username": "nocobase_user",
+ j* v E, l: @1 \/ X "password": "your_password",. f: P) |6 p+ p2 ^, b/ s
"database": "nocobase"
6 Y' d1 n# o7 r; P, `* V7 a: t; t }1 i* C, N; Y* t
}
% b' M# o' X5 C! E |2 } ```
5 E/ u: g4 x/ K. v, s
1 b( X- |& O( {$ l# |#### 2.4 初始化数据库/ l9 V1 c% [" C/ |" ]
- 运行数据库迁移脚本:) _6 g( g8 e) A4 C5 q
```bash9 L' X! w* J. q- Z" k9 b+ t
npm run db:migrate# ^2 R5 Z) }+ y0 ?4 T: e7 l* M
```
) D- A; L, F& w3 K7 b3 r: Z+ ~ X: T* _4 @* h7 d
#### 2.5 启动 NocoBase
7 C/ T1 a9 I& `' C, ^- 启动开发服务器:
9 n) Y2 t' }6 O" x6 L ```bash5 q! _. i5 m+ F/ z
npm run start
' T& \' N6 n$ \& \ ```
- l9 V5 f2 U8 P8 Q9 E2 d* D- 访问 NocoBase:
: Y( W" K: o: g9 E" T# o2 I 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
# k$ ^% M: H: x& t% q E) F5 R# P1 q% v- J! ~+ v: e- \* d
---9 ]# l1 K2 v( Z4 M+ ]% L/ V
/ q ^+ R# f; Z1 f### **3. 集成 DeepSeek**& q+ W- D8 R: p2 ]
#### 3.1 创建 NocoBase 插件- T2 G0 w0 F# c1 g
- 使用 NocoBase CLI 创建插件:$ B$ Z5 I& Q" p* x7 H4 Q
```bash
: v7 E) _2 R9 @7 i( Q npm run cli plugin:create deepseek-integration$ x- c6 H5 {3 _
cd plugins/deepseek-integration8 f4 A+ Z9 M- \, ^
```
# `+ b; A3 n) f- | k$ o: l1 S' w: ~
#### 3.2 安装 DeepSeek SDK
1 Y, e8 D/ s# u7 M- ?' V) n- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):" o1 H: N( N$ ^% D
```bash
# M9 i& f3 U$ D/ v; v! \; q) p npm install deepseek-sdk, M2 O1 `2 A. c) O4 n# ]
```, l I) Y- j0 |* ]+ j! E2 P
$ |6 u6 q7 n( R7 k% n. ^
#### 3.3 配置 DeepSeek API 密钥, ^' g' e7 B' G& W5 K; l# S
- 在插件配置文件中添加 DeepSeek API 密钥:" Z) |+ M4 F( _7 w7 s1 o
编辑 `plugins/deepseek-integration/config/config.json`: [ ?& l9 a7 j% N2 w/ G" D
```json/ N# z- `5 c8 s2 q) G
{
+ `) e9 \& ]& g$ Z) e( E9 k) N/ I "deepseek": {- d, Q# d! H# {( b ^; i
"apiKey": "your_deepseek_api_key"$ H {" ~' G6 [4 g
}
4 u2 ^% k& B7 a; E! C1 h) P. a }
. T" Z& B: C" V5 `( ? ```- T) g& X+ E' ~+ P" p5 k
* L7 U9 W+ U5 h% q! |5 H#### 3.4 实现 DeepSeek 服务; t+ o1 m- y0 c* |# E9 w! m
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
$ C% {' Y6 Z$ O# T& q9 d ```javascript
& e6 [3 X( |9 `% w* Z/ b const DeepSeek = require('deepseek-sdk');
, `9 ` w/ p+ G6 j" B0 T1 | A' n5 y
class DeepSeekService {
4 z) t9 u$ e& D- F3 ~# N$ U! [7 P& Y constructor(apiKey) {
$ e4 l. m; F4 d6 p9 N. e9 v this.deepseek = new DeepSeek(apiKey);
m, T/ d/ W! [" ]6 E" ~ }" ]/ O# c% q/ k
8 g W6 S, F; o async query(prompt) {/ T1 r; ?, R+ j z/ P
const response = await this.deepseek.complete({
/ {9 a8 g D: A8 Z8 v: |1 K: E prompt: prompt,% p8 |% w6 y/ L# ?( Q: Q1 w6 O- i
max_tokens: 150
/ B3 h/ @& h, y& j. Z. a) z. N });7 p# j4 d/ e$ Y6 q p- w
return response.choices[0].text.trim();
9 c9 X/ ~ t' b. P3 h0 M }% s1 `+ G5 t! Q) n+ n1 a
}
! h8 _, ~$ C8 X6 V, |% k" h$ f7 I& d4 E- F% [$ b2 z: C4 D7 y- T" A
module.exports = DeepSeekService;
, ^5 s6 A2 P1 x, R ```# H! D; n# }' I1 D4 @
# m9 L5 J1 x1 m! J8 Q* N#### 3.5 创建 API 路由
- R. s1 p- z) A- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
# ?1 `, R& t9 \$ Y$ p ```javascript0 u" D( W+ B5 r$ ^; }( Z3 l3 M5 K
const express = require('express');
: P. z0 H9 C& u& S# L const DeepSeekService = require('../services/deepseekService');
: w. j6 q4 k4 J: s: P, b5 q const router = express.Router();, v/ s# e- N0 s7 ^2 h& ?
const config = require('config');8 X: A# m5 {5 K, _
$ g' f' D8 S3 j% ^# @
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
5 I: L$ d, ]$ l: Y# W O
- p7 |; j: ]( M6 T) j router.post('/query', async (req, res) => {. u! N3 J) {# ^
const { prompt } = req.body;0 O7 y0 [3 T& {) Z! l0 y% w. Q
try {1 M, f7 a D% i8 N/ R0 i: |
const result = await deepseekService.query(prompt);, V3 c. w* z7 j
res.json({ success: true, result });
6 e# N8 F) d3 b' D' j } catch (error) {
* G6 q X2 X1 z' _( r* x res.status(500).json({ success: false, error: error.message });
7 X5 |2 D+ t, G3 c' r6 { }/ O$ ~( l1 N" S' e6 t9 p
});
% b; u6 v" i* b/ y j& o% K: f
# d6 y; \' x$ T; i module.exports = router;
4 p+ X% o2 f/ g: g* y- } ```
3 {: L& ^1 r8 c
) |8 p) P8 D+ ?6 G& M#### 3.6 注册插件) k& X5 Y+ ^( |! e# j2 F7 H A
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:7 T. ^6 o+ v% N
```javascript
: k- {" N+ M% ]0 P, p5 h! y const deepseekRoutes = require('./routes/deepseekRoutes');
- O1 |+ L, c7 H3 E8 T- F0 E8 \ D" v8 [9 C6 G% ~: h: e8 U
module.exports = function(app) {0 P( _: D: T7 d* s
app.use('/api/deepseek', deepseekRoutes);
, Z# I5 @3 w) U& i/ B2 K, H6 K };5 G* `4 L9 b" Z. ^. X) R
``` O% f4 J; J" a5 G% [4 o& p
& u& _6 A$ y; V: I& a5 V
---
& u3 P: A6 Y% h
- e# g! m% {/ U4 o( W### **4. 测试集成**( t4 M; {, ]/ }' N; l7 J9 R
#### 4.1 启动 NocoBase
9 Y2 J, F5 p. e- 启动 NocoBase:& t: L' | Z( {' a# {" ]# O
```bash1 y |3 y+ P! c% w+ B
npm run start
$ k+ Q- B$ Z0 g6 s% x ```
1 q X' C5 ]/ b+ |- U3 N A
9 }$ L& @' u1 D4 v/ z6 n% A1 }#### 4.2 测试 DeepSeek API/ J. q6 m3 K7 D! g0 X8 x9 x4 c% \
- 使用 `curl` 或 Postman 测试 API:+ |9 R4 z# e( m) t! o- m
```bash
: W7 w: k' }( J6 c9 w, S8 \ curl -X POST http://localhost:3000/api/deepseek/query \1 y7 |0 b! ?, K
-H "Content-Type: application/json" \% U$ h+ M/ v4 s$ U& j7 j/ u
-d '{"prompt": "显示最近三个月联系过的客户"}'0 [7 e) T, D5 Y7 z* |
```! D- T# l( `$ m
! @3 P* z- `; e& Y
---# a9 ?* O" `6 U+ {$ n6 B) v
! x Z# ]- F7 ]3 b4 ]/ y### **5. 部署到生产环境**
* g, \1 n4 N) ~' O6 T#### 5.1 使用 Docker 部署
$ C$ J: N( r4 v, g- 创建 `docker-compose.yml` 文件:$ t' [" I% T1 {8 F- A
```yaml5 s6 ~, G% Q/ y1 P
version: '3'
; B9 }$ D4 E* F/ ?" h1 k" B) s services:
0 T2 R, x Q% D) ~8 a app:" S% @4 J0 S! q; V2 ^( w. N+ \
image: node:16* O3 Z/ p2 |* v: s
container_name: nocobase
' ^6 u% [8 C0 w* X! c2 ~ working_dir: /app6 q& Y; V1 n/ E- n( ~- E
volumes:5 z( c, t3 _& ]! I' y
- .:/app
$ M) l% \8 Q4 o# d" ? ports:
$ v: D l0 C, f2 f+ ^ - "3000:3000"
8 c, c* Z |0 u/ f# Z) `4 _+ v environment:' i& ], y% I( X7 v8 y
- NODE_ENV=production& a: P7 i6 J* M$ r; N( c
command: npm run start
/ s: C: z& j# E& a0 J db:
]7 C- c* U( B* F* b3 a b/ z2 W image: postgres:132 p' Y9 x o7 h9 Y# ^
container_name: nocobase_db/ \/ }* t# M, Q' w6 y. |
environment:+ ]% f# d, R/ n) u! b( i5 b- D, j7 L
POSTGRES_USER: nocobase_user( Q; j* ^6 @3 |8 u& T1 ^7 e
POSTGRES_PASSWORD: your_password9 G: M% Y. m) d. u$ E! M
POSTGRES_DB: nocobase
7 I+ C7 F3 P) J ports:
4 ^) u* [6 z0 l/ _ - "5432:5432"
7 G9 U! N- e n k$ G ```
4 N4 S/ m# O( D, F4 O7 t- 启动 Docker 容器:
% c. E# J9 U- J ```bash
3 V: E+ b" l& I. E/ r docker-compose up -d" |9 Z3 P/ \9 W: T# `; b
```! v6 t" Q5 T' P3 [; p
& h' U1 x& d! Q5 |% b$ G" n
#### 5.2 配置 HTTPS. q# k7 w- f& H! _8 ^4 }( W3 W v' |
- 使用 Nginx 反向代理并配置 HTTPS:& X. ?. S4 x; e2 |6 U! A
```nginx0 B7 ?& u: {/ r4 q
server {
! \( e5 \' E/ I6 k2 g listen 80;
5 W( o5 m( n! Y @2 s' [* J server_name yourdomain.com;
! q6 H5 w7 h9 y/ ^. t9 v, E return 301 https://$host$request_uri;3 f& Z. w, P; I( E! N8 K# D
}
& q$ {) H1 y8 Y" a9 O+ H! R2 O* Z1 O3 W: I# F' O/ U7 x8 w
server {
9 ], S. |9 x; H( H listen 443 ssl;
1 X% Y+ _% S" B" G7 j7 J) {- C server_name yourdomain.com;1 |- v- w) f+ m( c! e" K
+ v( a. k1 X- q% ]$ T
ssl_certificate /path/to/your/certificate.crt;2 n X& _3 l- n! o; W0 ^* Y
ssl_certificate_key /path/to/your/private.key;
# z- I8 L5 X, `9 @: a" {9 ]
$ ^+ K' o; j, Q! @: O; B, W" A R3 Y location / {" T7 j' P( v/ }% M: f* i; i
proxy_pass http://localhost:3000;
8 i- L3 ^9 R/ r8 l! ^ proxy_set_header Host $host;
0 |( y( R! u/ Q( u1 p! D. y proxy_set_header X-Real-IP $remote_addr;
1 I6 s: d) ~6 {# L }
) c5 |1 j* v4 e, Z8 K+ d( N }$ N( M& V* p) m" M z
```' P: h" g9 H9 v5 c: @2 C9 S
1 T" n. \ ^" S; a6 _( c
---* C0 @# ^" E; r$ U& {2 D5 h
9 I& m/ \9 P* O% H### **6. 总结**
9 v+ J# n% E/ u8 }9 j通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|