为了制作微调的 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) 我尝试执行 langchain 代理。我想将 verbose 的输出保存到变量中,但我可以从 agent.run 访问的只是最终答案。
如何将详细输出保存到变量以便以后使用?
我的代码:
import json
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
from langchain.agents import Tool
from langchain.utilities import PythonREPL
llm = OpenAI(temperature=0.1)
## Define Tools
python_repl = PythonREPL()
tools = load_tools(["python_repl", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
response = agent.run("What is 3^2. Use calculator to solve.")
Run Code Online (Sandbox Code Playgroud)
我尝试访问代理的响应,但这只是最终答案,而不是详细输出。
打印响应仅给出 9。但我想要详细的过程,例如:
> Entering new AgentExecutor chain...
I need to use the calculator to solve …Run Code Online (Sandbox Code Playgroud) 为嵌套 json 定义输出模式的推荐方法是什么,我使用的方法感觉不太理想。
# adding to planner -> from langchain.experimental.plan_and_execute import load_chat_planner
refinement_response_schemas = [
ResponseSchema(name="plan", description="""{'1': {'step': '','tools': [],'data_sources': [],'sub_steps_needed': bool},
'2': {'step': '','tools': [<empty list>],'data_sources': [<>], 'sub_steps_needed': bool},}"""),] #define json schema in description, works but doesn't feel proper
refinement_output_parser = StructuredOutputParser.from_response_schemas(refinement_response_schemas)
refinement_format_instructions = refinement_output_parser.get_format_instructions()
refinement_output_parser.parse(output)
Run Code Online (Sandbox Code Playgroud)
给出:
{'plan': {'1': {'step': 'Identify the top 5 strikers in La Liga',
'tools': [],
'data_sources': ['sports websites', 'official league statistics'],
'sub_steps_needed': False},
'2': {'step': 'Identify the top 5 strikers in the Premier League', …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Langchain 和特定 URL 作为源数据来整理一个简单的“来源问答”。URL 由一个页面组成,其中包含大量信息。
问题是RetrievalQAWithSourcesChain只给我返回整个 URL 作为结果的来源,这在这种情况下不是很有用。
有没有办法获得更详细的源信息?也许页面上特定部分的标题?指向页面正确部分的可点击 URL 会更有帮助!
我有点不确定 的生成是result source语言模型、URL 加载器的函数还是仅仅是RetrievalQAWithSourcesChain单独的。
我尝试过使用UnstructuredURLLoader和 ,SeleniumURLLoader希望更详细的数据读取和输入会有所帮助 - 遗憾的是没有。
相关代码摘录:
llm = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')
chain = RetrievalQAWithSourcesChain.from_llm(llm=llm, retriever=VectorStore.as_retriever())
result = chain({"question": question})
print(result['answer'])
print("\n Sources : ",result['sources'] )
Run Code Online (Sandbox Code Playgroud) 我想添加一个ConversationBufferMemory,pandas_dataframe_agent但到目前为止我还没有成功。
create_pandas_dataframe_agent(llm, df, verbose=True, memory=memory)这不会破坏代码,但不会导致代理记住我之前的问题。pd_agent.agent.llm_chain.memory = memory。这导致了ValueError: One input key expected got ['input', 'agent_scratchpad'] 这是我到目前为止的代码(不起作用):
llm = ChatOpenAI(temperature=0, model_name="gpt-4-0613")
memory = ConversationBufferMemory()
pd_agent = create_pandas_dataframe_agent(llm, df, verbose=True, memory=memory)
#pd_agent.agent.llm_chain.memory = memory #Or if I use this approach the code breaks when calling the .run() methods
pd_agent.run("Look into the data in step 12. Are there any weird patterns? What can we say about this part of the dataset.")
pd_agent.run("What …Run Code Online (Sandbox Code Playgroud) 我正在创建一个文本文档 QA 聊天机器人,我使用Langchainjs和OpenAI LLM 来创建嵌入,并使用 Chat 和Pinecone作为我的矢量存储。
成功上传嵌入并在松果上创建索引后。我正在使用 Next JS 应用程序与 OpenAI 和 Pinecone 进行通信。
我的应用程序的当前结构如下所示:
1:前端 -> 用户输入 aquestion并对 NEXT js 服务器 API 路由进行 POST 调用/ask
2:服务器功能如下所示:
const vectorStore = await PineconeStore.fromExistingIndex(
new OpenAIEmbeddings(),
{ pineconeIndex })
const model = new ChatOpenAI({ temperature: 0.5, modelName: 'gpt-3.5-turbo' })
const memory = new ConversationSummaryMemory({
memoryKey: 'chat_history',
llm: new ChatOpenAI({ modelName: 'gpt-3.5-turbo', temperature: 0 }),
})
const chain = ConversationalRetrievalQAChain.fromLLM(
model,
vectorStore.asRetriever(),
{ …Run Code Online (Sandbox Code Playgroud) 我想使用 lanchain 查询我的 mongo 集合。
就像我们在 langchain 中有 SQLDatabaseChain 来连接 sql 数据库(如 postgres)一样,我们是否有类似的东西来连接 nosql 数据库(如 mongo)?
我查看了文档,没有找到 nosql 的任何替代方案。
我们正在使用标准层的 Azure OpenAI gpt-3.5-turbo 模型对聊天机器人应用程序进行原型设计。
我们面临着随机的延迟突发,有时会持续 3 到 20 分钟。下面是门户网站提供的指标的屏幕截图。正如您所看到的,使用/速率限制并不表示高负载。
事实上,该应用程序尚未部署到生产环境中,它仅被我们的开发团队用于测试目的。了解这些延迟峰值将帮助我们证明我们的 PoC 并在生产中使用 Azure OpenAI 服务。
关于如何解决这个问题有什么想法吗?
模型属性 模型名称:gpt-35-turbo 模型版本:0301 部署类型:标准 内容过滤器:每分钟默认令牌数 速率限制(千):120 速率限制(每分钟令牌数):120000 速率限制(每分钟请求数):720
图表
openai-api ×10
langchain ×8
python ×5
chatgpt-api ×3
gpt-3 ×2
py-langchain ×2
agent ×1
azure ×1
chatbot ×1
chromadb ×1
next.js ×1
nlp ×1
pinecone ×1