texts = [doc.page_content for doc in documents] 属性错误:'bytes' 对象没有 'page_content' 属性

0 投票
1 回答
43 浏览
提问于 2025-04-14 15:50

在这里输入图片描述

我写了这段代码,运行的时候出现了这个错误:

AttributeError: 'bytes'对象没有'page_content'这个属性

怎么解决这个属性错误:

AttributeError: 'bytes'对象没有'page_content'这个属性

from langchain.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatOllama
from langchain.embeddings import SentenceTransformerEmbeddings
import streamlit as st 
from langchain.vectorstores import Chroma
from langchain.embeddings import SentenceTransformerEmbeddings
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate


# Initialize the chat model
model_local = ChatOllama(model="mistral")

# Define function to load document
def load_document(c_file):
    if c_file is not None:
        file_contents = c_file.read()
        return file_contents
    else:
        return None

# Define function to generate response
def generate_response(query, document):
    if document:
        documents = [document]
        embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
        vectorstore = Chroma.from_documents(documents, embeddings)
        retriever = vectorstore.as_retriever()

        after_rag_template = """Answer the question based only on the following context:
        {context}
        Question: {question}
        """
        after_rag_prompt = ChatPromptTemplate.from_template(after_rag_template)
        after_rag_chain = (
            {"context": retriever, "question": RunnablePassthrough()}
            | after_rag_prompt
            | model_local
            | StrOutputParser()
        )

        response = after_rag_chain.invoke(query)
        return response
    else:
        return "Please upload a C file."

# Define the Streamlit app
def main():
    st.set_page_config(page_title="Unit Test Case Generator",
                       layout="centered")
    #st.title("Unit Test Case Generator")
    
    # Sidebar for uploading C file
    st.sidebar.title("Upload C File")
    c_file = st.sidebar.file_uploader("Choose a C file", type=["c"])
    
    # Text box for entering query
    query = st.text_area("Enter your query:")
    
    # Submit button
    if st.button("Submit") and query:
        document = load_document(c_file)
        response = generate_response(query, document)
        
        st.subheader("Generated Output C File:")
        if response:
            st.code(response, language='c')
        else:
            st.warning("No response generated.")

if __name__ == "__main__":
    main()

这是一个Python脚本,用来创建一个Streamlit网页应用,目的是生成C语言文件的单元测试用例。

1 个回答

0

看起来你想读取的对象是以字节编码的。

你试过用 my_object.decode() 吗?或者用 json.loads(my_object.decode())

可以用

texts = [json.loads(doc.decode()).page_content for doc in documents]

来替代

texts = [doc.page_content for doc in documents]

json.loads() 是把一个字符串转换成对象的工具。

str.decode() 是把字节编码的字符串转换成普通字符串的工具。

注意:我无法读取或搜索你的代码,所以这只是个大概的建议。能不能把你的代码以文本形式插入,而不是图片?那样会更容易使用。

撰写回答