我目前正在使用 OpenAI 的 ChatGPT 和 Firebase Cloud Functions 作为后端构建一个聊天机器人。我想创建一种实时聊天体验,其中来自 ChatGPT 的响应在生成时会流回客户端。然而,我在实现这一目标方面面临一些挑战。
我已成功将 ChatGPT 与 Firebase Cloud Functions 集成,并且可以进行 API 调用来生成响应。但问题是,只有在生成整个响应时才会返回响应,从而导致用户收到任何输出之前出现延迟。
有没有办法在 ChatGPT 生成响应时实时传输响应,而不是等待完整响应?我希望用户尽快看到每个部分响应。
这是我当前代码的简化版本:
// Firebase Cloud Functions endpoint
exports.chat = functions.https.onRequest(async (req, res) => {
const { message } = req.body;
// Make API call to OpenAI ChatGPT
const response = await openai.complete({
model: 'gpt-3.5-turbo',
stream: true,
messages: [{ role: 'system', content: 'You are a helpful assistant.' }, { role: 'user', content: message }],
});
// Process the response …Run Code Online (Sandbox Code Playgroud) 我正在使用 Vapor Swift 构建一个开放 AI 聊天流后端。它使用 MacPaw 的OpenAI包装器连接到 Open AI API 。但我不确定如何使用 SSE 将结果流式传输到客户端,而不是作为单个响应。
我当前的代码如下所示:
func postChatStreamHandler(_ req: Request) throws -> EventLoopFuture<Response> {
let openAI = OpenAI(configuration: configuration)
let promise = req.eventLoop.makePromise(of: Data.self)
let query = ChatQuery(model: .gpt4, messages: messages)
openAI.chatsStream(query: query) { partialResult in
switch partialResult {
case .success(let result):
if let detla = result.choices.first?.delta,
let data = try? JSONEncoder().encode(result) {
promise.succeed(data)
}
case .failure(let error):
...
}
} completion: { error in
...
}
return promise.futureResult.map …Run Code Online (Sandbox Code Playgroud) 我正在使用 Python Flask 应用程序进行数据聊天。因此,在控制台中,我可以直接从 OpenAI 获得流式响应,因为我可以使用 flag 启用流处理streaming=True。
问题是,我无法在 API 调用中 \xe2\x80\x9cforward\xe2\x80\x9d 流或 \xe2\x80\x9cshow\xe2\x80\x9d 流。
\n处理 OpenAI 和链的代码是:
\ndef askQuestion(self, collection_id, question):\n collection_name = "collection-" + str(collection_id)\n self.llm = ChatOpenAI(model_name=self.model_name, temperature=self.temperature, openai_api_key=os.environ.get('OPENAI_API_KEY'), streaming=True, callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]))\n self.memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True, output_key='answer')\n \n chroma_Vectorstore = Chroma(collection_name=collection_name, embedding_function=self.embeddingsOpenAi, client=self.chroma_client)\n\n\n self.chain = ConversationalRetrievalChain.from_llm(self.llm, chroma_Vectorstore.as_retriever(similarity_search_with_score=True),\n return_source_documents=True,verbose=VERBOSE, \n memory=self.memory)\n \n\n result = self.chain({"question": question})\n \n res_dict = {\n "answer": result["answer"],\n }\n\n res_dict["source_documents"] = []\n\n for source in result["source_documents"]:\n res_dict["source_documents"].append({\n "page_content": source.page_content,\n "metadata": …Run Code Online (Sandbox Code Playgroud) 我想使用 ChatGPT 在我的网站上创建一个聊天机器人。我有一些预先定义的问题答案,如下所示:
Question: What is the price of ...?
Answer: $100
Question: How this help ..?
Anwer: 1) Improve... 2) Better... 3) More...
Run Code Online (Sandbox Code Playgroud)
当客户提出与预定义问题相关的问题时,它应该从预定义问题中获取答案并使用自然语言来回答客户。
但我不知道实现这个的逻辑。聊天完成分为三种角色(系统、用户、助手)。
我是否在系统角色中插入所有这些预定义的问题和答案,例如:
[
'role' => 'system',
'content' => 'I write all the information here'
],
Run Code Online (Sandbox Code Playgroud)
或者我将其全部写在单个用户提示符中,例如:
[
'role' => 'system',
'content' => 'You're are a helpful assistant'
],
[
'role' => 'user',
'content' => 'I write all the information here'
]
Run Code Online (Sandbox Code Playgroud)
或者我将其分成不同的用户提示,例如:
[
'role' => 'system',
'content' => 'You're are a helpful assistant'
],
[ …Run Code Online (Sandbox Code Playgroud) 我现在正在尝试 OpenAI Embedding API。但我发现了一个问题。当我一次又一次嵌入相同的文本时,我得到了不同的向量数组。
文本内容为baby is crying,模型为text-embedding-ada-002(MODEL GENERATION: V2)。我循环运行代码for5 次,得到了不同的向量值。例如,第一个向量值为
"-0.017496677", "-0.017429505", "-0.017429505", "-0.017429505" and "-0.017496677"
Run Code Online (Sandbox Code Playgroud)
我认为对于相同的文本内容,嵌入后应该返回相同的向量。这样对吗?
我有以下代码实现 LangChain + ChatGPT 以回答给定数据的问题:
import { PineconeStore } from 'langchain/vectorstores/pinecone';
import { ConversationalRetrievalQAChain } from 'langchain/chains';
const CONDENSE_PROMPT = `Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.
Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:`;
const QA_PROMPT = `You are a helpful AI assistant. Use the following pieces of context to answer the question at the end.
If you don't know the answer, just say you don't …Run Code Online (Sandbox Code Playgroud) 我是 OpenAI API 的新手。我使用 GPT-3.5-Turbo,使用以下代码:
\nmessages = [\n {"role": "system", "content": "You\xe2\x80\x99re a helpful assistant"}\n ]\n\n while True:\n content = input("User: ")\n if content == 'end':\n save_log(messages)\n break\n messages.append({"role": "user", "content": content})\n\n completion = openai.ChatCompletion.create(\n model="gpt-3.5-turbo-16k",\n messages=messages\n )\n\n chat_response = completion.choices[0].message.content\n print(f'ChatGPT: {chat_response}')\n messages.append({"role": "assistant", "content": chat_response})\nRun Code Online (Sandbox Code Playgroud)\n结果:\n用户:谁是第一个登上月球的人?\nGPT:第一个踏上月球的人是美国宇航员尼尔·阿姆斯特朗,于 1969 年 7 月 20 日执行 NASA 阿波罗 11 号任务。\ n用户:他有多高?\nGPT:尼尔阿姆斯特朗身高约为 5 英尺 11 英寸(180 厘米)。
\n但它需要大量的代币。我听说 GPT-4 与 GPT-3 的不同之处在于它能够(自行)记住之前的消息。那是对的吗?
\n但是,如果我删除在“消息”列表中附加最新消息的行并仅发送一条消息:\n completion = openai.ChatCompletion.create( model="gpt-4", messages=[{"role": …
我收到错误:
const openai = new OpenAIApi({ key: apiKey });
^
TypeError: OpenAIApi is not a constructor
Run Code Online (Sandbox Code Playgroud)
当我尝试使用nodejs(v16.7.0)创建openai api时。我已按照文档中的代码安装了 openai api (v4.3.1)
我使用的代码:
const { OpenAIApi } = require('openai');
const openai = new OpenAIApi({ key: apiKey });
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
更新:他们似乎在 API 文档中犯了一个错误,现在已修复。
早些时候,它说“当调用gpt-4-vision-preview或 时gpt-3.5-turbo”,但现在改为“当调用gpt-4-1106-preview或 时gpt-3.5-turbo-1106”。
根据Text Generation - OpenAI API,“当调用gpt-4-vision-preview或时gpt-3.5-turbo,您可以将 response_format 设置{ type: "json_object" }为启用 JSON 模式。”
但是,以下代码会引发错误:
{'error': {'message': '1 validation error for Request\nbody -> response_format\n extra fields not permitted (type=value_error.extra)', 'type': 'invalid_request_error', 'param': None, 'code': None}}
Run Code Online (Sandbox Code Playgroud)
如果我发表评论"response_format": {"type": "json_object"},效果很好。
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
payload = {
"model": "gpt-4-vision-preview",
"response_format": {"type": "json_object"},
"messages": [
{ …Run Code Online (Sandbox Code Playgroud) ChatGPT 的网络界面可以轻松上传 pdf 文件。openAI 有没有可以接收 pdf 的 API?
我知道有 3rd 方库可以读取 pdf,但考虑到 pdf 中有图像和其他重要信息,如果像 GPT 4 Turbo 这样的模型提供实际的 pdf 可能会更好。
我将陈述我的用例以添加更多上下文。我打算做RAG。这是我的pdf,这是提示。通常我会在提示末尾附加文本。如果我自己提取pdf文件,我仍然可以做到这一点。
这就是我应该做的吗?代码来自此处https://platform.openai.com/docs/assistants/tools/code-interpreter
# Upload a file with an "assistants" purpose
file = client.files.create(
file=open("example.pdf", "rb"),
purpose='assistants'
)
# Create an assistant using the file ID
assistant = client.beta.assistants.create(
instructions="You are a personal math tutor. When asked a math question, write and run code to answer the question.",
model="gpt-4-1106-preview",
tools=[{"type": "code_interpreter"}],
file_ids=[file.id]
)
Run Code Online (Sandbox Code Playgroud)
还有一个上传端点,但这些端点的目的似乎是用于微调和助手。我认为 RAG 用例是一个正常的用例,与助手没有必然关系。
openai-api ×10
gpt-4 ×3
chatgpt-api ×2
langchain ×2
python ×2
chat-gpt-4 ×1
embedding ×1
firebase ×1
flask ×1
gpt-3 ×1
javascript ×1
node.js ×1
pdf ×1
swift ×1
vapor ×1