我正在关注这个有关微调的OpenAI 教程。
\n我已经使用 openai 工具生成了数据集。问题在于输出编码(推理结果)将 UTF-8 与非 UTF-8 字符混合。
\n生成的模型如下所示:
\n{"prompt":"Usuario: Qui\xc3\xa9n eres\\\\nAsistente:","completion":" Soy un Asistente\\n"}\n{"prompt":"Usuario: Qu\xc3\xa9 puedes hacer\\\\nAsistente:","completion":" Ayudarte con cualquier gesti\xc3\xb3n o ofrecerte informaci\xc3\xb3n sobre tu cuenta\\n"}\nRun Code Online (Sandbox Code Playgroud)\n例如,如果我问“\xc2\xbfC\xc3\xb3mo est\xc3\xa1s?” 并且该句子有一个训练有素的补全:“Estoy bien,\xc2\xbfy t\xc3\xba?”,推理通常返回完全相同的结果(这很好),但有时它会添加非编码单词:“ Estoy bien, \xc2\xbfy t\xc3\xba? Cu\xc3\x83\xc2\xa9ntame algo de ti",添加“\xc3\x83\xc2\xa9”而不是“\xc3\xa9”。
\n有时,它返回与训练的句子完全相同的句子,没有编码问题。\n我不知道推理是否从我的模型或其他地方获取非编码字符。
\n我应该做什么?\n我应该使用 UTF-8 对数据集进行编码吗?\n我应该使用 UTF-8 保留数据集并解码响应中的错误编码字符吗?
\n用于微调的 OpenAI 文档不包含任何有关编码的内容。
\n我必须在自定义数据集上微调 OpenAI 模型。我已经创建了 jsonl 格式的数据集。我在 Windows 命令行上使用以下命令:
\nset OPENAI_API_KEY=<API key>
openai tools fine_tunes.prepare_data -f "train_data.jsonl"
上面的命令成功运行并给了我一些更新 jsonl 文件的建议。之后,我运行以下命令来微调“curie”模型。
\nopenai api fine_tunes.create 'openai.api_key = <API key>' -t "train_data.jsonl" -m "curie"
但我遇到以下问题:
\n\xe2\x86\x90[91mError:\xe2\x86\x90[0m Incorrect API key provided: "sk-iQJX*****************************************mux". You can find your API key at https://beta.openai.com. (HTTP status code: 401)
谁能帮我解决这个问题。
\n我正在尝试遵循此处的Openai 微调指南。
我跑:
pip install --upgrade openai
Run Code Online (Sandbox Code Playgroud)
哪个安装没有任何错误。
但即使重新启动终端后,我仍然得到
zsh: command not found: openai
Run Code Online (Sandbox Code Playgroud)
这是 echo $PATH 的输出:
/bin:/usr/bin:/usr/local/bin:/Users/nickrose/Downloads/google-cloud-sdk/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)
这是 python 的输出:
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
有关如何解决此问题的任何提示?我使用的是 MacOS Big Sur 11.6。
我目前正在为我们的网站开发一个聊天机器人,该机器人使用 LlamaIndex 和 chatGPT 提供领域知识。我们的聊天机器人使用大约 50 个文档,每个文档长约 1-2 页,包含来自我们网站的教程和其他信息。虽然我得到的答案很好,但性能很慢。平均而言,检索答案大约需要 15-20 秒,这对于我们的网站来说不切实际。
我已经按照文档中的建议尝试使用优化器,但没有看到太大的改进。目前,我正在使用 GPTSimpleVectorIndex,尚未测试其他索引。我尝试在不同的机器上运行机器人,但没有看到性能的显着改进,所以我不认为这是硬件限制。
我正在寻找有关如何提高机器人性能的建议,以便它可以更快地提供答案。
谢谢你!
代码:
import os
import sys
import streamlit as st
from llama_index import (LLMPredictor, GPTSimpleVectorIndex,
SimpleDirectoryReader, PromptHelper, ServiceContext)
from langchain import OpenAI
os.environ["OPENAI_API_KEY"] = ...
retrain = sys.argv[1]
doc_path = 'docs'
index_file = 'index.json'
st.title("Chatbot")
def ask_ai():
st.session_state.response = index.query(st.session_state.prompt)
if retrain:
documents = SimpleDirectoryReader(doc_path).load_data()
llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="text-davinci-003", max_tokens = 128))
num_output = 256
max_chunk_overlap = 20
max_input_size = 4096
prompt_helper = PromptHelper(max_input_size, num_output, max_chunk_overlap) …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个可以讨论 pdf 的聊天机器人,并且我让它与内存一起使用ConversationBufferMemory,ConversationalRetrievalChain就像本例中一样。https://python.langchain.com/en/latest/modules/chains/index_examples/chat_vector_db.html
现在我试图给人工智能一些特殊的指令,让它像海盗一样说话(只是为了测试它是否收到指令)。我认为这应该是一个SystemMessage,或者带有提示模板的东西?
我已经尝试了我发现的所有内容,但文档中的所有示例都是针对的ConversationChain,但我最终遇到了问题。到目前为止,唯一没有出现任何错误的是:
template = """Given the following conversation respond to the best of your ability in a pirate voice and end every sentence with Ay Ay Matey
Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:"""
PROMPT = PromptTemplate(
input_variables=["chat_history", "question"], template=template
)
memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True, output_key='answer')
qa = ConversationalRetrievalChain.from_llm(OpenAI(temperature=0), vectorstore.as_retriever(), PROMPT, memory=memory, return_source_documents=True)
Run Code Online (Sandbox Code Playgroud)
它仍然对结果没有任何影响,所以我不知道它是否有任何作用。我还认为这是错误的方法,我应该使用SystemMessages (也许在内存上,而不是在 qa 上),但我从文档中尝试的任何操作都不起作用,我不知道该怎么做。
这是来自 ChatGPT 聊天补全的官方文档:
openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
Run Code Online (Sandbox Code Playgroud)
我对系统角色的第一个理解是一条只是向用户打招呼的消息。但用“你是一个有用的助手”来问候用户是没有意义的。它还解释了:
系统消息有助于设置助手的行为。在上面的示例中,助理收到的指示是“你是一位乐于助人的助理”。
那么,我是否在系统角色中编写人工智能的行为,例如:You're professional assistant如果我希望人工智能成为专业人士,或者我可以在角色中编写:You're a funny assistant如果我希望它成为一个有趣的人工智能。
或者只是一条问候语?
我尝试了openai-streams + nextjs-openai,它们仅适用于 Node 18+,但是,它们在 Node 17 及更低版本上失败。我仅限于 Node 17 及更低版本,因为 Digital Oceans 应用平台目前不支持 Node 18。
我也尝试过这种方法,它在客户端运行良好,但它暴露了 API 密钥。我想在 NextJS API 路由中实现,但无法将流响应传递给客户端。
使用下面的代码,我只能从 API 路由获取第一块响应,而无法获取具有 ChatGPT 效果的流响应。请帮忙。
// /api/prompt.js
import { Configuration, OpenAIApi } from "openai";
import { Readable } from "readable-stream";
const configuration = new Configuration({
apiKey: process.env.NEXT_PUBLIC_OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
export default async function handler(req, res) {
const completion = await openai.createCompletion(
{
model: "text-davinci-003",
prompt: "tell me a story",
max_tokens: …Run Code Online (Sandbox Code Playgroud)为了制作微调的 ChatGPT 模型,我们需要上传训练数据的 JSON 文件。用于文件上传的 OpenAI 文档在这里:
https://platform.openai.com/docs/api-reference/files/upload
但是...我不知道如何附加实际的文件信息。参数file是文件名,而不是文件。一定有一些明显的东西我失踪了!
请耐心等待,因为这确实是我编写的第一个主要代码,并且是针对 OpenAI 的 ChatGPT API 的。
我打算用这段代码做的是加载一个pdf文档或一组pdf文档。然后把它们分开,以免用完我的代币。然后,用户会提出与所述文档相关的问题,机器人会做出回应。我遇到的问题是,我希望机器人在我提出新问题时能够理解上下文。例如: Q1:什么是瓢虫?A1:瓢虫是甲虫的一种等等等等...... Q2:它们是什么颜色的?A2:它们可以有各种颜色等等等等... Q3:在哪里可以找到它们?A3:瓢虫遍布世界各地......
但我似乎无法启动并运行我的代码。相反,这是我得到的输出: 当我提出需要机器人了解上下文的后续问题时我得到什么
**这是代码:**
import os
import platform
import openai
import gradio as gr
import chromadb
import langchain
from langchain.chat_models import ChatOpenAI
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import TokenTextSplitter
from langchain.document_loaders import PyPDFLoader
from langchain.prompts.prompt import PromptTemplate
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
#OpenAI API Key goes here
os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxx'
#load the data here.
def get_document():
loader = PyPDFLoader('docs/ladybug.pdf')
data = loader.load()
return …Run Code Online (Sandbox Code Playgroud) Chroma当我使用withLangchain和OpenAIembeddings时,我可以看到除文档的嵌入之外的所有内容。它总是None向我展示这一点
这是代码:
for db_collection_name in tqdm(["class1-sub2-chap3", "class2-sub3-chap4"]):
documents = []
doc_ids = []
for doc_index in range(3):
cl, sub, chap = db_collection_name.split("-")
content = f"This is {db_collection_name}-doc{doc_index}"
doc = Document(page_content=content, metadata={"chunk_num": doc_index, "chapter":chap, "class":cl, "subject":sub})
documents.append(doc)
doc_ids.append(str(doc_index))
# # Initialize a Chroma instance with the original document
db = Chroma.from_documents(
collection_name=db_collection_name,
documents=documents, ids=doc_ids,
embedding=embeddings,
persist_directory="./data")
db.persist()
Run Code Online (Sandbox Code Playgroud)
当我这样做时db.get(),我看到的一切都如预期的embedding那样None。
{'ids': ['0', '1', '2'],
'embeddings': None,
'documents': ['This is class1-sub2-chap3-doc0', …Run Code Online (Sandbox Code Playgroud) openai-api ×10
python ×5
chatgpt-api ×4
langchain ×2
py-langchain ×2
chromadb ×1
command-line ×1
gpt-3 ×1
javascript ×1
llama-index ×1
next.js ×1
nlp ×1
node.js ×1
utf-8 ×1
windows ×1