掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 3685|回复: 6

[词典讨论] GoldenDict + ChatGPT(利用 OpenAI API)[20230503]

[复制链接]

该用户从未签到

发表于 2023-5-3 13:11:27 | 显示全部楼层 |阅读模式

& K5 a: r6 {- G7 {1 v- S9 e" X参考:7 n. ]: }  @$ M: m' c
- [词典讨论] ChatGPT 用作词典 https://www.pdawiki.com/forum/fo ... hread&tid=48326
5 L4 ~. x: P" f+ K, a7 I  }4 ~- [经验交流] GoldenDict 有X词典在线版(Python 在线版) https://pdawiki.com/forum/forum.php?mod=viewthread&tid=332032 S# q& f0 f) Y
- GoldenDict + Python 调用有道翻译[...]  https://pdawiki.com/forum/forum.php?mod=viewthread&tid=219880 R7 ^( T$ ]) E8 u; ~
- [5.16]goldendict 有道释义 & google翻译 [python] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=26565
3 _* C! ~1 Q# E. o) A- 人人词典GoldenDict插件[附python3源码] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=31713
3 O/ C* Z; a7 J% t/ r( \  C- T  J- ChatGPT-Next-Web https://github.com/Yidadaa/ChatGPT-Next-Web
' P5 M7 F" ^; _- |- }) c7 f4 S, h( T1 ]* d4 `: C
+ q, z2 J8 a! C+ L1 X; U
前置条件:3 E# d3 i7 Y- r  A
1、OpenAI API key https://platform.openai.com/account/api-keys
+ S* d% e1 v0 R; g0 ~) n2、Python) B6 s' Q( T3 z

8 n" L# H1 T5 M1 W: p+ p问:
' m5 X/ Y5 }  D1 Q: l
1、写一个 mydict.py,调用 OpenAI API key,实现查询功能。2 ?% d; p3 f: m
2、用 GoldenDict 调用 mydict.py。

' V9 b8 T) g$ P) b( F( \, `' S4 U& a' O9 b. w7 G9 k7 v8 u
ChatGPT 回答:5 W  }/ f% _& q7 b
这里提供一个基于 OpenAI GPT-3 API 的简单 mydict.py 脚本示例,可以通过命令行传入要查询的单词,输出 OpenAI API 返回的结果:) F; t+ Y- z. X3 J
3 C8 C0 m& k4 X1 ]/ W0 u% p7 b
```python
1 K' }5 @2 r: Oimport openai
/ ^" `  ]0 ?2 w$ q1 ~8 ]$ |+ U# j9 `import sys
# f5 w7 j& |2 |4 M4 B* x6 r4 w4 i; i
openai.api_key = "YOUR_OPENAI_API_KEY_HERE"1 _/ i. N7 Y8 _( y2 q7 C2 G

) H5 O. _* e4 I+ b2 `  Udef define(word):
; E" B* M! Q& c7 N# G0 F0 {    prompt = f"Define '{word}'"
  [2 T  i# w" b& S    response = openai.Completion.create(
! B) J9 U$ Z) c: D' Y8 W        engine="text-davinci-002",
% ^9 B6 |  _5 }$ X% i6 |        prompt=prompt,, ^9 G4 q( m5 l" h& ]. M4 C+ @2 @
        max_tokens=1024,2 K7 v) R8 p8 Q0 `' N8 f
        n=1,
5 }, @% ^7 E1 J: @- o5 P        stop=None,
% T. ?2 a1 H2 S" ^        temperature=0.5,
$ c" y5 Q8 H  j$ L2 F) z, n6 R    )
6 V. t" f6 W" b1 @! G# h& X. `7 q1 W. q
    if len(response.choices) > 0:* c) B  K) c: D
        return response.choices[0].text
" K4 C9 W/ s: \  \8 `" v7 |' d4 a- F    else:
2 }6 q% G* S3 X7 L  T4 H        return "No definition found.") i) C( n7 k7 g9 \/ j: ]& n
; _8 A; p# s6 r0 E
if __name__ == "__main__":) Y7 |5 ]: N9 S! B
    word = sys.argv[1]
" {7 K6 I& g, W    definition = define(word)" \4 r+ |8 m  Y3 p' z, n! J
    print(definition)
