掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1921|回复: 6

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

[复制链接]

该用户从未签到

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

$ d& h0 a2 P& f) P% J参考:, m, w8 Q" b0 Y# m  H' q- Z3 i/ E
- [词典讨论] ChatGPT 用作词典 https://www.pdawiki.com/forum/fo ... hread&tid=48326$ a& D- @$ x! Y/ S1 R" {" U" m2 N
- [经验交流] GoldenDict 有X词典在线版(Python 在线版) https://pdawiki.com/forum/forum.php?mod=viewthread&tid=33203$ Q& O# p" q: B2 t. T
- GoldenDict + Python 调用有道翻译[...]  https://pdawiki.com/forum/forum.php?mod=viewthread&tid=21988
, h! S: ^) J7 y; R! ]$ T% V! g- [5.16]goldendict 有道释义 & google翻译 [python] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=265658 R! ^; P: r5 g* k& I' X& c
- 人人词典GoldenDict插件[附python3源码] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=31713
+ n3 _) K3 a% }. v- ChatGPT-Next-Web https://github.com/Yidadaa/ChatGPT-Next-Web. Y" b1 ]' o' k+ [: D$ f) |
# ?: q# s# e" Y) c& n4 v

9 M, X/ W3 k4 d前置条件:6 k# E4 D3 K' m0 D. r
1、OpenAI API key https://platform.openai.com/account/api-keys1 u, ^$ @; }( E% [7 `9 h/ n0 I
2、Python
' R# U# G1 V+ l8 I1 [5 _% c- l' J- U  U- R3 T( z
问:
5 q  y2 q  {6 ~; O& n3 {
1、写一个 mydict.py,调用 OpenAI API key,实现查询功能。
. f$ r, ^4 m! O1 j; \2、用 GoldenDict 调用 mydict.py。

3 d8 x  s7 c( D, L2 a
# W, v2 Y9 J/ g1 {8 PChatGPT 回答:
5 U9 G& u! C# l" z8 Z+ n
这里提供一个基于 OpenAI GPT-3 API 的简单 mydict.py 脚本示例,可以通过命令行传入要查询的单词,输出 OpenAI API 返回的结果:
. @$ @4 F6 K% r
9 d) ?) @' I& w```python
& c3 x* ^0 @- C# `4 F9 S3 zimport openai; U' I4 n* f: l+ \
import sys0 [+ b# E. T6 c/ ^3 I

$ ^, E  H. V3 _9 xopenai.api_key = "YOUR_OPENAI_API_KEY_HERE"
# H! e; j+ s- B
( p$ t/ z9 M2 H. u' K0 ]$ ]def define(word):
4 g; Y2 H5 u: ~* ^/ @* K0 x5 ]    prompt = f"Define '{word}'"
( J7 ?, J! F& i2 d& S    response = openai.Completion.create(
! y- i0 G; O3 y/ u# e! H        engine="text-davinci-002",. c, Y$ N6 E) x) R
        prompt=prompt,
3 ?& H+ [2 R* t. V+ P( c        max_tokens=1024,
2 j0 k& S" I# n        n=1,* @* A+ Z4 m! z6 H1 [. ]3 V
        stop=None,
9 R9 q  S7 G, I. k7 n        temperature=0.5,
- G6 k) p& H0 p; D    )
# C, _$ M* x! D! ^% i: }; }% m" \
    if len(response.choices) > 0:' E2 i) V7 {8 h' P5 [( `- Z
        return response.choices[0].text
6 T9 G2 q, E0 }: ]    else:
2 Q8 C  n8 M/ [; k# b) ]0 ?* b        return "No definition found.": a+ X/ Y3 i. h8 e3 m7 ^: y
, c5 D- M8 T0 v" S5 w& B
if __name__ == "__main__":6 t6 t% ^9 F, B6 J6 X
    word = sys.argv[1]
* p4 Z7 P6 ~: M8 F& p4 N& \    definition = define(word)
: g* H3 _5 ^. h3 V# m3 t    print(definition)
( T% v4 N. x- a# [* l- f8 |# ]# ?```7 i- N; A, b& x( p6 X4 R+ v7 I

* i+ i0 R" `/ K$ {9 D0 P% ~7 z将上述脚本保存为 `mydict.py` 文件。
, E, T. p/ O) V% H3 F: n1 b. P8 J- Z  Y) t
接下来,在 GoldenDict 中设置该脚本为自定义命令行词典。, ]8 D1 q, {, x2 }% T

! T0 `. K- h" b7 c7 H7 {1. 打开 GoldenDict,选择 Edit > Dictionaries。
! G) e- o6 I; K: t" w5 m# i2. 在 Programs 标签页中,点击 Add 按钮。& E4 x0 E$ x# u0 k) f3 ^
3. 在 Dialog 标题栏中输入 “MyDict”,在 Command 栏中输入 `python /path/to/mydict.py %GDWORD%`(其中 `/path/to/mydict.py` 为脚本的绝对路径),点击 OK 按钮。
$ {" ]" U8 y# E5 [" n! y4. 在主界面中,选中一段文本,然后按下 Ctrl+C+C,即可通过 mydict.py 查询该单词的定义。

7 Z+ D7 Q+ I7 ?+ ^
, {. K( o% p* `
7 O, C2 X/ y$ g' N4 Q
4 e) T: q. Y2 c' y; h  f( E

评分

1

查看全部评分

本帖被以下淘专辑推荐:

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

    [LV.7]常住居民III

    发表于 2023-5-5 10:16:19 | 显示全部楼层
    本帖最后由 mikeee 于 2023-5-5 11:26 编辑 2 ~$ e* g+ \2 I; k! ?: y
    ' p/ h& R1 `  c, y9 y3 V
    链接: https://pan.baidu.com/s/1HXpt0U3vb7GJDKpBNm_FOw?pwd=4vph 提取码: 4vph ; U+ G& C( b0 ~8 b
    3 ?7 x7 C( c0 V) {
    这个命令行工具`chatgpt_tr`应该可以设置成在 GoldenDict 里使用。用的是令牌,即是说免费的。7 |; n8 U; M9 a' ~- T& F8 r5 |

    3 E8 ], e$ v2 m! q/ S0 S3 kchatgpt_tr主要是给命令行翻译用的,但也可以自定义提示Prompt以及用于对话。详细用法参看 ``chatgpt_tr.exe --help``。3 j# u8 n" K3 Q* b0 A
    9 x& J1 D/ C3 X4 z9 |4 N8 L" @- h
    用法
    2 h: F  a# E6 T! J/ u. _( U/ }1 ?& O$ F. M( R# c
    • 解压
    • 获取access token
      # I$ [5 X* i% b) k6 @& z; m
      • 登录 chat.openai.com
      • 访问 https://chat.openai.com/api/auth/session
      • 拷 accessToken备用
      • 此操作只需一次。(access token 有效期约14-30天,但内地ip可能需双向提子因为openai和大伙墙的双重封杀,港澳ip则需找未被openai封杀的带理)
        0 O/ C6 o" C+ U( y4 q
    • 命令行下设置环境变量OPENAI_ACCESS_TOKEN,例如cmd下 set OPENAI_ACCESS_TOKEN=eyJhbGc... 或用包内的 chatgpt-tr.bat 或sysdm.cpl设置全局环境变量OPENAI_ACCESS_TOKEN
    • 命令行下,例如WIN cmd回车(或开Windows Terminal或cmder或conemu)
      8 t; l, k% G9 U- h
      • chatgpt_tr --help # 帮助
      • chatgpr_tr # 翻译系统剪贴板内容
      • chatgpr_tr this is a test # 翻译 this is a test
        ) l& G6 L5 ^" V$ [

      & S+ h, i! T, \" ~; `

    # M4 g# O+ Z$ |& r  \; _可以利用 bat 自定义提示Prompt各种使用场景(例如`chatgpt_tr.exe -p "列出5个中文同义词"  make sense` )。该工具的python源码核心部分只有十几行。网友有兴趣的话我可以提供python源码。
    ; \. ~8 `7 T4 O; ?( ]. M9 ~0 B0 g6 F" T: X% w6 E% ^
    该工具基于某个第三方反向代理,代理挂了或被关闭当然工具也就不能用了。 (实测2023-05-05可用)% j' S; L& {: c: C: Y

    8 }1 c' K$ M8 j& X  B# x典型输出:
    $ g3 v, I9 m. M: D
    # chatgpt_tr amazon code whisperer; j- v/ a" Z  x( ]
    amazon code whisperer5 T1 d0 h4 E3 j; r' j7 C2 n5 x4 x5 C
    1 y8 f; p, `8 K- o1 L) n
    版本1:& ~$ V. I! D/ [2 i) H, t
    亚马逊代码耳语师
    2 R( R8 O( t/ Z6 ~5 \  I& @! {  n
    " f7 R1 `* g; |2 B版本2:
    : e* o( @) `( r5 W- Z) f3 [8 E4 |" \亚马逊代码密语者
    ; ~' E! x$ f5 w# G0 h# I8 C- u' d2 M6 x: N
    版本3:
    + |& g' O/ g) h; r$ k亚马逊代码秘语师
    , U9 T) Z; o' v
    6 R5 r/ J" U0 q, D1 x/ m) p: B# chatgpt_tr.exe -p "列出5个中文同义词" make sense. ^; C) n& `1 v8 V
    make sense
    " B& @" ~# \3 F( Z0 e2 [6 R/ n( z0 v) X: z5 w
    1. 有道理
    5 ~. M3 V2 R3 z5 T2. 讲得通( t  \" N& t! v
    3. 合理
    7 v& i/ I( H6 Q, M2 M! R* v4 Z9 G4. 明智
    " p5 k' e! N( X! D. t7 Q+ K, t2 V6 v5. 理性
    7 c, K- Q# [# }2 l
    : R; J6 k5 H6 K. V1 B: C& t# chatgpt_tr.exe --help
    - m& c5 c+ m4 ]; _, B; T, @. S- ?8 j/ W- r) r
    Usage: chatgpt_tr.exe [OPTIONS] [TEXT]...
    - x" i1 E8 C0 a' M' Z3 |
    1 c* k1 h5 k7 N5 g* G Translate with chatgpt using access token.
    & L! y( C! z: v- Q set LOGURU_LEVEL=DEBUG or set LOGLEVEL=10 to turn on debug/verbose mode.
    8 m. {) q: `- y+ `. X
    1 K/ l+ f8 f& Y) Z: K┌─ Arguments ──────────────────────────────────────────────────────────────────┐
    6 z4 _) I+ Q7 c' h% k, D$ u│   text      [TEXT]...  Source text. [default: None]                          │9 j; h9 f  j( D( N! y# V
    └──────────────────────────────────────────────────────────────────────────────┘9 a' z- T2 B. z' t2 f' k. D
    ┌─ Options ────────────────────────────────────────────────────────────────────┐
    9 g' {( T6 T- E5 o4 R/ V│ --version  -v,-V               Show version info and a list of supported     │3 n( W' L  C# b: U( l6 f6 x
    │                                languages and exit.                           │
    * ?' U+ s* g1 \* A. \' I│ --clipb    -c                  Use clipboard content if set or if `text` is  │) b) A2 |! S# }4 Z3 o# {
    │                                empty.                                        │, h7 o1 k# l$ S
    │ --to-lang  -t         TEXT     Target language when using the default        │
    ) W/ \/ }4 U/ [! m5 k4 Z; i8 q0 `│                                prompt.                                       │
    ! r5 G. `6 F. G  ?/ d7 c│                                [default: 中文]                               │7 D! i6 A/ H4 b6 v3 r0 o5 n
    │ --numb     -n         INTEGER  number of translation variants when using the │3 O( ~# R+ }/ f( r
    │                                default prompt.                               │1 ]/ X4 d, }+ `3 X9 B% S$ G: k
    │                                [default: 3]                                  │
    / O4 o& I4 ], ]5 R+ r% Z2 H│ --prompt   -p         TEXT     User defined prompt. [default:                │
    6 L, ^3 k+ B' Q! |│                                '将以下内容内容翻成 to_lang                   │
    ( `; t: J4 V# @- n; D! A│                                (中文),不要自由发挥,列出 numb (3) 个版本:  │; |4 [0 `$ V, V
    │                                \n']                                          │
    , l" y' w) h5 A% M5 ~( H│ --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这个组合算拉郎配
    9 Q5 X( |3 D6 ?! a0 @. l0 F0 q" K! D/ y& |( R- j% \7 a' ~
    别的不说,就看下图吧:
    . v) N& h, r1 _6 U' D" \+ R4 R& F, t+ N. [' J
    ) s8 `. t. b, ]/ j
    2 O1 I' A7 ?, x5 ^3 V! k9 O! \, H
    Define指令不支持中文 用中文吧,它给的解释还是错的/ e0 [2 i7 o1 U! o7 J. G" Z8 e
    ; j; `9 I4 V) ]; F3 l/ h

    5 l8 O) I. s& b「拉郎配」这个词,《现代汉语词典》就有啊:
    * \% v5 T. E$ }, s2 ^) |1 r: W8 j3 G' O1 [# W, \/ s5 z; \4 G
    拉郎配
    8 @( U7 ~1 K  ]lā láng pèi; P  G0 b" L  x* s! o" n8 y
    封建时代为逃避家中未婚女子被选入宫中,仓促找男子跟她成亲。比喻不顾实际,强行使双方联合或合并。

    本帖子中包含更多资源

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

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

    [LV.Master]伴坛终老

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

    [LV.9]以坛为家II

    发表于 2023-5-4 12:22:25 | 显示全部楼层
    klwo2 发表于 2023-5-3 17:31
    4 R6 s7 n' X( B3 r. T我还是觉得GoldenDict + ChatGPT这个组合算拉郎配2 j' a$ K( L9 t* q* [7 W
    7 W6 m: |; b) w; _8 p+ R. [
    别的不说,就看下图吧:
    拉郎配
    ) ]4 m# A9 L! t% h' a" k
    9 E# T! I# w" ^/ L" f5 \1 Q4 Y0 C
    恰到好处
    * j* F# G  v/ D" `$ |  j7 Y* t, }7 T- n+ H6 }6 l, J, E
    说明问题
  • TA的每日心情
    无聊
    2022-7-11 10:17
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2023-7-24 10:12:50 | 显示全部楼层
    照着弄完报错啊? 麻烦给看看吧
    : I6 w$ n0 Y0 ]: `7 w# {查询错误: 程序返回,退出代码为 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, 2024-4-24 03:05 , Processed in 0.061930 second(s), 11 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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