|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。4 I- K# [" {8 c+ h0 E, \- e
: Z2 B3 D) V. V9 G我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
* Q5 ^6 [/ s9 E f0 @
% d+ i7 o4 P1 T3 n- Q8 W$ A---% G, `4 b t0 Y9 Z" ~
# r$ [4 W( j4 U- j# y
### **1. 环境准备**
0 m0 P* ~3 n1 j* f0 e# y( }8 ^#### 1.1 服务器要求; w1 c. g8 {. o$ d" U1 Z$ U4 l4 m2 F
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
: I+ e& v$ X! S6 G4 H6 z- **Node.js**:安装 Node.js v16.x 或更高版本。+ K; A0 B. c D
- **数据库**:PostgreSQL(推荐)或 MySQL。
& r& ]. J [. t( F- l# q- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
* R4 {6 N, `4 q& H& c) D: t( y7 W6 M j# u
#### 1.2 安装依赖
, E5 B$ V Y4 G' T$ z ]4 T! x- 安装 Node.js 和 npm:
7 W& O# u* \) X. X* X( m2 w5 q ```bash
. j( N# X5 Y ]+ ^; v8 [# a curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -2 {6 u7 }. [ M# I y# ]) A- O
sudo apt-get install -y nodejs4 l) H- ~/ ?/ M1 S% E4 V3 Z
```! }) _. p% Y4 D# }9 F
- 安装 PostgreSQL:
0 w8 S& n+ x( @: N5 b ```bash& o; t/ w* i/ u( H8 A
sudo apt-get install postgresql postgresql-contrib
; B% D1 b' g! ?/ L s9 V sudo systemctl start postgresql& ^, M# q, ], P! E
sudo systemctl enable postgresql
3 a2 S9 q( g$ \9 L0 L ```
; H4 r1 ~3 D0 m$ K) t8 u* F4 v% r1 [/ _7 W
---: U5 o! ]% q3 W
: K% C) m7 T' w5 L
### **2. 安装 NocoBase**
0 l& [" o9 t' R" Q$ ?' ~#### 2.1 下载 NocoBase0 M4 `/ d, w0 u3 p0 A, k. [
- 从 GitHub 克隆 NocoBase 仓库:6 a# v- {/ ^: Q5 u- z3 v
```bash2 J" H8 \$ G$ |+ L+ Q
git clone https://github.com/nocobase/nocobase.git: `9 }; \& {5 H$ Y; e( z" N
cd nocobase
/ P! T( F% P7 E8 {- ~5 X ```
W" t' L5 Z) K3 l0 u+ K, X8 l( u4 ^& R' a' l9 v" ?0 ~0 Q/ k" D
#### 2.2 安装依赖, G; d4 m: D) |+ J
- 安装项目依赖:
5 q; R" t: A# `1 u ```bash
% H* u; e% p+ o' } npm install1 \; D" f% F! @" a& f
```- Y. h3 q- k- F8 D: {# l
- h D5 W3 l% A2 v s/ J
#### 2.3 配置数据库0 S: [; }4 G4 R3 \ f
- 创建 PostgreSQL 数据库:: j L8 ?- s4 S( ]; ]# s$ y8 v
```bash3 c, ?/ q6 u9 W/ c* ]5 d
sudo -u postgres psql" j+ x: @; d' X
CREATE DATABASE nocobase;) x. z* u* C8 @$ N% `$ J
CREATE USER nocobase_user WITH PASSWORD 'your_password';8 U( w/ i& @8 \, F8 Y$ v3 S
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;. e8 ?1 n7 y, s* q. p
\q% L) C+ \* c F
```* p8 e: R* w; A1 _7 F( v p1 r7 R. ^
- 修改 NocoBase 配置文件:
% L4 Z a( Y' r" y, p 编辑 `config/config.json`,配置数据库连接信息:8 D5 \* `6 G F2 M: C
```json
8 O1 }! P$ n; e J8 {" {1 } {
* I$ ~' R5 s! K$ Z0 E "database": {4 d6 P7 `. I( G! t" o( U
"dialect": "postgres",8 S- Y' l" k2 Y( _" u# L# Q
"host": "localhost",
( J- m' F. g" `3 `$ M% W% p "port": 5432,
( T2 s' g: L- } "username": "nocobase_user",
. J4 j4 Z; c$ t4 {, ~ "password": "your_password",
3 |$ \" C9 X1 @! y" d- i "database": "nocobase"7 b5 r5 l6 Z# t. r% D$ s
}. ]* ] b. u) Q8 G+ Q5 [* x u
}! X+ h0 H3 v/ @
```
7 e! w5 V8 d ^! ^8 l6 K
, C# S" C& G) O E* |: ^#### 2.4 初始化数据库! |6 d* e1 w, B, k5 D4 M
- 运行数据库迁移脚本:
8 N( c/ R6 z; G% |9 Z ```bash
+ X+ ?6 C8 @* t7 i" Y5 F npm run db:migrate
4 K+ n% [8 _! a7 } ```
5 l, U& k T( T* P+ L: \3 N
* L5 P" t) {* p' x3 l- X9 J: y4 C1 `#### 2.5 启动 NocoBase
- N+ y- Y# W) ~6 A, x- 启动开发服务器:+ y4 A' A! K1 g. s3 ~ G
```bash0 a" [. \% U+ I# B2 L. I2 T
npm run start/ i( L& e/ t5 ?) U- `' m- Y/ G
```3 l8 r3 S0 Z4 U+ s$ ~( Q
- 访问 NocoBase:
) _7 T( K' z. X! I 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
& M7 `" w' e# D# {. w/ r* n* t4 C* ?3 m8 n2 V6 b) s
---$ A* `$ T. U. G# P! j6 r. z
1 B1 ]9 E: o1 T7 d
### **3. 集成 DeepSeek**# [/ @/ z3 D8 H/ g
#### 3.1 创建 NocoBase 插件
2 G. Z; G# `6 U- 使用 NocoBase CLI 创建插件: ?! o# @+ a/ s/ Y
```bash6 h2 o& [' C" O+ g
npm run cli plugin:create deepseek-integration2 L: m/ c m( M( k/ a4 @ B8 G7 u7 \
cd plugins/deepseek-integration: E7 V& P E& s# c- Z: l, O
```
3 s7 I7 Q" X; ]. ~+ G" Z
$ h( r3 X6 n/ u. w3 J: Q0 u0 l6 \, i1 Z#### 3.2 安装 DeepSeek SDK9 x8 P8 P' v6 M: x8 @
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
& Q; i* e" Q5 u0 h* Z% j ```bash7 a2 B2 V/ R& ?
npm install deepseek-sdk, A* P" u) S( K8 h$ f9 Q9 w( Z
```6 Z' ^6 x/ b ?" ]* y" V' q# l
+ D. c7 j( Q; Z+ Y/ E2 i
#### 3.3 配置 DeepSeek API 密钥3 h# F; z2 k$ E$ f e0 R
- 在插件配置文件中添加 DeepSeek API 密钥:9 ^7 L/ `" _& X8 {4 B. B5 A: \0 l3 ^
编辑 `plugins/deepseek-integration/config/config.json`:8 K" b2 A9 T R& R P
```json; w9 `" K9 K/ D) o
{' s4 L& C; P1 Q6 X5 t! F; S- j
"deepseek": {
- ^. E( |( J R2 V2 k2 p' { "apiKey": "your_deepseek_api_key"0 Q$ `9 V$ O5 N! [3 J' s6 h! e
}+ F2 u! H2 b+ b- H7 X+ i
}& \& i2 D c7 v3 Z; Q" ~: Q% _, ]+ [
```* |6 q, g9 y: Z# R6 s* N8 p
! ~" |9 @6 W ?/ i; _
#### 3.4 实现 DeepSeek 服务5 l4 C6 }! L ]; X
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:0 F, x- W. n' j+ H [; W
```javascript
/ p8 x) R. G1 L6 q* V' j, } const DeepSeek = require('deepseek-sdk');5 M+ o7 X, J% z" j3 G, H4 n
7 F7 z1 F3 n8 c class DeepSeekService {$ j" Q% f8 O8 c- g" r# a1 K& Y( N& Q$ I
constructor(apiKey) {
$ W3 L5 m3 r* q7 g& P this.deepseek = new DeepSeek(apiKey);8 U4 x' n3 `5 v' x9 V2 K
}0 d$ H0 L3 }+ K
! l ]: _6 ^6 p4 I7 u! h. s async query(prompt) {
3 [3 v9 d2 {, y9 R const response = await this.deepseek.complete({) t# @9 V1 g" h2 T
prompt: prompt,
, g- O) U' r. L* G) t+ d max_tokens: 1504 }/ n6 x7 C. T$ ^! W' W* f8 _# k
});/ ~& Z8 j8 @' m$ A
return response.choices[0].text.trim();$ B7 t3 G4 Z2 H- Q! I- ]
}; G* s; F& x' ~. m* q: e, ?- B
}
! |! S( {$ d k3 ^0 U" N6 z G' a: Q! i7 [. y! C6 Z
module.exports = DeepSeekService;4 w! \5 @( r7 E' V7 c4 G
```4 \& _% H5 p/ V5 L2 J
% f7 q, t" R. ]+ @/ [#### 3.5 创建 API 路由3 M9 Q7 y5 X7 G) L( j- e. a' ^6 h% j
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
( @! [) @5 X- Z+ W8 b. k ```javascript
. L7 X* H5 j2 I s( Y const express = require('express');- V6 l a8 O( h7 \+ J6 S
const DeepSeekService = require('../services/deepseekService');, I) n- C' N& k/ R& l
const router = express.Router();
/ q5 d; A0 m. D- I9 B const config = require('config');
1 W% O) p, B# e! L6 `. D+ W: H" }7 A# X6 J u0 J( q
const deepseekService = new DeepSeekService(config.deepseek.apiKey);4 I; `2 `% J# M; b
" W# S# {& V7 ^( c. ?: F6 q router.post('/query', async (req, res) => {
6 s0 I. U6 r" } const { prompt } = req.body;# b; K+ n; k9 J; i4 I
try {
5 }4 f( s* s- k6 X( T const result = await deepseekService.query(prompt);0 H- |2 w9 t9 e% r+ c. o
res.json({ success: true, result });; G8 g* x+ Y3 W. g0 g; ?( f2 @) I$ i
} catch (error) {& I8 C8 ?& y0 c- t3 y, d
res.status(500).json({ success: false, error: error.message });
/ T) l5 X+ D s; h% ]* P1 E }
F: {3 X/ Y2 H" c9 m! O });% m6 p. z3 \8 v, \
* u2 p; ^4 L' b8 M0 z module.exports = router;. R b8 D3 t) V
```! `" |2 z4 y5 N4 F6 t; c
' t4 ]2 B' S; h6 c2 F( m#### 3.6 注册插件. P. u4 W0 d. q; J$ ]6 l
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:1 s' ]- Y) q b
```javascript
j% n+ l; H% D7 z& X2 F const deepseekRoutes = require('./routes/deepseekRoutes');( I" q5 \2 j/ l* S# L4 t
6 r0 J8 u/ r5 C0 t: J- k4 o" F module.exports = function(app) {
2 w; m3 A1 _2 u0 u# U; ]+ A app.use('/api/deepseek', deepseekRoutes);, v& O; u3 K+ ^4 _. f+ L
};7 n% y" K5 A* R5 g" `" V* {
```% A8 W1 d1 ]" |- Z: W; ?
+ I) m# i! x/ J$ S8 u' w X---: M% [2 g# U, d: t
, v6 B. D9 U8 _& l* N
### **4. 测试集成**
- ?" ?0 T& d+ D#### 4.1 启动 NocoBase
* Q, O( S' e- w- 启动 NocoBase:
* E; c7 r2 G& y ```bash
9 Q Q0 ]! n3 s% J P npm run start% k) m. r8 u+ D2 I# f
```
9 x, @" B# P+ V/ G, B& |
5 g8 y7 k$ I: I) Z {#### 4.2 测试 DeepSeek API: R& n3 b+ ?6 n& ~5 Y' h/ Q+ _6 y
- 使用 `curl` 或 Postman 测试 API:. E; ^9 G! y- Y# E" c
```bash K; z* Z+ d5 H6 \4 z7 r. T- F' _
curl -X POST http://localhost:3000/api/deepseek/query \9 Z, s# g% P; a: c& m/ e7 i8 e5 w
-H "Content-Type: application/json" \
a; ]. Y4 x! {* b -d '{"prompt": "显示最近三个月联系过的客户"}'
. N) i2 l; p" q" ` l7 w4 F ```$ ~( E$ h# ]! O# Z
* _- r" K! V4 E" S& r" P---
% Q. S5 s7 C8 z& A/ ] }& x
8 E+ y5 o$ K) k### **5. 部署到生产环境**
: B+ t+ R/ @) |! ]& t! R# }8 ~" U#### 5.1 使用 Docker 部署
& H: m/ ?7 H/ t6 w1 B- 创建 `docker-compose.yml` 文件:
1 _3 S' K' b- i1 z# _ ```yaml' ?/ d* p: z8 h2 F
version: '3'
5 U& }& d. W' f7 @2 S services:5 R- K. {, X$ U% x9 Z
app:
0 f) Q* M0 E) Z0 L6 P7 C; q* F* v image: node:16
. f/ f9 \, K) a9 Q0 C: [ container_name: nocobase
9 s4 H. E) r" ]% h working_dir: /app
7 w/ d3 \" p Q* t! _+ _ volumes:
% _2 D' i0 M& L: o% v/ G: t3 ` - .:/app* U& W# M) m7 G# ]0 v9 s7 R& [' |8 `
ports:
! ?6 ~, F0 \7 j" ^/ s0 D$ w/ [* R7 { - "3000:3000"2 N/ ~1 N. h9 w
environment:
/ z5 M) t! g5 m% D" a3 K - NODE_ENV=production
" ?/ `$ w5 q" ?" E command: npm run start
. J3 B- h4 x% h5 r" W$ w5 E db:+ [' g i H. q! \
image: postgres:13
, @' `" i7 \1 {% T$ a+ } P+ N container_name: nocobase_db b5 @) `# \4 Z
environment:
+ @/ O. c% u& L% [# a% ~- c; |* H% `0 l POSTGRES_USER: nocobase_user7 v, `8 G+ s' V. M2 N7 o3 G5 q: M
POSTGRES_PASSWORD: your_password
: @. P! W X0 x+ [ POSTGRES_DB: nocobase$ k8 q" x9 [6 z- Q$ P
ports:* A$ z8 ?5 H( q% L& N
- "5432:5432"
9 l" q' `9 f* [% m& c ```
% P* D1 k* W; O' c6 R% c% M- 启动 Docker 容器:/ U. q' A3 R% {" d) t5 B
```bash
( \1 u: d% O; M! n% d6 F docker-compose up -d" Y3 h; k8 H# K( _, X* x
```
& `/ \$ o' h) b) {, O' [% k/ C1 r" q8 L' C
#### 5.2 配置 HTTPS0 v1 y" _4 g4 _
- 使用 Nginx 反向代理并配置 HTTPS:
+ a1 y$ Y! ^8 T9 \% c1 r ```nginx% I$ H3 _: S% L3 W
server {
. f+ E1 _7 \% B C% T7 D listen 80;
4 N R# `& R: Y server_name yourdomain.com;0 I1 C+ h3 }3 E5 b' i; f7 Y
return 301 https://$host$request_uri;
; _/ `7 i7 i) c9 U. B }& }- @$ @3 U8 y+ q) ^) E6 M
8 A% e4 I& j R4 C: ~+ w- |2 T server {$ s% S! ^; g- G. D9 f
listen 443 ssl;
& N: R% w$ {' `3 C! m- A( n( i( S% g+ L server_name yourdomain.com;% |. a) q7 _! b' a* ~
7 E0 t$ C- I* ~) |+ | W( H. a ssl_certificate /path/to/your/certificate.crt;
% n% _- V1 a9 G# a9 V$ y3 W ssl_certificate_key /path/to/your/private.key;* j# A: E( [# a* s3 y4 K" c M& T
$ R5 w( t) X: K. K3 i& |5 x location / {
7 a2 N' V; E0 i7 e# h; u proxy_pass http://localhost:3000;
8 b$ w3 o0 x$ `! \; ^4 v proxy_set_header Host $host;
' p5 {5 B+ d* e9 d2 C proxy_set_header X-Real-IP $remote_addr;
% I" g! n( [) _8 l4 _" f }% O! W5 S7 {6 O F8 o' Q, @9 O8 Z
}2 p+ M$ T$ B( r: H8 ?$ X: _/ w: x
```0 E! s. Z& q. B: c) n
* p8 }" @. Z0 w. W1 }---
3 H( R8 ]/ e% ], k4 T$ x# V7 q/ _1 C# g* G" p. y) D
### **6. 总结**
2 C y" F; M% q通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|