如何使用LangChain、RStudio和足够的Python生成人工智能( 四 )

接下来 , 将硬编码一个问题并检索相关文档 。需要注意,可以用一行代码检索文档:
my_question = "How do you rotate text on the x-axis of a graph?"# For straightforward similarity searchingsim_docs = vectordb.similarity_search(my_question)# For maximum marginal relevance search retrieving 5 possible chunks and choosing 3 finalists:mm_docs = vectordb.max_marginal_relevance_search(my_question, k = 3, fetch_k = 5)如果想查看检索到的文档片段,可以在Python中打印它们,如下所示:
for doc in mm_docs: print(doc.page_content)for doc in sim_docs: print(doc.page_content)注意缩进是for循环的一部分 。
还可以使用以下命令查看它们的元数据:
for doc in mm_docs: print(doc.metadata)for docs in sim_docs: print(docs.metadata)与其他对象一样 , 也可以在R中查看这些对象:
mm_relevant <- py$mm_docssim_relevant <- py$sim_docs不确定为什么当请求三个文档时,模型有时会返回四个文档,但这应该不是问题,除非LLM在遍历文本以生成响应时有太多的令牌 。
步骤6:生成答案现在是时候让GPT-3.5这样的LLM根据相关文档生成对用户问题的书面回复了 。可以使用LangChain的RetrievalQA功能来实现这一点 。
建议首先尝试LangChain的默认模板,这很容易实现,通常适用于原型制作或用户自己使用:
# Set up the LLM you want to use, in this example OpenAI's gpt-3.5-turbofrom langchain.chat_models import ChatOpenAIthe_llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)# Create a chain using the RetrievalQA componentfrom langchain.chains import RetrievalQAqa_chain = RetrievalQA.from_chain_type(the_llm,retriever=vectordb.as_retriever())# Run the chain on the question, and print the resultprint(qa_chain.run(my_question))LLM给出了以下回复:
To rotate text on the x-axis of a graph, you can use the `theme()` function in ggplot2. Specifically, you can use the `axis.text.x` argument to modify the Appearance of the x-axis text. Here is an example:```Rlibrary(ggplot2)# Create a basic scatter plotp <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point()# Rotate x-axis text by 45 degreesp + theme(axis.text.x = element_text(angle = 45, hjust = 1))```In this example, the `angle` argument is set to 45, which rotates the x-axis text by 45 degrees. The `hjust` argument is set to 1, which aligns the text to the right. You can adjust the angle and alignment values to achieve the desired rotation and alignment of the x-axis text.看起来是正确的!
现在链已经设置好了,可以用一个R脚本用一个命令在其他问题上运行它:
py_run_string('print(qa_chain.run("How can I make a bar chart where the bars are steel blue?"))')以下是它们的回应:
```Rlibrary(ggplot2)# Create a bar chart with steel blue barsp <- ggplot(mtcars, aes(factor(cyl)))p + geom_bar(fill = "steelblue")```In this example, we use the `fill` aesthetic to specify the color of the bars as "steelblue". You can adjust the color to your preference by changing the color name or using a hexadecimal color code.这是一个比在ChatGPT 3.5中有时收到的相同问题可获得更好的答案 。有时它发回的代码实际上并不起作用 。
用户可能还想确认答案不是从一般的ChatGPT知识库中提取的,而是真正来自其上传的文档 。为了找到答案 , 可以问一些与ggplot2完全无关的问题,这些问题不会出现在文档中:
py_run_string('print(qa_chain.run("What is the capital of Australia?"))')用户应该这样回复:
I don't know.如果正在创建一个应用程序以供更广泛的使用 , 那么“我不知道”可能有点简洁 。如果用户想定制默认模板,可以查看LangChain文档 。如果用户正在为不止自己或一个小团队创建应用程序,那么个性化响应是有意义的 。
模板调整是LangChain可能感觉过于复杂的一个领域 , 它可能需要多行代码来实现对模板的小更改 。然而,使用任何固执己见的框架都是有风险的,这取决于每个开发人员来决定项目的总体收益是否值得这样的成本 。虽然它非常受欢迎,但并不是每个人都是LangChain的忠实用户 。
还可以用LangChain做什么?到目前为止 , 对应用程序最简单的添加是包含更多文档 。LangChain有一个DirectoryLoader来简化这个过程 。如果用户正在跨多个文档进行搜索,可能希望知道哪些文档用于生成响应 。可以给RetrievalQA添加return_source_documents=True参数,如下所示:
qa_chain = RetrievalQA.from_chain_type(the_llm,retriever=vectordb.as_retriever(), return_source_documents=True) my_result = qa_chain({"query": my_question})print(my_result['result'])


推荐阅读