4 h% m: x) L. o% x" o8 d. t6 p. L```
6 q3 v. o8 y' w/ t& B, @4 S* K
% i3 O9 E3 P0 v0 v) N# T( j将上述脚本保存为 `mydict.py` 文件。
' g( z% H2 J) X1 X( v0 z5 p9 B" x3 r+ _- W, D. z( P
接下来,在 GoldenDict 中设置该脚本为自定义命令行词典。
) v* ]" w6 B. ]% l0 S8 ^$ S2 `
9 {- M- G* ^9 W# J- v9 y1. 打开 GoldenDict,选择 Edit > Dictionaries。; X0 Z' I' l! h8 ]1 `1 S4 @% {
2. 在 Programs 标签页中,点击 Add 按钮。
/ G# f2 P( c0 I0 |: f/ Q+ N' W2 c; d" \3. 在 Dialog 标题栏中输入 “MyDict”,在 Command 栏中输入 `python /path/to/mydict.py %GDWORD%`(其中 `/path/to/mydict.py` 为脚本的绝对路径),点击 OK 按钮。
+ F' e0 C! s/ [0 _2 j' ]) B: ]) _' m4. 在主界面中,选中一段文本,然后按下 Ctrl+C+C,即可通过 mydict.py 查询该单词的定义。
1 J% \# M4 F; M7 j  i3 a+ A

