|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。' ~ T2 W0 J- n; E+ ^- l. r) K
7 C* n5 q5 @6 r# r6 _7 G( U9 k
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
( F/ }4 W, T+ l1 g& a3 K7 c
0 {* o! T: e, `( d G3 [8 P" t---9 O' e4 i1 {$ i& d2 @( O. D
1 u0 x- C3 T' n9 Z" l! I; r
### **1. 环境准备**' T4 Z G2 d0 ]2 E+ I) S
#### 1.1 服务器要求
+ {4 o8 D+ L9 U0 ~3 S" p- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。 Z! E( U9 J4 s8 r0 ~
- **Node.js**:安装 Node.js v16.x 或更高版本。
$ w* ~% L+ y3 L# ~- **数据库**:PostgreSQL(推荐)或 MySQL。$ m0 I) `! G% ]6 ^+ p
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。" a$ R% J# P) Z: n
3 ?8 J! U0 ^! m7 K' D @- M$ u#### 1.2 安装依赖
$ w9 y1 b* ?0 F1 f9 X5 x- 安装 Node.js 和 npm:
2 g* ]! s6 [! s' E ```bash( ^& a+ A" P$ @4 R4 l+ W
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -3 K% v/ n1 a; c
sudo apt-get install -y nodejs9 ]! q6 \$ U" i# y8 R
```& N, n7 P/ h2 ~& [$ h0 B
- 安装 PostgreSQL:
3 C. k( S4 P1 V; n6 J. d ```bash
' b# @" \( }$ ~, g/ Y- g4 l sudo apt-get install postgresql postgresql-contrib$ r ]' j" m7 Z8 v- K) T
sudo systemctl start postgresql
$ @3 |( P2 h$ e5 O sudo systemctl enable postgresql
1 H. H& ]: g7 J+ X5 @& ] ```
D% P; X- D" u0 c8 s4 A' T# _, M+ H9 L/ e6 F" W0 \( {# b
---
/ P8 u% B( C; Z4 [9 r. J) R
. m/ c% c! Z2 ?3 A9 ?### **2. 安装 NocoBase**$ g `% h' T. S* E. \- F
#### 2.1 下载 NocoBase$ T7 Z+ O- {) U- P) \3 f8 ~ P3 ~
- 从 GitHub 克隆 NocoBase 仓库:
, J( X) s' c$ } t5 W% [3 U6 ` ```bash, C1 \$ z2 z' f- B2 z% f7 e) Z
git clone https://github.com/nocobase/nocobase.git
$ \. n9 m! N: j( v% X cd nocobase% A* x9 _5 z! [ q3 i2 I
```) p' n3 l0 K; E- x
1 j7 K r0 y9 g#### 2.2 安装依赖4 N& f8 u& j9 t/ Y, o! ]
- 安装项目依赖:9 @' A- `9 m, v7 n
```bash& e) M+ R3 c7 U" D' H8 T# C( o
npm install
/ d* V' R3 u/ \0 I- d ```
Y, w: h7 G. W- t. C" r" ^1 \2 s+ n4 s+ |
#### 2.3 配置数据库
# {+ ~6 \2 h) b3 ~ N- 创建 PostgreSQL 数据库:
+ H+ u* R$ K6 W6 w! o ```bash$ K3 W5 n* m5 k4 R
sudo -u postgres psql
9 v* @8 h0 z$ d2 L% L) w CREATE DATABASE nocobase;
" L5 A+ L$ _5 l9 C- J U CREATE USER nocobase_user WITH PASSWORD 'your_password';% w# N; _5 d8 `: G6 k% G; Q) E+ m
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
3 E. ^1 F" y F4 T9 v' L9 f/ y \q2 g7 A$ ?5 @/ |# F2 ^% H" |
```
3 ^3 K9 t, v2 c6 I) n$ _- 修改 NocoBase 配置文件:( s5 Z. d1 r8 G! a+ g" I U( C; m
编辑 `config/config.json`,配置数据库连接信息:
9 }* b6 p- K* S% Z6 N: z1 {8 A ```json
- F3 W( j6 ~) v) e9 S' H! w z {
; L/ o' @: w0 g P& g "database": {) l: K" U# w6 N4 y7 T& p
"dialect": "postgres",
% G z& I8 l* m "host": "localhost",
T% u& p6 ?! t" l7 c: D$ ?0 o "port": 5432,7 E$ f" J, m# S7 M# l
"username": "nocobase_user",
, u" Y) ^6 i7 B) V "password": "your_password",4 K* i- ?. x, X U+ Q
"database": "nocobase"
, j' ]& ?% w3 S3 Y7 g }$ O) E: F! N$ N& r) C6 ~
}: n$ ?% L% r( ^3 ~% k+ Q5 g1 N
```9 Y U. N! f$ T Y Q( Y
$ \( E; x6 b$ Y1 U8 X# O* u& ]
#### 2.4 初始化数据库
2 h7 J) o6 J2 P6 ~4 K7 J- 运行数据库迁移脚本:
% H9 ~3 V% g: F7 k6 Y/ d ```bash
! M, g, I# M$ t$ @ npm run db:migrate
1 r) b, U' D* {/ m! x9 N- ~! x% r ```9 O3 l% f4 {8 s) y7 \( p
( r) E0 M; u3 q2 [7 n
#### 2.5 启动 NocoBase
! Y: J& _& l C" @' O6 F' D* X$ v- 启动开发服务器:9 |& m3 W1 V! L, m9 B% h4 Q8 ^) [
```bash- D& |, m! D- ?. M
npm run start
% k3 m( O% H: |3 u4 D( W ```
' C, i+ i" f! U- _- h7 I- 访问 NocoBase:
1 t0 I' ?: F4 t4 r; @! x 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
# H# j$ J V8 k0 M7 T6 i) d
3 z9 Q) F0 h1 G8 X' K! {: p4 X6 P: u---
% k8 S: b/ Y* X" u. T( w- F& B6 o. ~1 A
### **3. 集成 DeepSeek** ]9 C$ H. _- i& ~$ c5 D
#### 3.1 创建 NocoBase 插件0 a# [% l! [) e# W
- 使用 NocoBase CLI 创建插件:
9 G, K$ n4 O. p1 ^; [+ n$ u7 z ```bash
; v. E, o. H# }5 ?) V3 F% L npm run cli plugin:create deepseek-integration
6 t1 m' P* \3 c cd plugins/deepseek-integration" u; h! w O0 |; O
```
W4 n3 B |0 ?5 [; h3 b
0 Z! \6 Z/ w( G2 Z" l) \; G#### 3.2 安装 DeepSeek SDK
. x* t) I) p- w; B v# R- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
% ~: D2 Q7 U0 R7 t ```bash
`7 X) t5 T* f* T9 q7 I$ R npm install deepseek-sdk8 G0 x2 F W& W5 Q7 [% ~, C4 S, R5 ?
```! o/ B: J- S+ F
6 g S3 p2 G& t3 V: [1 S$ r
#### 3.3 配置 DeepSeek API 密钥
0 p. d+ {9 A% ~2 r5 ~, F- 在插件配置文件中添加 DeepSeek API 密钥:# }9 E: v0 ~! _" S+ j: ^* s
编辑 `plugins/deepseek-integration/config/config.json`:
' X; n B a) q7 \6 g1 K/ q5 [ ```json
/ x* Y- Y% l+ v2 n3 Y. Y4 H% d2 E$ k {
+ \6 F( c5 h0 i5 m3 g, M! U/ O "deepseek": {
( ?- N# b' E% j! |' t- o; _6 k) I "apiKey": "your_deepseek_api_key"( {5 ~3 o, O& C, e) F' j
}8 s) h( r+ {: ]
}
$ a+ g3 E- ^6 ^9 Z ```
8 W$ W0 t9 ~. A- y0 _+ X# \% s( I1 J5 E) E' @! T
#### 3.4 实现 DeepSeek 服务
/ v, F/ E% ]" U' ~( ?- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:% y$ t) }0 P9 q
```javascript& N- Y- T! ?" }9 Q! Z9 Q. [
const DeepSeek = require('deepseek-sdk');# k; {$ y+ ^' ~; {7 O& N; s
& T/ `9 N h3 B0 x* `6 q& N t
class DeepSeekService {
) p. }: ?/ E5 Q/ D5 [ k$ o constructor(apiKey) {& Y. g+ R& R' U# b
this.deepseek = new DeepSeek(apiKey);
4 w v! m* Q/ | }
9 g' a/ h) g- a7 I" g" }) Z0 t9 ^( [. M- H0 o
async query(prompt) {
& q: p9 p" ?% Y/ e1 l; J3 r% Z const response = await this.deepseek.complete({" v3 g' l" K+ |% e" M
prompt: prompt,
9 A/ Q4 @/ P! z- Y$ z max_tokens: 150( i9 U& |* l+ A5 @
});
( _- D; L3 L9 U: q* G return response.choices[0].text.trim();
8 N, s( L7 j. H r3 S }
4 C% ?( |5 ^1 {5 Q# M/ M }" `/ [* v& I9 m
! F9 A/ R- T' @1 W; l: ]
module.exports = DeepSeekService;
8 f1 o! A- R, g ```
* a6 H9 t% ~+ Q. O/ _; {* [
0 c) ]1 L: q# P* Q O#### 3.5 创建 API 路由
2 j. W7 |7 h0 O# m r. d- o: W$ x, `- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
# q5 u$ S: z( b# P6 h; U3 F ```javascript
! o, B5 @, t; O) G# H* ] const express = require('express');5 w( l: n4 i8 R8 `; J: S( E
const DeepSeekService = require('../services/deepseekService');7 U! B" K/ Y3 s" W7 I
const router = express.Router();3 t# Q r# g; O6 Y
const config = require('config');
0 k+ w% f" r! O" f6 Z9 C8 }/ J+ i' w+ H; V$ ?- e7 c6 P" h8 y
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
: M4 S( B$ [' q' Y. n0 @% A5 _
0 \% t: O8 }0 `( N router.post('/query', async (req, res) => {0 v- R0 Y6 i" ~$ q
const { prompt } = req.body;
' t2 x* I; y4 n, [1 H; M! `% d try {
" Y4 J4 v8 E/ K$ R9 H! `! W. p+ S const result = await deepseekService.query(prompt);
: o9 Y* F1 r( @+ z/ _% d res.json({ success: true, result });6 d& [0 y2 m! r$ T- [
} catch (error) {' J% ?) L( F3 w4 D& [( Y4 e
res.status(500).json({ success: false, error: error.message });
6 I. e* R$ ~! M1 B9 L2 j }* k k } a8 y/ K# m
});( ?8 r3 ]+ g' j- t5 ^# X
& C1 {! ^3 T- J* _0 i module.exports = router;
1 a4 g. F# @) m. v+ Z6 F+ R; D ```
& c" r0 f& Y7 \8 \
: S" a- a3 Q* x3 L+ f% x#### 3.6 注册插件, y/ `7 g1 ~/ \7 G1 h: r
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
$ r* f8 ^) c* p- F ```javascript
5 k& Z- s6 k' k) n& K+ |$ i, M const deepseekRoutes = require('./routes/deepseekRoutes');) B. i! q! {* x2 p
2 H' l! U! J# z& W% z
module.exports = function(app) {
+ T4 v0 s2 X- p2 }+ A app.use('/api/deepseek', deepseekRoutes);7 @5 t8 U3 G8 w0 L* a9 ?1 z
};0 U o' F5 |. r6 Y4 ^0 R2 o: s" ^
```
3 b* K4 G, M$ H' W. F
& h/ M. m. W% U+ g+ J2 I7 v---
( O7 [ k; L& o! }, _
* p. ?1 x, k' H/ o& g### **4. 测试集成**/ g5 K8 i/ P9 {/ h7 L
#### 4.1 启动 NocoBase
7 k5 t) J& r% e- 启动 NocoBase:
( {+ G) r* {* E* c ```bash9 K; O7 `/ r, Y* g5 D
npm run start
8 S3 n3 Z+ ~8 p/ T o! B ```
' x2 I* x8 e3 T% t& E9 |1 c: o# y; {7 F* H. _% ?
#### 4.2 测试 DeepSeek API
# t* H: D1 }1 t2 i3 ~! r- 使用 `curl` 或 Postman 测试 API:' I6 T8 u, j% _" S$ f; v
```bash
# H" c% f$ G4 T( `! T, d curl -X POST http://localhost:3000/api/deepseek/query \ u7 ?/ X- h t2 l1 `. X
-H "Content-Type: application/json" \# c; o& ]2 L& Q* n
-d '{"prompt": "显示最近三个月联系过的客户"}'
7 z) u9 b7 H5 y h ```
7 F; u9 L+ v+ p6 u' ~/ r8 I
& B" y3 n* x0 Q1 y Z---
1 r, n2 k! n/ Y9 T% H' v3 G: A- d* ~8 e3 g7 j# K4 S5 M
### **5. 部署到生产环境**. V1 ]' ^& m# W/ @8 }
#### 5.1 使用 Docker 部署
4 a+ p% O( Q( F6 e: h( i5 z6 U- 创建 `docker-compose.yml` 文件:
`6 n* u) ?% c: M ```yaml5 I" v, R: }4 f: b; f
version: '3'
3 W' x4 h/ u* W' d, H services:8 z! Q: ^6 K+ S O# Q
app:
, j3 ]& q( |, U0 j8 Q image: node:16
6 r# T. Q0 y H# |2 _ container_name: nocobase
9 A& g% ^ C9 V$ e+ r# A4 @1 N working_dir: /app
$ }" u1 c7 a' K, v0 ?( G* ] volumes:
" A* [1 [7 Y, a+ h9 h - .:/app# V) v. S6 b% g; T) ~
ports:
* M5 H6 j8 r% ~( h. ] - "3000:3000"
& P, e& D) p' M' \$ x& l environment:
. W5 d: m, ]: v1 e5 B8 _: J - NODE_ENV=production
& c" `7 e" q7 Y9 d command: npm run start
8 v" V, d( j0 L( K) ~! P db:
0 d. i# r6 J- h1 z% g& A image: postgres:131 ~3 t( ^, `. n9 s
container_name: nocobase_db
& k! O; o( ]% v2 _ environment:, n) i* U( |/ n3 H1 u& d4 e
POSTGRES_USER: nocobase_user( I4 ~2 Z% |/ D$ P; R
POSTGRES_PASSWORD: your_password6 X! q/ }6 K& U1 ?7 [
POSTGRES_DB: nocobase. y: u& M9 U2 ^! Z- y0 R& h
ports:0 e/ e% M/ O; ]- O2 @! O
- "5432:5432"
% h5 U: Z* Q: N ```
# ^8 V" }9 |4 M. ]7 n& m3 c* u# k- 启动 Docker 容器:) P8 P6 e$ ]+ u
```bash3 {3 p; a3 Y4 Q" m
docker-compose up -d
2 s" m) A/ [3 n1 l5 A" P ```- h$ w0 k. T1 J# K% ]3 G$ B0 L# h
8 b( H2 p1 V/ ^4 `/ H1 Z, y5 u {#### 5.2 配置 HTTPS8 a" t1 @, s" q: P' o' C8 Q
- 使用 Nginx 反向代理并配置 HTTPS:6 |* ~2 o6 t3 B" K) I0 {
```nginx/ L9 v' o. l' |" O4 U% \
server {
( Z; r8 }- c3 X3 \" b5 } listen 80;6 X0 @( B5 z+ m: f
server_name yourdomain.com;
" y v* c2 z. K return 301 https://$host$request_uri;
% N) J4 j* r$ G0 J- k; J5 x/ q' q/ T }7 ?( i5 y) ]1 C* L
5 Y$ m/ E& l7 H' }& ^
server {1 y0 \% N& |8 n! Q/ O3 `* L
listen 443 ssl;
/ ?7 O! z f$ R, [# [ server_name yourdomain.com;
5 y+ [/ ?# h& A! e, R6 D; l8 Y4 w* l& Z x) B: q
ssl_certificate /path/to/your/certificate.crt;
$ Z' b: m9 d; J6 O N ssl_certificate_key /path/to/your/private.key;
6 r, z3 B/ Q( a3 r
* D2 ?; z3 F! x0 ]; B location / {
4 O$ c2 ^6 [7 h d proxy_pass http://localhost:3000;
) f; B; L1 v9 v* X! w# L# O& e proxy_set_header Host $host;
3 x4 ^8 b% A; l# q proxy_set_header X-Real-IP $remote_addr;" L7 H X/ A, D
}
1 N2 p. o; _3 H3 n# \ }7 r9 v& q& `8 |+ a" l
```
: M( ^. k; I( z$ L
6 W( h* j5 u- w) E& G7 N. T5 U---
3 f" D5 C8 ]6 o3 I4 M( y6 X* ^( n
### **6. 总结**
/ B8 |8 [2 Y% {, }% V9 C% ~通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|