本仓库的开发已停止。请查看 OpenAI 的检索插件:https://github.com/openai/chatgpt-retrieval-plugin
ChatGPT 记忆
允许将 ChatGPT API 扩展到多个同时进行的会话,通过 GPT 和 Redis 数据存储提供无限的上下文和自适应记忆。这可以通过以下方式可视化:
入门指南
poetry install
使用 UI
启动 FastAPI 网络服务器。
poetry run uvicorn rest_api:app --host 0.0.0.0 --port 8000
运行 UI。
poetry run streamlit run ui.py
在终端中使用
该库高度模块化。以下我们将描述每个组件的使用(如上图所示)。
首先,在运行脚本之前设置所需的环境变量。这是可选的,但建议这样做。 你可以使用 .env 文件来完成此操作。请参阅 .env.example 文件作为示例。
from chatgpt_memory.environment import OPENAI_API_KEY, REDIS_HOST, REDIS_PASSWORD, REDIS_PORT
使用 RedisDataStoreConfig 配置创建 RedisDataStore 类的实例。
from chatgpt_memory.datastore import RedisDataStoreConfig, RedisDataStore
redis_datastore_config = RedisDataStoreConfig(
host=REDIS_HOST,
port=REDIS_PORT,
password=REDIS_PASSWORD,
)
redis_datastore = RedisDataStore(config=redis_datastore_config)
使用 EmbeddingConfig 配置创建 EmbeddingClient 类的实例。
from chatgpt_memory.llm_client import EmbeddingConfig, EmbeddingClient
embedding_config = EmbeddingConfig(api_key=OPENAI_API_KEY)
embed_client = EmbeddingClient(config=embedding_config)
使用 Redis 数据存储和 Embedding 客户端实例以及 topk 值创建 MemoryManager 类的实例。
from chatgpt_memory.memory.manager import MemoryManager
memory_manager = MemoryManager(datastore=redis_datastore, embed_client=embed_client, topk=1)
使用 ChatGPTConfig 配置和 MemoryManager 实例创建 ChatGPTClient 类的实例。
from chatgpt_memory.llm_client import ChatGPTClient, ChatGPTConfig
chat_gpt_client = ChatGPTClient(
config=ChatGPTConfig(api_key=OPENAI_API_KEY, verbose=True), memory_manager=memory_manager
)
通过向 ChatGPTClient 实例的 converse 方法提供用户消息来开始对话。
conversation_id = None
while True:
user_message = input("\n 请输入您的消息:")
response = chat_gpt_client.converse(message=user_message, conversation_id=conversation_id)
conversation_id = response.conversation_id
print(response.chat_gpt_answer)
这将允许你与 AI 助手交谈,并通过使用外部 Redis 数据存储来扩展其记忆。
整合在一起
以下是上述所有内容的整合。你也可以在 examples/simple_usage.py 中找到它。
## 在运行此脚本之前设置以下环境变量
# 导入必要的模块
from chatgpt_memory.environment import OPENAI_API_KEY, REDIS_HOST, REDIS_PASSWORD, REDIS_PORT
from chatgpt_memory.datastore import RedisDataStoreConfig, RedisDataStore
from chatgpt_memory.llm_client import ChatGPTClient, ChatGPTConfig, EmbeddingConfig, EmbeddingClient
from chatgpt_memory.memory import MemoryManager
# 使用 OpenAI API 密钥实例化 EmbeddingConfig 对象
embedding_config = EmbeddingConfig(api_key=OPENAI_API_KEY)
# 使用 EmbeddingConfig 对象实例化 EmbeddingClient 对象
embed_client = EmbeddingClient(config=embedding_config)
# 使用 Redis 连接详细信息实例化 RedisDataStoreConfig 对象
redis_datastore_config = RedisDataStoreConfig(
host=REDIS_HOST,
port=REDIS_PORT,
password=REDIS_PASSWORD,
)
# 使用 RedisDataStoreConfig 对象实例化 RedisDataStore 对象
redis_datastore = RedisDataStore(config=redis_datastore_config)
# 使用 RedisDataStore 对象和 EmbeddingClient 对象实例化 MemoryManager 对象
memory_manager = MemoryManager(datastore=redis_datastore, embed_client=embed_client, topk=1)
# 使用 OpenAI API 密钥和 verbose 设置为 True 实例化 ChatGPTConfig 对象
chat_gpt_config = ChatGPTConfig(api_key=OPENAI_API_KEY, verbose=True)
# 使用 ChatGPTConfig 对象和 MemoryManager 对象实例化 ChatGPTClient 对象
chat_gpt_client = ChatGPTClient(
config=chat_gpt_config,
memory_manager=memory_manager
)
# 将 conversation_id 初始化为 None
conversation_id = None
# 开始聊天机器人循环
while True:
# 提示用户输入
user_message = input("\n 请输入您的消息:")
# 使用 ChatGPTClient 对象生成响应
response = chat_gpt_client.converse(message=user_message, conversation_id=conversation_id)
# 使用响应中的 conversation_id 更新 conversation_id
conversation_id = response.conversation_id
# 打印聊天机器人生成的响应
print(response.chat_gpt_answer)
致谢
UI 的添加要感谢 avrabyt/MemoryBot 的出色工作。