; I% X$ |8 @; A9 C5 x2 _% b) {+ D6 F6 m* x: E

$ o  v5 g/ v8 S

评分

1

查看全部评分

本帖被以下淘专辑推荐:

  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2023-5-5 10:16:19 | 显示全部楼层
    本帖最后由 mikeee 于 2023-5-5 11:26 编辑 ) E6 V& _  \+ y+ s' x) J

    3 z+ r  H' D0 h9 d1 j 链接: https://pan.baidu.com/s/1HXpt0U3vb7GJDKpBNm_FOw?pwd=4vph 提取码: 4vph
    9 J  F% l+ f! X) [
    : H- G! y- c1 ~) l) y- ?这个命令行工具`chatgpt_tr`应该可以设置成在 GoldenDict 里使用。用的是令牌,即是说免费的。3 i) O% Y, B) G( {7 ^6 E
    : Y% ?$ D* F5 v+ b+ j$ Q  N
    chatgpt_tr主要是给命令行翻译用的,但也可以自定义提示Prompt以及用于对话。详细用法参看 ``chatgpt_tr.exe --help``。' K2 s+ u+ o3 h6 f+ s, n
    8 F, d) P+ ^; w
    用法. c0 j1 ]5 P. Q3 X! |* ~2 Y

    5 c3 C6 Q7 t, {$ |4 T2 p
    • 解压
    • 获取access token; Q9 W! k8 x9 G5 r. X( J
      • 登录 chat.openai.com
      • 访问 https://chat.openai.com/api/auth/session
      • 拷 accessToken备用
      • 此操作只需一次。(access token 有效期约14-30天,但内地ip可能需双向提子因为openai和大伙墙的双重封杀,港澳ip则需找未被openai封杀的带理)
        1 x6 n4 K3 p$ A+ ?: ]& U0 R% ]* E/ p/ |
    • 命令行下设置环境变量OPENAI_ACCESS_TOKEN,例如cmd下 set OPENAI_ACCESS_TOKEN=eyJhbGc... 或用包内的 chatgpt-tr.bat 或sysdm.cpl设置全局环境变量OPENAI_ACCESS_TOKEN
    • 命令行下,例如WIN cmd回车(或开Windows Terminal或cmder或conemu)4 R7 _+ Y% o0 {* X4 t
      • chatgpt_tr --help # 帮助
      • chatgpr_tr # 翻译系统剪贴板内容
      • chatgpr_tr this is a test # 翻译 this is a test
        & z3 b& {  k. j7 [5 @) [

      # G; {/ ]; ^: {/ p1 n! V

    8 c+ o7 p& a& a9 z: A# ^可以利用 bat 自定义提示Prompt各种使用场景(例如`chatgpt_tr.exe -p "列出5个中文同义词"  make sense` )。该工具的python源码核心部分只有十几行。网友有兴趣的话我可以提供python源码。9 o' U* X: X4 X6 I, H3 _

    ' p$ _% |5 k8 a6 g( q" l' D- k该工具基于某个第三方反向代理,代理挂了或被关闭当然工具也就不能用了。 (实测2023-05-05可用)$ |# i6 g! D  M6 w) h

    0 s2 m1 v+ D* v1 x. \5 _典型输出:
    ; W) d; }! s! }; `5 ~
    # chatgpt_tr amazon code whisperer
    ! J7 Q. s* X! famazon code whisperer7 }4 N. a& g2 V5 l/ ?- }8 `) }; O4 O

    7 F3 v8 a  k" k' F& k; b版本1:3 M" P" b0 f: I" e8 A
    亚马逊代码耳语师
    0 f$ n9 m+ C* q6 G
    ! j1 h' j# U0 v9 G版本2:
    ' R9 f) V4 T$ Q2 Z# D亚马逊代码密语者1 r& S) u3 i4 G) B% K3 B
    ' [9 L' h7 Z& w* k8 {9 N9 w8 ]. J/ j2 R
    版本3:1 L+ C9 z' H0 m* ^
    亚马逊代码秘语师
    " w# l/ x# {% M' z' P, k8 Y' v
    * r# ~# g7 ?8 C9 v3 K" I# chatgpt_tr.exe -p "列出5个中文同义词" make sense
    * ]; i- Y  k3 \6 Emake sense
    7 G) Q1 W$ e* V
      b  \( ~4 l: e# {0 M5 q. ]1. 有道理
    & o  D& U* W* o8 p( F8 Z2. 讲得通6 f5 [. K. B8 ^$ y' X, M
    3. 合理
    9 [, ^6 W  E! w% D7 `4. 明智
    0 r* E, y3 M- f& p9 S# a3 S7 J5. 理性4 a; `- R, _" h; l* d2 N4 d# V) O

    ! ]0 Y! Z- E" Z2 D9 g$ Z; s# chatgpt_tr.exe --help
    5 @$ @! R, J: Q# w3 T; _$ w" W6 _" c5 z
    Usage: chatgpt_tr.exe [OPTIONS] [TEXT]...
    ' B2 u6 k; H6 D7 i+ T, D- ?" L
    1 U6 ]" C# ~8 x; I' m5 b$ u2 \ Translate with chatgpt using access token.
    " L  C0 C' U* `6 W! } set LOGURU_LEVEL=DEBUG or set LOGLEVEL=10 to turn on debug/verbose mode.8 [8 s2 o" ]/ u; _" H, T
    ! u* K+ v' T8 D3 {7 E
    ┌─ Arguments ──────────────────────────────────────────────────────────────────┐
    / f) a0 ~; q$ E+ s1 \│   text      [TEXT]...  Source text. [default: None]                          │* W- ^  g1 x- N* ?, x& N
    └──────────────────────────────────────────────────────────────────────────────┘" F+ N. ]. O% N$ J3 n  }
    ┌─ Options ────────────────────────────────────────────────────────────────────┐, |" u3 e. p$ K: b
    │ --version  -v,-V               Show version info and a list of supported     │
    6 Z/ ~, J4 J- G. H5 [│                                languages and exit.                           │
    . a; e3 }1 u6 T1 I. t4 J5 W. l* O│ --clipb    -c                  Use clipboard content if set or if `text` is  │
    # R# K6 }# V- k0 F+ k│                                empty.                                        │. {  ?0 }; B% F; A6 ~& y  H
    │ --to-lang  -t         TEXT     Target language when using the default        │
    " [- t! L9 j3 U, n│                                prompt.                                       │
    , e8 o9 y/ }5 e. O0 C! [3 l5 ]9 i│                                [default: 中文]                               │/ t. ~* ]! r+ s. f* x6 V
    │ --numb     -n         INTEGER  number of translation variants when using the │
    1 J: i2 |; h- H4 Q& E- E6 D│                                default prompt.                               │4 K' d9 i% q- b/ d$ G  I
    │                                [default: 3]                                  │
    . D) w  s( p' A│ --prompt   -p         TEXT     User defined prompt. [default:                │
    6 g$ F0 z  h8 z8 W2 k│                                '将以下内容内容翻成 to_lang                   │2 L. m( }6 ^- @8 }$ y  s8 @
    │                                (中文),不要自由发挥,列出 numb (3) 个版本:  │
    , g0 a: [9 A7 D9 `" C│                                \n']                                          │
    4 [2 \+ }( n& y- P! ?: n1 b│ --help                         Show this message and exit.
  • TA的每日心情
    开心
    2018-8-26 14:41
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2023-5-3 20:03:13 | 显示全部楼层
    有点浪费token

    该用户从未签到

    发表于 2023-5-3 17:31:29 | 显示全部楼层
    我还是觉得GoldenDict + ChatGPT这个组合算拉郎配
    ; K; [( R5 t; h( O7 [3 ~# S% B- X, |6 R7 \8 y$ ?
    别的不说,就看下图吧:5 Q9 y' F- ~% Q+ ?$ T! z* |

    & q  q- y3 T- M1 ^# N  w3 ~* b+ E' y4 t7 R8 r  F8 {' |

    2 w  {" d" @% ~Define指令不支持中文 用中文吧,它给的解释还是错的9 x1 i# I! n( x/ o
    7 _* ]* a/ s5 ^+ n( {/ W1 {
    ( P" [( k: ]8 j! y3 a
    「拉郎配」这个词,《现代汉语词典》就有啊:
    % U- P6 u! X! Y7 d: z, d" O
      y& [3 ~  p8 H! W. Q
    拉郎配
    ( ^  l# a9 M; Alā láng pèi( i: g. Y" y3 Z( O  {/ b+ a  j8 {
    封建时代为逃避家中未婚女子被选入宫中,仓促找男子跟她成亲。比喻不顾实际,强行使双方联合或合并。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    开心
    19 小时前
  • 签到天数: 2686 天

    [LV.Master]伴坛终老

    发表于 2023-5-3 17:36:36 | 显示全部楼层
    ChatGPT發展甚速。用來辨識漢字。或者要增加設備。
  • TA的每日心情
    开心
    2024-12-23 20:19
  • 签到天数: 442 天

    [LV.9]以坛为家II

    发表于 2023-5-4 12:22:25 | 显示全部楼层
    klwo2 发表于 2023-5-3 17:31" |, @* `  |: {2 K$ Y# U2 E
    我还是觉得GoldenDict + ChatGPT这个组合算拉郎配, |' Y, L& T5 q8 |: d

    : K, X2 d$ M8 p9 g$ q1 N& z别的不说,就看下图吧:
    拉郎配

    ' y& F, H, Y2 D4 ~# S
    # p- N* N( d- _, x2 h+ f恰到好处) [+ V9 a. Y9 D
    9 j' N2 Q$ k$ ?) X$ W4 d
    说明问题
  • TA的每日心情
    无聊
    2022-7-11 10:17
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2023-7-24 10:12:50 | 显示全部楼层
    照着弄完报错啊? 麻烦给看看吧
    7 C& m' L9 b- I" Y+ G: @. z& ?查询错误: 程序返回,退出代码为 1. Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 700, in urlopen self._prepare_proxy(conn) File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 994, in _prepare_proxy conn.connect() File "D:\APP\miniconda3\lib\site-packages\urllib3\connection.py", line 364, in connect conn = self._connect_tls_proxy(hostname, conn) File "D:\APP\miniconda3\lib\site-packages\urllib3\connection.py", line 501, in _connect_tls_proxy socket = ssl_wrap_socket( File "D:\APP\miniconda3\lib\site-packages\urllib3\util\ssl_.py", line 453, in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls) File "D:\APP\miniconda3\lib\site-packages\urllib3\util\ssl_.py", line 495, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock) File "D:\APP\miniconda3\lib\ssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "D:\APP\miniconda3\lib\ssl.py", line 1040, in _create self.do_handshake() File "D:\APP\miniconda3\lib\ssl.py", line 1309, in do_handshake self._sslobj.do_handshake() ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1131) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\requests\adapters.py", line 440, in send resp = conn.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 813, in urlopen return self.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 813, in urlopen return self.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 785, in urlopen retries = retries.increment( File "D:\APP\miniconda3\lib\site-packages\urllib3\util\retry.py", line 592, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)'))) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 596, in request_raw result = _thread_context.session.request( File "D:\APP\miniconda3\lib\site-packages\requests\sessions.py", line 529, in request resp = self.send(prep, **send_kwargs) File "D:\APP\miniconda3\lib\site-packages\requests\sessions.py", line 645, in send r = adapter.send(request, **kwargs) File "D:\APP\miniconda3\lib\site-packages\requests\adapters.py", line 517, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)'))) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "D:\APP\GoldenDict-addition\mydict.py", line 24, in <module> definition = define(word) File "D:\APP\GoldenDict-addition\mydict.py", line 8, in define response = openai.Completion.create( File "D:\APP\miniconda3\lib\site-packages\openai\api_resources\completion.py", line 25, in create return super().create(*args, **kwargs) File "D:\APP\miniconda3\lib\site-packages\openai\api_resources\abstract\engine_api_resource.py", line 153, in create response, _, api_key = requestor.request( File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 288, in request result = self.request_raw( File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 609, in request_raw raise error.APIConnectionError( openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)')))
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2025-4-19 20:17 , Processed in 0.023568 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表