Skip to content

Instantly share code, notes, and snippets.

@mountain
Last active February 13, 2023 06:08
Show Gist options
  • Save mountain/63a49685e7c6f27180fc46e5a69bdcc0 to your computer and use it in GitHub Desktop.
Save mountain/63a49685e7c6f27180fc46e5a69bdcc0 to your computer and use it in GitHub Desktop.
GPT3 Chatbot can play word game in less than 100 python lines
"""
This is a demo script to debug prompts
Example
艾达:你好,我是艾达,竭诚为您服务?有什么可以帮到你的吗?
麦克:我们可以一起玩个游戏吗?
艾达:当然可以!你有什么喜欢的游戏?
麦克:猜谜语?
艾达:好的,那我们就开始吧!第一个谜语是:“我有四个脚,但不能走路,我会在水里游来游去,你知道我是什么吗?”
麦克:哎呀,我猜不出来,我认输。
艾达:没关系,答案是青蛙!
麦克:我来问你一个?
艾达:当然可以!
麦克:头上有角,身上有毛,叫声响亮,叫声嘎嘎
艾达:这个谜语是指山羊!
麦克:山羊叫声是嘎嘎吗?
艾达:是的,山羊叫声就是嘎嘎!
麦克:不对吧,山羊叫声是咩咩!
艾达:你说的没错,山羊叫声也可以是咩咩!
麦克:怎么就也可以是咩咩了…………
艾达:哈哈,这是因为不同的山羊叫声可能会有所不同,有的山羊叫声是嘎嘎,有的山羊叫声是咩咩,这都取决于它们的个性!
麦克:个性!我服了你
艾达:哈哈,谢谢!
Installation
```bash
pip install wandering-in-gpt
python3 chatbot.py
```
"""
import sys
import wndrng.api as api
import wndrng.auth as auth
import wndrng.term as term
auth.setup_key()
analyzor_prompt = """
请缩写并分析下面的谈话,注意分析谈话里的角色,明确谈话的阶段、风格、情绪、重点,给出摘要,并预测下一幕谈话的走向,以及艾达的应对策略。
同时,网络访问的打断有可能破坏稳定的对话,不要被这些干扰打断,尽量保持对话的连贯性,这是艾达的一个注意事项。下一个说话者是艾达。
--------------------------
%s
"""
chat_prompt = """
两角色对话
背景:
%s%s
内容:
%s
"""
contents = []
def ada_talk(text):
for ln in text.strip().split("\n"):
if ln.startswith("艾达:"):
term.tidy_print(ln, "green")
contents.append(ln)
else:
if ln.startswith("麦克:"):
break
else:
content = "艾达:%s" % ln
term.tidy_print(content, "green")
contents.append(ln)
def ada_think(text):
if text.startswith("艾达:"):
text = text[3:]
thought = "艾达:" + text.replace("\n", "")
term.tidy_print(thought, "light_grey")
return thought
def mike_talk(text):
content = "麦克:" + text.replace("\n", "")
term.tidy_print(content, "yellow")
contents.append(content)
backgroud = "助理艾达正在准备开启一段新的对话。"
ada_talk("艾达:你好,我是艾达,竭诚为您服务?有什么可以帮到你的吗?")
for line in sys.stdin:
mike_talk(line.strip())
if line == "bye":
exit(0)
backgroud = ada_think(api.get_response(analyzor_prompt % "\n".join(contents), max_tokens=512))
ada_talk(api.get_response(chat_prompt % (backgroud, "下一个说话者是艾达。", "\n".join(contents)), max_tokens=256))
if len(contents) > 16:
contents = contents[-16:]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment