基本是追着喂饭喂到嘴里了, 原文链接 github.com/InternLM/Tu…
比较有趣的地方
这里自定义了一个studio-conda 的指令
使用type指令可以查看具体的位置
看到了list函数,由于我不太熟悉shell,因此在执行 studio-conda list之后, 很神奇的跑了一遍安装过程
目前还没懂为什么会出现这种情况,因此了解了一下bash
这里好像没执行list()函数,而是执行了clone 函数,重新下载了一个名为 list的环境
在无参情况下, help函数被成功执行
在有参情况下,list函数也被执行
可以看到, 函数的功能主要是通过 dispatch来调度, 其中 最下面的
dispatch $@ 代表使用dispatch 函数接受终端所有的参数, $1 代表参数的位置,这也解释了为什么之前出错。
多轮对话问题
其实到了代码层面就没网页版那么方便了, 网页的多轮对话其实就是利用了prompt 的role属性来实现上下文的记忆,这里贴一个我用gpt-3.5的图
展示问题
目前主流的工具有 gradio 和 streamlit,浦语训练营教程推的是 streamlit
streamlit run /root/Tutorial/helloworld/bajie_chat.py --server.address 127.0.0.1 --server.port 6006
代码里可以看到streamlit的使用
import streamlit as st
st.title('猪猪Chat-InternLM2')
generation_config = prepare_generation_config()
# Initialize chat history
if 'messages' not in st.session_state:
st.session_state.messages = []
# Display chat messages from history on app rerun
for message in st.session_state.messages:
with st.chat_message(message['role']):
st.markdown(message['content'])
# Accept user input
if prompt := st.chat_input('What is up?'):
# Display user message in chat message container
with st.chat_message('user'):
st.markdown(prompt)
real_prompt = combine_history(prompt)
# Add user message to chat history
st.session_state.messages.append({
'role': 'user',
'content': prompt,
})
with st.chat_message('robot'):
message_placeholder = st.empty()
for cur_response in generate_interactive(
model=model,
tokenizer=tokenizer,
prompt=real_prompt,
additional_eos_token_id=92542,
**asdict(generation_config),
):
# Display robot response in chat message container
message_placeholder.markdown(cur_response + '▌')
message_placeholder.markdown(cur_response)
# Add robot response to chat history
st.session_state.messages.append({
'role': 'robot',
'content': cur_response, # pylint: disable=undefined-loop-variable
})
torch.cuda.empty_cache()
主要就是实现模型的快速展示,作用和gradio大同小异吧,这里放个hugging face的实例,模型用的是stable-diffusion-xl-base-1.0